私がフォトグラメトリという技術の実務へ本格的に取り組み始めたのは、今から5年以上前であり、6~7年になるかと思います。著名な出版社やアーティスト関連の案件、一方で細かい案件ではギャラリー向け展示品や教育機関向け教材用3Dモデルなどに係わってきました。

フォトグラメトリの歴史を大まかに振り返ってみますと、そもそも古くから存在する技術ではありますが、2015年以降、Autodesk社のReCapやCapturing Reality社のRealityCapture、Agisoft社のPhotoScan(現Metashape)といった関連ソフトウェアが注目を集めドローンを活用した大規模エリアの三次元モデル化が従来に比べて迅速かつ容易に可能となりました。フォトグラメトリの技術は急激に一般ユーザー層へ広まり、ゲーム業界や映像制作、考古学、建築など、幅広い分野で利用されるようになったと記憶しています。

2021年3月にはCapturing Reality社がEpic Gamesに買収されたことも大きな話題となり、フォトグラメトリを含む3Dコンテンツ制作プロセスの統合的なソリューションとして大きく前進しました。もうすべてEpicです。

ご存じのように、フォトグラメトリは一般的な手作業による3Dモデリングアプローチとは異なり、多数の写真から視点差分を解析して三次元構造を自動的に復元する計算処理を中心とした技術です。一見モデリングの作業とは対極的に映りますが、最終的な3Dモデルの品質や美しさを左右する要因としては、やはり従来のモデリング技術およびそれに付随する編集作業(リトポロジーやテクスチャリングなど)をどのように組み合わせるかが極めて重要となります。

事実としてスマートフォンやWeb、あるいはスタンドアローンで動かす場合やゲームエンジン、AR/VRアプリに組み込む場合を考慮しますとローポリ化や必要に応じたテクスチャの調整は不可欠です。さらに広告用途や演出意図に沿って一部領域の形状を修正・強調したいケースも多々あります。いかにフォトグラメトリが高精度の三次元復元を可能にしても、最終的に実務へ活かすためにはモデリングやテクスチャ編集、さらにはリトポなどの知識・ノウハウが密接に連携して初めて成立します。

そのような背景の中、2020年に登場したNeRF(Neural Radiance Fields)は、従来手法を大きく凌駕する写実性と多様な適用可能性を提示し、屋内外問わず複雑なオクルージョンを含むシーンに対して高品質なビュー合成を実現しました。フォトグラメトリの苦手とする金属や水面、ガラスといった形状も3D化できるという点で大きく注目を集めました。

しかしNeRFは学習プロセスの反復回数が多く、膨大な計算リソースを必要とするため、モバイル機器や低スペックな環境ではリアルタイム動作が困難です。また、メッシュやテクスチャーのように細部を柔軟に修正することが難しいのも課題として挙げられます。私自身もNeRFに注目して準備はしていたものの、業務で活用するには至らず個人的な検証レベルで止まっていたのが実情です。

そして2023年には3D Gaussian Splattingという衝撃的な手法が登場しました。カメラビュー上に投影したガウシアン分布をスプラットしていくことで三次元表現を実現する手法であり、NeRFに比べて計算が高速化し、ブラウザー上でも軽量に描画できる特性があります。表現力や実写性においてNeRF同等のレベルを備えつつ、高速化やリアルタイム化へ取り組みやすい構造が特徴です。NeRFというニューラルレンダリング技術にガウシアンを活用したアプローチが統合されることで、いよいよ実用的な段階に入ってきました。

この3D Gaussian Splattingは、高効率かつリアルタイム性を備えたNeRFの進化系といえるものです。技術的には異なるものですがNeRF+Gaussian Splattingとして組み合わせて利用します。2023年にJawset社PostShotが登場し、Windowsアプリとして誰でも簡単に3D Gaussian Splattingを試せる環境が提供されました。特筆すべき点としては、この処理全体がクラウドサービスに頼らず、完全にローカル環境で完結する点でしょう。エンジンの根幹に3D Gaussian SplattingとNeRFが統合され実写シーンを手軽に三次元化するうえで非常に使いやすい設計になっています。

そこから急速に進化を続けAdobe After Effects対応やUnreal Engine用の公式プラグイン、3D Gaussian Splattingのアニメション動作なる4D Gaussian Splattingサポートなどリリースから1~2年足らずながら、Postshotは既に映像制作やゲーム開発のプロから注目され導入事例が増加しています。もう3D Gaussian Splatting=PostShotといっても過言ではないでしょう。

しかし現時点でもJawset社PostShotのライセンスは明確に定義されていません。今後の正式ライセンス仕様やサポート体制の明確化が待たれるところです。Jawset社PostShotで運用を考えている人はこのリスクがあることを忘れてはいけません。Nerfstudioはその点においてライセンス周りが明確に定義されています。安心です。

