XGRIDSドキュメント
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • Lixel PortalCam シリーズ

    • PortalCam P1

      • 製品概要
      • デバイスの基本操作
      • LCC Scan App の使用
      • メンテナンスとお手入れ
      • FAQ
  • Lixel K シリーズ

    • Lixel K1

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標のポイントクラウドデータを取得する
      • マップフュージョン
      • 典型的なシーンにおける経路計画の推奨
      • 注意事項
      • FAQ
    • Lixel K2

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標のポイントクラウドデータを取得
      • マップフュージョン
      • 典型的なシーンにおける経路計画の推奨
      • 注意事項
      • FAQ
  • Lixel L シリーズ

    • Lixel L2 Pro

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標のポイントクラウドデータを取得する
      • 実時計測機能
      • 付録
      • FAQ
    • Lixel L3

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標点群データの取得
      • 付録
  • Lixel Studio

    • バージョンと著作権
    • インストールとアクティベーション
    • ソフトウェアインターフェース
    • ファイル操作
    • プロジェクト処理
    • ツール
    • 2D 作図
    • 業界応用
    • 設定
    • デバイス接続
    • よくある質問
  • Lixel CyberColor

    • LCC Studio

      • はじめに
      • バージョンと更新
      • ダウンロードとインストール
      • インターフェース概要とナビゲーション
      • 再構築前の準備
      • モデル再構築
      • 単一モデル再構築
      • 地図合成
      • 空地融合
      • 航空撮影再構築
      • マイモデル
      • その他の機能
      • 設定とアカウント
      • Converter
      • 動画再構築
      • よくある質問 / FAQ
    • LCC Scene Editor

      • バージョンと更新情報
      • アカウントとサインイン
      • 製品概要とホーム画面
      • エディター画面
      • ナビゲーションモード
      • ファイル
      • 設定
      • 編集
      • ウィンドウ
      • グローバルツールバー
      • アセットとプロパティ
      • 左ツールバー
      • ビューポイント
      • ポータル
      • スカイボックス
      • アノテーション
      • 測定
      • フライスルー
      • シーンレポート
      • 3D レイアウト
      • ミニマップ
      • プレビューモード(Viewer)
      • ヘルプ
      • よくある質問(FAQ)
      • スポーンポイント
    • LCC Model Editor

      • バージョンと更新
      • ユーザーガイド
      • 概要とインターフェース
      • ファイル操作
      • セレクター
      • モデルの編集
      • 測定
      • カラーグレーディング
      • アセット管理
      • 設定とヘルプ
      • よくある質問
    • Capture Guide

      • 概要
      • 撮影デバイス概要
      • 一般的な撮影の原則
      • 屋内シーンの撮影
      • 屋外シーンの撮影
      • 大規模撮影(マップフュージョン)
      • 空地マップフュージョン撮影
      • オブジェクト撮影
      • 人物撮影
      • ビデオ再構築撮影
      • HD Enhancement
      • 制御点(Lixel P1)
      • FAQ とトラブルシューティング
    • LCC Studio Linux

      • 製品概要説明
      • 基本アーキテクチャマニュアル
      • インストールと展開説明書
      • コンテナ起動パラメータ説明書
      • CodeMeter オフラインライセンス展開説明書
      • APIコマンドセット
      • 付録-開発者データマニュアル
      • 付録-エラーコード一覧
      • シングルノードマルチGPUクラスタ展開QuickStart
    • 活用テクニック

      • 複数の大規模 3DGS モデルの統合ワークフロー
    • バージョン履歴
  • プラグインと SDK

    • Unreal

      • 概要
      • クイックスタート - Windows
      • クイックスタート - Linux
      • クイックスタート - Quest3
      • エディションとライセンス
      • レンダリング
      • Tiled ラスタライズ(実験的機能)
      • 画面調節
      • 法線とライティング
      • シーン編集
      • パフォーマンスパラメーター
      • パフォーマンス最適化ガイド
      • サードパーティおよびエンジンプラグインとの連携
      • プロキシメッシュ
      • 読み込みアニメーション
      • コリジョン
      • ナビゲーションシステム対応
      • Single layer water 対応
      • ローカライズ
      • よくある質問
      • トラブルシューティング
      • ログと診断
      • お問い合わせ
      • ベストプラクティス

        • LixelStudio メッシュで 3DGS をリライティングする
        • カメラごとの独立したレンダリング
      • API リファレンス

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • SOG / SPZ / PLY Actors
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • 更新履歴

        • v3.5.0
        • v3.4.0
        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1
    • Unity

      • Unity SDK の概要
      • 技術的特徴
      • 開発環境の要件
      • PC クイックスタートガイド
      • プロジェクト設定の最適化ガイド
      • Pico 4 Ultra 開発ガイド
      • Pico 4 Ultra PC ストリーミングガイド
      • Quest 3 開発ガイド
      • Quest 3 PC ストリーミングガイド
      • OpenXR 開発ガイド
      • Pico 4 Ultra Business Streaming ガイド
      • 用語集
      • FAQ
      • お問い合わせ
      • 機能開発ガイド

        • 複数シーン混合レンダリング開発ガイド
        • 影の受光開発ガイド
        • リアルタイムライティング開発ガイド
        • マルチカメラレンダリング開発ガイド
        • 高解像度画像レンダリング開発ガイド
        • LCC / LCC2 データ形式互換性開発ガイド
        • 読み込みエフェクト開発ガイド
        • Mip レンダリングモード切り替え開発ガイド
        • エッジ・コーナースナップ開発ガイド
        • 投影デカール開発ガイド
        • ビデオ投影デカール開発ガイド
        • ハイライト開発ガイド
        • リアルタイムクリッピング開発ガイド
        • カラー調整開発ガイド
        • シーン Mesh データ取得開発ガイド
        • エディターモード開発ガイド
        • レンダリングパフォーマンスパラメータ設定ガイド
        • アプリケーションとデータの同梱パッケージ開発ガイド
        • コリジョンシステム開発ガイド
        • macOS 開発の権限問題ガイド
        • iOS デバイスのコンパイル・パッケージ化開発ガイド
      • API リファレンス

        • LCCManager
        • Renderer
        • データ型
      • 変更履歴

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14
    • Web

      • はじめに
      • レンダリング性能最適化ガイド
      • グラフィックス設定
      • WebGPU 開発ガイド
      • よくある質問
      • API リファレンス

        • LCCObject::checkRenderNextFrame
        • LCCObject::clearRenderNextFrame
        • LCCObject::ecef2Prj
        • LCCObject::getBounds
        • LCCObject::getEnvInstancedMesh
        • LCCObject::getInstancedMesh
        • LCCObject::getLodInfos
        • LCCObject::getOriginPosition
        • LCCObject::getProjectionCoordinateSystemInfos
        • LCCObject::hasCollision
        • LCCObject::hasEnvironment
        • LCCObject::hasShcoef
        • LCCObject::intersectsCapsule
        • LCCObject::intersectsRayExt
        • LCCObject::intersectsRayFromOriginExt
        • LCCObject::intersectsSphere
        • LCCObject::lowerToBottom
        • LCCObject::prj2Ecef
        • LCCObject::raiseToTop
        • LCCObject::raycast
        • LCCObject::raycastFromOrigin
        • LCCObject::setAlpha
        • LCCObject::setClipBox
        • LCCObject::setClipPlane
        • LCCObject::setClipPrism
        • LCCObject::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • LCCObject::setMipFilter
        • LCCObject::setOriginPosition
        • LCCObject::setPointsColor
        • LCCObject::setRenderState
        • LCCObject::setRotation
        • LCCObject::setScale
        • LCCObject::setSemantic
        • LCCObject::setSemanticColor
        • LCCObject::setSmooth
        • LCCObject::setStartLod
        • LCCObject::setTranslation
        • LCCObject::setVisible
        • LCCObject::togglePointsDisplayMode
        • LCCObject::useEnvironment
        • LCCObject::useShcoef
        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
      • 更新履歴

        • v0.6.4
        • v0.6.3
        • v0.6.2
        • v0.6.1
        • v0.6.0
        • v0.5.5
        • v0.5.4
        • v0.5.3
        • v0.5.2
        • v0.5.1
        • v0.5.0
        • v0.4.1
        • v0.4.0
        • v0.3.1
        • v0.3.0
        • v0.2.0
  • API

    • 空間構造化モデリング

      • 接続ガイド
      • モデリングワークフロー
      • API リファレンス
      • アップロード用一時認証情報
      • エラーコード

