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

GLB 形式

GLB (バイナリ glTF) は、KhronosのKHR_gaussian_splatting拡張機能を使用して3D Gaussian Splatデータを格納できます。これによりスプラットはglTFエコシステムの一級市民となり、標準的なglTFパイプラインを通過でき、通常のメッシュ、マテリアル、アニメーションと同じファイルに共存できます。

これらのファイルは**SplatTransform**で作成でき、PlayCanvasエンジンで直接読み込むことができます。

スプラットの格納方法

この拡張機能は、各スプラットシーンをPOINTSトポロジーを持つglTFメッシュプリミティブとして格納します。スプラットのプロパティは頂点属性として提供されます。

属性内容
POSITIONVEC3スプラットの中心位置
KHR_gaussian_splatting:ROTATIONVEC4回転クォータニオン (xyzw)
KHR_gaussian_splatting:SCALEVEC3リニア空間での軸ごとのサイズ
KHR_gaussian_splatting:OPACITYSCALARシグモイド適用済みの不透明度
KHR_gaussian_splatting:SH_DEGREE_{d}_COEF_{n}VEC3球面調和関数の係数 (係数ごとにRGB)
COLOR_0VEC4スプラット非対応ビューア用のオプションのフォールバックカラー

PLY形式との違いとして、以下の点を知っておくと良いでしょう。

  • アクティベーション済みの値: スケールはリニア空間で格納され (PLYはログ空間)、不透明度はシグモイド適用後の値です (PLYはシグモイド適用前の値)。
  • 座標系: スプラットデータは標準のglTF座標系 (+Yが上) を使用するため、PLYファイルとは異なり、読み込んだスプラットをシーンに配置する際に反転回転は不要です。
  • フォールバックレンダリング: この拡張機能を解釈できないビューアでも、COLOR_0のポイントクラウドをレンダリングできます。

GLBファイルの作成

SplatTransformを使用して、サポートされている任意のスプラット形式から変換します。

splat-transform scene.ply scene.glb

PlayCanvasでの読み込み

スプラットのGLBファイルは、(他のglTFコンテンツと同様に) gsplatアセットではなくコンテナアセットとして読み込みます。

const asset = new pc.Asset('scene', 'container', { url: 'scene.glb' });
app.assets.add(asset);
app.assets.load(asset);

asset.ready(() => {
// gsplatコンポーネントを持つエンティティ階層を作成します
const entity = asset.resource.instantiateRenderEntity();
app.root.addChild(entity);
});

コンテナは、レンダーやマテリアルと同様の方法で、読み込まれたスプラットをasset.resource.gsplats経由で従属gsplatアセットとして公開します。アプリケーションでGSplatComponentSystemを登録することを忘れないでください。

エンジンサポートに関する注意

  • ellipseカーネル (標準の3D Gaussian Splatting) のみがサポートされています。その他のカーネルはellipseとしてレンダリングされ、デバッグビルドでは警告が出力されます。
  • sortingMethodprojectionプロパティは無視されます。ソートはエンジンのグローバルなgsplat設定によって制御されます。
  • KHR_gaussian_splatting_compression_spz_2圧縮拡張機能 (まだドラフト段階) はサポートされていません。

GLBを使用するタイミング

GLBはスプラットデータを非圧縮で格納するため、ファイルサイズはPLYと同程度です。標準ベースのglTFパイプラインでスプラットを扱う必要がある場合や、メッシュコンテンツと1つのアセットにまとめる場合に使用してください。

ヒント

Web配信には引き続きSOGが推奨される形式です。15~20倍の圧縮とより高速な読み込みを実現します。