第2章 — インスペクタ(エキスパートビュー)

インポート前の空のインスペクタ: 左のカラムにはImages、Cameras、Logの項目が表示され、 その下にヘッダー「Images (0)」とドロップ領域「Drop images here / or tap + to import」が続きます。 中央のビューポートは空です。右側にはインスペクタがあり、6つの折りたたまれたセクションを持ちます: Presets、Cameras & Capture、Training、Progress、Look、Export。各見出しの下には、 そのセクションが何をするか、いつ効果を発揮するかを示すグレーの行があります — 「Ready-made recipes — they replace the training settings」(Presets)、 「Before training · decides how camera positions are solved · applies to the next run」 (Cameras & Capture)、「Before training · drives scene build-up and optimization · applies to the next run」(Training)、「Display only」(Progress)、「After training · applies immediately · reversible any time」(Look)、そして 「Leveling the floor turns the view at once; the chosen orientation and format apply when saving」(Export)です。一番下にはステータス「Idle」と緑のスタートボタン、 赤のストップボタンを持つステータス行が走っています。右上にはSimple/Expertの 切り替えがあり、ここではExpertになっています。

インポート後のインスペクタ: 画像リストのヘッダーには 「Images (35)」と表示され、その下にはIMG_0953.JPGから始まる昇順のファイル名で インポートされた撮影データが並びます。このテストシリーズの画像は4032×3024ピクセルで 存在しており、Auto-Render-Scaleロジックはこの解像度を読み取り、それに合ったRender Scaleを 提案します。ビューポートはまだ空で、ステータス行は「Idle」のままです。左下の緑の スタートボタンは今アクティブになっており、アクティブなPresetでトレーニングを開始します。

トレーニング中のインスペクタ: タイトルバーには全体の 進捗が表示され、ここでは「RadianceKit — Training 23%」となっています。ビューポートは 進行中の再構成をリアルタイムでレンダリングします — 羊皮の上の布製アヒルが、 すでにはっきりと見て取れます(ライブプレビューの更新間隔はSettings → General → Training → Live Previewに あります)。ビューポートの下には進捗(「4,700/20,000」、「ETA 1m9s」)と Loss 0.0109、LR 2.0e-04、SH 1、Gaussians 16.0Kを示すメトリクスバーが走っており、 左下には一時停止ボタンとストップボタンがあります。インスペクタではグループ CLASSICが展開されており、「Balanced 20K iters」には緑のチェックマークが 付いています。「Modified」バッジは、パラメータがPresetから外れた時にのみ表示されます — ここには表示されていません。サイドバーの「Log」はSfMおよびTrainingステージの イベントを集めます。

