NeRF による 3D シーン再構成の基礎
NeRF とは - ニューラルネットワークで 3D シーンを表現する
NeRF (Neural Radiance Fields) は 2020 年に UC Berkeley の研究チームが発表した手法で、複数視点から撮影した 2D 画像群からニューラルネットワークを使って 3D シーンの暗黙的表現を学習します。従来のメッシュやポイントクラウドとは異なり、連続的な 3D 空間を関数として表現するため、フォトリアリスティックな新規視点画像の合成が可能です。ECCV 2020 で Best Paper Honorable Mention を受賞し、3D コンピュータビジョン分野に革命をもたらしました。
基本的なアイデア:
3D 空間の各点 (x, y, z) と視線方向 (θ, φ) を入力として、その点の色 (RGB) と密度 (σ) を出力するニューラルネットワーク F: (x, y, z, θ, φ) → (r, g, b, σ) を学習します。密度は視線方向に依存せず、色は視線方向に依存することで、鏡面反射などの視点依存効果を表現できます。ネットワークは 8 層の MLP (多層パーセプトロン) で構成されます。
従来手法との比較:
- フォトグラメトリ (SfM + MVS): 明示的なメッシュを生成するが、テクスチャの品質に限界がある
- ポイントクラウド: 離散的な点群で表現するため、連続的な表面の再現が困難
- NeRF: 連続的な暗黙表現により、フォトリアリスティックな品質を実現
ボリュームレンダリング - レイマーチングによる画像生成
NeRF は学習した放射輝度場からボリュームレンダリングにより 2D 画像を生成します。カメラから各ピクセルに対応するレイ (光線) を飛ばし、レイ上の点をサンプリングしてネットワークに入力し、得られた色と密度を積分して最終的なピクセル色を計算します。
レンダリング方程式:
レイ r(t) = o + td (o: カメラ原点、d: 方向ベクトル) 上の色 C(r) は以下の積分で計算されます: C(r) = ∫T(t) * σ(r(t)) * c(r(t), d) dt。ここで T(t) = exp(-∫σ(r(s))ds) は累積透過率で、手前の点がどれだけ光を遮るかを表します。実際には離散的なサンプル点で近似計算します。
階層的サンプリング:
NeRF は粗い (coarse) ネットワークと細かい (fine) ネットワークの 2 段階でサンプリングを行います。まず 64 点を均等にサンプリングして粗いネットワークで密度を推定し、密度の高い領域に追加の 128 点を集中的にサンプリングして細かいネットワークで最終的な色を計算します。これにより空の領域での無駄な計算を削減します。
位置エンコーディング:
ニューラルネットワークは低周波関数に偏る傾向があるため、入力座標にフーリエ特徴 (位置エンコーディング) を適用します。γ(p) = [sin(2^0πp), cos(2^0πp), ..., sin(2^(L-1)πp), cos(2^(L-1)πp)] で高周波成分を明示的に入力し、細かいテクスチャの再現を可能にします。
NeRF の訓練プロセス - データ準備からモデル最適化まで
NeRF の訓練には、複数視点の画像とそれに対応するカメラパラメータ (内部パラメータと外部パラメータ) が必要です。訓練はピクセル単位の再構成損失を最小化する形で行われ、シーン全体を 1 つのネットワークに記憶させます。1 シーンにつき 1 モデルを訓練するため、汎化ではなく過学習 (memorization) が目的です。
データ準備:
COLMAP などの SfM (Structure from Motion) ツールで画像群からカメラポーズを推定します。通常 50-200 枚程度の画像が必要で、シーンを様々な角度からカバーする撮影が重要です。カメラの焦点距離、主点、歪み係数などの内部パラメータも必要です。画像間の重複率は 60% 以上が推奨されます。
訓練の流れ:
各イテレーションで訓練画像からランダムにレイをバッチサンプリング (通常 4096 本/バッチ) し、ボリュームレンダリングで予測色を計算します。損失関数は予測色と実際のピクセル色の MSE: L = Σ||C_pred(r) - C_gt(r)||^2 です。Adam オプティマイザで学習率 5e-4 から開始し、指数的に減衰させます。通常 200,000-500,000 イテレーションで収束します。
訓練時間とリソース:
オリジナルの NeRF は 1 シーンあたり NVIDIA V100 で約 1-2 日の訓練が必要でした。MLP は 8 層 x 256 ユニットの比較的小さなネットワークですが、1 ピクセルあたり数百回のネットワーク評価が必要なため、全体の計算量は膨大です。後述の高速化手法でこの問題は大幅に改善されています。
高速化手法 - Instant NGP と 3D Gaussian Splatting
オリジナル NeRF の訓練・推論速度の遅さを解決するため、多数の高速化手法が提案されています。特に Instant NGP と 3D Gaussian Splatting は実用的な速度を実現し、産業応用を可能にしました。
Instant NGP (Neural Graphics Primitives):
NVIDIA が 2022 年に発表した手法で、マルチレベルハッシュエンコーディングにより訓練を数秒-数分に短縮します。空間をマルチ解像度のグリッドに分割し、各頂点に学習可能な特徴ベクトルを配置します。ハッシュ関数で衝突を許容しつつメモリ使用量を制限し、小さな MLP (2 層 x 64 ユニット) で高品質な結果を得ます。RTX 3090 で 5 秒程度の訓練が可能です。
3D Gaussian Splatting:
2023 年に発表された手法で、NeRF の暗黙表現とは異なり、3D ガウシアン (楕円体) の集合でシーンを明示的に表現します。各ガウシアンは位置、共分散行列 (形状)、色、不透明度のパラメータを持ち、微分可能なラスタライザで高速にレンダリングします。訓練は数分で完了し、リアルタイム (30fps 以上) のレンダリングが可能です。
速度比較:
- NeRF (オリジナル): 訓練 1-2 日、レンダリング 30 秒/フレーム
- Instant NGP: 訓練 5 秒-5 分、レンダリング 15ms/フレーム
- 3D Gaussian Splatting: 訓練 5-30 分、レンダリング 7ms/フレーム (リアルタイム)
実践的なワークフロー - 撮影から 3D モデル生成まで
NeRF ベースの 3D 再構成を実際に行うための撮影テクニック、ツール選択、品質向上のコツを解説します。適切なワークフローに従うことで、高品質な 3D シーンを効率的に生成できます。
撮影のベストプラクティス:
対象物を 360 度カバーするように 50-200 枚を撮影します。カメラ間の重複率は 60-80% が理想的で、急激な視点変化は避けます。照明条件は一定に保ち、動く物体 (人、車) はマスクで除外します。スマートフォンでも十分な品質が得られますが、RAW 撮影で露出を固定すると結果が向上します。
推奨ツール:
Nerfstudio はオープンソースの統合フレームワークで、データ処理からモデル訓練、ビューア表示まで一貫したパイプラインを提供します。COLMAP でカメラポーズを推定し、Instant NGP や Nerfacto (Nerfstudio 独自手法) で訓練します。Luma AI や Polycam はスマートフォンアプリとして手軽に NeRF を体験できます。
品質向上のコツ:
- 反射面 (ガラス、金属) は苦手なため、偏光フィルターの使用を検討する
- 薄い構造 (フェンス、植物の葉) は密度推定が困難なため、多めの画像が必要
- 背景を含めて撮影し、後処理でクロップする方が境界のアーティファクトが少ない
- 動画からフレームを抽出する場合、モーションブラーのないフレームを選択する
NeRF の応用と今後の展望 - 産業利用から研究最前線まで
NeRF 技術は研究段階を超え、様々な産業で実用化が進んでいます。不動産、EC、映画制作、自動運転など幅広い分野で 3D コンテンツ生成の革新をもたらしています。
産業応用:
不動産業界ではバーチャルツアーの作成に活用され、物件の 3D ウォークスルーを少数の写真から生成します。EC サイトでは商品の 3D ビューアとして、消費者が任意の角度から商品を確認できます。映画・ VFX 業界では実写シーンの 3D 化により、カメラワークの自由度が飛躍的に向上しています。
動的シーンへの拡張:
D-NeRF や HyperNeRF は時間軸を追加し、動的なシーン (人の動き、流体など) の再構成を可能にします。4D 表現として時間変化する放射輝度場を学習し、任意の時刻・視点からのレンダリングを実現します。ただし訓練データの取得が困難で、マルチカメラシステムが必要です。
テキストからの 3D 生成:
DreamFusion (Google) や Magic3D (NVIDIA) は、テキストプロンプトから 3D オブジェクトを生成します。事前訓練済みの拡散モデル (Stable Diffusion) を SDS (Score Distillation Sampling) 損失で NeRF の最適化に利用し、テキスト記述に合致する 3D 形状を生成します。
今後の課題:
- 大規模シーン (都市規模) への対応: Block-NeRF などの分割手法が研究中
- リアルタイム編集: 生成した 3D シーンの直感的な編集インターフェース
- 少数画像からの再構成: 3-5 枚の画像で高品質な 3D 再構成を目指す研究