<pc-gsplat>
<pc-gsplat>タグは、3D Gaussian Splatを描画するgsplatコンポーネントを追加します。何百万もの小さく柔らかな色付きの粒としてキャプチャしたシーンです。
スプラットベースのシーンをレンダリングする場合、最高のパフォーマンスを得るには、<pc-app>タグのantialiasをfalseに、max-pixel-ratioを1に設定することをお勧めします。
- それは、
<pc-entity>、<pc-model>、または<pc-node>の直接の子である必要があります。
属性
| 属性 | タイプ | デフォルト | 説明 |
|---|---|---|---|
asset | Asset ID | - | Gaussian splatアセットID (gsplatタイプのアセットを参照する必要があります) |
cast-shadows | Boolean | "false" | gsplatコンポーネントが影を落とすかどうか |
enabled | Boolean | "true" | コンポーネントの有効状態 |
lod-falloff | Number | "1" | このスプラットのディテールがカメラから離れるにつれてどれだけ速く落ちるかを、0から8の指数で指定します。値が大きいほどシーン全体のスプラット予算をカメラ近くに集中させ、小さいほど均等に分散させます。LODレベルを含むアセットにのみ影響します。 |
lod-range-max | Number | "99" | 許可される最大のLODインデックス (この値を含む)。予算が選択するLODは、この値より粗い (インデックスが大きい) ものにならないようにクランプされます。デフォルトの99は事実上「上限なし」を意味します。LODレベルを含むアセットにのみ影響します。 |
lod-range-min | Number | "0" | 許可される最小のLODインデックス (この値を含む)。予算が選択するLODは、この値より細かい (インデックスが小さい) ものにならないようにクランプされます。値を上げると、最高品質 (最大) のLODファイルのダウンロードを回避できます。LODレベルを含むアセットにのみ影響します。 |
レベルオブディテール
ストリーミング用のスプラットアセットとは、LODレベル付きでエクスポートされたものです。その<pc-asset>のsrcはエクスポートのlod-meta.jsonを指し、このファイルが先に読み込まれ、スプラットデータ自体はオンデマンドでストリーミングされます。.jsonファイルはそのままでは通常のJSONとして読み込まれるため、type="gsplat"を付けて宣言してください。こうしたアセットは、どこでもフルディテールで描画されるわけではありません。エンジンはシーン全体のスプラット予算、つまりシーン内のすべての<pc-gsplat>を合わせて画面に描くスプラット数の目標値に従って動き、最も効果の高い場所にそれを使います。予算とその使い方はシーンの性質なので<pc-scene>に置かれ、各スプラットが自分の取り分をどう競うかはここに置かれます。
| 属性 | 場所 | 制御する内容 |
|---|---|---|
gsplat-splat-budget | <pc-scene> | シーン全体で描画するスプラットの総数。デフォルトは1,000,000。シーンより大きい予算を与えると、すべてのノードが最も細かいレベルで解決されます |
gsplat-lod-mode | <pc-scene> | デフォルトの"distance"は、カメラからの距離だけでディテールの順序を決め、カメラを中心とした同心円状の帯で段階的に下げます。メモリ使用量も少なく済みます。"error"は同じ予算を近似誤差を最も減らせる場所に使うため、"distance"では粗いままになる空や遠景などの疎な領域の品質が上がりますが、ストリーミングされたデータを明らかに多くメモリに保持します |
lod-falloff | <pc-gsplat> | このスプラットが自分の予算の中で、遠方のディテールを近くのディテールとどれだけ急にトレードするか。1が中立で、大きい値ほどディテールをカメラ側へ引き寄せます |
lod-range-min・lod-range-max | <pc-gsplat> | 予算の判断にかかわらず、このスプラットが使えるLODインデックスの上下限。最小値を上げれば、最大のファイルを一切ダウンロードしないようにできます |
<pc-asset id="capture" src="capture/lod-meta.json" type="gsplat"></pc-asset>
<!-- ... -->
<pc-scene gsplat-splat-budget="1500000" gsplat-lod-mode="error">
<pc-entity name="capture">
<pc-gsplat asset="capture" lod-falloff="1.5" lod-range-min="1"></pc-gsplat>
</pc-entity>
</pc-scene>
予算による選択を無効にする方法はありません。0以下の予算は上限を外すのではなく、すべてのノードを最も粗いレベルに固定してしまうため、エンジンは代わりにデフォルトを使います。すべてをフルディテールで見たい場合は、キャプチャより大きい予算を設定してください。LODレベルを持たない通常の.ply・.sogアセットは常にフルで描画されますが、そのスプラットは予算に数えられ、その分ストリーミングされるアセットに回る量が減ります。
Splat Streamingのサンプルは大きなLODキャプチャをストリーミングします。lod-range-minを最も粗いレベルに固定してシーン全体を素早く表示し、その後固定を外してより細かいレベルをストリーミングさせるため、予算の働きを見ることができます。
例
実物のぬいぐるみをスキャンしたガウシアンスプラットです。ドラッグで軌道回転、スクロールでズームできます。上で推奨した <pc-app> の属性にも注目してください:
<pc-app antialias="false" max-pixel-ratio="1">
<pc-asset src="https://cdn.jsdelivr.net/npm/playcanvas@2.22.6/scripts/esm/camera-controls.mjs"></pc-asset>
<pc-asset id="toy" src="https://developer.playcanvas.com/assets/toy-cat.sog"></pc-asset>
<pc-scene>
<pc-entity name="camera" position="0 0 2.5">
<pc-camera clear-color="#1d1f2b"></pc-camera>
<pc-script>
<pc-script-instance name="cameraControls" enable-pan="false" zoom-range="1 5"></pc-script-instance>
</pc-script>
</pc-entity>
<pc-entity name="toy" position="0 -0.7 0" rotation="0 0 180">
<pc-gsplat asset="toy"></pc-gsplat>
</pc-entity>
</pc-scene>
</pc-app>
JavaScriptインターフェース
GSplatComponentElement APIを使用して、<pc-gsplat>要素をプログラムで作成および操作できます。
componentプロパティは、この要素が追加するエンジンのGSplatComponentです。要素の準備が完了するまではnullで、属性が公開していないものはすべてここから利用できます。
関連項目
<pc-asset>—gsplatアセットとして宣言するスプラットファイル<pc-app>— スプラットに推奨するデバイス設定- Webコンポーネントの使用 — はじめてのスプラットアプリを順を追って作る
サンプル: Basic Splat、Splat Annotations、Splat Flipbook、Splat Streaming