トレーニング後のインスペクタ: タイトルバーには結果が 表示されます:「Training Complete — 8,708 Gaussians」。左のカラムには 「Complete」と同じ数字が表示され、さらにImages 25とCameras 35が続きます — 画像が25枚なのは、Frame-Quality-Dialogが35枚中10枚のブレた撮影を 除外したためです。ステータス行は20,000/20,000で「Completed」を報告し、 メトリクスバーはLoss 0.0075、LR 0.0e+00、SH 3、Gaussians 9.7Kを示します。 ビューポートには画面いっぱいに完成した点群が表示されます — オービタルドラッグナビゲーションがアクティブです(シーンの中心を軸に回転します)。
ここで2つの異なるGaussian数が表示されているのは意図的なものです: メトリクスバーとTraining Metricsはトレーニング終了時の状態 (ここでは9,660、四捨五入して9.7K)を示し、タイトルバーとシーンは 自動クリーンアップパス後の状態(8,708)を示します。この間には Post-Training Compactificationと、針状・円盤状のスプラットの除去が 行われます。小さい方の数字がビューポートに表示され、エクスポート時に 保存される値です。 Training MetricsとLoss Historyのグループは今、最終値で満たされており、 Exportセクションはアクティブになっています。
インスペクタはExpert Mode(⌘2)の右サイドバーです。トレーニングに 関わるすべてのパラメータを6つの折りたたみ可能なセクションにまとめており、 2026-07-18以降はドメイン別にグループ化されています。デフォルトの 上から下への順序は: Presets、Cameras & Capture、Training、Progress、Look、 Exportです。各見出しの下にはフェーズを示す2行目があります — そのセクションがいつ効果を発揮し、どれくらい取り消し可能かを示します (例えばCameras & Captureでは「Before training · decides how camera positions are solved · applies to the next run」、Lookでは 「After training · applies immediately · reversible any time」、Progressでは 「Display only」)。以前あった2つのセクションは統合されました: MetricsとLoss History(損失グラフ)は今、 Progress内の2つの別々に折りたためるグループ(「Training Metrics」と 「Loss History」)になっており、以前のEnhancementsセクションは 完全にTrainingの中に収まっています。「Look」セクション (トレーニング後の画像調整)は、以前の「Finishing」セクションを実際に UI上で改名したものです — 内部名は互換性のため「Finishing」のままですが、 表示される見出しは「Look」となっています(Trainingでも同じパターンで、 内部名は「Training Configuration」です)。各セクションはヘッダーをクリックすることで 折りたたむことができ、順序はドラッグアンドドロップで並べ替えられます。 初回起動時にはセクションは折りたたまれた状態です — 上の画像では 6つすべてが閉じています。App-Stateは、その後アプリの起動をまたいで 折りたたみ状態と順序の設定を保存します。すでに保存されている古い並び順は、 初回起動時に一度だけ新しいグループ化へ移行されます。Viewport ▸ Reset Inspector Layoutは初期出荷時の状態に戻します。
インスペクタの操作要素の多くは、Settings(第3章)にもほぼ同じ形で 登場します — 典型的にはSfMバックエンド、Sky-Masking、 そのほか類似のデフォルト設定です。この区別は意図的なものです: Settingsは 新規作成するプロジェクトのためのアプリ全体のテンプレートを提供し、 インスペクタは現在開いているプロジェクトのためにこれらの値を上書きします。 片方の操作ロジックを知っていれば、もう片方も迷わず使えます。
Expert Modeの左のカラム — プロジェクトナビゲータ — はインスペクタには 属しませんが、その直接の隣人です。そこではインポートした画像をクリックで選択し、 スペースキーでQuick-Lookとして表示し、マイナスボタンまたは 削除キーで削除できます(Cmd-Zで取り消し可能)。 インスペクタは現在のサイドバー選択に応じてコンテキストに特化した 詳細情報を追随表示しますが、7つの主要セクションは常に利用可能なままです。
Look セクション (L1–L5)
Look セクション(内部では引き続き「Finishing」と呼ばれている)は、ドメインの再編成以降 5番目の Inspector セクションとなり — Progress と Export の間に位置し — トレーニング後の画像調整を一箇所に集約している。すべてのスライダーは 非破壊で動作する:各スライダーは変更されていない Pristine スナップショット(オリジナルの DC カラー、Opacity、スケーリング)に対して Look の計算を毎回改めて適用する — つまりこの調整は累積的ではなくべき等である。結果は Viewport にリアルタイムで表示され(WYSIWYG、後の Export とまったく同じ)、すべての Export に焼き込まれる。このセクションは トレーニングの実行が完了した後にのみ利用可能で(それ以前は「Available after a training run completes.」と表示される)、値は 新しいトレーニングのたびにリセットされる。Export の実行中は、すべてのスライダーがロックされ — 「Locked while exporting — the file uses the current settings.」というロックの注意書きが表示され、GroupBox は disabled になる。
L1Saturation スライダー
場所
Inspector → Look セクション → GroupBox → Saturation。
技術詳細
スライダー 0.5–1.2、表示は小数点以下2桁(例:「1.00」)。各 Splat の SH-DC クロマを輝度値を基準にスケーリングする: 1.0 = 変更なし、< 1.0 = 彩度を下げる(色をグレースケール方向に引き寄せる)、> 1.0 = より鮮やかに。数学的には Pristine スナップショットから DC カラーを再計算するため、繰り返しスライダーを動かしても累積しない。DJI ドローン素材(Pensford 高架橋)で検証済みで、この種の素材は 彩度が過剰になりがちなため — ドローン用デフォルト値は 0.82 に設定されている。色のベース(SH グレード 0)にのみ作用し、 より高次の SH 係数は影響を受けない。
L2Splat length スライダー
場所
Inspector → Look セクション → GroupBox → Splat length。
技術詳細
スライダー 0.3–1.0、表示は小数点以下2桁。各 Gaussian の3つのスケーリング軸を対数空間でその平均値に近づける (値が小さいほど強く効く):1.0 = 変更なし、値が小さいほど細長い「針状」の Splat を丸くし、0 だと純粋な球になる。 全体のサイズを変えることなく、針のように過度に伸びた Splat に作用し、典型的な「紙吹雪」アーティファクトを軽減する。 Pristine スナップショット(オリジナルの対数スケーリング)から適用されるため、べき等である。対数空間で作用するため Splat size(L3)と可換である。
L3Splat size スライダー
場所
Inspector → Look セクション → GroupBox → Splat size。
技術詳細
スライダー 0.5–2.0、表示は小数点以下2桁。各 Gaussian を3軸すべてで均一にスケーリングする: 1.0 = 変更なし、< 1.0 = より小さく/密に/シャープに、> 1.0 = より大きく/「ふんわり」(Splat 間の隙間を埋める)。 スケーリングは対数空間にあるため、乗算はそこでは加算的なシフトになる — これは Splat length(L2)と可換である。なぜなら一定のオフセットは平均値からの偏差に影響を与えないからだ。Pristine スナップショットから計算されるため、べき等である。このバージョンで新規追加。
L4Fade far region(サブスライダー付き)
場所
Inspector → Look セクション → GroupBox → トグル「Fade far region」 に加えて、サブスライダー「Fade start ×radius」と「Fade floor」。
技術詳細
カメラの重心からの距離に応じた放射状の Opacity 減衰を有効にするトグル — 観測が乏しい背景の「Far 紙吹雪」を フェードアウトさせる。Orbit 撮影のみ対応:シーンがそれに適さない場合(直線的な飛行、カメラの数が少なすぎる、または縮退した カメラ配置)、トグルはグレーアウトされ、そのときはサブスライダーの代わりに「Far-fade applies only to orbit captures (not this scene)." というメッセージが表示される。適性はカメラ位置の方位角カバレッジによって判定される(Orbit は重心を周回し多くの コンパス方位セクターを埋めるが、直線飛行は~2程度しか埋めない)。2つのサブスライダーがジオメトリを制御する: Fade start ×radius(1.0–3.0)は、その内側では完全な Opacity が保たれる内側半径を Orbit 半径の倍数として設定する; Fade floor(0.0–1.0)は、Fade 半径をはるかに超えた位置での Opacity 係数である。重要な点として、フェードは Sky-Dome 領域をスキップする(ドームの凍結された Gaussians)ため、意図的に作られた背景のドームが 一緒に暗くなることはない。
L5Reset finishing ボタン
場所
Inspector → Look セクション → GroupBox → 「Reset finishing」(下部の小さなボタン)。
技術詳細
すべての Look 設定をデフォルト値に戻す(Saturation 1.0、Fade オフ、Splat length 1.0、 Splat size 1.0)。同時に Finishing を即座に再実行させ、Viewport を変更されていないトレーニング済みの状態に 戻す。Look スタック全体が Pristine スナップショットからべき等に計算されるため、「デフォルトに戻す」は正確に 元のトレーニング出力そのものである — 何度行き来しても品質の劣化はない。このセクションの他のすべてのスライダーと同様、 Export の実行中はロックされる。
プリセットセクション (I1–I11)
プリセットセクションは、テスト済みの構成を適用する最も手早い方法です。組み込みプリセット(Capture Class、Classic、MCMC、Hybrid)は実証済みの再現可能な出発点を提供し、 独自の プリセットは保存・エクスポート・インポート・共有できます。リストは カテゴリー(Capture Class、Classic、MCMC、Hybrid、Custom)ごとにグループ化されており、 複数のカテゴリーを同時に開いておくこともできます。コンテキストメニューの仕組み (行を右クリック)から、エクスポート、 複製、そして自作プリセットの場合は削除にアクセスできます。
I1Save…ボタン
場所
インスペクター → プリセットセクション → Save…ボタン(下部の アクションバー)。
技術詳細
テキストフィールドと Save/Cancelボタンを備えたポップオーバーを開きます。現在のトレーニング設定の状態が、新しい カスタムプリセットとして永続化されます(JSONエンコードされ、アプリ全体で 保存されます)。保存処理では81個すべてのトレーニングパラメーターに加えて 現在のDensification戦略もコピーされます。プリセットは自動的に Customカテゴリーに入ります。元がどの組み込みプリセットから 派生していたかは関係ありません。空の名前や 空白文字のみの入力は破棄されます。既に 存在する名前が拒否されることはありません — 各 プリセットは固有の内部IDを持つため、名前の重複は技術的には 許されますが、実用上は紛らわしいです。
I2Preset Name テキストフィールド
場所
Saveポップオーバー → 「Preset Name」テキストフィールド。
技術詳細
角丸の枠を持つ、幅広の シンプルなテキストフィールドです。値はSaveボタンのクリック時に プリセット名として採用されます。UI上の文字数制限はありませんが、保存される名前は JSONエンコード可能で、UIリスト上で表示できる必要があります — 絵文字や ウムラウトも問題なく使えます。内容はポップオーバーを開くたびに 自動的に空文字にリセットされます。Saveボタンは トリム後にフィールドが空である限りdisabledのままです。オートサジェストや 現在アクティブなプリセット名での事前入力は ありません。
I3Cancelボタン(Saveダイアログ)
場所
Saveポップオーバー → Cancelボタン(左側)。
技術詳細
保存せずにポップオーバーを閉じます。 テキストフィールドの内容は破棄されます — 次に開いたときは Save…ボタンのロジック(I1)によって再び空にリセットされます。標準の ボタンスタイルで、確認ダイアログやホットキーはありません。現在の TrainingConfigは変更されません。Saveのパスがそもそも実行されなかったためです。
I4Saveボタン(Saveダイアログ)
場所
Saveポップオーバー → Saveボタン(右側、目立つスタイル)。
技術詳細
実際の永続化処理をトリガーします。名前が 空でないことをもう一度検証し(防御的チェック)、その後 現在のTrainingConfigをJSONとしてアプリのストレージに書き込みます。その後 ポップオーバーを閉じます。青色で強調表示され、 テキストフィールドが空の間はグレーアウトされます。保存に失敗した場合 (例えばアプリのストレージが満杯の場合 — 非常に稀ですが)、現在のところ 表示されるエラーダイアログはありません。その場合プリセットは次回の アプリ起動時に単に現れないことになります。
I5Export…ボタン
場所
インスペクター → プリセットセクション → アクションバー → Export…ボタン。
技術詳細
現在選択されているプリセットを .radiancepresetファイル(内部的にはJSON)としてエクスポートします。プリセットが 選択されていない場合はdisabledになります。クリックすると、アプリは 既定のファイル名(プリセット名 + .radiancepreset拡張子)を持つ 保存ダイアログを開きます。 保存されるフォーマットには、完全なTrainingConfigに加えて メタデータ(名前、カテゴリー、ID、組み込みフラグ)が含まれます。Finderでの ダブルクリックはアプリを開きますが — インポートは自動的には行われません。 利用者はImportボタン(I6)を使う必要があります。
I6Import…ボタン
場所
インスペクター → プリセットセクション → アクションバー → Import…ボタン。
技術詳細
.radiancepresetファイルのみを許可する ファイルダイアログを開きます(複数選択は無効)。 選択すると、JSONファイルが読み込まれ、検証されたうえで Customカテゴリーに挿入されます — 組み込みプリセットとの衝突を避けるため 新しい内部IDが割り当てられます。インポートは自動的に カテゴリーをCustomに設定します。エクスポートされたプリセットが元々 組み込みプリセットであった場合でも同様です。破損している、あるいは 古いスキーマバージョンと互換性のないファイルは、エラーダイアログなしで 静かに拒否されます(ただしコンソールログには情報が 残ります)。
I7プリセット行(クリックによる有効化)
場所
インスペクター → プリセットセクション → 各カテゴリー内の 各プリセット行。
技術詳細
プリセット行をクリックすると、TrainingConfigの すべてのフィールドがプリセットの値に置き換えられ、アクティブな プリセットのIDが記憶され、Modifiedステータスがリセットされます。行の 前にあるアクティブチェックマークは、プリセットが選択されていて、かつ 未変更の場合にのみ表示されます。TrainingConfig内の値が変更されると (他のインスペクターセクションでのスライダー、ステッパー、トグル操作)、 名前の後ろにオレンジ色の「Modified」バッジが表示されます。組み込みの プリセットは上書きできません — 変更した場合は、Saveボタン (I1)経由で自作コピーを作成する必要があります。
I8コンテキストメニュー「Export…」
場所
各プリセット行を右クリック → 最初の項目 「Export…」。
技術詳細
I5(Export…ボタン)と同一の機能ですが、 より手軽にアクセスできます — プリセットを事前に選択しておく必要が ありません。行内でクリックされたプリセットを直接エクスポートします。すべての プリセットカテゴリー(組み込みまたはCustom)で同じように機能し、 制限はありません。エクスポートには組み込みフラグと元の カテゴリーが含まれますが、再インポート時はI6で説明した通り カテゴリーはCustomにマッピングされます。
I9コンテキストメニュー「Duplicate」
場所
各プリセット行を右クリック → 2番目の項目 「Duplicate」。
技術詳細
プリセットをCustomカテゴリーに複製します。新しい 内部IDを生成し、名前の末尾に「 Copy」を付加してコピーを保存します。 組み込みプリセットに対しても機能します — その場合クローンは 編集可能になります。オリジナルは変更されません。TrainingConfigは 値ごとにコピーされ(JSONラウンドトリップ)、オリジナルとコピーの間に 参照上の結びつきは残りません。
I10コンテキストメニュー「Delete」
場所
自作のプリセット行を右クリック → 最後の項目 「Delete」(赤色、破壊的操作)。
技術詳細
Customプリセットに対してのみ表示されます。組み込み プリセットは削除できません。この項目は破壊的操作としてマークされており、 コンテキストメニュー内で赤色表示され、区切り線の後ろに配置されることで 誤ってクリックしないようになっています。確認 ダイアログはありません — クリック一回でプリセットが即座に 削除されます。削除されたプリセットは 復元できません(ここではCmd-Zは機能しません — 現行ビルドの Undoは画像リストにのみ対応しており、プリセット操作には 対応していません)。削除されたプリセットがちょうどアクティブだった場合、 現在のTrainingConfigは変更されず、アクティブなプリセットの選択状態のみが クリアされます。
I11カテゴリーヘッダー(展開/折りたたみ)
場所
インスペクター → プリセットセクション → 各カテゴリーヘッダー (Capture Class、Classic、MCMC、Hybrid、Custom)。
技術詳細
カテゴリーごとに折りたたみ状態が異なるデフォルトを 持っています。厳選されたグループであるCapture Classは 展開された状態で開始し、Classic、MCMC、Hybrid、Customは 折りたたまれた状態で開始します。この状態は 永続化されません — アプリを再起動すると、すべてのカテゴリーは再び デフォルト状態に戻ります。シェブロンの矢印はアニメーション付きで回転します。 ヘッダー右側の数字は、そのカテゴリー内のプリセット数を 示します。クリック可能な領域はヘッダー全体を カバーします。
トレーニング設定セクション(I12–I22)

