PlayCanvas 3DGSの実装について調査
spz-loaderのplaycanvas実装できるかというのが気になったのでちょっと調査してみることに
GaussianSplatting(gsplat)について参照元をさかのぼっていくと、frameworks/parsers/ply.js
のPlyParserにたどり着いた
ではGSplatDataには何が必要なんだいって思ったら、PlyElementの配列を使って生成できそう
PlayCanvasではこんな風にPLYファイルをでコンポーズして定義しているらしい
ん~これならできなくはなさそうだ
GSplatResourceの中を見ていたら、instantiateというメソッドでgsplatのコンポーネントをアタッチしたEntityが返ってくるらしい
てことはgsplatResourceが作れれば召喚できるかもな
エイヤと実装して、表示できたっぽい
ただ、現状のScaniverseから出力できるデータと公式のサンプル(RacoonFamilyなど)の座標系が違う
正確にはx軸180度回転してるんだよなぁ
一応racoonfamilyでも表示はできた
spz-loader::GaussianCloud→PlayCanvas::GSplatDataへの変換は地道にバッファの移し替えをすればできた
あとはGSplatDataを使ってGSplatResourceを作ってEntityを生成すれば表示できる
躓いたのが、PlayCanvasのGSplatIteratorでは既にSigmoidとかExpの処理がされているので
spz-loaderでやってしまっているのを一かい逆関数かませないと変な値になる
具体的にはScaleが結構大きくなってめっちゃ描画負荷が増してびっくりした
spz-loader本体にも実装してPRマージ