0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Babylon.jsでガウシアンスプラッティングをアレコレしてみる(3/4)

Last updated at Posted at 2025-12-23

はじめに

この記事は Babylon.js Advent Calendar 2025 の、15日目の記事です

最初3回に分けるつもりでしたが、長くなったので4回になりそうです。
1.Scaniverseによるスキャンと、Babylon.jsで表示する手順
2.フォトグラメトリの特長について
3.ガウシアンスプラットの特長について
4.Babylon.jsでガウシアンスプラットのデータの編集

この記事は3番目、ガウシアンスプラットの特長について記載します。

ガウシアンスプラッティングの仕組みを理解する

前回の記事では、ガウシアンスプラッティングと比較のためにフォトグラメトリについて記述しました。
今回は、ガウシアンスプラッティング(3D Gaussian Splatting、以下3DGS)がなぜフォトグラメトリの苦手な植物や噴水の流体のような表現を可能にしている仕組みについてです。

以下は道後温泉の足湯です。フォトグラメトリでは特徴点が定まらないためこのような処理は難しいですが、ガウシアンスプラットでは流れ落ちているお湯が自然に表現されています。
道後湯之町.gif

3DGSはフォトグラメトリと同じく3D表現をする技術ですが、見せるためのアプローチが大きく異なります。3DGSは形状ではなく、カメラ位置からの見た目を再現する為のデータを作成します。

3DGSは最初はフォトグラメトリと同じく特徴点を手掛かりに写真の撮影位置を特定します。
その後は見た目を再現する為に写真の画像と、その位置から表示する画像の誤差を最小化するように3D空間上に大きさをもった点群を作成していきます。

この「見た目の再現」に特化したアプローチが、3DGSの最大の特徴です。
例えば下図のような鳩の像を処理する場合は

gaus202512151_1.jpg

撮影した画像から、点群を作成し
鳩点群.gif

点に対して色の他に大きさ(楕円)、透明度を調整して、写真の見た目に近づけていきます。
gausu202512151_3.gif

3DGSのデータは、写真のドットに、3D情報を加えたものと考えるとわかりやすいです。
楕円のデータを持つために、SPZファイルであれば1つの点毎に下図のようなデータを持ちます。
スケールX,Y,Zが楕円の大きさとなり、クォータニオンで楕円を回転させています。この楕円のデータを大量に配置して画像を表示します。
gaus202512151_3.jpg

このようにガウシアンスプラットは、ガウス(ぼけた楕円の)分布な点群を、スプラット(飛び散らす)する手法で写真のような描画を実現しています。
gaus202512151_0.jpg

冒頭の足湯の水も、3DGSでは見た目を再現するように楕円を配置し、透明度で透け感を再現、反射もその位置から見た目を再現するように楕円を配置し、水の反射や水面の波うっった様子も、光の反射などの処理はせず楕円を配置して自然な見た目を再現しています。

3DGSの特性

形状を正確に再現できなくても見た目の再現をしてしまおうというアプローチは、様々な現象を起こしますので触れてみます。

通行人が映り込んだ場合

下図は、金の鳩をスキャン中に人が映り込んだケースです。
最初は人らしい標示がありますが、視点を移動するとこの人物は消えてしまいます。
Adobe Express - XRmeetUpAichi通行人1.gif

Babylon.jsのPlaygroundで、マテリアルのプロパティにある、「Need depth pre-pass」をONにするとガウスのボカシが無い状態で3DGSの楕円を表示します。人物の部分がどのようになっているか見てみましょう。
#Adobe Express - XRmeetUpAichi通行人2.gif

このモードでも人物がそれらしく表示されている角度からはそれらしく見えますが、消えてしまっている角度からは楕円がとても細長く、平べったく表示されていることが確認できます。
gaus202512151_4.jpg

イメージとしては下図のような状態ですね。撮影時に人物がいた角度からは、人物が見えるように楕円の面が見えるように、人物が立ち去った際に撮影した角度からは何も表示しないように、楕円のサイズや角度を調整して特定の方向からは殆ど楕円が表示されないように配置して特定の角度から見えるような再現をします。
gaus202512151_5.jpg

屋外から屋内を撮影した場合

もうひとつ、日中に建物の屋外と屋内を撮影した場合の例です。
日中の屋外は明るいためカメラのISOが調整され、入り口の部分は黒く映ってしまいます。
gaus202512151_6.jpg

ところが建物の入り口から中に入ると周囲が屋外より暗くなるためISOが再度調整されて部屋の内部も見えるようになります。
gaus202512151_7.jpg

外から見たら入り口が黒くて中が見えず、室内に入ると内部が見えるという状況を再現する為に、暖簾のように入口に黒い靄を作成して両方の見た目を再現しようとします。
gaus202512151_8.jpg

室外から室内に入るようにカメラを動かすと以下のようになります。
Adobe Express - MR_Aichi_Asahi1.gif

このように3DGSは撮影した場所からの見た目を再現するため、時に特殊な表現をするケースがあります。
これについてはまた次回、操作してみましょう。

遠くの真っすぐ生成出来ているように見える柱

また、3DGSではフォトグラメトリが苦手としていた直線の柱の再現もこのようにされます。
gaus202512151_10.jpg

ただし、それは撮影した位置から見た場合であって、柱がもし一方こうだけからしか撮影していなかった場合(今回は、金の鳩の周りをぐるっと回っただけで柱はほぼ1方向からしか撮影していません)
撮影した場所から離れて柱を見た場合、下図は金の鳩から離れた場所から柱を見た場合ですが直線になっていません。撮影した場所からの見た目は再現するものの、撮影箇所からの奥行が計測できないためこのような結果になっています。
gaus202512151_11.jpg

フラワームーブメントについて

フラワームーブメントは、対象物の周りを花弁のように遠近移動しつつ一周するスキャン方法です。
ナイアンテック社のブログで紹介されていた手法ですが、フラワームーブメントがなぜ綺麗にスキャンできるのかを簡単に見てみます。
gaus202512151_13.jpg

下図はオフィスビルを、横に移動しながら撮影したデータから生成したものです。
左側は、撮影した場所付近から表示した場合、右側が撮影していないちょっと斜めに移動した場所から表示した結果です。撮影した場所からの再現はできていますが撮影していない場所からの表示は、かなり乱れています。
gaus202512151_14.jpg

つづいて下図は、同じビルを前後しながら横に移動して撮影した場合です。
撮影した場所からも、撮影した場所から少し斜めに移動してみた場合どちらもそれなりの見た目を再現できています。
gaus202512151_15.jpg

結果の精度に差が出た理由を下図に示します。
撮影角度が狭いと3DGSの楕円が奥行方向に配置する際の誤差が出てしまい、結果さきほどのビルのように乱れてしまいます。フラワームーブメントでは撮影角度を増やす事につながり、結果、奥行の誤差を低減させることができます。
gaus202512151_16.jpg

このように、3DGSは様々な特性があることがわかります。

次回は不要な通行人や、入り口のブラックノイズをBabylon.jsで編集する方法について記載する予定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?