ここにはトレーニング実行のための中心的な設定項目が集まっている: Densificationがどう動くか、イテレーション数、SSIMの重み付けの大きさ — さらに下部にはかつて独立していた拡張機能(Perceptual Loss、Outdoorグループ、 Advanced Densifier、Post-Trainingパス)も並ぶ。一番上には Densificationの3択スイッチ Classic | MCMC | Hybrid がある。SfMバックエンドは もはやここにはなく、独立したセクションカメラ&撮影(I12、I13)に 移動している。3つのMCMC行(「MCMC Quality」「Auto-scale by scene」 「Max Gaussians」)はClassicモードでも消えることはなくなり、表示されたまま グレーアウトされる。その下には鍵アイコン付きの行があり、何を変更すれば よいかを示す(「Only used by the MCMC and Hybrid densifiers — switch Densification above to change these.」)。さらにその下にある区切られたブロックには、 どのDensifierでも共通して適用される行がまとめられている:Depth-Priority Scatter、 Full-Resolution Training、連動するMax Iterations / Densify Untilのペア、 そしてSSIM WeightとRender Scaleのスライダーだ。
I12Camera Alignmentピッカー
場所
インスペクタ → カメラ&撮影 → Camera Alignment (Projectionピッカーの下にあるポップアップメニュー)。
技術詳細
ポップアップメニューであり、セグメント化されたピッカーではない — ラベルが狭いインスペクタ列に収まらないためだ。どの項目が表示されるかは ビルドに依存する:サンドボックス化されたApp Store版は Apple PhotogrammetryとNativeを提供し、開発/DMGビルドでは さらにCOLMAPも加わる。理由はCOLMAPが外部のコマンドラインプログラムであり、 サンドボックス化されたアプリは外部バイナリを起動できないためだ (App Reviewガイドライン2.5.2)— そのためStoreビルドではバックエンド項目自体が Mapperピッカーやバイナリパスとともに完全に非表示となり、常時グレーアウトの ままにはしない:決して点灯しえない行は手がかりではなく、単なるノイズだからだ。 混同注意: COLMAPワークスペースのインポートとエクスポートは 純粋なSwiftファイルのパース処理であり、COLMAPのインストールを必要とせず、 どのビルドでも動作する(第1章、M5)。Native項目の「(Beta)」表記は なくなった — Nativeはv1.5.2以降、もうベータではない。この選択は次回実行の SfMバックエンドを決め、同時にその下の行(I13、High-Quality、Native SfM Recipe)が 操作可能かどうかも制御する。UI内の脚注: 未整列の写真セットの場合、 パイプラインはピッカーの表示にかかわらず常にNativeで整列を行う — このレシピはNativeにしか存在しない。その際ピッカー自体は意図的にロックされない (値が使用不可というわけではなく、単に上書きされるだけ);代わりに分岐アイコン付きの 注意書きが表示される。
I13FOV Overrideフィールド(Native SfM)
場所
インスペクタ → カメラ&撮影 → FOV Override(常に表示、 Camera Alignment = Nativeのときのみ操作可能)。
技術詳細
数値テキストフィールド(範囲0-170°)、デフォルト0=EXIFまたは ヒューリスティックからの自動判定。入力画像が焦点距離メタデータを持たない 動画から抽出されたものである場合、手動入力が必要になる。典型的な値: iPhone Wide ≈ 73°、DJI Mavic Wide-Crop ≈ 70°、フルフレームセンサー搭載 ドローン ≈ 84°。値は[0, 170]にクランプされる — 範囲外の値は直ちに押し戻される。ネイティブSfMパイプライン(Q4/Q5)にのみ 影響する;Apple Photogrammetryはこの値を完全に無視する。2026-07-18より: 他のバックエンドではフィールドはもはや非表示にならず、グレーアウト される — 「High-Quality」と「Native SfM Recipe」、および鍵アイコン付きの行 (「These configure the Native aligner — choose Native under Camera Alignment to change them.」)と一緒に。以前の非表示処理では、 これらの調整項目が存在すること自体が隠されてしまっていた。このゲートは 選択されたバックエンドに紐づいており、実際に使用されるバックエンドには 紐づいていない — 未整列の写真セットがNativeへ振り分けられる件は代わりに I12下の注意書きが伝える。「Native SfM Recipe」行はさらに未整列の写真セットを 必要とし、それ以外の場合は独自の説明行を表示する。
I15Densificationピッカー
場所
インスペクタ → トレーニング設定 → Densification (セグメント化されたピッカー、常に表示)。
技術詳細
2つのDensification戦略を切り替える:Classic(Clone/Split/Pruneと 勾配閾値を使うオリジナルの3DGS手法)とMCMC(Relocationを伴う Stochastic Gradient Langevin Dynamics、NeurIPS 2024)。ClassicからMCMCへの 切り替え時、アプリはMCMC固有のフィールドを自動的に実証済みのデフォルト値に 設定する(Reg-Weights = 0、MCMC-Cap-Multiplier 3.0、Sample-/Noise-Schedule)。 この自動初期化がなければ、古いプリセットを使うセッションは1.4.4での MCMC崩壊バグ(460K→5個のGaussian、ウォッチドッグによる強制終了)に 見舞われていた。ピッカーの選択はさらにどのインスペクタ要素が表示されるかも 決める — MCMCではI16/I17が現れる。フィールドごとの詳細な作用は 第6章、T11–T16(Classic)とT61–T73(MCMC)にある。
I16MCMC Qualityトグル
場所
インスペクタ → トレーニング → MCMC Quality(常に表示、 Densification = MCMCまたはHybridのとき操作可能)。
技術詳細
勾配累積を2ステップ(有効)または1ステップ(無効)に切り替える。 オプティマイザのステップを実行する前に、連続する2つのカメラビューから 勾配を累積する。これにより最適化経路が滑らかになり、最終結果がわずかに、 だが目に見える程度に改善する。代償はトレーニング時間の倍増だ。非常に長い トレーニング(20万イテレーション)では、これによりさらに10分以上の待ち時間が 生じる — つまり最後の数パーセントの品質が本当に必要な場合にのみ 価値がある。トレーニングにのみ影響し、エクスポート形式やビューポート 表示には影響しない。同じMCMCの仕組みを使うHybridにも適用される。 2026-07-18より: Classicではこの行はもう消えず、I17と「Max Gaussians」と 共にグレーアウトされる;その下に「Only used by the MCMC and Hybrid densifiers — switch Densification above to change these.」と表示される。
I17Auto-scale by sceneトグル
場所
インスペクタ → トレーニング → Auto-scale by scene(常に表示、 Densification = MCMCまたはHybridのとき操作可能)。
技術詳細
有効にすると、実効Max-Gaussians上限がSfM初期点数 × MCMC-Cap-Multiplier(デフォルト3.0)でスケールする。例:SfMが25万個の 初期点を返し、ベースCapが15万、Multiplierが3.0の場合 → 実効上限 = max(150K, 750K) = 750K。無効の場合は厳密にベースのみが適用される。 ベース自体はすぐ下のMax Gaussians行にある(v1.8以降、デフォルト 150,000、入力は10,000–30,000,000にクランプ)。実効上限がベースを 上回る場合、アプリはそれを平文で表示する(「Effective cap for this scene: …」)— 高くなりすぎる場合はRAM警告も付く。1000フレームを 超える大規模なアウトドア撮影で、対応する高いSfM点密度が固定された 15万のデフォルトCapによってDensificationを飢餓状態にしていた (不要な点が残り、新しい点が生成できなかった)ため、v1.4.5で 導入された。カスタムプリセットではデフォルトOFF、MCMCの組み込み プリセットではON。トレーニング時にのみ影響し、エクスポートには 影響しない。2026-07-18より: Classicではこの行は非表示ではなく グレーアウトされる(I16と同じ説明行付き);平文表示とRAM警告は 意図的にそこには現れない。Classicはそもそも上限を適用しないからだ。
I18Max Iterationsステッパー
場所
インスペクタ → トレーニング設定 → GroupBox → Max Iterations。
技術詳細
範囲1,000–100,000、刻み幅1,000のステッパー。オプティマイザの イテレーション総数を決める。トレーニング時間と線形に相関する (半分にすればおよそ50%の時間になる)。実証済みの値は20K(Classic Balanced)、40K(Classic Quality)、200K(MCMC Full)だ。40Kを超えると Classicではほとんど改善が見られない — 効果が頭打ちになる。 値を変更すると、リンク機能(I19)が有効な場合、Densify Untilも比例して 連動する(デフォルト比率:0.5、つまりDensify-Until = Max/2)。
I19リンク/リンク解除ボタン(Densify ↔ Iterations)
場所
インスペクタ → トレーニング設定 → GroupBox → Max IterationsとDensify Untilの間にある小さなリンクボタン。
技術詳細
Densify UntilとMax Iterationsの比率を固定するトグルボタン。 有効時(リンクアイコンが強調表示)は、Max Iterationsを変更するたびに Densify Untilが比例して連動する。リンク解除時(リンク+プラスアイコン)は 値が独立したままになる。デフォルトはリンク状態だ。これが典型的な相関を 反映しているためだ — トレーニングのイテレーション数を倍にする場合、 たいていDensificationの実行時間も比例して延ばしたいはずだ。この比率は リンクボタンを設定した時点の現在値から計算される;典型的な比率は0.5 (Densify-Until = イテレーション数の半分)だ。
I20Densify Untilステッパー
場所
インスペクタ → トレーニング設定 → GroupBox → Densify Until。
技術詳細
範囲500–50,000、刻み幅500のステッパー。Clone/Split(Classic) またはRelocation(MCMC)による新しいGaussianの追加がそれ以上行われなく なるイテレーション番号を決める。到達後は位置と色の精緻化のみが行われる。 値が高いほど=Gaussianが多い=ファイルが大きく、1イテレーションあたりの 処理時間も長くなる(1ステップあたりGPU時間が+30-60%)。典型的な値: 15K(Max-Iter 30Kに対して)、20K(40Kに対して)、100K(MCMC 200Kに対して)。 リンク(I19)が有効な場合は自動的に比例スケールする。ClassicとMCMCとで 作用が異なる:Classicは成長を完全に止め、MCMCはRelocationロジックを 止めるが、Sample-/Noise-Adaptationは継続する。
I21SSIM Weightスライダー
場所
インスペクタ → トレーニング設定 → GroupBox → SSIM Weight。
技術詳細
0.0–1.0の範囲を0.05刻みで動かすスライダー、表示は 「0.20」の形式。L1損失(0.0)とSSIM損失(1.0)を混合する。L1はピクセル ごとの明るさを厳しく評価し、SSIMは構造的な類似性(エッジ、局所統計)を 評価する。デフォルト0.2はオリジナルの3DGS論文(Kerbl 2023)の値であり、 ほぼあらゆるシーンに通用する堅実な妥協点だ。高い値(0.5以上)は ディテール保持を優先するが、局所的な明るさの誤りを見逃す可能性がある。 低い値(0.1未満)は鋭いエッジでのディテール損失につながる。SSIMの 計算はシェーダー内で11×11のガウシアンウィンドウを使って行われる。 パフォーマンス:0.0(L1のみ)ではシェーダー内のSSIM計算が省略される ため、トレーニングが約8-12%高速化する。
I22Render Scaleスライダー
場所
インスペクタ → トレーニング設定 → GroupBox → Render Scale。
技術詳細
0.25–1.0の範囲を0.25刻みで動かすスライダー、表示は 「100%」の形式。トレーニング時のレンダリング解像度を元画像サイズに 対して相対的にスケールする。パフォーマンスへの最大の影響因子:50%で GPU時間が約75%削減される(ピクセル数が4分の1になるため)、25%では 約94%削減される。勾配閾値も自動的に連動してスケールする。スライダーの 下にはMP単位でのライブ解像度表示が現れる(例:「2304×1296(3.0 MP)」)。現在の値が推奨値と異なる場合、オレンジ色の文字で 「— recommended: 50%」と表示される。この推奨は実効解像度で 約3MPを狙ったものだ — Apple SiliconのGPUが最も効率よく処理できる 範囲である。例えば4Kの元画像には自動的に25%が推奨され、フルHD画像には 100%が推奨される。値を変更すると、バッファの再割り当てもトリガーされる。
Enhancementsグループ(トレーニングセクション内、I26–I29、I42–I44)

