保全・メンテナンスのDXを実現するPinspectソリューション

【テックノート】今話題のGaussian Splattingを点群データと一緒に見たい!Potreeでのハイブリッド表示に挑戦

GaussianSplattingを点群データと一緒に見たい

みなさんこんにちは。MONOLIST開発チームです。

唐突ですが、ガウシアンスプラッティング流行ってますね。当社のWeb点群ビューワー『MONOLIST(モノリス)』上でも、ガウシアンスプラッティングを点群データと一緒に表示できたら面白いのではないか、と思って試してみました。

「いきなりで意味がわからない!」という方、大丈夫です。まずはそれぞれの技術について、ざっくりと説明していきます。

目次

点群とは

まずは従来の3D表現技術である「点群」について説明します。

点群とは、その名の通り、たくさんの点を集めたものです。日本語の名前そのままなので、比較的イメージしやすいでしょう。

一つひとつの点には、3次元の位置情報(X, Y, Z)と、色情報(R, G, B)がついています。これが何万点、何億点と集まることで、現実の物体をデジタル上で表現できます。

しかし、これは非常に効率が悪い表現方法です。通常のコンピュータグラフィックスでは、ポリゴンと呼ばれる三角形などの面を使って物体を表現し、圧倒的に少ないデータ量で美しい映像を作り出します。映画やゲームのグラフィックが目覚ましい進化を遂げてきたのはそのためです。

では、なぜそんな効率の悪い点群が使われるのでしょうか。それは、現実世界の物体を撮影して、そのままデジタルデータとして扱えるという大きなメリットがあるからです。コンピュータやモバイルデバイスの進化により、効率が悪くても力技で処理できるようになった側面もあります。もちろん、その後のさまざまな工夫によって点群は進化を遂げており、そのひとつが後述するWebブラウザでの表示技術です。

点群データの入手方法

点群データは、どうやって手に入れるのでしょうか。

比較的身近なのは、スマートフォンのアプリを使う方法です。デバイスはiPad Proのような上位機種が必要になりますが、LiDARと呼ばれる距離センサーを使うアプリなら、簡単に点群データを作成できます。

また、さまざまなメーカーから多種多様なスキャナーが販売されています。こちらは価格的にも技術的にも手軽とは言えませんが、非常に精度の高い点群データが得られます。専門の撮影サービスを利用するのもひとつの手です。

さらに、自治体が点群データを提供しているケースもあります。個人や単体の企業では難しい非常に広範囲なデータが提供されており、建物や道路、地形といった大きな構造物の点群データを利用することができます。

なお、今回は静岡県が提供する「VIRTUAL SHIZUOKA 静岡県 富士山南東部・伊豆東部 点群データ」の一部を使用しています。「VIRTUAL SHIZUOKA」とは、静岡県が県内全域の3次元データをオープンデータとして公開しているプロジェクトで、誰もが自由に活用できる点が特徴です。

点群を見る

手に入れた点群データを見るための方法も増えてきました。PC用の3D系アプリケーションは、点群表示への対応が進んでいます。とりあえず見てみたいという方には、CloudCompareというオープンソースのソフトウェアが手軽で機能も豊富なのでおすすめです。

ただ、点の数が増えると、読み込みに時間がかかったり、PCのメモリが足りずにうまく動かなかったりすることがあります。

そのような大きな点群データについては、データをクラウド上に置いてWebブラウザで表示するタイプのビューワーが現在のトレンドです。Markus Schütz氏のPotreeはその代表例であり、先駆者です。これは、データを分割し、必要な部分だけを読み込む技術的な工夫が施されています。おかげで、ごく普通のPCやタブレットでも、数億点の点群をスムーズに表示できるようになりました。Webアプリケーションなので、インストール不要な点も魅力的です。

▼この記事と合わせて読んでほしい記事
測量会社のお悩み解消!点群データ「閲覧」の最適方法とは?

当社が開発・提供するWeb点群ビューワー『MONOLISTも、このPotreeをベースにカスタマイズを行い、クラウド上で点群データを管理し、Webブラウザで表示できるようにしています。

1_MONOLIST画面

PotreeベースのWeb点群ビューワー『MONOLIST』の画面

点群の弱点

 点群にも弱点があります。データの大きさという最大の問題は、Potreeやデータ圧縮技術によってかなり解決されました。しかし、もうひとつ別の問題としてリアリティの不足があります。

点群は色と位置を持ちますが、物の表面に書かれた文字のような細かいディテールを再現しようとすると、非現実的な数の点が必要となり、データ容量も膨大になります。

この弱点を補うために、写真や全方向を撮影した360度画像を点群と組み合わせる手法が一般的に使われています。しかし、写真はあくまで特定の場所からの見た目であり、点群のように自由な位置から空間を把握することはできません。3次元の点群と2次元の写真では根本的に異なるため、どうしてもモードを切り替えるような使い方になってしまいます。GoogleマップやMatterportなどは、この切り替えを非常にうまく実現していますが、写真のようなリアリティを持ちながら、3次元的に自由に表示できないか。この課題を解決しうる新しい技術が、今回の主役であるガウシアンスプラッティングです。

ガウシアンスプラッティングとは

私自身も勉強中のため、理解できてないところもありますが、それでもざっくりとしたイメージの説明をしてみます。

 ガウシアンスプラッティング(正式には、3D Gaussian Splatting)は、点群の一種と考えることができます。ただし、各点が単なる点ではなく、ぼんやりと雲のように広がった「3Dガウシアン」(以下、ガウシアン)という要素の集合体です。

