Closed13

PlayCanvas 3DGSの実装について調査

にー兄さんにー兄さん

spz-loaderのplaycanvas実装できるかというのが気になったのでちょっと調査してみることに

にー兄さんにー兄さん

GaussianSplatting(gsplat)について参照元をさかのぼっていくと、frameworks/parsers/ply.jsのPlyParserにたどり着いた

にー兄さんにー兄さん

PlyParser.loadで読み込み時に種別を判定して、GSplatResourceを生成している
そしてこれを生成するときにGSplatDataが必要になってくる

にー兄さんにー兄さん

playcanvas/engineでは、plyParserによってGSplatDataが生成されているが
ここをspz-loaderでやることで、あとの工程は任せられるかな

にー兄さんにー兄さん

ではGSplatDataには何が必要なんだいって思ったら、PlyElementの配列を使って生成できそう

にー兄さんにー兄さん

PlayCanvasではこんな風にPLYファイルをでコンポーズして定義しているらしい
ん~これならできなくはなさそうだ

にー兄さんにー兄さん

GSplatResourceの中を見ていたら、instantiateというメソッドでgsplatのコンポーネントをアタッチしたEntityが返ってくるらしい
てことはgsplatResourceが作れれば召喚できるかもな

にー兄さんにー兄さん

spz-loader::GaussianCloud→PlayCanvas::GSplatDataへの変換は地道にバッファの移し替えをすればできた
あとはGSplatDataを使ってGSplatResourceを作ってEntityを生成すれば表示できる

にー兄さんにー兄さん

躓いたのが、PlayCanvasのGSplatIteratorでは既にSigmoidとかExpの処理がされているので
spz-loaderでやってしまっているのを一かい逆関数かませないと変な値になる
具体的にはScaleが結構大きくなってめっちゃ描画負荷が増してびっくりした

にー兄さんにー兄さん

あとcolorFactorの処理もあるしQuaternionも考慮する必要がある
しかもspzはw,x,y,zの並びなので注意

このスクラップは2ヶ月前にクローズされました