JA EN
体系生成モデル
·★ 会員·論文·13分で読めます

3D生成のいま — NeRFからGaussian Splattingまで

3Dは「彫る」ものから「最適化で合わせる」ものになりました。メッシュからNeRF、Gaussian Splattingへの表現の変遷と、2D拡散モデルを審査員に仕立てるSDS蒸留の仕組みを前提知識ゼロから解説。ゲーム・映像の制作現場に持ち込むときの落とし穴まで。

対象textタスクgeneration

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis


彫るのではなく、写真に合わせる

3Dモデルを作る、と聞いて思い浮かぶのはBlenderの画面でしょう。頂点をつまんで引っぱり、三角形を貼り、UVを展開してテクスチャを描く。30年ほとんど変わっていない作り方です。

ここ数年で現れたのは発想の違うやり方でした。空間そのものを、色と濃さを持った霧だと考える。被写体を何十枚か撮った写真があれば、「この霧をどう置けばその全部が説明できるか」を最適化で解ける。彫るのではなく、写真に合うまで濃さを調整する。2020年のNeRF(Neural Radiance Fields、ニューラル放射輝度場)が示した道です。

次に、写真すら要らなくする手が来ます。テキストから画像を作る拡散モデルはもう十分に賢いのだから、それを審査員として使う。適当な3Dをでっち上げてランダムな角度から絵にし、「『赤い革張りの椅子』らしく見えるか」を採点させ、その不満を3D側へ押し戻す。これがScore Distillation Sampling(SDS)です。

何を「3Dデータ」と呼ぶか

生成AIの視点だと、メッシュには困った性質があります。微分が流れない。三角形の数も、どの頂点をつなぐかも、連続的には動かせない離散構造です。「もう少し丸くしたいので頂点を1個増やす」を勾配では書けない。少し動かして良くなった方へ進む、という学習の作法に乗らないのです。

NeRFの答えは、形を持つのをやめることでした。シーンを関数として持つ。座標 (x,y,z)(x,y,z) と視線方向 d\mathbf{d} を入れると、その点の色 c\mathbf{c} と密度 σ\sigma(どれだけ物が詰まっているか)が返るMLPです。中身は重みなので、全部なめらかに動かせます。

NeRF: 光線を積分して1画素を作る

その関数から画像を作る手順はこうです。1画素ごとに光線を1本飛ばし、線に沿って関数を何十回か呼び、返ってきた色を手前から順に混ぜる。

C(r)=tntfT(t)σ(r(t))c(r(t),d)dt,T(t)=exp ⁣(tntσ(r(s))ds)C(\mathbf{r}) = \int_{t_n}^{t_f} T(t)\,\sigma(\mathbf{r}(t))\,\mathbf{c}(\mathbf{r}(t),\mathbf{d})\,dt, \qquad T(t) = \exp\!\left(-\int_{t_n}^{t}\sigma(\mathbf{r}(s))\,ds\right)
(1)

r(t)\mathbf{r}(t) は光線上の点、tnt_ntft_f は積分の打ち切り位置、σ\sigma は密度、c\mathbf{c} は色、T(t)T(t)透過率で「ここまで光が遮られずに届いた割合」です。要するに「光線上の各点の色を、そこまで生き残った光の割合と、その点の詰まり具合で重み付けして足す」。手前に濃い物があれば TT が小さくなり、奥は寄与しない。物陰が見えないという当たり前が、この掛け算1つで出てきます。実装では積分をサンプル点の和にしますが、そうすると中身は普通のアルファ合成です。この形は後でもう一度出てきます。

学習は、手持ちの写真と同じカメラ位置からレンダリングして実写との二乗誤差を減らすだけ。汎化を目指していないのがポイントで、1シーンにわざと過剰適合させます。原論文の報告では学習にGPU 1枚で1〜2日、1枚の描画に数十秒。これを秒〜分に縮めたのが多重解像度ハッシュ符号化(Instant-NGP)です。

ここで前提をひとつ補っておきます。この最適化はカメラの位置と向きが分かっていることを出発点にします。写真の束を渡されても「どこから撮ったか」が分からなければ、光線をどの向きに飛ばせばいいのかが決まらないからです。実際には、まず写真集合からSfM(Structure from Motion、写真同士の特徴点の対応関係から撮影位置を逆算する古典的な手法)でカメラ姿勢を推定し、それを固定したうえで色と密度だけを学習します。つまりNeRF以降の3D再構成は、姿勢推定という別系統の技術の上に乗っているわけです。

この依存関係は軽くありません。推定した姿勢が数センチ・数度ずれると、同じ面が別の場所にあると教えられることになり、モデルはその矛盾を「薄くぼやけた霧を宙に置く」ことで辻褄合わせします。再構成でよく見るfloaters(浮遊物)の正体の多くはこれです。後の節で撮影の作法にこだわるのも、レンダリング側をいくら調整しても、姿勢が崩れていれば取り返せないからです。

FIG 1NeRFも後述のGaussian Splattingも、中身は「1シーンぶんの勾配降下」です。学習率を上げると速く沈み、上げすぎると谷を飛び越えて発散する — 3D再構成で最初に踏む地雷がこれです

NeRFが遅い理由は明快です。1画素あたり数十回のMLP呼び出し。画素が100万個なら数千万回になります。2023年のGaussian Splattingは逆に舵を切りました。関数をやめ、明示的な粒に戻す。ただし粒は点ではなく、向きと伸び方を持つ3次元の楕円ガウスです。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

参考文献

  1. NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis. arXiv:2003.08934論文ページ·PDF
  2. 3D Gaussian Splatting for Real-Time Radiance Field Rendering. arXiv:2308.04079論文ページ·PDF
  3. DreamFusion: Text-to-3D using 2D Diffusion. arXiv:2209.14988論文ページ·PDF
  4. Magic3D: High-Resolution Text-to-3D Content Creation. arXiv:2211.10440論文ページ·PDF
  5. ProlificDreamer: High-Fidelity and Diverse Text-to-3D Generation with Variational Score Distillation. arXiv:2305.16213論文ページ·PDF
  6. Instant Neural Graphics Primitives with a Multiresolution Hash Encoding. arXiv:2201.05989論文ページ·PDF

本記事は上記論文の本文にもとづいて執筆しています。数値・主張は原典を優先してください。

コメント

コメントにはログインが必要です