3DGS シーンを歩く:コリジョン対応

LCC4Unreal はコリジョンデータの動的読み込みに対応しており、キャラクターが 3DGS の世界を自由に歩き回ってインタラクションできる。

前提条件

コリジョンはデータに付属するコリジョンファイルに依存し、形式によって要件が異なる。

形式コリジョンデータ対応状況
.lccデータディレクトリ内の collision.lci。旧バージョンは collision.bin対応
.lcc2データディレクトリの data/mesh/ 内の .ply ファイル対応
.sog / .spz / .plyデータ自体には含まない。Pro 版はガウシアンから自動生成できる対応(Pro 版)

.lcc と .lcc2 については、プラグインが collision.lci → collision.bin → data/mesh/*.ply の順でデータに付属するコリジョンファイルを検出し、3 つとも存在しない場合は警告を出力してコリジョンを無効にする。

単一ファイル形式(.sog / .spz / .ply)はデータ自体にコリジョンデータを持たない。Pro 版はガウシアンからコリジョンメッシュを自動生成できる(単一ファイルモデルのコリジョン自動生成を参照)。無償版ではコリジョンを自分で構築する必要がある。

データを読み込んだ後、HaveValidCollisionData() で現在のデータに使用可能なコリジョンデータが含まれているかを確認できる。

注:collision.lci は LCC Studio v1.6.1 以上のバージョンでエクスポートする必要がある。それより古いバージョンでエクスポートしたデータは collision.bin を使う。

読み込みの仕組み

コリジョンデータはレンダリングデータと同様に空間ごとのブロックに分けて格納されている。プラグインはコリジョンを一度にすべて読み込むのではなく、カメラ周辺の一定範囲内のブロックだけを読み込み、カメラの移動に応じて動的に入れ替える。

カメラ位置が変化する
      │
      ▼
範囲内で読み込むべきコリジョンブロックの集合を計算する
      │
      ▼
前回の集合と比較する ── 同じ ──▶ スキップして何も処理しない
      │ 異なる
      ▼
新しいブロックを読み込む → 物理システムにベイクさせる → コリジョンボディを生成する

実装上のポイントをいくつか挙げる。

  • 読み込み範囲は Max Load Collision Distance(m) で制御し、この距離を超えた領域にはコリジョンがない
  • 初回の読み込みは同期的で、コリジョンが準備できていない状態でキャラクターが地面をすり抜けて落下するのを避ける。それ以降の更新はすべて非同期で、メインスレッドをブロックしない
  • 頻度のスロットリングがあるため、カメラが連続的に移動してもフレームごとにコリジョンを再構築することはない
  • 可視ブロックの集合が変化していない場合は直接スキップするので、その場でわずかに動いても再構築はトリガーされない
  • メインカメラのみで計算するため、SceneCapture はコリジョンの読み込みに参加しない

利点

  • メモリ使用量は読み込み範囲だけに関係し、データの総量とは無関係なので、大規模シーンでもコリジョンに対応できる
  • 物理システムが処理するコリジョンボディの数が常に制御可能で、シーン規模が大きくなっても物理計算が遅くならない

代償と回避方法

問題原因回避方法
ゲーム開始の瞬間にキャラクターが地面をすり抜けて落下するコリジョンの構築が完了していないPlayerStart を少し高い位置に上げる、またはコリジョンが準備できてからキャラクターの移動を有効にする
キャラクターが遠くから 3DGS シーンの範囲に入るとカクつくスポーン地点がコリジョン読み込み範囲外にあり、初回進入時に同期読み込みが発生するスポーン地点をコリジョン読み込み範囲内に配置する、またはコリジョンを一度にすべて読み込む
遠くにコリジョンがなく、レイキャストが当たらない読み込み範囲を超えた領域はコリジョンボディを生成しないMax Load Collision Distance(m) を大きくする、またはコリジョンに依存しない判定方法に変える
テレポートや高速移動の直後、短時間コリジョンがない新しい領域のコリジョンブロックがまだ読み込み中であるコリジョンを一度にすべて読み込む
移動中にカクつきが出て Update Collision の処理時間が長いコリジョンブロックの入れ替えとベイクが頻繁に起きている読み込み範囲を縮める、またはコリジョンが本当に必要かを確認する
ナビゲーションと併用するとナビゲーションメッシュが繰り返し再構築されるコリジョンの変化が NavMesh の更新をトリガーしている読み込み範囲を大きくして対象領域を一度に読み込み終え、Static のベイクを使う。詳しくは ナビゲーションシステム対応 を参照する

コリジョンを一度にすべて読み込む

上記の代償のほとんどは実行時の動的な入れ替えに由来する。シーン規模が限られていてメモリに余裕がある場合は、Max Load Collision Distance(m) をシーン全体を覆えるほど大きくして、データ読み込み時にコリジョンを一度にすべて構築させることができる。

こうすると実行時にコリジョンブロックの入れ替えが起きなくなり、前の表にあった地面のすり抜け、テレポート後のコリジョンなし、移動中のカクつき、ナビゲーションの繰り返し再構築はいずれも発生しない。ナビゲーションシステムと併用する場合は特に推奨する。

引き換えに起動時の読み込み時間が長くなり、メモリ使用量はシーン全体のコリジョンのサイズで固定される。実行可能かの判断は、stat xgrids の Collision Data Usage を見て、全量読み込み後のメモリ使用量が許容範囲内かを確認する。

有効にする

LCCComponent->SetLCCCollisionEnable(true);

または Details パネルで bEnableCollision をチェックする。

Details パネルで LCC のコリジョンを有効にする

Details パネルで LCC のコリジョンを有効にする

LCC の動的コリジョンの効果のデモ

LCC シーン内でのキャラクターの動的コリジョンの効果

検証

ビューモードの設定で Player Collision または Visibility Collision を選ぶと、コリジョンが有効になっているかを観察できる。

ビューモードでコリジョンボディを表示する

Player Collision または Visibility Collision モードでコリジョンボディを検証する

関連するプロパティ

プロパティ説明
bEnableCollisionコリジョンを有効にする
CollisionLoadMaxDistanceコリジョンデータの最大読み込み距離(既定値 300 メートル)
コリジョンの有効化と最大読み込み距離のプロパティ

コリジョンの有効状態と最大読み込み距離を設定する

単一ファイルモデルのコリジョン自動生成(Pro 版機能)

単一ファイルモデル(.ply / .spz / .sog)はデータ自体にコリジョンデータを持たない。プラグインはガウシアン自体からコリジョンメッシュを生成し、モデルの隣に <名前>.collision.ply としてキャッシュする。以降は既存の PLY コリジョン経路で読み込んで再利用する。

これは Pro 版機能であり、App Key を登録して初めて生成される。エディションとライセンス を参照する。未ライセンスではコリジョンメッシュを生成しないため、自動生成を使わない場合の手動の手段に従って自分で構築する必要がある。

使用手順

  1. LCC Actor のパネルで bEnableCollision にチェックする。
  2. 単一ファイルモデル(.ply / .spz / .sog)を読み込む。
  3. 初回の読み込みでは Generating 状態に入り、その場でコリジョンメッシュを生成する。所要時間はデータ量に応じて数秒から数分かかる。生成が完了すると Loaded に移り、モデルの隣に <名前>.collision.ply が書き出される。
  4. 以降、同じモデルを再度読み込むと、キャッシュファイルがあればそのまま Loaded になり、生成をスキップする。
単一ファイルモデルの初回読み込み時にその場でコリジョンメッシュを生成する

コリジョンを有効にすると、単一ファイルモデルの初回読み込み時に右下にコリジョンメッシュ生成中の通知が表示される

生成とコリジョンの状態は GetCollisionState() でクエリするか、OnCollisionStateChanged イベントをリッスンして取得できる。取りうる値は ULCCComponentBase - 状態クエリ を参照する。

ヒント:実行時に生成を省きたい場合は、生成済みの <名前>.collision.ply をモデルと一緒に配布またはパッケージ化すればよい。実行時にキャッシュを検出すればそのまま再利用する。

ヒント:パッケージ化したゲーム内でコリジョンを生成する際には組み込みの UI 通知がない。「コリジョンを生成中」とプレイヤーに知らせるには、OnCollisionStateChanged の Generating 状態をリッスンして自分で表示する。

ヒント:生成に失敗すると Failed 状態に移る。具体的な原因は Output Log を参照する。コリジョンをいったんオフにして再度オンにすると再試行できる。生成過程を再テストしたい場合は、先にモデルの隣の .collision.ply キャッシュファイルを削除する。

自動生成を使わない場合の手動の手段

コリジョンの形状を完全に制御したい場合、またはデータが生成に適さない場合は、自動生成を有効にせず、シーン内に自分でコリジョンを構築することもできる。

  • Blocking Volume:エンジンのブロッキングボリュームで地面や壁など遮る必要のある領域を組み立てる。規則的な形状に適し、コストが最も低い
  • 近似メッシュ:3DGS の形状に合ったメッシュを配置してそのコリジョンを有効にする。形状が複雑なシーンに適する。このメッシュは プロキシメッシュ を再利用でき、コリジョンプリセットを遮りに参加する設定に変更すればよい

この手動の 2 つの方法は LCC のコリジョン読み込みの仕組みとは無関係で、CollisionLoadMaxDistance の影響を受けず、カメラの移動に応じて動的に入れ替わることもない。

コリジョン領域のクリッピング

コリジョンは クリッピングボリュームと断面プレーン に合わせてクリッピングでき、コリジョンの範囲をレンダリング画面と一致させられる。クリッピングボリュームは既定ではレンダリングにのみ作用し、切り取られた領域は画面が消えてもコリジョンは残るため、キャラクターが見えない壁にぶつかってしまう。Clip Collision を有効にすると、コリジョンもクリッピング領域内で同時に取り除かれる。

使用手順

  1. シーン編集 に従って LCC Actor にクリッピングボリュームまたは断面プレーンを追加して設定し、レンダリング画面が想定どおりにクリッピングされていることを確認する。
  2. LCC Actor のパネルで コリジョンを有効にする(bEnableCollision) にチェックする。
  3. パネルで Clip Collision にチェックすると、コリジョンがクリッピングボリュームに従って切り取られ、切り取られた領域にはコリジョンボディが生成されなくなる。

下図は「Visibility Collision」ビューモードで Clip Collision のオン・オフ前後のコリジョンのワイヤーフレームを比較したものである。オフのときはコリジョンが領域全体を覆う。

Clip Collision が未設定のときはコリジョンのワイヤーフレームが完全

「Clip Collision」未チェック:コリジョンのワイヤーフレームが領域全体を覆う

有効にすると、クリッピングボリューム内のコリジョンも一緒に切り取られ、レンダリングと一致する。

Clip Collision を有効にするとクリッピング領域のコリジョンが切り取られる

「Clip Collision」チェック:クリッピング領域内のコリジョンも一緒に切り取られる

ヒント:Clip Collision はコリジョンを先に有効にしておく必要があり、単一ファイルモデルで自動生成したコリジョンにも同様に有効である。

コリジョン状態のクエリとイベント

コリジョンの現在の状態をクエリしたり、コリジョン状態の変化をリッスンしたりできる。「コリジョンが準備できてからキャラクターを配置する」「生成中は進捗を表示する」といったロジックに使える。

  • GetCollisionState() は現在の状態を返す:NoCollision(オフ、またはモデルがない)/ Generating(単一ファイルモデルがコリジョンメッシュを生成中)/ Loading(カメラ付近のコリジョンを読み込み/cook 中)/ Loaded(カメラ付近のコリジョンが準備完了)/ Failed(提供できない)。
  • OnCollisionStateChanged イベントは状態が変化したときにディスパッチされ、Loaded の後にキャラクターの移動を有効にしたり、Generating のときに通知を表示したりできる。

完全な API と使用上の約束は ULCCComponentBase - 状態クエリ を参照する。

ヒント:Loaded はカメラ付近のコリジョンが準備できたことを指し、モデル全体にコリジョンがあることを意味しない。コリジョンはカメラの移動に応じて継続的にストリーミング読み込みされる。「足元で地面をすり抜けない」ことが必要なら Loaded を待てばよく、遠くのコリジョンが必要なら読み込み距離を大きくする。

注意事項

  • コリジョンを有効にすると、UE エンジン自身の LineTrace でコリジョンボディに基づいたレイキャストを行える。検出範囲も同様に読み込み範囲の制限を受ける
  • コリジョンデータが使用するメモリは stat xgrids の Collision Data Usage で確認でき、更新の処理時間は Update Collision で見られる。パラメーターの意味は パフォーマンスパラメーター を参照する