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

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

    • Lixel K1

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

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

    • Lixel L2 Pro

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標のポイントクラウドデータを取得する
      • 実時計測機能
      • 付録
      • FAQ
  • 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 とトラブルシューティング
    • バージョン履歴
  • プラグインと SDK

    • Unreal

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

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

        • 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

3DGS シーンにナビゲーションメッシュを生成する

Navigation System Support

適用範囲

本編はLCC のコリジョンデータでナビゲーションを構築する場面を対象としているため、ALCCActor と ALCC2Actor にのみ適用できる。コリジョンデータを持つのは .lcc と .lcc2 形式だけである。詳しくは コリジョン を参照する。

.sog、.spz、.ply はコリジョンデータを含まないため、Blocking Volume や近似メッシュで歩行可能な領域を自分で用意する必要がある。この種のジオメトリは標準の UE のオブジェクトなので、ナビゲーションの設定は Unreal Engine の公式のワークフローに沿って行えばよく、本編の特別な事項は関係しない。

概要

Unreal Engine の Navigation System は NavMesh を通じて AI キャラクターに歩行可能な領域を提供する。NavMesh の生成は、シーン内でナビゲーションに影響でき、かつ有効なコリジョンを持つジオメトリに依存する。

LCC のコリジョンはブロック単位の動的読み込みである。カメラ周辺の一定範囲内のコリジョンブロックだけを読み込み、カメラの移動に応じて入れ替える(仕組みは コリジョン:読み込みの仕組み を参照)。この点がナビゲーションの設定方針を直接左右する。

  • コリジョンブロックが実行時に入れ替わると NavMesh の再構築がトリガーされ、カクつきの原因になる
  • したがって対象領域のコリジョンを一度にすべて読み込み終えてから、Static モードでナビゲーションを構築する

LCC のシーンでは、Runtime Generation に Static を推奨する。Dynamic はコリジョンの変化に反応し続けて NavMesh を再構築するため、ブロック単位で読み込まれるコリジョンと組み合わせると再構築が頻繁にトリガーされ、大規模シーンでは明らかな CPU コストとカクつきを生む。

前提条件

条件説明
データにコリジョンファイルが含まれている.lcc には collision.lci(旧バージョンは collision.bin)が必要。.lcc2 には data/mesh/ 下の .ply ファイルが必要。詳しくは コリジョン:前提条件 を参照する
コリジョンが有効になっているActor の bEnableCollision = true
コリジョンデータが読み込まれているビューモードで Player Collision または Visibility Collision を選ぶと、読み込み済みのコリジョンボディが見える
Actor がナビゲーションに影響できるActor の CanEverAffectNavigation = true
コリジョンの読み込み範囲が十分であるMax Load Collision Distance(m) がナビゲーションを構築したい対象領域を覆っている。既定値は 300 メートル
NavMesh の構築境界が十分であるシーンに NavMeshBoundsVolume を配置し、AI を活動させたい対象領域を覆っている

コリジョンの読み込み距離と NavMeshBoundsVolume は別々の範囲を制御する。前者はどの領域にコリジョンデータがあるかを決め、後者はエンジンがどの境界内で NavMesh を構築するかを決める。対象領域で使用可能な NavMesh を生成するには、両方がその領域を覆っている必要がある。

使用手順

1. LCC のコリジョンを有効にして確認する

ALCCActor または ALCC2Actor を選択し、Details パネルで Enable Collision(bEnableCollision)を有効にする。コードから有効にしてもよい。

LCCComponent->SetLCCCollisionEnable(true);

あわせて Actor の CanEverAffectNavigation = true を確認し、そのコリジョンがナビゲーションの構築に参加できるようにする。

LCC データを読み込んだ後、ビューモードでPlayer CollisionまたはVisibility Collisionを選び、対象領域内にコリジョンボディが現れているか確認する。コリジョンは非同期の物理ベイクを使うため、3DGS の画面がレンダリングされ始めてからさらに数秒待つ必要がある場合がある。

Unreal Engine のビューモードで LCC のコリジョンボディが読み込まれているか確認する

Player Collision または Visibility Collision モードで、対象のナビゲーション領域内の LCC コリジョンボディが読み込まれていることを確認する

2. コリジョンの読み込み範囲を設定する

LCC のコリジョンは Max Load Collision Distance(m) で指定した範囲内でのみ読み込まれる。既定値は 300 メートルである。

ナビゲーションと併用する場合は、この値を AI の活動領域全体を覆うまで大きくして、コリジョンを一度にすべて読み込み終えるようにする。そうしないと実行時にコリジョンブロックがカメラの移動に応じて入れ替わり続け、NavMesh の再構築を継続的にトリガーして明らかなカクつきを生む。範囲が十分に大きければ実行時にコリジョンの変化がなくなり、ナビゲーションも再構築されない。

引き換えに起動時の読み込み時間が長くなり、メモリ使用量が増える。stat xgrids の Collision Data Usage で全量読み込み後のメモリが許容できるか確認できる。詳しくは コリジョン:コリジョンを一度にすべて読み込む を参照する。