以上からフォトグラメトリや3D Gaussian Splattingによって作業効率が大きく向上したことは事実ですが、それらの手法だけではどうしても手が届かない領域や微調整が必要なケースが残ります。モデリングの技術しかり、Nerfstudioのようなマニュアルコントロール手法が商用として利用する場合には、ますます重要度を増すと考えています。また現時点でもGaussian Splattingで作成したモデルは、削除などはできるものの、ライティングの反映や細かいテクスチャー修正などは以前苦手です。ツールはあるものの完全な調整はほぼできないという段階です。

資料

Jawset Postshot
https://www.jawset.com/

Nerfstudio
https://docs.nerf.studio/

Autodesk ReCap Pro
https://www.autodesk.com/jp/products/recap/overview

RealityCapture
https://www.capturingreality.com/

Agisoft Metashape
https://oakcorp.net/agisoft/

Epic Games
https://www.epicgames.com/site/ja/home

NeRF(Neural Radiance Fields)
https://www.matthewtancik.com/nerf

3D Gaussian Splatting
https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/

 

話は大きくそれてしまいました。Nerfstudioをセットアップしてゆきましょう。

 

まず環境ですが、22.04にしています。24.04でも動くと思います。たぶん。不安な方は22.04で設定を進めましょう。

Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
PRETTY_NAME=”Ubuntu 22.04.5 LTS”
NAME=”Ubuntu”
VERSION_ID=”22.04″
VERSION=”22.04.5 LTS (Jammy Jellyfish)”
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian

nvidia-smiでGPUを見てみましょう。A6000×2つ装着しましたがNVLINKがなく刺したままです。Gaussian Splatting(Splatfacto)だと2枚別々に上手く動きませんでした。設定の問題かもですがいったん忘れましょう。

+—————————————————————————————+
| NVIDIA-SMI 535.183.01 Driver Version: 535.183.01 CUDA Version: 12.2 |
|—————————————–+———————-+———————-+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA RTX A6000 Off | 00000000:01:00.0 On | Off |
| 30% 36C P8 22W / 300W | 153MiB / 49140MiB | 0% Default |
| | | N/A |
+—————————————–+———————-+———————-+
| 1 NVIDIA RTX A6000 Off | 00000000:4C:00.0 Off | Off |
| 30% 33C P8 17W / 300W | 10MiB / 49140MiB | 0% Default |
| | | N/A |
+—————————————–+———————-+———————-+

はじめはGPUドライバーを削除したほうがよいでしょう。古いNVIDIAドライバーを完全に削除することで、新しいドライバーのインストール時の競合を防ぎます。

sudo apt-get purge nvidia*
sudo apt-get autoremove

適宜安定バージョンを入れます。535は比較的安定したドライバーバージョンです。適宜選択してください。使用しているGPUによっても異なりますから適宜確認してください。

sudo apt-get install -y nvidia-driver-535

システム再起動後、nvidia-smiコマンドでもドライバーが正しくインストールされたか確認します。vidia-cuda-toolkitなどを入れます。nvcc –versionでCUDAコンパイラのバージョンを確認できます。

sudo apt install nvidia-cuda-toolkit
nvcc –version

基本は仮想環境で作業しますのでMiniconda (Linux x86_64) を取得して実行します。

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
chmod +x miniconda.sh
./miniconda.sh
source ~/.bashrc

仮想環境で実行します。Python 3.8の仮想環境を作成し、有効化します。
conda create –name nerfstudio python=3.8 -y
conda activate nerfstudio

最新のpipにアップグレードした後、conda経由でCUDA 11.8.0ツールキットをインストールします。こNerfstudioの依存関係に必要なバージョンです。

python -m pip install –upgrade pip
conda install -c “nvidia/label/cuda-11.8.0” cuda-toolkit

CUDA 11.8に対応した特定バージョンのPyTorchとTorchVisionをインストールします。Nerfstudioとの互換性が確認されています。

pip install torch==2.1.0+cu118 torchvision==0.16.0+cu118 –extra-index-url https://download.pytorch.org/whl/cu118

gitとビルドツールをインストールします。

sudo apt install -y git
sudo apt-get install -y build-essential

g++(C++コンパイラ)が正しくインストールされているか確認します。

which g++
g++ –version

Ninjaはビルドシステムで、C++コードを高速にコンパイルします。tiny-cuda-nnはNerfstudioが使用する高速なCUDA対応のニューラルネットワークライブラリです。

pip install ninja
pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

GitHubからNerfstudioのソースコードをクローンし、そのディレクトリに移動します。

git clone https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio

pipとsetuptoolsを最新バージョンにアップグレードした後、Nerfstudioを編集可能モード(-e)でインストールします。

pip install –upgrade pip setuptools
pip install -e .

インストール確認です。

ns-train splatfacto –help

ヘルプが表示されました。

その2につづく
https://techietechnology.co.jp/2025/03/10/nerfstudio-setup-sono2/