🎨

3D Gaussian Splatting変換ツール「Splat Transform」

に公開

はじめに

3D Gaussian Splattingのデータを扱っていると、異なるフォーマット間での変換や、複数ファイルの結合、座標変換などが必要になることがあります。今回は、PlayCanvasが新たにリリースしたオープンソースのCLIツール「Splat Transform」を実際に使ってみました。

Splat Transformとは

Splat Transformは、Gaussian SplatのPLYファイルを読み込み、様々なフォーマットに変換・出力できるコマンドラインツールです。もともとPlayCanvasは、「SuperSplat」を提供していましたが、コマンドラインで使えるようにしたのがSplat Transformです。

インストール

npmを使ってグローバルにインストールします:

npm install -g @playcanvas/splat-transform

splat-transformコマンド

ターミナルでsplat-transformコマンドを実行するとこのようものが表示されます。

> splat-transform

splat-transform v0.3.0
===================================================================

使用方法
 splat-transform [グローバル]  <入力.{ply|splat|ksplat}> [アクション]  ...  <出力.{ply|compressed.ply|meta.json|csv}> [アクション]

サポートされる入力フォーマット .ply   .splat   .ksplat

サポートされる出力フォーマット .ply   .compressed.ply   meta.json (SOGS)   .csv

アクション(任意の順序で繰り返し可能)
   -t, --translate  x,y,z                  スプラットを (x, y, z) だけ平行移動
   -r, --rotate     x,y,z                  スプラットをオイラー角(度)で回転
   -s, --scale      x                      スプラットを係数 x で均一にスケール
   -n, --filterNaN                         NaN/Inf を含むガウシアンを削除
   -c, --filterByValue 名前,比較,値         <名前> <比較> <値> の条件を満たすスプラットを保持
                                           比較 ∈ {lt,lte,gt,gte,eq,neq}
   -h, --filterBands  {0|1|2|3}            N より大きい球面調和関数バンドを除去

グローバルオプション
   -w, --overwrite                         出力ファイルが既に存在する場合は上書き
   -h, --help                              このヘルプを表示して終了
   -v, --version                           バージョンを表示して終了

例
   # シンプルなスケール後に平行移動
   splat-transform input.ply -s 0.5 -t 0,0,10 input_scaled.ply

   # 2つの入力を連結して圧縮出力を書き込み、必要に応じて上書き
   splat-transform -w cloudA.ply -r 0,90,0 cloudB.ply -s 2 merged.compressed.ply

基本的な使い方

上記の使い方を見ながら利用をしてみます。

フォーマット変換

最もシンプルな使い方は、フォーマット変換です。例えば、PLYファイルをCSVに変換する場合:

splat-transform input.ply output.csv

圧縮PLY形式に変換する場合:

splat-transform input.ply output.compressed.ply

SOGS形式(JSON + WebP画像)への変換:

splat-transform input.ply output/meta.json

変換後

座標変換を試してみる

実際に3Dモデルを変換してみました。例えば、モデルを縮小して上に移動させる場合:

splat-transform input.ply -s 0.5 -t 0,0,10 input_transformed.ply

このコマンドでは:

  • -s 0.5: モデルを50%のサイズに縮小
  • -t 0,0,10: Z軸方向に10単位移動

複数の変換を連鎖させる

複数の変換を一度に適用することも可能です:

splat-transform input.ply -s 2 -t 1,0,0 -r 0,0,45 output.ply

これは以下の順番で変換を適用します:

  1. 2倍に拡大
  2. X軸方向に1単位移動
  3. Z軸周りに45度回転

高度な機能

フィルタリング

品質向上のために、不要なデータをフィルタリングできます:

# NaNやInfを含むエントリを除去
splat-transform input.ply --filterNaN output.ply

# 透明度が0.5より大きいスプラットのみを保持
splat-transform input.ply -c opacity,gt,0.5 output.ply

# 球面調和関数のバンドを制限(パフォーマンス最適化)
splat-transform input.ply --filterBands 2 output.ply

複数ファイルの結合

異なる変換を適用しながら、複数のファイルを結合することもできます:

splat-transform -w cloudA.ply -r 0,90,0 cloudB.ply -s 2 merged.compressed.ply

このコマンドでは:

  • cloudA.plyはそのまま読み込み
  • cloudB.plyをY軸周りに90度回転
  • 結合したデータを2倍に拡大して圧縮PLYとして出力

CSV出力による新たな可能性

Splat TransformのユニークでPowerfulな機能の1つが、CSV形式への出力です。これにより、データサイエンスのワークフローが大きく広がります:

# スプラットデータをスプレッドシート分析用にエクスポート
splat-transform scene.ply data.csv

# 分析前にフィルタリングして関連データに絞る
splat-transform input.ply --filterNaN -c opacity,gt,0.1 analysis.csv

変換をした後

CSV出力のメリット

  • スプレッドシート分析 - Excel、Google Sheetsなどで直接分析可能
  • 統計的洞察 - 分布、相関、品質メトリクスの計算
  • カスタムフィルタリング - スプレッドシート関数で外れ値検出やクラスタリング
  • 視覚化 - データパターンを理解するためのチャートやグラフ作成
  • 統合 - 機械学習パイプラインやカスタム処理ワークフローへの組み込み

PlayCanvasエンジンとの連携

PlayCanvasエンジンは市場で最も先進的な3D Gaussian Splatレンダラーを持っています。Splat Transformは、PlayCanvasの圧縮PLY形式やSOGS形式(さらに最適化された圧縮形式)への変換を完全にサポートしています。

他のレンダラーからの移行

現在、.splatや.ksplatなど異なるフォーマットを使用する他のレンダラーを使っている場合でも、Splat Transformを使えば簡単にPlayCanvasに移行できます:

# .ksplatからPlayCanvas用の圧縮PLYへ変換
splat-transform legacy.ksplat optimized.compressed.ply

まとめ

コマンドラインツールなので、シェルスクリプトやCI/CDパイプラインに組み込みやすいのも大きな利点です。さらに、CSV出力機能により、これまで不透明だったバイナリファイルを読み取り可能で分析可能なデータセットに変換できるようになりました。

参考リンク

Discussion