https://morgenrot.net/
フォトグラメトリに本格的に取り組み始めたのは約6~7年前で、出版社やアーティスト関連の案件のほか、ギャラリー展示品や教育用3Dモデルの制作にも携わってきました。
フォトグラメトリは古くからある技術ですが、2015年以降にReCap(Autodesk)、RealityCapture(Capturing Reality)、PhotoScan(現Metashape, Agisoft)などのソフトが登場し、ドローンを用いた大規模な3Dモデル化が一気に身近になりました。その結果、フォトグラメトリは急速に一般ユーザーにも広まり、ゲームや映像、考古学、建築など多くの分野で活用されるようになりました。
2021年3月にはCapturing Reality社がEpic Gamesに買収されたことも大きな話題となり、フォトグラメトリを含む3Dコンテンツ制作プロセスの統合的なソリューションとして大きく前進しました。もうすべてEpicです。
フォトグラメトリは、多数の写真から視差を解析して自動的に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枚別々に上手く動きませんでした。設定の問題かもですがいったん忘れましょう。別の環境ではRTX3090でも同じように動作しました。
+---------------------------------------------------------------------------------------+
| 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 update && sudo apt upgrade -y
sudo apt-get purge nvidia*
sudo apt-get autoremove
適宜安定バージョンを入れます。535は比較的安定したドライバーバージョンです。適宜選択してください。使用しているGPUによっても異なりますから適宜確認してください。システム再起動後、nvidia-smiコマンドでもドライバーが正しくインストールされたか確認します。2025年5月時点では535安定です。
sudo apt-get install -y nvidia-driver-535
sudo reboot
nvidia-cuda-toolkitもインストールします。仮想環境で入れるので不要かもしれません。今回先に入れてしまいました。たぶん不要です。
sudo apt install nvidia-cuda-toolkit
2025年5月時点では以下に続くセットアップで動作しています。最新環境では基本のセットアップが変更されている可能性がありますので、nerfstudioのドキュメントを一読しておくことをお勧めします。本家の方がすべてにおいて正しいはずです。
https://github.com/nerfstudio-project/nerfstudio/
仮想環境で作業しますので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 activate nerfstudioは必要です。自動起動するほどのことではありませんので、再起動したら忘れずにconda activate nerfstudioです。
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.2+cu118 torchvision==0.16.2+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/