メインコンテンツまでスキップ

Splat の LOD(Level of Detail)作成方法

このガイドでは、Arrival.Space のワンクリック機能を使って Splat の LOD を作成する方法を説明します。

より細かく制御したい場合

個別の .ply ファイルを扱う場合や、LOD 設定をより詳細に調整したい場合は、splat-transform CLI ツールを使う Manual LOD Creation Guide (CLI) も参照してください。

LCC2

この最適化は LCC2 には不要です。LCC2 はすでに最適化されています。ただし、Streaming Settings で説明している設定は LCC2 にも適用できます。

TL;DR

  1. Splat ファイル(.ply.compressed.ply.sog、または .lcc の zip)をアップロード
  2. Content List Detail View で Generate LOD をクリック
  3. LOD 設定(presets、distances/multipliers)を調整
  4. Collision を生成

1. Splat ファイルをアップロード

LOD を生成する前に、Splat アセットを Arrival.Space にアップロードする必要があります。対応フォーマット:

FormatUpload 方法
.ply直接アップロード
.compressed.ply直接アップロード
.sog直接アップロード
.lcc / .zip付随ファイル(.lci.bin ファイル)と一緒に zip でアップロードする必要があります。詳細は Upload LCC to Arrival.Space を参照してください。
meta.json / .zipCLI で LOD を手動作成した場合(Manual LOD Creation Guide を参照)、lod-meta.json と全 Chunk ファイルを含む LOD 出力フォルダを zip としてアップロードしてください。
Sample Data

有効なサンプルは XGRIDS Sample Data を確認してください。すべてのサンプルはアップロード可能な zip 形式で提供されています。


2. LOD を生成

アセットをアップロードし、Collision を作成すると、アセット情報の下に Optimize for Streaming ボタンが表示されます 1。このボタンをクリックするとサブメニュー 2 が開き、次の設定を構成できます:

  • Detail Levels:
    生成する Level of Detail の数を定義します。LCC Splats の場合は自動で設定されます。
  • Gaussians per File:
    各 Chunk に含める Gaussians 数の目安を指定します。実際の数はわずかに前後する場合があります。
  • Chunk Extent:
    Chunk の空間サイズ(メートル)を指定します。スキャンした環境のスケールに合わせて調整してください。
  • LOD Engine:
    SplatLODNanoGS から選択します。
    • SplatLOD は均一な LOD 方式で、Splats を複数レベルに均等分配します。高速な C++ パイプラインにより、大規模シーン透明度が高い データセットに適しており、効率的なストリーミングと安定した描画性能を実現します。NanoGS より 高速 です。
    • NanoGS は適応型 LOD 生成を行い、低い LOD でも視覚ディテールを維持しやすくします。近距離での画質が高く、小規模シーン透明性の影響が小さい ケースに向いています。高い視覚品質が期待できますが、生成は通常 SplatLOD より重くなります。

設定後、Start Generation をクリックして LOD を生成します。Splat のサイズにより時間がかかります。たとえば 100 万 Gaussians 前後の小規模 Splat では、通常 10-15 分 ほどかかります。

処理中に Space を離れても問題ありません。生成はバックグラウンドで継続されます。

2.1 LOD 生成の進捗

生成開始後は アイコンでキャンセルできます。また、ここで LOD 生成の進捗を確認できます 3


3. Streaming Settings

LOD の生成が完了すると、以前のアセットを置き換えます。ファイルが .lod になり、
Generate LOD ボタンが Streaming Settings に変われば完了です 4

このボタンをクリックすると、次の情報と設定を含むサブメニューが開きます:

5 LOD Settings (X LOD Levels):

生成された LOD レベル数(この例では 5)、表示中 Splats 数、video memory 使用量を表示します。

  • Default Desktop Preset: Desktop で Space を表示する訪問者に適用される preset。
  • Default Mobile Preset: Mobile で Space を表示する訪問者に適用される preset。Meta Quest 3Apple Vision Pro preset が無効な場合、VR でもこの preset が使用されます。
  • Enable Preset Selection UI: 訪問者向けの preset 選択 UI の表示/非表示を切り替えます。
  • Colorize LOD Levels: LOD レベルを色分け表示します。距離遷移や範囲調整の確認に有効です。

6 Quality Presets

Presets を使うと、デバイスごとに LOD を最適化できます。Mobile では iOS の安定動作のため、visible Splats を 3M 未満、used memory を 400mb 未満に保つことが推奨です。

Edit Preset

編集する preset を選択します。利用可能なのは Desktop MaxDesktopMobile MaxMobile、および有効化時の Meta Quest 3Apple Vision Pro です。

Minimum LOD Level

preset の開始レベルを定義します。Level 0 が最も詳細です。例では 0 から 4 の範囲になります。

LOD Base Distances & LOD Distance Multiplier

LOD Base Distance と Distance Multiplier は連動します。Base Distance は 1 レベル分の距離(m)を定義し、Distance Multiplier で次のレベル距離を算出します。 例:

  • Base Distance: 5m
  • Distance Multiplier: 2

この場合:

  • Level 0(最詳細): 0-5m
  • Level 1: 5m-10m
  • Level 2: 10m-20m
  • Level 3: 20m-40m
  • Level 4: 40m-無限遠

Splat Budget

ここで入力する値はハード上限です。Splats 数を直接制限し、必要なら削減します。

Cull Distance

小規模 Spaces や、全体を一度に見渡せない Spaces で特に有効です。指定距離を超えると Splats は表示されません。たとえば 5 の場合、5m より奥は表示されません。

Behind Penalty

カメラ背面の Chunks に追加距離ペナルティを適用します。これにより前方 Chunks より早くアンロードされ、memory 使用量の削減と performance 改善に役立ちます。値を上げるほど背面領域のアンロードが強くなります。

3.1 Preset Selection UI を使う

この設定を有効にして UI を閉じると、Enable Preset Selection UI が Owner Badge の下に表示されます 7

3.2 VR Presets

VR headsets を使うには、このオプションを明示的に有効化する必要があります。無効時は Mobile presetMobileMobile Max)が使われます。

Enabled を ON にすると VR 対応が有効化され、Minimum LOD Level などの項目が編集可能になります。その後、必要に応じて値を調整してください。


4. Collision を生成

LOD 設定を調整したら、Splat 用の Collision mesh を生成します。これにより訪問者は 3D 環境上を歩行・インタラクションできます。

.lcc.ply.compressed.ply.sog としてアップロードした Splats では、Generate Collision ボタンを直接使用できます。手順は Collision Generation Guide を参照してください。

手動作成した LOD ファイル

CLI で手動作成した LOD をアップロードした場合、LOD 構造から直接 Collision を生成することはできません。

Workaround:

  1. Splat の低解像度版(約 1-2 million Gaussians)を生成します。
  2. その low-res Splat を別 Entity としてアップロードします(可能なら別 Space)。
  3. その Entity で Generate Collision を実行し、Collision mesh を生成します。
  4. 生成された Collision ファイルを取得します。
  5. その Collision ファイルを LOD Entity にアップロードします。

参考リンク