このガウシアンには、大きさ、形(丸い/平たい/細長い)、透明度、向きなど、さまざまなバリエーションがあります。色もひとつではなく、見る角度によって変化します。宇宙の銀河や星雲のようなイメージを持っていただくとよいかもしれません。そして点群との大きな違いは、この雲=ガウシアンの数が点群に比べてかなり少ないということです。

「数を減らしたら、リアリティどころではないのでは?」という疑問はもっともです。しかしガウシアンスプラッティングでは、複数の写真からある場所を写したときに、これらのガウシアンが重なった結果が本物の写真に近づくように、それぞれのガウシアンの形や位置、数を調整していきます。これをさまざまな写真について繰り返し行うことで、まるで本物のような見た目を実現するのです。

驚くべきは、光沢や反射など、見る角度によって変化する部分が、まるで本物のように表現される点です。これは、見た目が複数視点の写真に近づくようにガウシアンを調整する、という計算の結果です。

ガウシアンスプラッティングデータを作成する

ガウシアンスプラッティングデータを手に入れるには、複数の写真や動画からPCで計算させるのが一般的な方法です。

しかし今回は、Niantic Spatial社のScaniverseというiOSアプリを使いました。これは、iOSデバイスで誰でも簡単にガウシアンスプラッティングを作成できるアプリです。建物を撮るのは難しいですが、人間サイズくらいの対象物なら、撮影からガウシアンスプラッティングの計算、結果の確認までその場で完了します。iOSでよくぞここまで、と思います。

弊社に近い上野公園でいくつかの対象物を撮影してみましたが、撮影時間は1〜2分に対し、データ処理が3〜10分程度でした。他のアプリに切り替えると失敗することがあったので、通信を切っておくと安心かもしれません。

上野公園の公衆電話

今回の撮影対象(上野公園の公衆電話)

ガウシアンスプラッティングを見る

これも、時代の流れでしょう、PCにインストールが必要なアプリよりも、Webブラウザで動作するGSビューワーが多く存在します。

今回は、Potreeと同じThree.jsをベースにしているmkkellogg氏のGaussianSplats3Dを利用しました。後でPotreeと組み合わせるなら、Potreeと同じThree.jsベースが良さそうだ、というのが選定理由です。

ガウシアンスプラッティングのデータは、PLY形式が原始的なフォーマットとなっていますが、Niantic Spatial社がSPZ形式という圧縮方式を提案して使用を公開していますので、今後の標準となることに期待したいと思います。なお、GaussianSplats3DではPLY形式から独自形式への変換を行ってから表示します。

表示すると、こんな感じです。

2_GaussianSplat3Dビューワー

GaussianSplats3Dビューワー

点群+ガウシアンスプラッティングビューワー

さて、予定文字数をすでにオーバーしているのですが、ここからが今回の本題です。
PotreeとGaussianSplat3Dを合体させます。どちらもThree.jsベースのWebアプリなのでさぞ簡単だろう、という目論見はあっさりと裏切られました。主にThree.js(WebGL/GLSL)のバージョン違いや、バンドル関係が主な頭痛の種でしたが、試行錯誤の末、なんとか動くようになりました。

ということで、いくつかの問題は残っているものの、点群とガウシアンスプラッティングの同時表示ができるようになりました。

動画】PotreeとGaussianSplats3Dによるハイブリッド表示

なお、点群とガウシアンスプラッティングは別の場所のものを組み合わせているので、それっぽく見えるように位置を調整しました。

公衆電話や植え込みは、点群よりもディテールがよく再現されていますね。石碑に刻まれた「正岡子規記念球場」という文字が読めるのも、点群では難しい部分です。

副次的な効果として、Potreeの操作に慣れた自分にとっては、同じ操作方法で視点移動ができるのはかなり快適です。

まとめと今後の展望

点群とガウシアンスプラッティングを同時に表示することで、それぞれの良いとこ取りができますね。点群で完全に自由な位置と角度から空間を把握し、ガウシアンスプラッティングで細かい部分や光沢のような質感といった追加の情報を得ることができます。

一方で、課題もいくつかあります。

まずは点群とガウシアンスプラッティングの位置合わせです。(今回は違う場所のデータを適当に配置しましたが)ガウシアンスプラッティングは各ガウシアンの位置が現実の物体の位置と必ずしも一致しないため、点群との正確な位置合わせが技術的な課題となります。

次に、ガウシアンスプラッティングの原理的な性質として、撮影位置を大きく外れた場所から見ると表示が破綻するという問題があります。どうしても撮影範囲というのは有限なので、範囲外に移動した際にガウシアンスプラッティングの表示を消すなどの工夫が必要です。

また、そもそもガウシアンスプラッティングデータ取得時の前提課題として、大規模な構造物の撮影が挙げられます。今回利用したScaniverseは人間サイズの対象物には非常に有効ですが、大きな構造物となると、ドローンを使用するなど別の撮影方法や計算方法を講じる必要があります。

これらの課題を解決すれば、建築土木、都市計画、文化財のデジタル保存など、様々な分野で役立つツールになるのではないかと期待しています。これからも、ひとつずつ課題を解決しながら、点群とガウシアンスプラッティングの可能性を探っていきたいと思います。当社サービス『MONOLIST』へ組み込みも…ご期待ください!


MONOLISTのWeb点群ビューワーの画面を表示するデバイスの画像。橋の下の構造を3Dで表示しており、メジャーの機能も使われている様子が見える。


MONOLISTのサービス詳細はこちら

本記事内の画像、動画内の点群データは、以下のデータを利用しています。
データ名:VIRTUAL SHIZUOKA 静岡県 富士山南東部・伊豆東部 点群データ
データ提供元:静岡県
ライセンス:CC BY 4.0
データセットURL:https://www.geospatial.jp/ckan/dataset/shizuoka-2019-pointcloud

関連記事

目次