====== Path to Flight Plan ======
スプラインで描いたパスからフライトプランカメラを生成し、3DGS(3D Gaussian Splatting)用のデータセットを作るまでを、1 つのウィンドウで進めるツールです。Chaos Vantage でのレンダリング、Metashape Pro でのアライメント、LichtFeld Studio 用の ''transforms.json'' の書き出しまでを、ステップ順に行えます。
^ ツール名 | Path to Flight Plan |
^ 収録 | OakCorp Tools 1.1.0 以降([[start|OakCorp Tools for 3ds Max]]) |
^ スクリプトのバージョン | Ver 2026080703 |
^ 対応環境 | 3ds Max 2025 ~ 2027 |
^ 連携ソフト | V-Ray 7、Chaos Vantage、Agisoft Metashape Pro(Standard は一部の機能のみ)、LichtFeld Studio |
^ 起動 | OakCorp ツールバーの **Path to Flight Plan** ボタン、またはマクロ **Path to Flight Plan**(Category:OakCorp) |
===== 実践チュートリアル =====
[[https://oakcorp.net/lesson/archives/7531|{{https://oakcorp.net/lesson/wp-content/uploads/sites/5/2026/08/render2splat.jpg?600}}]]
===== ワークフローの概要 =====
ウィンドウは上から順に 4 つのステップと、セッションの保存で構成されています。
^ ステップ ^ 内容 ^ 結果 ^
| ① フライトプラン生成 | パス(スプライン)を分割し、1 点 = 1 フレームでカメラにキーを設定します。 | VRayPhysicalCamera(アニメーション付き) |
| ② Chaos Vantage レンダリング | ''.vrscene'' を書き出し、Vantage をコマンドラインで実行します。 | 連番画像(Spherical 360 または通常のフレーム画像) |
| ③ Metashape Pro | アライメント用のリファレンス CSV を書き出します。 | Metashape でアライメントし、点群(''.ply'')と ''cameras.xml'' を書き出し |
| ④ LichtFeld Studio | 画像・点群・カメラ位置から ''transforms.json'' を書き出します。 | LichtFeld Studio で学習できるデータセット |
カメラは「1 フレーム = 1 撮影点」のアニメーションとして作ります。カメラを撮影点の数だけ作るのではなく、1 台のカメラのアニメーションを Vantage でまとめてレンダリングするため、シーンの読み込みが 1 回で済みます。
===== ① フライトプラン生成 =====
==== 項目 ====
^ 項目 ^ 内容 ^
| パスの一覧 | フライトプランに使うスプラインです。一覧の順に連結して 1 本のパスとして扱います。 |
| 選択を追加 | シーンで選択しているスプラインを一覧に追加します。 |
| 更新/削除/クリア | 一覧の表示を更新、選んだパスを一覧から外す、一覧を空にします。 |
| セグメント分割数 | ノット間を何分割するかを指定します。1 ならノットの位置だけ、2 ならノットの間に 1 点を追加します。中間点は曲線に沿って配置されます。 |
| ルックアット | オンにすると、カメラが注視オブジェクトの中心を向きます。オフのときは進行方向を水平に向きます。 |
| 注視オブジェクトをピック | ルックアットで向く対象を選びます。 |
| 開始フレーム | 1 点目のキーを置くフレームです。 |
| フライトプラン生成(カメラ作成) | カメラを作成し、点ごとに 1 フレームずつキーを設定します。 |
==== 手順 ====
- パスとなるスプラインを描きます。開いたスプラインも閉じたスプラインも使えます。Circle [円] や Rectangle [長方形] などのシェイプもそのまま使えます(元のシェイプは変更しません)。
- スプラインを選択して[選択を追加]を押します。複数のパスを使う場合は、飛ぶ順に追加します。
- [セグメント分割数]と[ルックアット]を設定します。一覧の下に、現在の撮影点の数が表示されます。
- [フライトプラン生成(カメラ作成)]を押します。
''P2F_Cam360'' という名前の VRayPhysicalCamera(ターゲットなし)が作られ、撮影点ごとにキーが設定されます。Time Slider [タイムスライダー] の範囲も撮影点の数に合わせて変わり、カメラ名は ② の[カメラ名]に自動で入ります。
3DGS の学習に悪影響があるため、作成するカメラの Depth of Field [被写界深度]、Motion Blur [モーションブラー]、Vignetting [ビネット] は自動でオフになります。.vrscene の書き出し直前にも、もう一度オフにします。
パスの形を直したいときは、スプラインのノットを編集してから、もう一度[フライトプラン生成]を押します。新しいカメラが作られます。
===== ② Chaos Vantage レンダリング =====
==== .vrscene を書き出す ====
[.vrscene を書き出し(現在のシーン)]を押し、保存先を指定します。
Vantage は、.vrscene を書き出したときの「レンダリングするビュー」のカメラを、アニメーション付きのカメラ(Original Camera)として扱います。そのためこのボタンは、書き出す前に次の処理を自動で行います。
* [カメラ名]のカメラをアクティブなビューポートに設定する
* Render Setup [レンダー設定] のビューのロックを解除し、アクティブなビューを使うようにする(Render Setup [レンダー設定] が開いている場合は閉じます)
* カメラのレンズ効果をオフにする
書き出したあと、ファイルの中でカメラがアニメーション付きになっているかを検証し、結果を表示します。
V-Ray のメニューから手動で書き出す場合は、フライトプランカメラを「レンダリングするビュー」にしてから書き出してください。素のビューポートのまま書き出すと、Vantage でカメラのアニメーションが再生されません。
==== 項目 ====
^ 項目 ^ 内容 ^
| .vrscene シーンファイル | レンダリングする .vrscene です。書き出すと自動で入ります。既存のファイルを[参照...]で指定することもできます。 |
| Vantage exe | Vantage の実行ファイルです。''C:\Program Files\Chaos\Vantage\vantage.exe'' があれば自動で入ります。 |
| 出力フォルダ | 画像の出力先です。④ の写真フォルダとしても使います。 |
| カメラ名(-camera) | レンダリングするカメラです。① で生成すると自動で入ります。 |
| 画像ベース名/拡張子 | 出力する画像の名前です。番号は Vantage が付けます(例:''shot.00000.png'')。 |
| 連番桁数 | 画像の番号の桁数です(既定は 5)。 |
| 解像度 | Spherical 用の 2:1 のプリセット(1K~8K)と Custom です。Custom では幅と高さを入力します。 |
| Samples | Vantage のサンプル数です。 |
| 追加オプション | Vantage のコマンドラインに追加するオプションです(任意)。 |
| カメラモード | Spherical 360(全天球)または通常フレームカメラです。 |
==== レンダリングする ====
[Vantage レンダージョブ実行(全フレーム)]を押すと、Vantage がコマンドラインで起動し、全フレームをレンダリングします。次の設定は自動で付けます。
^ 設定 ^ 値 ^
| カメラ | Spherical 360 のときは 360°×180° の全天球。通常フレームカメラのときはシーンのカメラの画角 |
| 自動露出 | オフ(画像ごとの明るさの差をなくすため) |
| デノイズ | オン |
| Light Cache | オン |
| モーションブラー | オフ |
| アルファ | オン(PNG) |
| 終了後 | Vantage を自動で閉じる |
==== 差分レンダリング ====
パスを編集したり分割数を変えたりしたあと、変わったフレームだけをレンダリングし直す機能です。
- パスを編集し、① の[フライトプラン生成]と ② の[.vrscene を書き出し]をやり直します。
- [差分レンダリング(変更/追加フレームのみ)]を押します。
- 前回のレンダリングと比べた結果(そのまま使う/番号を付け替える/新しくレンダリングする枚数)が表示されるので、確認して実行します。
* 全フレームのレンダリング時に、出力フォルダへ ''p2f_frames.txt''(フレーム番号とカメラ位置の一覧)を保存し、これを比較の基準にします。
* カメラ位置が[差分一致許容距離](既定は 1 mm)以内なら同じ撮影点と見なします。比較するのは位置だけで、向きは比較しません。
* 番号がずれた画像は付け替え、不要になった画像は出力フォルダ内の ''_p2f_old'' に移します(Metashape に誤って読み込まれないようにするため)。
解像度、Samples、画像名の設定が前回と違う場合は、画質が混ざらないよう差分レンダリングを中止します。[Vantage レンダージョブ実行(全フレーム)]でレンダリングし直してください。初回も全フレームでのレンダリングが必要です。
===== ③ Metashape Pro(アライメント) =====
==== 項目 ====
^ 項目 ^ 内容 ^
| Y-up 回転(X−90°) | オンにすると、CSV のカメラ位置を X 軸まわりに −90° 回転します。LichtFeld Studio で正立して表示させるための設定です(既定はオン)。 |
| スケール | CSV のカメラ位置に掛ける倍率です(既定は 1.0)。 |
| リファレンス CSV 書き出し | Metashape の Reference [リファレンス] に読み込む CSV を書き出します(Pro のみ)。 |
Y-up 回転とスケールは、プロジェクトの途中で変えないでください。CSV に適用した回転とスケールは、Metashape の座標系を通して点群(''.ply'')と ''cameras.xml'' にも自動で反映されるため、途中で変えると全体の向きや大きさが合わなくなります。
==== Metashape Pro の手順 ====
- Vantage で出力した画像を Metashape に読み込みます。
- Camera type [カメラタイプ] を ② のカメラモードに合わせます(Spherical 360 なら Spherical、通常フレームカメラなら Frame)。
- File [ファイル] > Import [インポート] > Import Reference [リファレンスのインポート] で CSV を読み込みます。列は label/x/y/z に割り当て(位置のみ。CSV には向きの列もありますが使いません)、座標系は Local Coordinates、精度は 0.005 m に設定します。
- Align Photos [写真のアライメント] を実行し、Update Transform [変換を更新] を実行します。
- 点群(Tie Points)を、カラー付き・Local Coordinates の ''.ply'' で書き出します。
- カメラを ''cameras.xml'' として書き出します(④ で使います)。
==== Metashape Standard の場合 ====
Standard では CSV のインポートを使えないため、③ の CSV、Y-up 回転、スケールは使えません。画像をアライメントしたあと、''cameras.xml'' と ''.ply'' を書き出して ④ に進んでください。座標系はそのまま整合します。
===== ④ LichtFeld Studio(transforms.json) =====
==== 項目 ====
^ 項目 ^ 内容 ^
| Metashape cameras.xml | Metashape で書き出したカメラです(推奨)。指定すると、Metashape が推定したカメラ位置で ''transforms.json'' を作ります。未指定の場合は、3ds Max のカメラ位置(真値)を使います。 |
| Metashape からの点群 .ply | 学習の初期点群として使う ''.ply'' です。 |
| 写真フォルダ | レンダリングした画像のフォルダです。未指定の場合は ② の出力フォルダを使います。 |
| transforms.json 書き出し | 保存先を指定して ''transforms.json'' を書き出します。画像と点群の場所は、''transforms.json'' からの相対パスで記録します(別のドライブなどで相対パスにできない場合は絶対パス)。 |
* カメラモデルは、② のカメラモードに合わせて自動で切り替わります(Spherical 360 は EQUIRECTANGULAR、通常フレームカメラは PINHOLE)。
* 解像度は、''cameras.xml'' にセンサーの解像度があればそれを使います。
* Spherical 360 のデータを LichtFeld Studio で学習するときは、3DGUT を有効にしてください。通常フレームカメラ(PINHOLE)の場合は不要です。
* 点群の ''.ply'' を指定しなかった場合は、点群の指定なしで書き出します。
点群の ''.ply'' が読み込まれず、LichtFeld Studio のログに「Generated random point cloud」と表示される場合は、LichtFeld Studio が古い可能性があります。新しいビルドに更新してください。
===== セッション(途中からの再開) =====
パスの一覧、注視オブジェクト、各ステップの設定はシーンに保存されます。主な操作のたびに自動で保存され、''.max'' ファイルを開き直すと自動で復元されます。
* [シーンへ保存]/[シーンから復元]で手動でも保存・復元できます。
* シーンに保存されるので、''.max'' ファイルの保存を忘れないでください。
* Vantage の実行ファイルや出力フォルダなどは、3ds Max の plugcfg フォルダーの ''path2flightPlan.ini'' にも保存され、次回の起動時に入力済みになります。
===== よくある質問 =====
==== Vantage でカメラが動かない ====
.vrscene を書き出したときの「レンダリングするビュー」がフライトプランカメラになっていない可能性があります。② の[.vrscene を書き出し]で書き出し直してください。書き出し後の検証メッセージで、カメラのアニメーションが正しく書き出されたかを確認できます。
==== 画像ごとに明るさが違う ====
Vantage の自動露出がオンになっていると、画像ごとに明るさが変わり、3DGS の学習に悪影響があります。このツールは自動露出をオフにして起動します。[追加オプション]で自動露出を有効にしていないか確認してください。
==== LichtFeld Studio でシーンが上下逆さまになる ====
③ の[Y-up 回転]をオンにして、CSV の書き出しからやり直してください。プロジェクトの途中で切り替えると、点群とカメラの向きが合わなくなります。
===== 更新履歴 =====
^ バージョン ^ 日付 ^ 内容 ^
| OakCorp Tools 1.1.0 | 2026-10-06 | OakCorp Tools に収録(スクリプト Ver 2026080703)。 |
===== 著作権 =====
本ソフトウェアの著作権は株式会社オークに帰属します。
Copyright (c) 2026 株式会社オーク [[https://oakcorp.net/|https://oakcorp.net/]]