
2025/12/27 4:23
**ガウス・スプラッティング ― 3つのアプローチ**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
NullSplatsはTkinterベースのデスクトップアプリケーションで、ユーザーがカジュアルな動画や画像コレクションから3Dガウススプラットモデルを訓練・表示できるようにします。ワークフローはビデオまたは画像フォルダーをインポートすることから始まり、アプリは自動でフレームを選択し、COLMAP SfMを実行してカメラ姿勢とスパースポイントを回復させ、その後PyTorchベースのgsplatライブラリでスプラットを訓練(.ply/.splatチェックポイントをエクスポート)します。ユーザーは3つのパイプラインから選択できます―従来型COLMAP+gsplat、Depth Anything 3 (DA3)、またはSHARP単眼ビュー合成―それぞれ速度と精度のトレードオフが異なります。RTX Pro 6000 Blackwellでの訓練時間は、gsplatが約5分、DA3(≈16 GB VRAM)が3〜4分、SHARPが2.5分です。
UIは「Inputs」「COLMAP」「Training」「Exports」の4つのタブに整理されており、シーン作成、フレーム抽出(
backend/video_frames.py)、SfMパイプライン(backend/sfm_pipeline.py)、訓練ループ(backend/splat_train.py)のウィザードフローがあります。レンダリングは ui/gl_canvas.py を使用し、ライブプレビューにはGaussianSplatViewerをラップし、オフラインレンダーにはSplatRendererを使用します;シェーダーは ui/shaders/ にあります。
コードベースは標準的なPythonデスクトップレイアウトに従っており、
main.py(Tk root)とUI・バックエンド・ユーティリティ・ビルドスクリプト(build.bat、run.bat)を含む nullsplats/ パッケージで構成されています。データは cache/inputs/<scene_id> にソースファイルとメタデータを、cache/outputs/<scene_id> にSfM結果、スプラットチェックポイント、およびレンダリング結果をキャッシュします。
依存関係にはPython 3.10+、PyTorch CUDAビルドが必要なCUDA対応GPU、PATHにあるffmpeg/ffprobe、バンドルされたCOLMAPバイナリ(CUDA推奨)が含まれます。オプションとしてDA3(
pip install git+https://github.com/ByteDance-Seed/Depth-Anything-3)とSHARP(pip install -e tools/sharp)をインストールできます。ポータブルWindowsバンドルは build.bat で生成され、run.bat を介して起動します。
既知の制限として、現在のビルドはWindows専用であり、実行ファイルサイズが約700 MBと大きいこと、サムネイルの失敗が時折発生すること、小さなレンダリングオフセットが現れること、およびffmpegがバンドルされていない点があります。将来のリリースではプラットフォームサポートを拡張しサイズを削減する可能性があります。
Text to translate
NullSplats is a Tkinter‑based desktop application that lets users train and view 3D Gaussian splat models from casual videos or image collections. The workflow starts by importing a video or folder of images; the app auto‑selects frames, runs COLMAP SfM to recover camera poses and sparse points, then trains splats with the PyTorch‑based gsplat library (exporting .ply/.splat checkpoints). Users can choose one of three pipelines—traditional COLMAP+gsplat, Depth Anything 3 (DA3), or SHARP monocular view synthesis—each offering different speed/accuracy trade‑offs. Training times on an RTX Pro 6000 Blackwell are roughly 5 min for gsplat, 3–4 min for DA3 (≈16 GB VRAM), and 2.5 min for SHARP. The UI is organized into four tabs (Inputs, COLMAP, Training, Exports) with wizard flows for scene creation, frame extraction (`backend/video_frames.py`), SfM pipeline (`backend/sfm_pipeline.py`), and training loop (`backend/splat_train.py`). Rendering uses `ui/gl_canvas.py`, which wraps GaussianSplatViewer for live preview and SplatRenderer for offline renders; shaders reside in `ui/shaders/`. The codebase follows a standard Python desktop layout: `main.py` (Tk root) plus the `nullsplats/` package containing UI, backend, utilities, and build scripts (`build.bat`, `run.bat`). Data is cached under `cache/inputs/<scene_id>` for source files and metadata, and `cache/outputs/<scene_id>` for SfM results, splat checkpoints, and renders. Dependencies include Python 3.10+, a CUDA‑capable GPU with PyTorch CUDA build, ffmpeg/ffprobe on PATH, bundled COLMAP binaries (CUDA preferred), and optional DA3 (`pip install git+https://github.com/ByteDance-Seed/Depth-Anything-3`) and SHARP (`pip install -e tools/sharp`). The portable Windows bundle is produced by `build.bat` and launched via `run.bat`. Known limitations are that the current build is Windows‑only, the binary is large (~700 MB), occasional thumbnail failures occur, minor rendering offsets may appear, and ffmpeg is not bundled. Future releases may expand platform support and reduce size.
本文
NullSplats – 3‑D ガウススプラットツールキット
Tkinter と OpenGL を組み合わせたデスクトップアプリで、動画や画像コレクションから 3‑D ガウススプラット を学習・閲覧できます。
COLMAP を使ってカメラ姿勢を取得し、PyTorch + gsplat で学習、すべてのデータは再現性のあるキャッシュツリーに保存されるため、あとからシーンを再開できます。
主な機能
| アクション | 結果 |
|---|---|
| 動画・画像フォルダを取り込み → フレーム抽出とスコアリング → 自動でサブセット選択 | |
| COLMAP SfM を実行し、カメラ姿勢と sparse points を生成 | |
GPU で gsplat による Gaussian スプラットを学習し、チェックポイントを や としてエクスポート | |
| アプリ内の埋め込み OpenGL ビューアでスプラットをライブプレビュー | Live preview |
| シーンごとの入力・出力をキャッシュに保持し、再現可能なワークフローを実現 | – |
サポートされているスプラット生成手法
- 従来型:COLMAP + gsplat 学習
- Depth Anything 3 (DA3) 3‑D ガウス推定
- SHARP 単眼ビュー合成
サンプルスプラット
| ビュー数 | 手法 | 解像度 |
|---|---|---|
| 50 | gsplat | 720p (12k イテレーション) |
| 5 | DA3 | 720p |
| 1 | SHARP | 720p |
動画例
- Gsplat 50‑view –
gsplat_50view_720p.mp4 - Gsplat closeup –
gsplat_closeup.mp4 - DA3 5‑view –
DA3_5view_720p.mp4 - DA3 closeup –
DA3_closeup.mp4 - SHARP 1‑view –
SHARP_1view_720p.mp4 - SHARP closeup –
SHARP_Closeup.mp4 - Side‑by‑side comparison –
Comparison_Closeup.mp4
RTX Pro 6000 Blackwell 上での実行時間:
• gsplat (50 views) ≈ 5 分(COLMAP 含む)
• DA3 (5 views) ≈ 3–4 分、約16 GB VRAM
• SHARP (1 view) ≈ 2.5 分
Discord とサポート
開発について議論したりサポートを受けたい場合は
- GitHub で Issue を作成
- Discord チャンネルに参加
リポジトリ構成
main.py # アプリ起動点(Tk root + タブ) nullsplats/ │ ├── ui/ # Tk UI、タブ、OpenGL ビューア、シェーダー │ ├── shaders/ # .vert / .frag ファイル │ └── … # 各種タブモジュール │ ├── backend/ # フレーム抽出、COLMAP パイプライン、スプラット学習 │ ├── video_frames.py │ ├── sfm_pipeline.py │ ├── splat_train.py │ └── … │ └── util/ # ロギング、設定、スレッドヘルパー、ツールパス
– ポータブルバンドルビルダーbuild.bat
– バンドル内での起動run.bat
– Python 依存関係requirements.txt
コード構成概要
| コンポーネント | 用途 |
|---|---|
AppState () | 設定、シーン管理、現在のシーンなどコア状態 |
SceneManager () | シーン探索・選択永続化・サムネイルキャッシュ |
IO Cache () | メタデータ読み書き、 の定義 |
| Tabs | 入力、COLMAP、学習、エクスポート(各 ) |
| Wizard Flow | インラインウィザード () またはスタンドアロンウィンドウ () |
キャッシュレイアウト(シーンごと)
cache/ ├─ inputs/<scene_id>/ │ ├─ source/ # 元のソースコピー │ ├─ frames_all # すべて抽出したフレーム │ ├─ frames_selected # 自動選択サブセット │ └─ metadata.json └─ outputs/<scene_id>/ ├─ sfm # COLMAP 結果 ├─ splats # 学習チェックポイント (.ply/.splat) └─ renders # ターンテーブル/動画レンダリング
バックエンドパイプライン
フレーム抽出 (backend/video_frames.py
)
backend/video_frames.py
を使用ffmpeg/ffprobe- シャープネス/分散スコアリング
- 最適フレーム自動選択
- 選択結果をキャッシュ
SfM (COLMAP) (backend/sfm_pipeline.py
)
backend/sfm_pipeline.pyCOLMAP CLI を実行し、ログは
cache/outputs/<scene_id>/sfm/logs に保存。
学習 (backend/splat_train.py
)
backend/splat_train.py- gsplat 学習ループ
- DA3 推論(
)depth_anything3_trainer.py - エクスポートヘルパー(
など)gs_utils.py
レンダリングとビューア
| モジュール | 役割 |
|---|---|
| OpenGL プレビューサーフェス(SplatRenderer) |
| インスタンス化クワッドレンダラー + シェーダー |
| GLSL シェーダー |
コントロールパネル (, ) | 基本・高度なレンダリング設定 |
スレッディングとロギング
– バックグラウンドタスク、Tk スレッドへのマルシャリングutil/threading.py
– コンソール+ファイルログ(util/logging.py
)logs/app.log
– COLMAP と CUDA パス解決util/tooling_paths.py
ビルドと実行
前提条件
- Windows(主)、Linux でも可(対応バイナリ同梱)
- Python 3.10+ (
,pip
)venv - CUDA ドライバー付き GPU、PyTorch CUDA バージョンインストール済み
- PATH に
があることffmpeg/ffprobe - COLMAP バイナリ(CUDA 推奨)が
またはユーザー指定パスにあることtools/colmap
オプションバックエンド
| バックエンド | インストール |
|---|---|
| Depth Anything 3 (DA3) | |
| SHARP | |
開発環境セットアップ
python -m venv .venv .venv\Scripts\activate.bat # Windows # または source .venv/bin/activate # Linux pip install -r requirements.txt
CUDA 対応 PyTorch / gsplat の bootstrap は
tools\setup_cuda_venv.bat を実行。
アプリ起動
# venv がアクティブな状態で python main.py
ログ →
logs/app.logキャッシュ →
cache/inputs/<scene_id> と cache/outputs/<scene_id>
ポータブルバンドル(Windows)
-
を実行すると、build.bat
とbuild\NullSplats-portable
が作成されます。build\NullSplats-portable.zip -
オプションフラグ:
– 既存バンドルを再利用SKIP_CLEAN=1- 第1引数で CUDA パスを渡して
を上書きCUDA_PATH/CUDA_HOME
– CUDA DLL の同梱をスキップ(失敗する場合があります)REQUIRE_CUDA=0
– ZIP 作成をスキップSKIP_ZIP=1
-
バンドル内で
を実行してアプリ起動。run.bat
よくある問題
- Windows + CUDA のみのダウンロード
- ビルド時に COLMAP がビルドされない
- ダウンロードサイズが大きい
- サムネイルが読み込めない場合がある
- スプラットレンダリングがわずかにズレる
- カメラコントロールの制限
- ffmpeg が同梱されておらず PATH に入れておく必要あり
- CUDA SDK がパス上に必要になることも
パスとデフォルト設定
| ツール | デフォルト |
|---|---|
| COLMAP | (存在しない場合はユーザー指定) |
| CUDA | バンドル内の 、それ以外は , , さらに を順に検索 |
| キャッシュ | 必要時に と に作成 |