これらのグループは、トレーニングのコア・ループ自体を変更することなく画質を向上させる機能をまとめたものだ。2026-07-18まではこれらはEnhancementsという独立したInspectorセクションを構成していたが、ドメインの再編成以降はTrainingセクションの下端に置かれている。以前あったViewport-Scalingピッカー(Off/MetalFX/Lanczos)は代替なしで廃止された。理由は、これが実際には何の効果も持っていなかったからだ — Viewport内のblit判断は純粋に幾何学的なものであり、そのラベルはさらに「拡大」を約束していたが、実際のLanczosパスはオーバーサンプリングされた画像をアンチエイリアシングしながら縮小するものだった。それに合わせてViewport内の表示は「Scaling」ではなく「Sampling」と呼ばれるようになった(第4章参照)。アプリ内のどこにもMetalFXによる拡大処理は存在しない。Perceptual Loss(I29)はグループへの所属にもかかわらずトレーニングの構成要素であり — トレーニング中に追加のLoss項として有効化される。この項目は一番上に置かれ、説明文には「Multi-scale blur feature matching for structural similarity」とある。その下にはOutdoorグループがあり、Sky Masking、Person Masking、Floater Cleanup、Reconstruct Sky Dome(I42–I44)という4つのスイッチが並ぶ — これらは空のフローターに対処するトレーニングオプションで、以前は設定ウィンドウにあったが、今はプロジェクトごとにここに配置されている。続いて折りたたまれた「Advanced Densifier (Expert)」行があり、これは警告三角マークを持つ。その先には、トレーニングを台無しにしかねない設定項目があるためだ。最後に「Runs automatically at the end of training」グループがあり、Post-Training Compactification(I26)と「Remove Needle/Disc Floaters」スイッチが含まれる。
I26Post-Training Compactificationトグル
場所
Inspector → Training → 「Runs automatically at the end of training」グループ → Post-Training Compactification。
技術詳細
トレーニング終了時に片付けパスを有効にする: トレーニング 反復の完了後、Opacityが0.01未満(可視率1%)のGaussianが削除される。 これによりファイルサイズは通常ほぼ半分に縮小するが、視覚的な品質 低下は生じない — これらのGaussianはそもそも視覚的に寄与していない からだ。Compactificationは GPU Compactパスとして実行され、Gaussian数に応じて数分の一秒から 数秒かかる。トレーニングのパフォーマンスには影響しない。この トグルがオフの場合、不可視のGaussianもエクスポートされる — これはフォーマットを次のトレーニングステージ(Continue Training)で 使いたい場合にのみ意味があり、それ以外の場合はストレージの無駄に なる。
I29Perceptual Lossスライダー
場所
Inspector → Training → Perceptual Loss。
技術詳細
0.0–0.2の範囲を0.01刻みで動かせるスライダーで、0.0のときは 「Off」、それ以外は「0.05」のように表示される。レンダリングの マルチスケールGaussianブラーとGround-Truth画像を比較する追加の Loss項を有効にする(3段階のブラースケール)。L1+SSIMだけでは検出 できない構造的な違いを捉える。 0.05から0.1の間の値は微細な構造を目に見えて改善し、その割に トレーニング時間のコストはわずかで済む — 約5%程度である (ブラーカーネルを通す追加のForwardパス)。0.15を超えるとこのLoss項が 最適化を支配してしまい、トレーニングが不安定になり品質が再び低下 する。この効果はトレーニング中に働くものであり、後処理では ない — トレーニングセクション末尾のEnhancement行に配置されている にもかかわらず、これは事後の純粋なアップグレードではない。
I42Sky Masking
場所
Inspector → Training(Outdoorグループ) → 「Sky Masking」トグル。プロジェクトごとに保存される。デフォルト: オフ。
技術詳細
トレーニング開始前のApple Visionベースの空ピクセル セグメンテーションを有効にする。トレーニング開始前に、各入力カメラ に対してApple Visionの前景マスク(空 = 背景)によって空領域が抽出 され、それぞれのカメラのピクセル単位マスクとして割り当てられる。 トレーニング中、各ピクセルのLoss寄与にはこの空マスクの補集合が 乗算される — 空ピクセルは勾配に0しか寄与しないため、空に投影 されるGaussianは最適化シグナルを受け取らず、「密になる」ことも 「明るくなる」こともない。Outdoor/ドローンシーンにおけるフローター (空に浮かぶ暗い塊)を大幅に減少させる。古典的な40Kトレーニングでは 約3%のL1回帰を犠牲にする。空がはっきり 判別できるOutdoorシーンでのみ意味があり、屋内シーンや白い背景では Skyセグメンテーションが誤った領域を識別し、有効なLossシグナルを ブロックしてしまう。この値はプロジェクトごとに保存され (もはやアプリ全体のグローバル値ではない)、プリセットまたはシーン ファイルに従う。
I43Floater Cleanup
場所
Inspector → Training(Outdoorグループ) → 「Floater Cleanup」 トグル(サブタイトル「Remove Gaussians outside all camera views」)。プロジェクトごとに保存される。デフォルト: オフ。
技術詳細
このスイッチは異なる条件を持つ2つの 効果を制御する。両方とも起動時にランローカルな設定へと反映される だけで、保存済み設定には書き込まれない(そうしないと、一方通行の ラッチとして残ってしまうため)。(1) トレーニング終了時のFrustum-Union-Cull — すべての カメラフラスタムの和集合の外側にあるGaussianが除去される (「一度も観測されなかった」=「一度も制約されなかった」であり、 これがフローターの大半に当てはまる)。この部分には戦略に よる条件分岐がなく、Classic、MCMC、Hybridいずれでも同様に動作する — このスイッチの名前の由来もこの部分にある。(2) ラン途中の2回の追加Density-Controlパス — Classic のみ、かつ30,000反復以上の場合に限られ、ラン長の55%と85%地点に 設定される(35–40Kの場合、約20Kと30Kに相当)。両パスとも、 非常に低いOpacity、極小のスクリーン空間サイズ、Loss寄与のない Gaussianを探し出し、パージする。効果: 最終的なGaussian数が 約5–15%減少し、ドローン/Outdoorシーンでは空の暗い塊が目に見えて 減る。クローズアップの屋内シーンでは約1–3%のL1回帰を犠牲にする ため、デフォルトでは有効化されていない。この値はプロジェクトごとに 保存され、プリセットまたはシーンファイルに従う。 以前の版に対する訂正: このトグルはもはやClassicの Densifierに限定されておらず、MCMC/Hybridの下でも グレーアウトされない — 以前は皮肉にも、MCMCおよびHybridの ユーザーが、実際に自分たちに効いていたはずのCullから締め出されて いた。短いラン(例: P2 Preview 5K)では、ラン途中部分のみが省かれる。
I44Reconstruct Sky Dome
場所
Inspector → Training(Outdoorグループ) → 「Reconstruct Sky Dome」トグル。プロジェクトごとに保存される。デフォルト: オフ。
技術詳細
トレーニング開始前の空ドーム投影を有効にする。 SfMの後、トレーニング開始前に、各入力カメラに対してS7で共有される Apple Visionの空マスクが画像から抽出され、空ピクセルはカメラの 内部パラメータを用いて仮想球体表面(デフォルト半径はシーン半径の 8倍)へと逆投影される。この球体上には、投影された空ピクセルからの 色平均値、非常に大きなスケール(シーン単位で1.0)、初期Opacity 0.95 を持つ約5000個の新しいGaussianが初期化される。これら5000個の Gaussianは古典的な意味でのSkyマスクではない — 他のすべてのGaussianと同様にトレーニングされるが、高い初期Opacity によって薄い殻の中に留まる。結果: Outdoor/ドローンシーンでの360° ノベルビューでは、暗い紙吹雪のような塊の代わりに、実際の空の色と 雲の構造が現れる。この値は再起動を跨いで記憶される。少なくとも 360°のカメラ撮影範囲を持つOutdoorシーンでのみ意味があり、空が 見えない純粋なオブジェクトキャプチャーでは効果がない。ステータス: 実験的機能であり、さらなるOutdoorデータセットでの広範なA/B検証は まだ行われていない。
メトリクス・セクション (I30–I37)

