0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# 3D Gaussian Splatting 作成ガイド

0
Last updated at Posted at 2026-09-24

iPhoneで撮った動画から、3D Gaussian Splatting(3DGS)で3Dモデルを作るまでの手順をまとめたものです。

全体の流れ

pipeline_overview.png

  1. 動画からフレームを抽出する
  2. COLMAPでカメラの位置・向きとスパース(疎)な3D点群を推定する(SfM)
  3. COLMAPで画像の歪みを補正する(3DGS学習の前準備)
  4. 3D Gaussian Splattingで学習する
  5. ブラウザ(WebGL)で結果を確認する

3DGS作成ガイド
https://qiita.com/kazuyattu/items/a050491ee450670b34ef
pythonのコードはこちら
https://github.com/kazuyattu-stack/3DGS
pythonコード説明
https://qiita.com/kazuyattu/items/6efc5d2ace09d6bc06ac
colmap説明
https://qiita.com/kazuyattu/items/c6226f3dcc6f7abb5016

事前準備(環境構築)

このマシンではWindows版COLMAPがスマートアプリコントロールに実行をブロックされたため、
WSL2(Ubuntu)上にLinux版COLMAPと3D Gaussian Splattingの環境を作る方式にしています。

必要なもの:

  • WSL2 + Ubuntu(wsl --install)
  • NVIDIA CUDA Toolkit(WSL2内。GPUドライバ自体はWindows側のものを共有できる)
  • COLMAP(CUDA有効でソースからビルド。apt install colmapだとCUDA無し版になる)
  • 3D Gaussian Splatting公式リポジトリ一式(PyTorch, diff-gaussian-rasterization, simple-knn, fused-ssim)

環境構築だけでかなりの試行錯誤が必要だったので、詳細は末尾の「つまずいたポイント」を参照してください。


Step 1: 動画からフレーム抽出 & COLMAPでカメラ姿勢・スパース点群を推定

scripts/1_colmap_reconstruct.py を使います。やっていること:

  1. OpenCVで動画から一定間隔(frame_step)でフレームを抽出し、カラーのままJPEGとして保存
  2. WSL2上のCOLMAP(colmap automatic_reconstructor)を呼び出し、
    • 特徴点抽出・マッチング(SIFT)
    • Incremental SfMでカメラの姿勢とスパース点群を推定
    • image_undistorterで3DGS学習用に画像の歪みを補正

抽出されたフレームの例:

00_sample_frame.jpg

フレーム間の特徴点マッチングの様子(SIFT):

01_sift_matching.jpg

推定されたスパース点群(42,554点、Open3Dでレンダリング):

03_sparse_pointcloud.png

実行コマンド:

py colmap_reconstruct.py

video_path、frame_step、qualityなどはスクリプト冒頭の変数で調整します。


Step 2(任意): 密なステレオ復元(MVS)

3DGSの学習自体には Step 1 の歪み補正済み画像とスパース点群があれば十分ですが、
CUDA対応のCOLMAPが使える場合はpatch_match_stereo→stereo_fusionで密な点群も作れます。

視差マップの例:

02_disparity_map.jpg


Step 3: 3D Gaussian Splattingで学習

scripts/3_train_3dgs.py から、WSL2内にセットアップした
graphdeco-inria/gaussian-splatting の
train.py を呼び出します。

  • 入力: Step 1で作った歪み補正済みデータセット(images/ + sparse/0/*.bin)
  • 学習: 30,000イテレーション(デフォルト)
  • 出力: point_cloud/iteration_30000/point_cloud.ply(ガウシアンのパラメータ入りPLY)

今回のケースでは 64枚の画像・42,554個のスパース点から出発し、
最終的に 690,781個のガウシアンスプラット が生成されました
(再投影誤差 PSNR: train 35.7 / test 30.1)。

py train_3dgs.py

Step 4: 結果をブラウザで確認する

3DGSが出力するPLYは、位置・スケール・回転(クォータニオン)・不透明度・
球面調和関数(色)を持つ特殊な形式なので、通常の点群ビューア(Open3Dなど)では正しく表示できません。

そこで antimatter15/splat というWebGLベースの
軽量ビューアを使います。手順:

  1. PLYを軽量な.splat形式に変換する
    cd splat_viewer
    py ply_to_splat.py "<point_cloud.plyのパス>" model.splat
    
  2. ローカルサーバーを立てる(file://で直接開くとCORSでブロックされるため)
    py -m http.server 8080
    
  3. ブラウザで http://localhost:8080/ を開く

マウスドラッグで視点回転、スクロールで周回移動、右ドラッグで前後移動ができます。


つまずいたポイント

このパイプラインを動かすまでに、実際に遭遇した問題と対処です。

問題 原因 対処
Windows版COLMAPが起動直後に無言で落ちる Windowsのスマートアプリコントロールが未署名DLL(gmp-10.dll等)の読み込みをブロック WSL2上でLinux版COLMAPを使う方針に変更
COLMAPのCUDAビルドでnvccが謎のエラー RTX 50シリーズ(Blackwell)向けのnvccコンパイラバグ CMAKE_CUDA_ARCHITECTURESをPTXのみ(90-virtual)にして回避(CMakeが自動で警告・対処)
patch_match_stereoが「unsupported toolchain」で落ちる CUDA Toolkitのバージョン(13.3)がGPUドライバの対応上限(13.2)より新しかった ドライバに合わせてCUDA 13.2を追加インストールし、そちらでCUDA部分を再ビルド
SIBR_viewersのビルドでboost_systemが見つからない Boost 1.90でboost_systemが完全ヘッダオンリー化され、コンパイル済みライブラリが廃止 cmakeの依存コンポーネントからsystemを除外
embree3/rtcore.hが無い 新しいUbuntuにはembree4しか無く、SIBR側のコードはembree3 API前提 ヘッダ・ライブラリにシンボリックリンクを張り、RTCIntersectContextなど廃止されたAPIを新APIに移植
ビューアのウィンドウがWindowsデスクトップに出ない GLFWがWSLgのネイティブWayland用ウィンドウを作成するが、WSLg側の転送機構がそれを認識しない glfwInitHint(GLFW_PLATFORM, GLFW_PLATFORM_X11)でX11強制まで試したが解決せず、最終的にWebGLビューアに切り替えて解決

一番の教訓は、GUIアプリの表示にこだわるより、ブラウザで完結するWebGLビューアに逃げた方が早いということでした。


フォルダ構成

3DGS_ガイド/
├── README.md              (このファイル)
├── images/                (説明用の画像)
└── scripts/
    ├── 1_colmap_reconstruct.py   (動画→COLMAP)
    ├── 2_ply_to_splat.py         (PLY→軽量.splat変換)
    ├── 3_train_3dgs.py           (3DGS学習の実行)
    ├── render_previews.py        (点群のオフスクリーンレンダリング)
    ├── crop_preview.py           (レンダリング画像の自動クロップ)
    └── make_pipeline_diagram.py  (全体図の生成)

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?