3D Gaussian Splattingに対応したScaniverseから.PLYファイルをWebにインポートしビュワーとして共有してみた

はじめに

こんにちは。GMOグローバルサイン・ホールディングスの城戸(@sutobu000)です。
CREやビジュアルシステムの研究開発、インハウスでの映像制作・配信業務を担当しています。

今回は3Dスキャナーアプリ「Scaniverse」でスキャンした3D Gaussian SplattingをWebにインポートして誰でも閲覧できるように共有するまで紹介します。

Scaniverseについて

公式サイト: https://scaniverse.com/

Scaniverseは、iOSデバイス向けの3Dスキャナーアプリです。
スマホで手軽にリアルな3Dモデルを作成できる一方、LiDARセンサーを使った高精細なスキャンも可能でした。そして今回3.0にバージョンアップされてから、LiDARセンサーがなくても3D Gaussian Splattingによる3Dスキャンが可能になりました。

また、スキャンしたデータはOBJなど3Dモデルデータのファイル形式でエクスポートできましたが、3D Gaussian Splattingでスキャンしたデータを.PLYファイルでエクスポートすることもできます。

3D Gaussian Splattingについて

3D Gaussian Splattingとは、3Dのポイント(点)データを綺麗にレンダリングする手法です。
通常、点を描くと穴が空いたりギザギザになったりすることがあるので、代わりに点をぼやっと広がる形、ガウス関数に基づく形に変えます。これによりそれぞれの点が周りに影響を与える範囲を持つことになり、点と点の間が自然につながって見えるようになります。最終的にレンダリングされる画像ではエイリアシングなどの問題を最小限に抑えた滑らかな画像となります。

この技術はScaniverse以外のアプリでも活用されており、LumaAIでも利用することが可能です。
今回Scaniverseが今までのアプリと異なる点として実装したのが、ローカル3D Gaussian Splattingです。

LumaAIなどの他アプリでは、通常3D Gaussian Splattingの処理を実行するためにクラウド上のサーバーへデータをアップロードして処理を行う必要がありました。これは処理するデータ量が大きく、サーバー内でGPUによる処理を実行する必要があるため、この処理が不可欠でした。

しかし、Scaniverseはクラウド上のサーバーを使わず、ローカルで3D Gaussian Splattingの処理を実現しました。これにより、ネットワークに左右されずにローカルでレンダリング処理を実行することが可能になりました。現代のスマートフォンの性能の高さからローカル処理を実現できたようです。
ネット環境不要でレンダリングできるようになったのは画期的と思います。

今回はこのScaniverseのローカル3D Gaussian Splattingを使ってPLYファイルを生成し、PlayCanvasを使ってWeb上で共有を行ってみたいと思います。

準備

  • スマートフォン(今回はiPhone15 Pro)
  • PlayCanvas(PlayCanvasログイン必要)
    • Model Viewer テンプレート(新規プロジェクト作成時にテンプレート選択)
    • Super Splat

スマホを使って3Dモデルを生成します

早速3D Gaussian Splattingに対応したScaniverseを使って3Dモデルを生成します。

アプリをインストールする

まだScaniverseをインストールしていない場合は、以下のリンクからインストールしてください。

https://apps.apple.com/us/app/scaniverse-3d-scanner/id1541433223

スキャンを始める

下部のボタンからスキャンを始めます。

SplatかMeshを選択することができます。
今回はSplatを選択し、スキャンを始めましょう。

スキャンを始めたら、被写体の周りを高い角度、低い角度から撮影します。
上下にスマホを動かしながら被写体の周りを横に移動してスキャンすると良いかもしれません。

スキャンを終えると、Splatの処理を実行するか下書きで保存するか選べます。
「Process Splat」を選択して処理を実行します。

処理を終えると保存することができます。「Enhance」でもう一度処理をやり直してより良い結果を作成します。
また、スキャンしたRAWデータを保存することも選択することができます。

Shareを押して、「Export Model」を選択します。

記事投稿時ではPLYファイルのみエクスポートすることが可能です。
これをエクスポートしてPlayCanvasに使用する準備をします。

SuperSplatでエクスポートしたPLYファイルを整形する

エクスポートしたPLYファイルをそのまま使用することもできますが、余分な点群も読み込んでしまいます。
今回はスキャンした棚にフォーカスして点群を整形します。

整形に使うのは、PlayCanvasのアプリケーションである、SuperSplatです。
これは点群データを編集することができるアプリであり、編集したデータをPLYファイルでエクスポートすることもできます。

SuperSplatで整形する

先ほどScaniverseでエクスポートしたPLYファイルをドラッグ&ドロップでインポート。

すると、大きな球体が表示されます。

この球体の中にスキャンしたオブジェクトの点群があります。

球体となっていたのが環境マップの役割を成しているようですが、このまま使用するには点群のデータ量が多くなってしまうので不要な点群を削除し整形する処理を行います。