コリジョン距離の不足を解決するために Runtime Generation を Dynamic に変更してはいけない。 Dynamic はコリジョンの読み込み範囲を広げないため、その距離を超えた領域には引き続きナビゲーション構築に使えるコリジョンが存在しない。

3. NavMeshBoundsVolume を配置して調整する

シーンに NavMeshBoundsVolume を配置し、移動と拡大縮小を行って、AI を活動させたい領域全体を覆うようにする。

LCC シーンに NavMeshBoundsVolume を配置して拡大縮小する

NavMeshBoundsVolume を配置して拡大縮小し、ナビゲーションの構築境界が AI の活動領域全体を覆うようにする

2 つの範囲が同時に要件を満たしていることを再度確認する。

  • Max Load Collision Distance(m):対象領域内に読み込み済みの LCC コリジョンが存在するかを決める
  • NavMeshBoundsVolume:Unreal Engine がどの境界内で NavMesh を構築するかを決める

一方の範囲だけを大きくしても、もう一方の範囲が覆っていない問題は解決しない。

4. Navigation System を設定する

設定推奨値説明
Runtime GenerationStatic第一候補の設定。ナビゲーションはエディターでの構築時にのみ生成され、実行時に再構築が続いてパフォーマンスコストが生じるのを避けられる
Cell Size既定値値が小さいほど NavMesh は正確になるが、構築時間、メモリ、実行時のコストが大きくなる

Dynamic を使うのはどんなときか

NavMesh を実行時にジオメトリの変化に応じて自動で再構築する必要が実際にある場合にのみ Dynamic を検討する。たとえば実行時に歩行可能な領域が変化するインタラクティブなシーンである。

LCC のコリジョンと Dynamic を組み合わせるときは特に慎重にする。コリジョン自体がブロック単位の動的読み込みであり、コリジョンブロックが入れ替わるたびにジオメトリの変化と判定されてナビゲーションの再構築がトリガーされるため、大規模シーンでは CPU コストとカクつきが続く可能性がある。Dynamic がどうしても必要な場合は、あわせてコリジョンの読み込み範囲を活動領域全体を覆うまで大きくし、実行時にコリジョンの変化が起きないようにする。

コリジョン距離やナビゲーションの被覆範囲を広げるためだけに Dynamic を有効にしてはいけない。

5. コリジョンの準備を待って Static NavMesh を構築する

推奨の Static モードを使う場合は、次の順で操作する。

  1. LCC データを読み込み、3DGS の画面が表示されていることを確認する。
  2. 非同期のコリジョンのベイクが完了するまで待つ。
  3. Player Collision または Visibility Collision モードで、対象領域内のコリジョンが読み込まれていることを確認する。
  4. Collision Load Max Distance と NavMeshBoundsVolume の両方が対象領域を覆っていることを確認する。
  5. Unreal Engine のメインメニューで Build → Build Paths を実行する。
  6. ナビゲーションの構築が完了するまで待つ。
  7. レベルとナビゲーションデータを保存する。

検証とトラブルシューティング

P キーを押すとビューポートに NavMesh が表示される。

  • 緑色の領域:歩行可能な NavMesh が生成されている
  • 緑色の領域がない:その位置に NavMesh が生成されていないので、以下の順で確認する
P キーを押して LCC シーン内の緑色の NavMesh 歩行可能領域を表示する

P キーで NavMesh を検証する。緑色に覆われている領域は歩行可能なナビゲーションデータが生成されていることを示す

対象の位置に緑色の NavMesh がない場合は、順に確認する。

  1. データにコリジョンが含まれているか:使用しているのが .lcc または .lcc2 で、データディレクトリに対応するコリジョンファイルがあることを確認する。単一ファイル形式はコリジョンを含まないため、本編の手順は使えない。
  2. コリジョンが有効で読み込まれているか:bEnableCollision = true、CanEverAffectNavigation = true を確認し、Player Collision または Visibility Collision モードで対象位置のコリジョンボディが見えることを確認する。
  3. コリジョンの読み込み範囲が十分か:対象位置が読み込み範囲を超えている場合は Max Load Collision Distance(m) を大きくし、コリジョンが再度準備されるのを待つ。
  4. NavMeshBoundsVolume が対象位置を覆っているか:Volume を移動または拡大縮小し、ナビゲーションの構築境界が対象領域を完全に覆うようにする。
  5. Static NavMesh を再構築したか:コリジョンと範囲に問題がないと確認できたら Build → Build Paths を実行し、完了を待ってレベルとナビゲーションデータを保存する。
  6. 再度 P を押して緑色の被覆を確認する。

以上がすべて正しくても生成できない場合は、Output Log の Navigation、Recast、コリジョン関連のエラーをさらに確認し、現在のレベルが保存されていることを確かめる。

前へ
コリジョン
次へ
Single layer water 対応