トレーニングが進行している間、メトリクス・グループ(「Training Metrics」、進捗セクション内にある2つの折りたたみ可能なグループのひとつ)は、トレーニングループからの8個のライブ値を表示する。トレーニング開始前は空である(「Start training to see live metrics」)。 すべての値は約30 イテレーションごとに更新される(ライブメトリクスの更新頻度)。このセクションは読み取り専用であり、 どの項目もクリックしたり変更したりすることはできない。より深い分析のためには、 ~/Documents/RadianceKit/Logs/ 以下のJSONLトレーニングログを参照すること。
I30Iteration
場所
Inspector → 進捗 → Training Metrics → Iteration。読み取り専用。
技術詳細
「4523 / 40000」という形式の表示 — 現在の イテレーション数と予定されている総イテレーション数。トレーニングループと同期してカウントされ、 このループは約30イテレーションごとに値をプッシュする。2つ目の数値は 開始時点のMax-Iterations値に対応しており、その後ユーザーがステッパーを変更しても 変化しない — 実行中のトレーニングは開始時点のスナップショットコピーを使用する。Training メニューからイテレーションを追加した場合(Continue Training +5K/+10K/+20K)、分母の値が増加する。
I31Loss
場所
Inspector → 進捗 → Training Metrics → Loss。読み取り専用。
技術詳細
小数点以下6桁の浮動小数点値(例: 「0.024385」)。組み合わされたL1+SSIM Loss(配合比はI21 SSIM Weightで制御)に加えて、 オプションのPerceptual Loss(I29)やその他の正則化項を測定したもの。スケールは絶対的なものではなく シーン依存であり、ほとんどの比較には同じデータセットが必要となる。良好な設定における典型的な 最終値:Classic Quality 40Kイテレーション: 0.022–0.025(Horse、Truck、Garden)、MCMC Full 200Kイテレーション:0.024–0.028 、屋外ドローン30K:0.030–0.060(ジオメトリの都合上やや悪くなる)、 屋内アパートメント:0.018–0.025。
5Kイテレーション後に値が0.10を超える場合はSfMの問題(カメラの姿勢が不正確)を 示唆している — 中断してSfMを再計算すること。
I32Learning Rate
場所
Inspector → 進捗 → Training Metrics → Learning Rate。読み取り専用。
技術詳細
科学的記数法での表示(例:「1.60e-04」)。 位置パラメータの現在の学習率(3DGSには位置、SH-DC、SH-Rest、Opacity、Scale、Rotationのために 6つの独立した学習率があるが、ここでは代表値としてPosition-LRが表示される)。デフォルトの初期値は 1.6e-4で、指数減衰によりトレーニング終了時には約1.6e-6まで低下する。この減衰は トレーニング設定のLR-Scheduleフィールド(第6章のT-フィールド)で調整可能である。学習率が 異常に高いままの場合(例:10,000イテレーション後も1e-3以上)、 誤って読み込まれた設定を示している可能性がある。
I33SH Degree
場所
Inspector → 進捗 → Training Metrics → SH Degree。読み取り専用。
技術詳細
0~3の整数。色表現のための Spherical-Harmonics次数。0から始まり(DC成分のみ、すなわち Gaussianごとの方向非依存の色 — つまりRGBの定数のみ)、トレーニングの進行に伴って段階的に 3まで上昇する。標準スケジュールでは1000/2000/3000イテレーションごとに 次数を1ずつ引き上げる。SH-3はGaussianあたり48個の色係数 (RGB 3チャンネル × 16個のSH基底関数)に相当する。SH次数が高いほど、方向依存の 反射(光沢のある表面が異なる視点から見て正しく異なって見える)が向上するが、 その分メモリ消費とトレーニング速度の低下も増える。
I34Gaussians
場所
Inspector → 進捗 → Training Metrics → Gaussians。読み取り専用。
技術詳細
モデル内の現在のGaussian数、ロケール区切り記号で フォーマットされたもの(例:「524.318」)。成長パターン:Classicの場合、SfMの 初期点数(典型的には50K~300K)から始まり、Clone/Split処理によりDensify Untilの 直前まで増加し、その後トレーニング終了までほぼ静的になる(Pruningを除く) 。MCMCの場合、サンプル点はMCMCのキャップに達するまで追加され、その後は Relocationのみとなる。
健全な最終値:Classic Quality:400K~700K(Horse 524K、Garden 800K) 、MCMC Full:キャップちょうど(デフォルト150K、Auto-Scale Multiplier 使用時はシーンに応じてSfM点数 × 500K~1.5M)。
MCMCで値がキャップの60%未満に落ちた場合は異常 (コラプス指標。過度に強い正則化を示唆)。
I35GPU Memory
場所
Inspector → 進捗 → Training Metrics → GPU Memory。読み取り専用。
技術詳細
Gaussianバッファのメモリ消費を、Gaussian数 × 616バイト として推定した値(メモリ表示スタイルでフォーマット)。616バイトは フル装備のGaussian1個分のサイズである(位置、 スケール、回転、Opacity、次数3のSH係数、勾配 アキュムレータ)。この表示はレンダラーのオーバーヘッド (Tileバッファ、Sortバッファ、Backwardバッファ)を含まない — 実際のGPU メモリ需要は、この値の典型的には2~3倍になる。500K Gaussiansの場合: 表示上約290 MB、実際は約700 MB。1.5M Gaussiansの場合:表示上 約880 MB、実際は約2.5 GB。64GB以上のUnified Memoryを搭載したM3 Maxでは 問題にならないが、18GBのM3 Proではすでに限界に近い。
I36Speed
場所
Inspector → 進捗 → Training Metrics → Speed。読み取り専用。
技術詳細
小数点以下1桁までの1秒あたりのイテレーション数 (「24.3 it/s」)。トレーナーが直近約100イテレーションにわたる 移動平均として計算する。典型的な値:Quickプリセット(1K イテレーション):80~120 it/s(短時間でありsteady-stateなし)、Classic 20K @ 1.0 Render Scale(Truckシーン、M3 Max):25~35 it/s、Classic 20K @ 0.5 Render Scale:80~120 it/s、MCMC 200K @ 0.5 Render Scale:25~50 it/s (Relocationの分だけ遅くなる)、1M以上のGaussiansかつフル解像度の場合: 10 it/s未満。
トレーニングの進行に伴う速度低下は正常である — Gaussianが増える= イテレーションあたりの計算量が増える。急激な低下(例:30 → 5 it/s)は GPUの熱スロットリングや競合するアプリを示唆している。
I37Elapsed
場所
Inspector → 進捗 → Training Metrics → Elapsed。読み取り専用。
技術詳細
経過時間を「4:23」(m:ss)または 「1:23:45」(h:mm:ss)として表示。1時間を境にフォーマットが切り替わる。純粋な トレーニング時間のみを測定し、先行するフェーズ(SfM計算、画像 インポート)は含まない。一時停止/再開時も時計は動き続ける — つまりウォールクロック 時間であり、CPU時間ではない。
損失グラフ・セクション(I39~I41)