点群を選択するには、左のツールにあるSELECTIONから「RECT」「BRUSH」で点群を選択することができます。
青色の点群は選択していない状態を表しており、黄色の点群は選択した状態を表しています。

点群を選択する項目を簡単に説明します。

  • SELECTION
    • Rect: 長方形ツールで点群を選択
    • Brush: ブラシツールで点群を選択
    • All: すべての点群を選択
    • None: すべての点群の選択を解除
    • Invert: 点群の選択状態を反転
  • MODIFY
    • Delete Selected Splats: 選択した点群を削除
    • Reset Splats: 編集した点群を初期に戻す
    • Undo: 一つ前の処理に戻す(Ctrl+Z または Cmd+Z)
    • Redo: 一つ先の処理に進める(Ctrl+Shift+Z または Cmd+Shift+Z)

主な使い方としては、RectやBrushで点群を選択して「Delete Selected Splats」で削除します。
今回は棚だけの点群を使用したいので、棚を選択し、Invertで反転させて余分な点群を削除しています。

点群を編集したら、「EXPORT TO」のパネルからPLYファイルをエクスポートします。
「Compressed Ply File」を選択すると、PLYファイルを1/4ほどにデータサイズを圧縮してエクスポートすることができます。(圧縮サイズの詳細についてはこちらを参照)

PlayCanvasでPLYファイルをWeb上で閲覧できるようにする

PlayCanvasは、ウェブブラウザ上で動作するゲームエンジンであり、同時にオンライン開発環境でもあります。ユーザーが直接ブラウザ内でリアルタイムのコラボレーションを行いながら、インタラクティブな3Dアプリケーションやゲームを開発できるツールセットを提供します。

今回使用するオンラインエディターはPLYファイルに対応しており、インポートするだけで3Dシーン内で扱えるアセットになります。これを使用して先ほど編集したPLYファイルをインポートします。

PLYファイルをインポートする

PlayCanvasにログインし、新規プロジェクトから「Model Viewer」テンプレートでプロジェクトを作成します。
PlayCanvasアカウント作成についてはこちらを参照ください

新規プロジェクトを作成したらプロジェクトのEditorへ遷移します。

Editor画面へ遷移したら、下部のASSETSにエクスポートしたPLYファイルをインポートします。
ロードが終えるとインポートが完了します。

本記事では比較のため該当のファイルをインポートしました。
– Scaniverse~.cleaned.ply : SuperSplatで編集したファイル
– Scaniverse~.compressed.ply : SuperSplatで編集し圧縮したファイル
– Scaniverse~.ply : 編集する前のファイル

不要な点群を編集したものと比較しても1/2になっているのがわかります。
また、圧縮をすると34.1MBから2.34MBになりWebでも扱えるレベルのデータサイズになりました。

今回は圧縮したファイルを使用します。
ASSETSからファイルを上部シーンへドラッグ&ドロップすると配置されます。

SuperSplatで編集済みのデータが表示されるはずです。
表示を確認できたら、Launchでモデルビュワーとしても確認してみます。

マウス操作で3D Gaussian Splattingのデータを三次元で見れることが確認できました。

PlayCanvasサーバーに公開する

これをPlayCanvasをログインしなくてもURLだけで共有できるように、PlayCanvasのサーバーへ公開します。
これはユーザーが作成したゲームやアプリケーションを簡単に公開するための機能です。この機能を使用することで、自分の作品をWeb上でシェアすることができます。

左のツールバーにある「Publish/Download」から公開を行います。

BUILDSモーダルが表示され、「PUBLISH TO PLAYCANVAS」を選択し、PlayCanvasのサーバーへアップロードを行います。
すると、BUILDSモーダルの上部にURLが発行されます。

今回発行されたURLは https://playcanv.as/p/9TdLZTo1/ です。
これはPlayCanvasアカウントを持っていないユーザーでも閲覧可能な公開されたURLになります。

まとめ

今回はScaniverseのローカル3D Gaussian Splattingを使ってPLYファイルをエクスポートしてWebで共有まで行いました。

Gaussian Splattingの処理をローカルのスマホから行えるようになったことはとても敷居を下げたものと思います。  
LumaAIなど他のアプリもクラウドサーバーのよる処理で行い、時間がかかりますが精度の高い結果を出力してくれます。

LiDARセンサーやGPUのサーバーがなくてもGaussian Splattingが体験できるので、ぜひLiDARのないスマホでも体験してみてください。

また、PLYファイルのサイズは今回スキャンしたものでも60MBほどの大きさになるため扱いが難しくなりますが、SuperSplatで必要な点群に編集し、圧縮ことで3MBまで小さくすることができます。ひと工夫は必要ですが、これによりWebでも扱えるレベルに持っていくことができました。

3Dスキャンは盛り上がっている分野のため、これからの進展に注目です。