3枚の画像から3D空間を生成できると話題の Gaussian Splatting 系AI「InstantSplat++」を、 WSL + RTX4060Ti 16GB 環境で実際に動かしてみました。 環境構築自体は成功し、3D点群や補間レンダリングの生成まで確認できましたが、 キャラ設定画ではかなり破綻も目立ちました。本記事では、その手順と結果、 そしてハマりどころをまとめます。
はじめに
最近、Gaussian Splatting系の3D生成AIが急速に進化しています。 通常は数十枚以上の画像が必要なことも多いですが、 InstantSplat++ は少ない画像からでも3D空間の復元を試せる研究プロジェクトです。
今回はキャラクター画像の「正面・側面・背面」の3枚を使って、 実際にどこまで3D復元できるのかを検証してみました。 結果として、環境構築と実行までは問題なく通りましたが、 キャラ用途では限界もかなり見えました。
InstantSplat++とは
InstantSplat++ は、少ない画像から3D空間を復元する系統の研究プロジェクトです。 Gaussian Splattingベースで、画像群からカメラ位置や空間構造を推定し、 3D点群を生成します。
- ✔Gaussian Splattingベース
- ✔少数画像でも3D復元を試せる
- ✔補間カメラによるレンダリング動画も作れる
ただし「少ない画像で動く」と「綺麗に再構成できる」は別問題で、 特に今回のようなキャラ設定画は相性が難しい部類です。
実行環境
CPU : Core Ultra 7 265K
GPU : RTX 4060 Ti 16GB
RAM : 96GB
OS : Windows + WSL
CUDA : 12
セットアップ概要
今回は InstantSplat++ 系の実装を使用しました。 リポジトリ名と展開後フォルダ名が異なる場合があるため、 README を見ながら進めるのが安全です。
git clone <使用するリポジトリURL>
cd InstantSplatPP
Python仮想環境
python -m venv venv
source venv/bin/activate
PyTorchインストール
pip install torch torchvision
実際にはCUDA対応版や依存関係の整合が必要になる場合があります。
依存ライブラリ
pip install "numpy<2" "opencv-python<4.12"
CUDA設定
RTX 4060 Ti は Compute Capability 8.9 のため、以下の設定を使用しました。
export CUDA_HOME=/usr/lib/nvidia-cuda-toolkit
export PATH=$CUDA_HOME/bin:$PATH
export TORCH_CUDA_ARCH_LIST="8.9"
⚠ WSL + PyTorch の注意点(LD_LIBRARY_PATH)
WSL環境では、次の設定を入れると CUDA が壊れる場合があります。
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
PyTorch は内部に CUDA ランタイムを持っているため、 システム側 CUDA と競合するケースがあります。 今回の環境ではこの行を設定すると不安定になったため、 最終的には無効化しました。
unset LD_LIBRARY_PATH
⚠ ハマりどころ:GPU待機ループ
WSL環境では、次のように GPU が空いているはずなのに待機ループへ入ることがありました。
No GPU available, waiting 60 seconds...
Windows 側の描画などでVRAMが少量使われていると、
GPU空き判定に引っかかることがあります。
今回は GPU_ID=0 を固定することで回避しました。
入力画像
今回はキャラクター画像の「正面・側面・背面」の3枚を使用しました。 実際に使った画像は以下です。
00001.png(正面)
00002.png(側面)
00003.png(背面)
※検証用のキャラクター画像を使用しています。
フォルダ配置
assets/myset/TestScene/images
assets
└ myset
└ TestScene
└ images
├ 00001.png
├ 00002.png
└ 00003.png
run_infer.sh設定
DATASETS=(
myset
)
SCENES=(
TestScene
)
実行
bash scripts/run_infer.sh
出力ファイルの意味
出力フォルダには複数のファイルやサブフォルダが生成されます。主なものは次の通りです。
-
input.ply初期点群。画像から最初に作られた3Dのタネのようなもの。 -
point_cloud/iteration_1000/point_cloud.ply学習後の最終3D点群。今回の本命ファイル。 -
interp/ours_1000/renders/カメラを補間してレンダリングした画像列。動画化用のフレーム。 -
pose/ours_1000/推定されたカメラ姿勢の可視化や numpy データ。 -
01_init_geo.log / 02_train.log / 03_render.log初期化・学習・レンダリングのログファイル。
動画作成(ffmpeg)
レンダリング画像は連番PNGで出力されるため、ffmpegで動画化できます。
ffmpeg -framerate 30 -i %05d.png -c:v libx264 -pix_fmt yuv420p camera.mp4
ffmpeg -framerate 30 -i %05d.png -vf "scale=1920:-1" -c:v libx264 -crf 18 camera.mp4
生成結果(動画)
生成されたカメラ移動レンダリングを動画化したものを YouTube に公開しています。
YouTube公開URL
今回の入力画像では、3D形状がかなり破綻している様子が確認できます。
結果と考察(かなり破綻した)
結論から言うと、3Dモデルの形状はかなり破綻しました。 環境構築と実行自体は成功したものの、「綺麗なキャラ3Dが得られた」とは言えない結果です。
特に今回のような「正面・側面・背面」の設定画は、実写のような連続視点ではありません。 中間角度の情報が存在しないため、補間時に破綻しやすく、動画にすると違和感がかなり目立ちました。
また、イラストは実写に比べて陰影や特徴点の情報が少なく、 InstantSplat++ が得意とする「現実の複数視点画像」とは性質が異なります。 そのため、今回の題材はあまり相性が良くなかったようです。
次の記事
次回は、キャラ画像のような2Dイラストから3Dモデルを作る用途により向いている手法として、 TripoSR系のモデルを試してみる予定です。
まとめ
InstantSplat++は、少ない画像から3D生成を試せる面白い研究プロジェクトでした。
GPUがあればローカル環境でも動作し、環境構築自体は十分可能でした。
ただし、今回のようなキャラ設定画では限界も見えたため、
用途に応じて別手法との使い分けが重要だと感じました。

コメント