1 ポイント 投稿者 GN⁺ 2024-04-03 | 1件のコメント | WhatsAppで共有
  • 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は圧縮プロセスを経て、複数の詳細度で構成される
  • レンダリング段階では、ブロックごとの詳細度選択と集約戦略を用いることで、複数のスケールでも高速な画面生成を可能にする

性能と公開資料

  • LoDを適用しない場合、MatrixCityシーンは2,500万個のGaussianで表現され、A100基準で18 FPSと測定される
    • この速度では快適なローミング体験を提供するのは難しいと評価されている
  • LoDを適用したCityGSは大きく異なるスケールでもリアルタイムレンダリングが可能で、A100で平均36 FPSと測定される
  • 大規模シーンの実験でCityGSは最先端水準のレンダリング品質を示し、さまざまなスケールの大規模シーンで一貫したリアルタイムレンダリングをサポートする
  • 公開資料

1件のコメント

 
GN⁺ 2024-04-03
Hacker Newsのコメント
  • 動画のデータセット名が Matrix city であることを見ると、数年前に公開された Unreal Engine 5 の Matrix デモから抽出された可能性が高い
    視点が非常によく似ているので写真のようなリアリズムはあるが、実際の写真から来たものではなさそう
    さらに調べたところ、その通りだった: https://city-super.github.io/matrixcity/

    • Epic は以前、フォトグラメトリ企業の Quixel を買収しているので、Matrix city を作る際に写真スキャンアセットのライブラリを使った可能性が高い
      面白いことに、そうだとすると元記事は実物を再構成したものを、さらに再構成していることになる
    • The Matrix Awakens デモの一部アセットは Unreal Engine マーケットプレイスで別パックとして公開されている: [1] マップ、[2] 建物・群衆・車両
      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 掘削機を使った理由も同じ
    • 完全にモデリングされた Unreal Engine のシーンがあるなら、スプラットを作るときに 学習ステップなしで生成できないのか気になる
      Matrix city のようなシーンなら、データを再現するために長時間かけて学習する必要はなさそう
    • すべての動画が Matrix City というわけではなく、一部は 実在の場所
  • 週末に Google Maps 3D タイルメッシュと Gaussian Splat を組み合わせてみたが、完全に同じではないものの、効果はかなり似ていて有用だった
    コードがリンクされている例 1: https://twitter.com/kfarr/status/1773934700878561396
    例 2: https://twitter.com/3dstreetapp/status/1775203540442697782

    • 本当にすごいが、コードのある GitHub があるのか気になる
      1つ目のリンクでは開発者ツールにエラーが出る
      Uncaught (in promise) Error: Failed to fetch resource [https://tile.googleapis.com/v1/3dti](<https://tile.googleapis.com/v1/3dti>;)...
    • Aframe と OSM の建物フットプリントでいろいろ試していたが、この方法のほうがずっと良さそう
      aframe-loader-3dtiles-component を見てみるつもり
    • xitter を使っていない人のために、ここにも コードリポジトリのリンクを貼ってもらえるとうれしい
  • 「平均速度は 36 FPS(A100 でテスト)」ということは、8,000ドルの GPU があればリアルタイムという意味らしい

    • 昔ながらの SIGGRAPH 的リアルタイム
      グラフィックス論文がリアルタイム速度を達成したと言っている場合、本当にリアルタイムなのか、それとも「お金で買える最も高価なハードウェア上で 640x480 20fps」なのか、常に確認し直す必要がある
      基準を十分に下げれば何でもリアルタイムになり得る
    • LOD とブロックを使う初の 3DGS に見えるので、最適化の余地はあるかもしれない
      バーチャルプロダクションのような用途には使い道が出てくるかもしれないが、モバイル向けではなさそう
    • 昔の GPU ベンチマークも、最初に出たときは 10fps で動いていたが、時間が経つにつれて変わっていったことを思い出す
      https://www.techpowerup.com/forums/attachments/all-cards-png...
    • 残念ながら、多くの 3DGS/NeRF 研究はこのようなものだ
      10年前のノートPCでも、さらには GPU なしでも動かせるものが欲しいなら https://github.com/pierotofy/OpenSplat を見てほしい。私が作ったものだ
    • 次世代のコンシューマ向け GPU である 5090 は A100 より2倍速く、しかも 8,000ドルではないだろうと思う
      なので乗り越えられない問題のようには見えない
  • 3D Gaussian Splatting が行き止まりではないと、誰か説得してくれないだろうか
    レンダリングは1桁倍のレベルで遅すぎるし、データも1桁倍のレベルで大きすぎる。ラスタライズとレイトレーシングの対立をまた見ているような気がする
    ラスタライズは常にレイトレーシングより速いだろうし、レイトレーシングが10倍速くなればラスタライズも10倍速くなるだろう
    Gaussian の点群から従来型のジオメトリやマテリアルを生成するのは面白いかもしれない。ただ、フォトグラメトリはもうかなり前から存在している
    巨大な都市をスプラットでリアルタイムレンダリングしようとするのは、「正しい方向」には感じられない
    かっこよくて楽しく、興味深くはあるが、実際に有用になるのかはよく分からない。専門家ではないので、真面目に聞いている

    • 可能性はものすごく多い。Unreal Engine で使われている特許技術に似ているが、別のアプローチだ
      現在の研究の大半は性能に焦点を当てておらず、圧縮を含む統合フォーマットの合意すらまだない
      最適化の余地は非常に明白で、複数のデバイスに合わせて調整するのも簡単だ。点群LODやメッシュカリングに似ている
      スプラット性能はビューアの一時的な競争優位になり得るが、動画のデコードや他の3D標準がオープンソースとして普及したように、数年以内に大半のデバイスで高品質・高フレームレートのスプラット表示が基本条件になる可能性が高い
      次の問いは、これをどこで使うのかということだ
    • 1桁倍のレベルで遅いわけではない。今でも Unreal や Unity で200〜400fpsは簡単に出る
      ブラウザで100fps以上: https://current-exhibition.com/laboratorio31/
      900fps: https://m-niemeyer.github.io/radsplat/
      従来型のエンジンには30年分の研究開発が蓄積されているので、ツールや最適化が追いつくには時間がかかるだろう
      ただし論文がどこから出ているかを見ると Apple と Meta が多く、両社が推しているメタバース/空間コンピューティング時代を動かす技術に見える
      iPhone の動画のような非常に低い制作費のコンテンツを3D環境へ移せる能力は、従来手法に関する多くの研究開発を押しのけるだろう
    • フォトグラメトリは反射面のような特定のマテリアルで苦戦する
      薄い構造物や髪の毛のような微細なディテールをキャプチャするのも非常に難しい。3DGS はそうした部分に強い
      現在の弱点を改善する研究も進んでおり、従来のグラフィックスパイプラインで使えるメッシュ抽出方法も含まれている
    • 現実世界を写実的な3Dとして再構成するリアリティという面では、現時点で匹敵するものはほとんどない
      フォトグラメトリは表面データがきれいな場合にしかうまく機能しないが、Gaussian Splat は毛、植生、粒子、粗い表面のような半ボリュームデータに強い
      光沢・反射面、細分化サーフェス的な性質が強いボリューム、視点依存性の大きいマテリアルにもよく合う
    • 何に対する行き止まりなのかが重要だ
      完全な3D写真に相当する用途ならかなりクールで、十分に正当なユースケースだ
      3Dゲームエンジン向けなら、基本プリミティブをゲームエンジンが必要とする形で動的に扱うのは難しいと思う。試みは続くだろうが、この観点では Gaussian は有用な中間表現というより最終レンダリングフォーマットに近く見える
      エンジンで実用的に使うには、その間を埋める何か別のものが発明される必要があり、まだ多くの疑問が残っている
      他の用途は分からないが、世の中は3Dゲームと視覚効果だけで成り立っているわけではない
  • Gauss の名前が付いたものは非常に多く、Gaussian splattingのように新しくも付けられ続けているのを見ると、Gauss がどれほど多くの分野に影響を与えたのか、あらためて面白く感じる
    直接発明したわけではないが、その数学には大きく貢献したということだ

  • どのライセンスで公開されるのか楽しみだ
    これを使ったオープンソースゲームを見てみたい

    • 性能とは別に、ゲームで実際に使うには、まずシーンを動的にする一般化された方法を見つける必要がある
      三角形メッシュの代替として有望に見えたものの、効率的にアニメーションさせる方法がないと分かって消えていった事例は歴史上たくさんある
    • これは基本的に奇妙な形の点で構成された非常に大きな点群なので、本当に難しい
      点群内のオブジェクトには「椅子、テーブル、人」のような内在的メタデータがないため、どんなインタラクションも非常に困難だ
      不可能ではないが、現時点では実用的ではない
      さらに、リアルタイムレンダリングにそれほど最適化されているわけでもない。多くの点が枝刈りされていたとしても、低解像度のメッシュを使うほうがはるかに効率的だ
  • これは Cities: Skylines のようなものより大きく良く見えるわけではない
    ズームインもズームアウトもなく、常に非常に限られたフレームだけを見せているが、自分は何か見落としているのだろうか?

    • 他の返信は、実際には考えたり調べたりせずに答えているようだ
      論文は MatrixCity を繰り返し参照しており、上の別の人が見つけた https://city-super.github.io/matrixcity/完全な合成データだと明記している
      自分の理解では Unreal Engine から抽出されたものだ
    • これはゲームレンダリングではなく、3D再構成
    • 写真からレンダリングしたものだと思う
    • これはゲームエンジンではなく、実際の写真を Gaussian 3D 視点に変換したものだ
  • pygameで学習中なのですが、ゲームにモーションブラーをどう入れるのか気になります
    例えばpygameでMarioを作るとき、Marioがジャンプしたらぼやけて見えるようにしたいです
    9個のピクセルの平均を取って、ぼやけたMario版を作ることはできそうですが、他のゲームでも普通そうしているのかは分かりません
    多くのゲームはモーションブラーなしでも非常に鮮明なので、実際に使われているのか気になります
    映画ではかなり大きな要素ですし、映画的なモーションブラーを得るには25fpsで撮影する必要がある、という点も思い浮かびます

    • オブジェクトのモーションベクトルを別のレンダーテクスチャにレンダリングすればよいです
      つまり各オブジェクトの速度を計算して色としてレンダリングし、その後のポストプロセス段階でブラー効果の強さと方向を決めるために使います
      カメラ基準の動きが必要な場合もあります。Marioならおそらく不要かもしれませんが、FPSではカメラが前に動くときに画面の端がぼやけてほしいはずです
  • 関連資料: https://city-super.github.io/octree-gs/

  • より大きなシーンを3D Gaussiansでレンダリングするかなり高度なアプローチなので、コードが公開されたら早く試してみたいです