CityGaussian: ガウシアンを活用したリアルタイム高品質・大規模シーンレンダリング
(dekuliutesla.github.io)- CityGaussian(CityGS) は、3D Gaussian Splatting(3DGS)を都市規模のシーンへ拡張し、学習効率とリアルタイム探索品質の両立を狙ったECCV 2024の手法
- 大規模シーンを一度に扱うのが難しいという制約を、分割統治学習と詳細度(LoD) 戦略で分けて解決
- グローバルなシーン事前情報と適応的な学習データ選択を活用し、ブロックごとの学習結果をより効率的に整合させ、滑らかに融合
- 融合したGaussian primitiveを圧縮して複数の詳細度を作成し、レンダリング時にはブロック単位で適切な詳細度を選択・集約
- LoDなしでMatrixCityを2,500万個のGaussianで表現するとA100で18 FPSにとどまるが、LoDを適用したCityGSは平均36 FPSでリアルタイムレンダリングを達成
大規模3DGSのための学習・レンダリング構造
- 3D Gaussian Splatting(3DGS)は、リアルタイム3Dシーン再構成と新規視点合成で強みを示してきたが、大規模シーン学習とさまざまなスケールでのリアルタイムレンダリングは依然として負荷が大きい
- CityGaussianはこの問題を2段階に分けて扱う
- 分割統治学習: 大規模シーンをブロック単位に分割し、効率的に学習する
- LoD戦略: 観察スケールに合わせて必要な詳細度だけを使い、レンダリング速度を高める
- グローバルなシーン事前情報と適応的な学習データ選択が学習効率を高め、分離されたシーン断片をより自然に融合できるようにする
- 融合したGaussian primitiveは圧縮プロセスを経て、複数の詳細度で構成される
- レンダリング段階では、ブロックごとの詳細度選択と集約戦略を用いることで、複数のスケールでも高速な画面生成を可能にする
1件のコメント
Hacker Newsのコメント
動画のデータセット名が Matrix city であることを見ると、数年前に公開された Unreal Engine 5 の Matrix デモから抽出された可能性が高い
視点が非常によく似ているので写真のようなリアリズムはあるが、実際の写真から来たものではなさそう
さらに調べたところ、その通りだった: https://city-super.github.io/matrixcity/
面白いことに、そうだとすると元記事は実物を再構成したものを、さらに再構成していることになる
MatrixCity のマップは別物だが、Matrix Awakens のマップとある程度似ている。Matrix Awakens プロジェクトのテックリードが書いた [3] このページの設計分析でも確認できる
さらに踏み込んで [4] GitHub コードベースの MatrixPlugin セクションを見ると、city-sample プロジェクトを使ったと明記されている
[1] https://www.unrealengine.com/marketplace/en-US/product/city-...
[2] https://www.unrealengine.com/marketplace/en-US/learn/city-sa...
[3] https://quentinmarmier.artstation.com/projects/xYeKNO
[4] https://github.com/city-super/MatrixCity
そのため NeRF や Gaussian Splatting の学習が少し楽になる。カメラ姿勢の最適化誤差がないからだ
初期の NeRF 論文が Blender でレンダリングした有名な黄色い Lego 掘削機を使った理由も同じ
Matrix city のようなシーンなら、データを再現するために長時間かけて学習する必要はなさそう
週末に Google Maps 3D タイルメッシュと Gaussian Splat を組み合わせてみたが、完全に同じではないものの、効果はかなり似ていて有用だった
コードがリンクされている例 1: https://twitter.com/kfarr/status/1773934700878561396
例 2: https://twitter.com/3dstreetapp/status/1775203540442697782
1つ目のリンクでは開発者ツールにエラーが出る
Uncaught (in promise) Error: Failed to fetch resource [https://tile.googleapis.com/v1/3dti](<https://tile.googleapis.com/v1/3dti>)...aframe-loader-3dtiles-component を見てみるつもり
「平均速度は 36 FPS(A100 でテスト)」ということは、8,000ドルの GPU があればリアルタイムという意味らしい
グラフィックス論文がリアルタイム速度を達成したと言っている場合、本当にリアルタイムなのか、それとも「お金で買える最も高価なハードウェア上で 640x480 20fps」なのか、常に確認し直す必要がある
基準を十分に下げれば何でもリアルタイムになり得る
バーチャルプロダクションのような用途には使い道が出てくるかもしれないが、モバイル向けではなさそう
https://www.techpowerup.com/forums/attachments/all-cards-png...
10年前のノートPCでも、さらには GPU なしでも動かせるものが欲しいなら https://github.com/pierotofy/OpenSplat を見てほしい。私が作ったものだ
なので乗り越えられない問題のようには見えない
3D Gaussian Splatting が行き止まりではないと、誰か説得してくれないだろうか
レンダリングは1桁倍のレベルで遅すぎるし、データも1桁倍のレベルで大きすぎる。ラスタライズとレイトレーシングの対立をまた見ているような気がする
ラスタライズは常にレイトレーシングより速いだろうし、レイトレーシングが10倍速くなればラスタライズも10倍速くなるだろう
Gaussian の点群から従来型のジオメトリやマテリアルを生成するのは面白いかもしれない。ただ、フォトグラメトリはもうかなり前から存在している
巨大な都市をスプラットでリアルタイムレンダリングしようとするのは、「正しい方向」には感じられない
かっこよくて楽しく、興味深くはあるが、実際に有用になるのかはよく分からない。専門家ではないので、真面目に聞いている
現在の研究の大半は性能に焦点を当てておらず、圧縮を含む統合フォーマットの合意すらまだない
最適化の余地は非常に明白で、複数のデバイスに合わせて調整するのも簡単だ。点群LODやメッシュカリングに似ている
スプラット性能はビューアの一時的な競争優位になり得るが、動画のデコードや他の3D標準がオープンソースとして普及したように、数年以内に大半のデバイスで高品質・高フレームレートのスプラット表示が基本条件になる可能性が高い
次の問いは、これをどこで使うのかということだ
ブラウザで100fps以上: https://current-exhibition.com/laboratorio31/
900fps: https://m-niemeyer.github.io/radsplat/
従来型のエンジンには30年分の研究開発が蓄積されているので、ツールや最適化が追いつくには時間がかかるだろう
ただし論文がどこから出ているかを見ると Apple と Meta が多く、両社が推しているメタバース/空間コンピューティング時代を動かす技術に見える
iPhone の動画のような非常に低い制作費のコンテンツを3D環境へ移せる能力は、従来手法に関する多くの研究開発を押しのけるだろう
薄い構造物や髪の毛のような微細なディテールをキャプチャするのも非常に難しい。3DGS はそうした部分に強い
現在の弱点を改善する研究も進んでおり、従来のグラフィックスパイプラインで使えるメッシュ抽出方法も含まれている
フォトグラメトリは表面データがきれいな場合にしかうまく機能しないが、Gaussian Splat は毛、植生、粒子、粗い表面のような半ボリュームデータに強い
光沢・反射面、細分化サーフェス的な性質が強いボリューム、視点依存性の大きいマテリアルにもよく合う
完全な3D写真に相当する用途ならかなりクールで、十分に正当なユースケースだ
3Dゲームエンジン向けなら、基本プリミティブをゲームエンジンが必要とする形で動的に扱うのは難しいと思う。試みは続くだろうが、この観点では Gaussian は有用な中間表現というより最終レンダリングフォーマットに近く見える
エンジンで実用的に使うには、その間を埋める何か別のものが発明される必要があり、まだ多くの疑問が残っている
他の用途は分からないが、世の中は3Dゲームと視覚効果だけで成り立っているわけではない
Gauss の名前が付いたものは非常に多く、Gaussian splattingのように新しくも付けられ続けているのを見ると、Gauss がどれほど多くの分野に影響を与えたのか、あらためて面白く感じる
直接発明したわけではないが、その数学には大きく貢献したということだ
https://en.wikipedia.org/wiki/Monte_Carlo_(disambiguation)
「Science and Technology」の項目だけでも8個ある
どのライセンスで公開されるのか楽しみだ
これを使ったオープンソースゲームを見てみたい
三角形メッシュの代替として有望に見えたものの、効率的にアニメーションさせる方法がないと分かって消えていった事例は歴史上たくさんある
点群内のオブジェクトには「椅子、テーブル、人」のような内在的メタデータがないため、どんなインタラクションも非常に困難だ
不可能ではないが、現時点では実用的ではない
さらに、リアルタイムレンダリングにそれほど最適化されているわけでもない。多くの点が枝刈りされていたとしても、低解像度のメッシュを使うほうがはるかに効率的だ
これは Cities: Skylines のようなものより大きく良く見えるわけではない
ズームインもズームアウトもなく、常に非常に限られたフレームだけを見せているが、自分は何か見落としているのだろうか?
論文は MatrixCity を繰り返し参照しており、上の別の人が見つけた https://city-super.github.io/matrixcity/ も完全な合成データだと明記している
自分の理解では Unreal Engine から抽出されたものだ
pygameで学習中なのですが、ゲームにモーションブラーをどう入れるのか気になります
例えばpygameでMarioを作るとき、Marioがジャンプしたらぼやけて見えるようにしたいです
9個のピクセルの平均を取って、ぼやけたMario版を作ることはできそうですが、他のゲームでも普通そうしているのかは分かりません
多くのゲームはモーションブラーなしでも非常に鮮明なので、実際に使われているのか気になります
映画ではかなり大きな要素ですし、映画的なモーションブラーを得るには25fpsで撮影する必要がある、という点も思い浮かびます
つまり各オブジェクトの速度を計算して色としてレンダリングし、その後のポストプロセス段階でブラー効果の強さと方向を決めるために使います
カメラ基準の動きが必要な場合もあります。Marioならおそらく不要かもしれませんが、FPSではカメラが前に動くときに画面の端がぼやけてほしいはずです
関連資料: https://city-super.github.io/octree-gs/
より大きなシーンを3D Gaussiansでレンダリングするかなり高度なアプローチなので、コードが公開されたら早く試してみたいです