損失グラフ・グループ(「Loss History」、セクション進捗内の2番目に折りたたみ可能なグループ)は、 トレーニングの経過を時系列で可視化する。2つのチャートで構成されている: 損失曲線チャート(大きく、上部、青色)と Gaussian 数チャート (小さく、下部、オレンジ色)だ。両方とも トレーニング中にライブで構築され、次のトレーニング開始まで保持される。 最初のトレーニング前は表示領域が空になっている (「Loss curve will appear during training」)。これらのチャートは純粋な SwiftUI-Path-Drawing(Swift-Charts-フレームワークは不使用)であり、 10万点以上でも滑らかに描画できるようにするためだ。
I39現在の損失(表示)
場所
インスペクタ → 進捗 → Loss History → 左側のラベル領域 「Current: 0.0075」。読み取り専用。
技術詳細
最新の損失サンプル点の Float 値で、 小数点以下4桁でフォーマットされている。I31(メトリクス・セクションの損失)と同一だが、 ここではよりコンパクトに表示されている。データ元は損失 履歴 — 約30イテレーションごとに1エントリが追加されるリストだ。 有限の値のみリストに追加される — NaN/Infinity (勾配爆発バグの場合など、非常にまれ)はフィルタされる。
I40最小損失(表示)
場所
インスペクタ → 進捗 → Loss History → 右側のラベル領域「Min: 0.0051」(緑色)。読み取り専用。
技術詳細
現在のトレーニング実行でこれまでに観測された全損失値の最小値。 損失履歴からライブで再計算される — 個別の永続化はない。緑色の文字で表示されるのは、 「Min」=「これまでの最良値」だからだ。破線の緑の線がチャート下端に表示され、 このY位置を視覚的に示している。Continue-Training- セッションでは最小値の追跡がリセットされる — 古い履歴はUI上で 新しい履歴に置き換えられる(追加ではない)。現在のトレーニングが 前回よりも悪化している場合、Min の表示が前回の最終結果より 大きくなることもある。
I41Gaussian数チャート
場所
インスペクタ → 進捗 → Loss History → その下の2番目のチャート (オレンジ色)。読み取り専用。
技術詳細
トレーニングのイテレーションに対する Gaussian 数の推移を示す折れ線グラフ。 データ元:Gaussian-Count-History((Iter, Count) ペアのリストで、 トレーナーが約30イテレーションごとに埋める)。Y軸のスケールは 履歴内の最小値と最大値の間で動的に変化する。Classic 戦略では通常、次のような形になる:Densify Until まで着実に上昇し、 その後は平坦になる(小さな Pruning の揺らぎを伴う)。MCMC の場合: Cap まで急上昇した後、水平な線になる(Relocation が数を一定に保つため)。 終盤での減少は正常だ — 上の画像ではカーブが約16Kから 9,660まで下がっているが、これは最後のイテレーション後にクリーンアップ・ パスが働くためだ(I26)。警戒すべきは実行の途中での落ち込みのみだ: その場合は Densification が過度に積極的に prune している — 誤った デフォルト設定、あるいは既知の MCMC-Collapse-バグ(v1.4.4 ホットフィックスの話題)の兆候だ。
損失曲線の読み方
損失グラフはインスペクタの中で最も重要な診断ツールだ — トレーニングが有益に進んでいるのか、それとも行き詰まっているのかを、 これほど直接的に示す指標は他にない。典型的な健全な形は、 最初の1000~3000イテレーションでの急速な下降(~0.15から~0.05へ)に続き、 トレーニング終了まで緩やかで一定の下降(0.020~0.030へ)が続く形だ。 対数表示にすると、このカーブは滑らかな対角線のように見える。
損失のプラトーは何を意味するのか? カーブが数千イテレーションにわたって 平坦なままである場合、2通りの解釈がありうる: (a) トレーニングが「収束」した — 与えられたデータと設定で モデルが到達しうる限界に達しているため、損失はこれ以上有意には下がらない。 これは望ましい状態であり、「完了」を意味する。(b) トレーニングが「行き詰まって」いる — 本来は損失がまだ下がるはずなのに、最適化が停滞している (局所最小値、学習率が小さすぎる、Densification がオフなど)。 見分け方:損失値が典型的に良好な範囲にあり (Indoor/Object で0.020~0.030、Outdoor で0.040~0.060)、かつカーブが 5Kイテレーション以上前から平坦であれば、収束していると考えられる。 値が同様のシーンと比較して明らかに高い場合(例えば0.08)は、 行き詰まっている。
注意:Gaussian のプラトー ≠ 損失のプラトー。 Gaussian 数のプラトーは 「トレーニング完了」を意味しない。これは単に、 Densification が新しい点の追加を停止したことを意味するにすぎない — 到達したため (Classicの場合)、あるいは MCMC の Cap が満杯になったためだ。 その後もトレーニングは続き、既存の点を精緻化するだけになる。 実際の「完了」シグナルは損失カーブとイテレーション数の表示 (I30)から読み取るべきで、ここからではない。
中断の目安: 損失カーブが5000イテレーション以上経過しても 0.08を超えていて、ほとんど下がらなくなっている場合、 高い確率で SfM 再構成に問題がある。トレーニングを中断し、 第9章を確認して、選択した SfM バックエンドがシーンに適しているか調べ、 必要であれば COLMAP/Native に切り替えてから再開すること。 カメラの位置合わせが悪い状態で2時間トレーニングするよりも、 良い SfM に10分投資するほうがよい。
いつインスペクタを使うか?
クイックリファレンス:典型的なユースケースに対して、どのセクション + どのコントロールを使うか?
| Common-Task | セクション | Control-IDs |
|---|---|---|
| 完成したスプラットの彩度を下げる | Look | L1 (Saturation) |
| 針状・紙吹雪状のスプラットを丸くする | Look | L2 (Splat length) |
| 穴だらけの点群を埋める・スプラットを拡大する | Look | L3 (Splat size) |
| オービット時の遠方の「ファー紙吹雪」を非表示にする | Look | L4 (Fade far region) |
| ルックの調整を破棄する | Look | L5 (Reset finishing) |
| 用意されたセットアップを読み込む | プリセット | I7 (行をクリック) |
| 独自のセットアップを保存する | プリセット | I1 → I2 → I4 |
| セットアップを同僚と共有する | プリセット | I5(エクスポート)または I6 (インポート) |
| SfMバックエンドを切り替える(例:Apple PGが 不安定すぎる場合など) | カメラと撮影 | I12(第9章参照) |
| EXIFの焦点距離情報がない動画フレームを 処理する | カメラと撮影 | I13 (FOV Override) |
| COLMAPのパフォーマンス:クラシックの代わりに GLOMAPを使う | カメラと撮影 | I14 — 開発者ビルドのみ、 App Storeビルドではバックエンドとして COLMAP が存在しません |
| ClassicからMCMCへ切り替える | トレーニング設定 | I15 |
| トレーニングを長く実行する | トレーニング設定 | I18(Max Iter)+ I20(Densify Until)— I19経由で連動 |
| GPU時間を半分にする | トレーニング設定 | I22(Render Scale を50%に設定) |
| トレーニング品質+6%(MCMC) | トレーニング設定 | I16 (MCMC Quality) |
| SfM点群が多い 屋外シーン | トレーニング設定 | I17 (Auto-scale by scene) |
| COLMAPのパスを設定・変更する | カメラと撮影 | I23 / I24 / I25 — 開発者ビルドのみ |
| エクスポートファイルを小さくする | トレーニング | I26(常にオンに しておく) |
| 細かい構造の 最後の一手間のディテール | トレーニング | I29 (Perceptual Loss 0.05-0.1) |
| トレーニングを監視する | 進捗 ▸ Training Metrics | I30 (進捗)、I36(速度)— 残り時間はビューポート下のトランスポート バーに表示されます |
| 早い段階で品質を見積もる | 進捗 ▸ Training Metrics | I31 (5K後にLoss < 0.05なら良好) |
| SfMの問題が疑われる場合 | 進捗(両グループ) | I31 + I39 (5K後にLoss > 0.08ならSfMをやり直す) |
| 収束と停滞を見分ける | 進捗 ▸ Loss History | I39 + I40(Lossのプラトーを読む) |
| Densificationの問題を見つける | 進捗 ▸ Loss History | I41 (ガウス曲線が下がる → バグ) |