第6章 — トレーニング設定

典型的なプリセットのJSONエクスポートです。 トップレベルのフィールド:id(UUID)、name、(classic | mcmc | sceneClass | custom)、(スキーマバージョン)、 (タイムスタンプ)、(自由記述)。入れ子になった -オブジェクトには再現性にとって重要な パラメータが含まれています — インポート時には、このブロック全体が トレーニング設定に読み込まれ、JSONに存在しないフィールドは アプリのバージョンのデフォルト値で埋められます(例えば アプリのアップデート後など)。プリセットを別のMacに渡したい場合は、 このJSONファイルをそのまま送るだけで済みます。
トレーニング設定は、RadianceKitにおけるすべてのトレーニング実行の 中核をなすものです。トレーニングに影響を与えるあらゆるパラメータ — 最大イテレーション数から8つの学習率、さらにはMCMC、Mip-Splatting、 カリキュラム、シーンに応じたキャップ判定ロジックのための特殊な フィールドまで — がここに集約されています。サイドバーの トレーニング設定セクション(Expert View)で編集し、プリセットとして 保存するか、JSONエクスポートとして別のMacに渡すことができます。 トレーニング時には、まさにこのオブジェクトが固定され、GPUバックエンドに 渡されます。
この章はパワーユーザー向けのリファレンス資料です。トレーニング設定の 設定可能な80個のフィールド、標準搭載されている9個のプリセット、 そしてシーンに応じたGaussian Capの決定方法を一覧にしています。 迷った場合は、選択したプリセットが設定する値が優先されます — その値はインスペクタか、プリセットのJSONエクスポートで確認できます。
目次:
+ イテレーション (T1–T2) + 学習率 (T3–T10) + Densification — Classic (T11–T16) + Loss (T17–T20) + SH次数の進行 (T21) + パフォーマンス (T22–T24) + 診断と点群の準備 (T26–T30) + 正則化 (T31–T37) + リファインメント (T38–T44) + Sky-Dome (T45–T48) + Adam + 学習率スケジュール (T49–T55) + ポストプロセッシング + Apple AI (T56–T60) + MCMC Densification (T61–T73) + Mip-Splatting (T74–T76) + アダプティブDensification (T77–T79) + カリキュラム (T80–T81) + 静的プリセット (TP1–TP9) + アプリがGaussian Capをどのように決定するか + どのフィールドが何のためか?(チートシート) + 危険なフィールド
イテレーション (T1–T2)
T1maxIterations
詳細
デフォルト: 30 000 (Initializer)、35 000 (.full)、200 000 (.fullMCMC) 範囲: 1 000 – 500 000 (UIスライダー)、ロジック上のハードな 上限なし
技術詳細
バックエンドが実行するトレーニングイテレーションの総数。1イテレーションとは、 1つのトレーニングカメラに対するフォワードレンダリング、すべての損失成分(L1 + SSIM + オプションの正則化 + Sky-Mask)にわたるバックワードパス、そして1回のAdamオプティマイザ ステップを指す。この数値は他のスケジュールに直接影響する:位置の学習率はT1自身、または T50 positionLRScheduleEndIterationのどちらかまでコサインアニーリング曲線に従い、 DensificationはT2 densifyUntilIterationで停止し、MCMCノイズ減衰は T69 mcmcNoiseDecayEndで終わり、SH-DegreeのアップグレードはT21で定義された3つのマークで 発生する。従来のDensificationでは20 000〜35 000イテレーションが実証済みの範囲であり、 MCMCでは60 000〜200 000である。Presetに設定された値を大幅に超えて増やしても、追加の品質 向上はめったに得られない — Adamモメンタムが飽和し、LR減衰の終端がないと損失は停滞する。 逆に約5 000を下回ると、幾何形状が不完全にしか収束しない(Density Controlがクローン/ 分割を行う時間が不足するため)。
T2densifyUntilIteration
詳細
デフォルト: 15 000 (Initializer)、5 000 (.full)、160 000 (.fullMCMC) 範囲: 0 – T1 maxIterations
技術詳細
Densificationが停止するイテレーション。ここまではT11–T16(Classic)または T67–T70(MCMC)でパラメータ化されたルールに従ってGaussianがクローン、分割、 プルーニングされる。それ以降はGaussianの数は一定に保たれ、位置・回転・スケール・ 不透明度・SH係数のみが最適化される(リファインメントフェーズ)。3DGSのオリジナル論文 では、この値はT1の50 %に設定されているが、RadianceKitの.fullPresetではわずか約14 % (35 000のうち5 000)である:約5 000イテレーションを過ぎると、それ以上のDensificationは むしろ結果を悪化させる — フローターが増え、メモリ消費が増えるだけで品質向上はない。 一方MCMCでは、リロケーションをT1の80 %まで実行させる。MCMCは有害なフローターを 生成しないためである。T2を小さく設定しすぎる(< 1 000)とGaussianの数が不足し、 逆にClassicで大きすぎる(T1の50 %超)と過成長やRGB飽和のアウトライアーが発生する (Outdoor-Overtraining-Findings参照)。
学習率 (T3–T10)
T3positionLearningRate
詳細
デフォルト: 0.00016 範囲: 1e-7 – 1e-3 (推奨)
技術詳細
トレーニング開始時(イテレーション0)における各ガウシアンのXYZ位置に対するAdam学習率。コサインアニーリングカーブに従い、トレーニングの進行に伴って T4 positionLearningRateFinal まで低下する。デフォルト値0.00016は3DGSオリジナル論文(Kerbl et al.~2023)に由来し、RadianceKitでは画像解像度を上げてもスケーリングする必要はない — 位置はワールド座標系で動作し、ピクセル空間ではないためだ。大幅な引き上げ(> 0.0005)はガウシアンが長距離を飛び跳ね、Lossが不安定になる原因となる。逆に大幅に低い値(< 0.00005)では、誤って初期化された点群が永久に正しい位置を見つけられなくなる。したがって、大多数のシーンにおいてはデフォルト値が正しい選択となる。注意: .fullMCMC ではこの値を意図的にデフォルトのままにしている — MCMCはRelocationロジックのために一定の学習率を必要とするため、ここをチューニングしても意味がない。
T4positionLearningRateFinal
詳細
デフォルト: 0.0000016 (Initializer + 論文), 0.000016 (.full, .fullMCMC — 10倍高い) 範囲: 0 – T3 positionLearningRate
技術詳細
位置LRコサインアニーリングカーブの終端値。この値には T1 maxIterations の時点、あるいは設定されていれば T50 positionLRScheduleEndIteration の時点で到達する。RadianceKitの.fullプリセットは0.000016を使用している — つまり論文デフォルトの0.0000016より10倍高い。終端値を大きく下げても、開始値を大きく上げても、結果は目に見えて悪化する。この高い終端値はトレードオフではなく意図的な選択である: Decayが強すぎると、Refinementフェーズにおいてガウシアンが新たに追加されたDensification候補に適応する能力を失ってしまう。スケジュールフェーズは短縮可能(T50 < T1)で、T4 がトレーニング終了前にすでに到達し、残りのトレーニングは一定のミニLRで進行する — 典型的な設定: T50 = 20 000、T1 = 35 000、つまりRefinementは0.000016で15,000イテレーション行われる。
T5shDCLearningRate
詳細
デフォルト: 0.0025 (Initializer + 論文), 0.005 (.full と全ての MCMCプリセット — 2倍) 範囲: 0.0001 – 0.05
技術詳細
球面調和関数カラーのDC成分(degree 0、すなわち一定のアルベド)に対するAdam学習率。SH-DCはガウシアンの方向に依存しない基本トーンに相当し、いわば「ベースカラー」である。RadianceKitはQualityプリセットにおいて論文デフォルトを2倍にしている — これは色の収束を早めるためであり、短いトレーニング(5,000イテレーション未満)ではそうしないとSH-DCが形にならないために必要となる。幾何学的なLRとは異なり、SH-DCにはDecayがない;学習率は全イテレーションを通して一定である(あるいはT51のオプションのextended-phase-Decayにのみ従う)。さらに大幅に高い値(0.01程度)は結果を再び悪化させ、色を不安定にしてしまう。
T6shRestLearningRate
詳細
デフォルト: 0.000125 (Initializer + 論文), 0.00025 (.full と MCMC — 2倍) 範囲: 0.000001 – 0.005
技術詳細
高次のSH係数(Degree 1、2、3 — すなわちハイライト、反射、なだらかな陰影を生み出す視線方向に依存する色成分)に対するAdam学習率。論文の慣例によりT5より20倍小さい。これらの係数は数が二次的に増加するため(Degree 1で3個、Degree 2で5個、Degree 3で7個 → 合計ガウシアンあたり15個のFloat)、より小さい学習率がなければ画像が過飽和になってしまう。2段階で解放される — T21 shDegreeUpgradeIterationsの最初のマークまではDegree 0のみが有効(つまりT5のみ)、その後1、さらに2、最終的に3が有効になる。ここでの低い値は、拡散照明の多いシーンで特に重要である;非常に光沢のある表面(自動車の塗装、水面)では、この値をいじる価値はない — SH表現自体に限界があるためだ。
T7opacityLearningRate
詳細
デフォルト: 0.05 (Initializer + 論文), 0.1 (.full, MCMC — 2倍) 範囲: 0.001 – 1.0
技術詳細
各ガウシアンのlogit不透明度に対するAdam学習率。アプリは不透明度を制約のないFloat値として保存し、シグモイドで[0, 1]に変換する;LRはlogit空間で作用する。QualityプリセットはPaperデフォルトを0.1に2倍にしている;これによりPruningがより効率的になる — 死んだガウシアンがより速くT14 pruneOpacityThresholdを下回るようになる。どの値が最も効果的かはAdamの設定にも依存する;両者の相互作用は単純ではない。低い値(< 0.01)では「死んだ」ガウシアンが永遠に残り、メモリを消費してしまう;高すぎる値(> 0.5)では不透明度爆発が起こりうるため、Optimizerはlogit値を厳密に[-15, 3]に制限している。
T8opacityLearningRateFinal
詳細
デフォルト: 0.0 (= 「Decayなし」) 範囲: 0 または 0.001 – T7 opacityLearningRate
技術詳細
不透明度LRに対するオプションのコサインDecay終端値。0.0の場合、Decayは無効化され、不透明度LRはトレーニング全体を通してT7で一定のままになる。0.1から0.01へのDecayは結果を明らかに悪化させる;そのためデフォルトは「オフ」になっている。このフィールドの背後にある仮説は: Refinementフェーズにおいて一定の不透明度LRが振動を引き起こし、すでに適切な透明度に達したスプラットがランダムな勾配の揺らぎによって再び移動させられてしまうかもしれない、というものだ。実証的にはこれは確認されていない — logitクランピングロジックがそもそもそれを防いでいる。このフィールドは将来の実験のために利用可能なままにされている;非常に長いMCMCランのケース(> 500K イテレーション)もこの恩恵を受けられるかもしれない。
T9scaleLearningRate
詳細
デフォルト: 0.005 (Initializer + 論文), 0.01 (.full, MCMC — 2倍) 範囲: 0.0001 – 0.1
技術詳細
各ガウシアンの3つのスケール成分に対するlog空間でのAdam学習率(RadianceKitはスケールが正のままであるようにlog(scale)を保存している)。論文のデフォルト0.005は、RadianceKitでは調整済みの学習率設定においてより良いスケール収束を得るために0.01に2倍化されている。この値が他のQuality学習率と組み合わせて論文デフォルトのままだと、目に見えてガウシアンの数が少なくなる — Density-Controlがクローンできなくなる、なぜならスケール更新が追いつくのが遅すぎるためだ。スケールは各ガウシアンの広がりを制御する — 学習が速すぎると「針」状のガウシアン(極端に長く細いスプラット、T34 scaleRatioPruneThreshold参照)が発生し、学習が遅すぎるとスプラットが小さくまとまりすぎたままになり、Density-Controlが頻繁にsplitせざるを得なくなる。
T10rotationLearningRate
詳細
デフォルト: 0.001 (Initializer + 論文), 0.002 (.full, MCMC — 2倍) 範囲: 0.0001 – 0.05
技術詳細
各ガウシアンの4つのクォータニオン成分に対するAdam学習率。クォータニオンは各Optimizerステップにおいて、Adam更新後に再び正規化される(L2ノルム = 1)— そうしなければ共分散行列が退化してしまう。RadianceKitはQualityプリセットにおいて論文デフォルトを2倍にしている、なぜなら回転はスケール/位置に比べて絶対的な勾配の大きさが小さく(単位球面上では各ステップが短いままになる)、2倍化なしでは35,000イテレーションのウィンドウ内で回転が明らかに収束不足になるためだ。NeRF-Blenderシーン(Lego、Chair)では回転が特に大きく影響する — オブジェクトのエッジは5,000–10,000イテレーション経ってようやく正しく整列する。
Densification — Classic (T11–T16)
T11densifyGradThreshold
詳細
デフォルト: 0.000002(初期化処理、0.5倍解像度用に調整済み)、 0.0000011(.full、1.0倍用に調整済み)、0.000004(.quickTest、 0.25倍用に調整済み)、2e-7(.fullClassicPaper) 範囲: 1e-8 – 1e-3(解像度依存)
技術詳細
スクリーン空間に投影された位置勾配のL2ノルムに対する閾値で、これを超えるとGaussianはクローンまたは分割の対象としてマークされる。絶対値は トレーニング解像度に直接依存する — おおよそ1/解像度²でスケールする(ピクセル数が 多いほどピクセル単位の勾配は小さくなる)。したがって、T22 trainingRenderScaleの各段階には それぞれ調整された閾値が必要になる: 0.25× → 4e-6、0.5× → 2e-6、1.0× → 5e-8 … 1.1e-6(.full)。 論文のデフォルト値0.0002はNDC正規化されており、RadianceKitの ワールド空間パイプラインとは直接比較できない。T52 adaptiveDensifyThresholdフラグを使えば、現在の勾配分布のp98から実行時に値を計算できるが — 実際のシーンではGaussianの数が劇的に減少してしまう(大量プルーニング)ため、このフラグは無効のままにしている。T77–T79はrolling medianによる代替の適応ロジックを提供する。 このフィールドは決して無害ではない — 値を半分にすると2–4倍 多くのGaussianが生成され(メモリ圧迫、OOMのリスク)、逆に倍にするとシーンが 過小にdensify化される可能性がある。
T12densifyFromIteration
詳細
デフォルト: 500 範囲: 100 – 5,000
技術詳細
Densificationが有効になる最初のイテレーション。 それ以前は初期SfM点群に対する「素の」学習のみが行われ、 新しいGaussianは生成されない。デフォルト値の500は 3DGS論文由来のもので、初期化が 安定する時間を与える — もしイテレーション0からdensify化を始めてしまうと、 誤った位置にあるSfM点が本来の位置を見つける前に何度もクローンされてしまう。 開始をかなり遅らせる(例えば1,000)と結果はわずかに悪化する。デフォルト値のままにしておこう。
T13densifyInterval
詳細
デフォルト: 100(初期化処理、MCMC)、200(.full) 範囲: 50 – 1,000
技術詳細
2回のDensificationステップの間に何イテレーション 挟むかを表す。論文のデフォルト値である100では — 100 イテレーションごとにdensify候補のリストが評価され、 クローン/分割が行われると同時に、prune候補のリスト (sigmoid(opacity) < T14 pruneOpacityThreshold)が削除される。.fullでは200が 実績のある値となっている — これによりGPUの負荷が軽減される(再編成パスの回数が 減るため)し、各Gaussianにクローン操作後に落ち着くための より多くの時間を与えられる。間隔を短くするとQuality設定では過剰densify化が起こる:画像が良くなることなくGaussianの数が 大幅に増えてしまう。MCMCでは同じフィールドがRelocation間隔として解釈される。 MCMC固有のロジックについてはT67 mcmcRelocationIntervalを参照。
T14pruneOpacityThreshold
詳細
デフォルト: 0.005(初期化処理、論文、MCMC)、0.001(.full) 範囲: 0.0001 – 0.1
技術詳細
次回のDensificationステップでGaussianが 削除される、シグモイド不透明度の閾値。 T7 opacityLearningRateやOptimizer内のロジット・クランプロジックと連動して働く。.fullでは値が0.005ではなく0.001となっている — これにより、特殊な視点からのみ意味を持つSplatもより長く保持され、SH詳細に寄与する。さらに小さい値(0.0001程度)にしてもそれ以上の効果はない:プルーニングが不十分になり、メモリが無駄になるだけだ。重要な点として、 密度制御は他の対策によってバッファ容量がすでに満杯であっても 常にプルーニングを行わなければならない — そうしないと死んだGaussianが蓄積し、 カウントが凍りついてしまう。
T15opacityResetInterval
詳細
デフォルト: 3,000(初期化処理 + 論文)、100,000(.full = 事実上無効)、200,000(.fullMCMC = 無効) 範囲: 1,000 – 100,000+
技術詳細
何イテレーションごとに全Gaussianの不透明度を 低い値(約0.01)にリセットするか — これは3DGS論文由来の対策で、 「凍結した」Splatを再評価するためのものだ。 RadianceKitのウォームアップ、確率的トレーニング設定、そして倍増した学習率と組み合わさると、Opacity Resetは目に見える形で品質を損ない、しかもOptimizer内のロジット・クランプがすでにその機能をカバーしている。そのため.fullでは実質的に無効化されている(100,000 > 35,000 = 発動しない)。.fullClassicPaper(論文に忠実なバリアント)では意図的に再び3,000に設定されている — そこではオリジナル論文のGaussian予算を達成することが目的だからだ。
T16maxScreenSize
詳細
デフォルト: 0.0(= 無効) 範囲: 0(オフ)または > 0
技術詳細
Gaussianが強制的に分割される前に到達できる 最大のスクリーン空間サイズ(投影ピクセル単位)。 この値は0に設定されている — RadianceKitの密度制御は代わりに 同じ勾配ロジックからのワールド空間スケール閾値を使用している。 このフィールドカタログには残されているが、それはMip-Splatting (T74–T76)やシーン固有のスプラッティング戦略に関する将来の実験が これを活用できる可能性があるからだ。有効化(値 > 0、例えば20)すると、画面上で非常に大きくなった Splatが分割を強制されるようになる — 大きく滑らかな壁面など、 単一の巨大Splatではディテールが不足する場面で関係してくる。
損失関数 (T17–T20)
T17ssimWeight
詳細
デフォルト: 0.2(初期化子 + 論文 + .full)、0.05(すべての MCMCプリセット) 範囲: 0.0 – 1.0
技術詳細
結合損失関数 loss = (1 - λ) * L1 + λ * D-SSIM におけるD-SSIM項の重み(λ = T17)。3DGS論文のデフォルトである0.2は、Classic-Densificationにとっては適切な値だ—0.3にするだけでも結果が明らかに悪化する。一方でMCMCに合う値は0.05であり、これはMCMCがその確率的な探索特性により、より強いL1信号成分を必要とするためだ—SSIM重みを高くするとRelocationの判断が曖昧になってしまう。SSIMはL1に比べて計算コストがかなり高い(画像全体にわたるローカル11×11ウィンドウ)が、RadianceKitはMPSアクセラレーションによる実装を採用しており、1080p画像あたり1ms未満に収まっている。Scene-Classプリセットは0.082(.outdoorPreset)から0.171(.indoorPreset)までのシーン固有の値を使用する。
T18ssimWeightRefinement
詳細
デフォルト: 0.0(=「変更なし、ssimWeightを維持」) 範囲: 0 または 0 – 1.0
技術詳細
T2 densifyUntilIteration 後のRefinementフェーズ用の任意設定のSSIM値。Refinementフェーズにおいて0.2から0.3に引き上げると、L1・SSIMどちらの指標でも結果が悪化する—そのためデフォルトは0.0になっている。この項目の背後にあった仮説は、Densification終了後(新しいGaussianが生成されなくなった後)は、SSIM成分を強めることで構造的なシャープさを最大化できるだろう、というものだった。しかし実験的にはこれは誤りだった:SSIM重みを上げることは間接的にL1重みを下げることを意味し、L1こそが最終Refinementフェーズにおいてはるかに有用な信号だからだ。この項目は、知覚的損失(T60)やエッジ損失(T19)を用いた将来的な実験—Refinement特有の損失構成が有効になり得る場面—のために利用可能な状態のまま残されている。
T19edgeLossWeight
詳細
デフォルト: 0.0(=無効) 範囲: 0 または 0.001 – 1.0
技術詳細
実験的な損失項:L1+SSIMに加えて、画像のエッジを直接比較するSobel勾配領域L1損失(Ground-TruthのSobel vs レンダリングのSobel)の重み。仮説としては、エッジ情報は画質における知覚的な要(かなめ)であり、明示的な項を設けることでGaussianがエッジをより正確に捉えるよう促されるはずだった。しかし実際には効果がない:目に見える重み(0.1)は結果を悪化させ、小さい重み(0.01)は画質を変化させないまま計算コストだけがかかる。Sobelパスは、Ground-Truthとレンダリングそれぞれに対する追加のMPSフォワード処理のコストがかかる。そのため恒久的に無効化されている。将来的なユースケースとしては、硬い人工的なエッジを持つシーン(建築物、家具、レンダリング画像)が恩恵を受けられる可能性がある—ただしScene-Classプリセットはこの項を使わず、代わりにSSIM重みをスケーリングしている。
T20skyMaskingEnabled
詳細
デフォルト: false(初期化子およびすべてのプリセット) 範囲: boolean
技術詳細
Sky Masking(空マスキング)を有効にする。これにより、各画像においてApple Visionフレームワークを用いて空の領域がマスクされ、その領域の損失がゼロに設定される。目的:屋外シーンでは、青・グレー・白の空のピクセルによって、アプリがまさにその位置にGaussianを配置してしまうことがよくあり—これは「floater(浮遊物)」として認識されてしまう。Sky Maskがない場合、この領域の損失は決してゼロにならない。空は画像内でわずかに変化するため、アプリがそれをSplatで再現しようと延々と試み続けてしまうからだ。Visionによるマスクはトレーニング前にカメラごとに一度計算され、RAM上に保持される。通常は T45 skyDomeEnabled と同時に有効化される(Settings-View側のUIロジック)。屋内シーンや合成レンダリングでは無効のままにしておくこと—そうしたシーンではこのマスクが天井や壁を誤って「空」として認識してしまう。
SH-Degree-Progression (T21)
T21shDegreeUpgradeIterations
詳細
デフォルト: [1_000, 2_000, 3_000] (Initializer)、 [2_000, 5_000, 8_000] (.full、MCMC)、[1_000, 2_000] (.preview — Degree 3 はスキップ) 範囲: [Int]、各値は [0, maxIterations] の範囲内で、単調増加
技術詳細
アクティブなSH-Degreeを 0→1、 1→2、2→3 へ引き上げるイテレーション。最初のマークより前は DCコンポーネントのみがアクティブ(つまり T5 shDCLearningRate)で、最初のマークの後は DC + 3つのDegree-1係数、2番目のマークの後は + 5つの Degree-2係数、3番目のマークの後は全15係数となる。 Gaussianあたりのメモリ使用量はこれに伴って段階的に増加する — 4フロート → 16 フロート → 36フロート → 64フロート。品質プリセットはInitializerのデフォルトに対して 引き上げのタイミングを遅らせている。これは、色の詳細をその高い周波数とともに 乗せる前に、まずジオメトリを安定させたいためだ。より早いマーク [1K, 2K, 3K] は .full において明らかに劣る結果をもたらす。.preview はDegree 2で 打ち切られる。Degree 3は5,000イテレーションでは収束せず、 オプティマイザの容量を消費するだけになるからだ。カリキュラム(T80–T81)は、このリストを動的に上書きする 代替ロジックを提供する。
パフォーマンス (T22–T24)
T22trainingRenderScale
詳細
デフォルト: 1.0 (Initializer, .full, MCMC, Scene-Class), 0.5 (.preview), 0.25 (.quickTest) 範囲: 0.05 – 2.0 (典型的には 0.25、0.5、1.0)
技術詳細
トレーニング時のレンダリング解像度を、トレーニング画像のオリジナル解像度に対する比率で指定する。0.5では各画像が幅 50 % × 高さ 50 % に縮小され(つまりピクセル数は25 %)、Gaussianレンダリングはこの縮小された解像度で行われる。メモリ負荷と計算負荷の両方を二乗のオーダーで削減する。重要な点: T11 densifyGradThreshold は選択した解像度に合わせる必要がある — 勾配の大きさは1/解像度²でスケールするため、.quickTest (0.25倍)は.full (1.0倍、1.1e-6)よりもはるかに高いThreshold(4e-6)を持つ。 RadianceKitは非常に大きな画像に対して警告を出し、 自動的に調整する — 目標解像度は3メガピクセル。 極端な4K入力画像の場合は0.5、あるいは0.25にするのが賢明であり、そうしないとどんなMacでもCPUによる圧縮処理に陥ってしまう。
T23resolutionWarmupScale
詳細
デフォルト: 0.0 (= 無効) 範囲: 0 または 0.1 –
技術詳細
Densificationフェーズ (Iter 0 から T2 まで)を、Refinementフェーズよりも 低い解像度でトレーニングする。.fullではこれは無効化されている。なぜならT22 = 1.0とCosine-Annealingの組み合わせでは時間短縮効果がわずかで、品質がやや損なわれるからだ。フィールドカタログには残されている。4K入力や長時間のトレーニング実行では再び有用になり得るためだ — カリキュラム(T80)が類似のロジックを採用しているが、そちらはLRスケジュールに結び付けられている点が異なる。有効化されており、かつT80 curriculumResolutionRampもtrueの場合、カリキュラムが優先されこの値を上書きする。
T24tileSize
詳細
デフォルト: 16 範囲: 8、16、32
技術詳細
ラスタライゼーションタイルのピクセル単位のサイズ。 Gaussian-Splattingのレンダリングはタイルベースで行われる: 画像は 16×16ピクセルのタイルに分割され、各タイルは自身に関連するGaussianを 収集し、深度でソートしてブレンドする。16は実質的にすべての 3DGS実装で使用される標準値であり、 RadianceKitのMetalカーネルにハードコードされている。この値を変更するには シェーダーの再コンパイルが必要となり、現状では効果的ではない。将来のエンジンバージョンでTile-Sizeを 動的にサポートする場合に備え、フィールドとして残されている。
診断とポイントクラウドの準備 (T26–T30)
T26depthDistortionWeight
詳細
デフォルト: 0.0 (= 無効) 範囲: 0 または 0.0001 – 0.05
技術詳細
実験的機能: Depth-Distortion正則化損失の重み。レンダー光線に沿って深く積み重なっているものの、概念上は同じ表面に属するはずのGaussianにペナルティを与える — これにより深度分布が集中し、フローターが減ることが期待される。しかし、試したすべての強度で、結果は改善するどころか悪化した。理論上の利点である マルチビュー一貫性の向上は、L1損失には反映されない。なぜならこの仮説は、SfMの幾何情報が正しく、Gaussianはただ「積み重ね」を直す必要があるだけだと暗黙に前提しているからだ。実際には たいていSfMのポイントクラウド自体が最も弱いコンポーネントであり、積み重ねの問題ではない。特にポーズがクリーンなマルチビューデータセット(合成データ、Ground Truth付きMip-NeRF 360など)向けには引き続き利用可能としておく。
T27singleViewOverfit
詳細
デフォルト: false 範囲: boolean
技術詳細
診断フラグ: trueの場合、各トレーニングイテレーションで カメラプールからランダムに選ぶ代わりに、必ずカメラインデックス0が使われる。目的は、モデルがたった一つの ビューすらオーバーフィットできない場合(つまりビュー0でのロスが1万回のイテレーション後もゼロに収束しない場合)、フォワード/バックワードパスに 根本的なバグがあると判断できることにある。このスイッチはMetalシェーダーおよび 微分可能ラスタライザーカーネルの開発中に集中的に使用された。今日ではトレーニングバックエンドに変更を加えた際の サニティチェックとしてのみ利用されている。UIにはこれに対応するスイッチはなく—このフィールドはすべてのPresetで オフになっており、今後もそのままである。
T28maxCameras
詳細
デフォルト: 0 (= 「すべてのカメラを使用」) 範囲: 0 または 1 – N
技術詳細
診断用の上限値: 最初のN台のカメラのみでトレーニングし、それ以外はすべて無視する。もともとの目的は、カメラが多すぎると 勾配の衝突(同じGaussianに対して矛盾するロス信号が多すぎること)が発生するという仮説を検証することだった。しかし、人為的な制限には利点がなく — フレーム数が増えれば実質的にほぼ常に品質が向上する。UIにはこれに対応する 操作要素はなく、すべてのPresetでこのフィールドは0、つまり「すべての カメラ」に設定されている。
T29maxInitialPoints
詳細
デフォルト: 0 (= 「すべてのSfMポイントを使用」) 範囲: 0 または 1 000 – 200 000+
技術詳細
セーフガード: トレーニング開始時に使用する初期SfMポイントの数を制限する。密な COLMAP再構成では6万個を超えるポイントが生成されることがあり、初期スケールが大きい場合には ピクセルあたり200~300のGaussianが重なることになる — これは「霧のかたまり」を作り出し、 トレーニングが収束しなくなる。約1万6000ポイントへのサブサンプリング(トレーニングエンジン内のハードキャップロジック) により、参照実装の3DGSが使用する水準まで初期密度を下げ、オーバーラップを劇的に減らせる。非常に 密な再構成の場合、アプリはこれを自動的に設定する。対応する操作要素はない。
T30cameraClusterOutlierMultiplier
詳細
デフォルト: 10.0 (すべてのPreset — 上書きされることはない) 範囲: 1.0 – 100.0
技術詳細
カメラクラスターの外れ値フィルターに対する乗数。トレーニング開始前にトレーニングエンジンは すべてのカメラ位置の重心と、重心から最も遠いカメラの距離を計算する。SfMポイントのうち 重心からの距離がmultiplier × maxCameraDistanceを超えるものは、外れ値として 棄却される。デフォルトの10倍は意図的に余裕を持たせた値である。微妙な副作用として、SfMがタイト(カメラ同士が近い)であるほど → しきい値は小さくなり → より多くのポイントが 外れ値として棄却される。逆にSfMがルーズであるほど → しきい値は大きくなり → 棄却されるポイントは少なくなる。ここから、驚くべき効果が生じる。すなわち、より密で本来は優れたはずのSfM再構成が、初期ポイントの棄却が多すぎることでトレーニングを悪化させることがある。このフィールドはすべてのPresetで10に固定されており、 UI上で変更することはできない。5未満の値はたいてい制限が厳しすぎ、 20を超えると事実上効果がなくなる。
正則化 (T31–T37)
T31coarseToFineBlurRadius
詳細
デフォルト: 0 (= 無効) 範囲: 0 または 1 – 10
技術詳細
実験的機能: Densificationフェーズの開始時にground-truth画像に適用され、 Densification(T2)の終了までに線形に0まで下げられるBox-Blur半径。仮説として、 Coarse-to-Fineトレーニング — まず粗い構造を学習し、その後ディテールを学習する — は より安定したジオメトリを生むはずだった。しかし試したすべての半径で結果は悪化した。 失敗の理由は、Densificationが画像領域の勾配に基づいて判断を下すためで、ブラーはまさに 「ここでクローンが必要」という信号を弱めてしまうからだ。異なるDensity-Control方式での 将来のテストのため、フィールドカタログには残されている。
T32scaleRegWeight
詳細
デフォルト: 0.0 (= 無効) 範囲: 0 または 0.0001 – 0.05
技術詳細
実験的機能: ワールド空間スケールに対するL1正則化。大きくなりすぎるGaussianを ペナルティで抑制し —壁一面を1つのGaussianで覆ってしまう「メガSplat」を防ぐ。 有効にするとGaussian数が数百万に爆発し、結果は何倍も悪化する。理由は、 スケール正則化がDensity-Controlと衝突するためだ — スケールが小さくなるほど より多くのGaussianが必要になり、Density-Controlがより頻繁にsplitを行い、 それがさらに多くの勾配計算コストを招く。無効化されているが、Mip-Splatting実験 (T74)のために文書化されている: この文脈ではスケールの下限が有効な可能性がある。
T33anisotropyRegWeight
詳細
デフォルト: 0.0 (= 無効) 範囲: 0 または 0.0001 – 0.05
技術詳細
実験的機能: max(scale)/min(scale)比に対するペナルティで、floaterとして 知覚される極端に伸びた「針状」Gaussianを防ぐことを目的とする。試したすべての強度で 結果は明らかに悪化する。理由は、正則化がSplatを「丸い」形状へと強制するが、 平らな面(壁、机、床)ではこれはまさに間違った方向だからだ — そこでは平らで幅広の Gaussianの方が球状のものより効率的である。無効化されている。T34 scaleRatioPruneThreshold は同じ目的をより的を絞って追求しているが、これもデフォルトでは無効である。
T34scaleRatioPruneThreshold
詳細
デフォルト: 0.0 (= 無効) 範囲: 0 または 5.0 – 100.0 (典型的には10.0 – 30.0)
技術詳細
実験的なトレーニング後プルーニング機能で、max(scale)/min(scale)比が ここで設定された線形しきい値を超えるすべてのGaussianを削除する。正則化だけでは 排除できない極端に伸びた「針/円盤」floaterを標的とする。テストでは、プルーニングは 期待通りにfloaterを除去したが、同時に壁や床の上にある有用な平らなSplatも除去して しまい、画像に穴が増えた。そのためデフォルトでオフになっている。バージョン1.8以降、 Inspectorの「トレーニング」セクションにある「Runs automatically at the end of training」という中間行の下に、Remove Needle/Disc Floatersというスイッチが 用意されている。有効にすると意図的に控えめに動作し(最長軸が最短軸のおよそ50倍を 超えるSplatのみ)、次回のトレーニング実行から効果を発揮する。
T35opacityRegWeight
詳細
デフォルト: 0.0 (= 無効) 範囲: 0 または 0.0001 – 0.05
技術詳細
実験的機能: 不透明度を0または1に引き寄せる(つまり「半透明」から遠ざける) Binary-Cross-Entropyペナルティ。仮説として、よりシャープな不透明度分布は画像の 鮮明さを改善するはずだった。T33と同様に、この正則化は品質を犠牲にする。両方とも 無効化されている。注意: 1.4.3-Betaでは、まさにこのフィールドのデフォルト値変更 (初期化子 = 0.01)にバグが発生し、Gaussian数の大量消失(460K → 1イテレーションで5) を引き起こした。1.4.4以降、デフォルトは0.0に固定されている。
T36opacityDecayFactor
詳細
デフォルト: 0.0 (初期化子 = 無効), 0.9995 (.full, .classicBalanced — HTGS標準) 範囲: 0 (オフ) または 0.95 – 1.0
技術詳細
HTGS方式(Hierarchical Time-Gating, Eurographics 2025)の実装: T37 opacityDecayIntervalイテレーションごとに、各Gaussianのsigmoid不透明度に この係数が掛けられる。0.9995 × 100回の適用で、Densificationフェーズあたり 約95%の残存率となる — すべての不透明度に対する軽度だが持続的な下方圧力であり、 弱く寄与しているGaussianを確実にT14 pruneOpacityThreshold以下まで下げていく。 結果はDecayなしと比べて明らかに良好である。Densificationフェーズ中(T2まで) のみ有効で、その後はDecayなしでトレーニングが続行され、Refinementで確立された 不透明度が安定した状態を保つ。MCMCでは使用されない(MCMCは独自のメカニズムを T67 mcmcRelocationInterval + T68 mcmcDeadOpacityThreshold経由で持つ)。
T37opacityDecayInterval
詳細
デフォルト: 50 範囲: 10 – 500
技術詳細
T36 opacityDecayFactorが適用されるイテレーション間隔。HTGS論文の デフォルトは50で、.fullではそのまま維持されている。長い間隔(200超)は、 2回の適用の間に十分な勾配更新が起こり、不透明度が再び上昇するため、効果を 部分的に打ち消してしまう。短い間隔(20未満)はDecayを攻撃的にしすぎる。 Densificationフェーズでのみ有効。
精製 (T38–T44)
T38gradientAccumulationSteps
詳細
デフォルト: 1 (= 「Adam ステップごとに 1 つの View」) 範囲: 1 – 8
技術詳細
Adam アップデートを実行する前に勾配を累積する View の数。> 1 の場合、 アプリは別系統の「unfused」Backward-Project パスで動作し、 勾配を別のバッファに合算する。最終的な適用は 1/N でスケールし、大きさを一定に保つ。従来の Training では値を 2 にしても品質向上はなく、unfused パスが fused パスより高コストな分だけ時間がかかるだけになる。一方 MCMC では、accum = 2 によって Classic との品質差が目に見えて縮まる — そのため MCMC ではスイッチとして提供される。各 Preset ではこの値は 1 に設定されている。UI では、Inspector の「Training」セクションにある MCMC Quality スイッチからアクセスできる:オンにすると アプリはステップごとに 2 View を累積し、オフにすると 1 View になる。1 と 2 以外の値は 編集済み Preset ファイル経由でしか設定できない。
T39testViewIndices
詳細
デフォルト: [] (= 空、すべての View が Training に 使用される) 範囲: Set<Int>、Camera インデックスの任意の部分集合
技術詳細
Training に使用せず、PSNR/SSIM/LPIPS 評価のための Holdout として確保しておく Camera インデックスの集合。内部の測定ラン でのみ設定される: その場合はインデックス 0 から始まる 8 個おきの View (LLFF 標準であり、Mip-NeRF-360 および 3DGS 論文の慣例と同一)。出荷状態では このフィールドは空のままである — Training はすべての View を使用し、 UI にはこのための操作要素はない。注意: インデックスの意味を 理解しないまま Preset ファイル内でこのフィールドを手動設定すると、測定が 無意味になる (例えば N より大きいインデックスばかりが設定されているのに View が N-50 個しかない場合 → Holdout なし → 評価不能)。自分で Preset を エクスポートする際、testViewIndices は書き出されない。これはシーン依存の 値であり、そうしないと異なるデータセット間で無意味な値が残ってしまうためである。
T40refinementPruneInterval
詳細
デフォルト: 0 (= 無効) 範囲: 0 または 100 – 5,000
技術詳細
Refinement フェーズ (T2 の後) の間、N イテレーションごとに 追加の Prune パスが実行され、sigmoid(opacity) < T41 refinementPruneOpacityThreshold の Gaussians を除去する。目的: Densification 中には定期的な Density-Control 呼び出しがあるが、その後は なくなる — しかし、その後さらに opacity が下がっていく Gaussians は バッファに残ったままになる。実際にはこの追加 Pruning は害になる: 二段階目の Densification フェーズ (T54) と組み合わさると、Gaussian 全体を 完全に空にしてしまうことがある。すべての Preset で 0 に設定されており、 UI では変更できない。それでも編集済み Preset ファイル経由で設定する場合は、 1,000 または 2,000 が妥当な値である。
T41refinementPruneOpacityThreshold
詳細
デフォルト: 0.0 (= 「T14 を使用」) 範囲: 0 または 0.001 – 0.1
技術詳細
Refinement-Pruning 用の独立した Opacity しきい値。 Densification の後では、ほとんどの Gaussians が明らかに高い opacity (> 0.001) に達しているため、標準の T14 pruneOpacityThreshold では 甘すぎる。T40 が有効な場合、このフィールドが独自のしきい値を決める。0.0 の場合は T14 が引き続き使用される。T40 > 0 の場合にのみ関係する。
T42midTrainingCompactificationIterations
詳細
デフォルト: [] (= 無効) 範囲: [Int]、 (densifyUntilIteration, maxIterations) の範囲内の値
技術詳細
Refinement フェーズ中、Compactification パスが実行される 明示的なイテレーションのポイント (sigmoid(opacity) < 0.01 の Gaussians および 外れ値スケールの Gaussians を除去する。T56 postTrainingCompactification と同じロジック)。目的: 長い Refinement フェーズでは、Confetti/Floater の 蓄積が生じることがあり、その SH が view 固有のアーティファクトへと 過学習してしまう。有効化する場合の典型的な構成: 40K Classic の場合 [10000, 20000, 30000]。しかし: 自由に選んだクリーンアップ ポイントは、最終結果を一貫して悪化させる — Gaussian 数は確かに大幅に 減るが、画像誤差はそれ以上に増加する。そのため、自由に指定可能な イテレーションリストとしては、このフィールドはすべての Preset で 空のままにされている。効果自体は UI では、Inspector の「Training」 セクションにある Floater Cleanup スイッチで実現できる: 30,000 イテレーション以上の Classic ラン向けに、Training の途中で 2 回の クリーンアップパスを設定する。独自のポイントは編集済み Preset ファイル 経由でのみ設定できる。
T43frustumCullEnabled
詳細
デフォルト: false 範囲: boolean
技術詳細
Training 後、すべての Training カメラ Frusta の和集合の 外側にある Gaussians がすべて除去される。そうした Gaussians は Loss 信号に よって一切制約を受けたことがなく、常に Floater である。特に効果的なのは、 Novel-View がカメラパスの後方や側方にあるシーン (例えばリニアなドローン 飛行の裏側) である — そこにある Floater は Training フェーズでは決して 見えないが、後で 3D-Viewer 内を移動する際にははっきりと見える。ドローン 飛行では目に見えて Floater が減るため、オプトインとして提供されている。 デフォルトが false なのは、フルオービットのカバレッジを持つ Object-Captures の場合、Frustum の和集合がシーン全体を覆ってしまい、この機能が何も 除去しないためである — Settings の「Floater Reduction」の下で提供される。 Outdoor Preset ではこれを有効化していない。Sky-Dome がそこでは同じ問題を より良く解決するためである。
T44frustumCullExpansion
詳細
デフォルト: 1.1 範囲: 1.0 – 2.0
技術詳細
T43 frustumCullEnabled 用の NDC マージン。1.0 では 画像の端でぴったり切り取ってしまい、画像端付近の不安定な Splats を 過剰に削ってしまう。1.1 = 正確なカメラフレーミングを超えて 10 % の パディング — わずかにずれた Novel-View で見えるかもしれない端の ピクセルに対して、いくらかの許容度を与える。1.2 を超える値では、 拡張された Frustum が非常に多くの空間を含んでしまうため、Cull は 実質的に効果を失う。
スカイドーム (T45–T48)
T45skyDomeEnabled
詳細
デフォルト: false(初期化時 + P9 Outdoor以外の全プリセット) 範囲: boolean
技術詳細
トレーニング開始前に、球形の点群が生成され(フィボナッチ球面上に T46 個のサンプル点)、シーン中心を中心とした半径 T47 skyDomeRadiusMultiplier × scene_extent の位置に配置され、全トレーニングカメラの空マスク済みピクセル (T20 skyMaskingEnabled を参照)の色で初期化される。これらのスカイドーム・ガウシアンは ガウシアンバッファの先頭に挿入され、トレーニング中は「凍結」される (位置/スケール/回転の勾配 = 0、 SHと不透明度のみが最適化可能)。効果として、ユーザーはノベルビューにおいて遠景の黒い 「紙吹雪」領域の代わりに 本物の空を見ることになる。ドローン撮影や風景シーンでは非常によく機能する。Outdoorプリセット(P9)ではデフォルトで有効になっている。屋内シーンでは オフにしておくこと — 球体が意味もなく部屋の外に浮くことになる。
T46skyDomeSampleCount
詳細
デフォルト: 5 000 範囲: 1 000 – 50 000(一般的には 2 000 – 10 000)
技術詳細
スカイドーム球面上のフィボナッチ球面サンプル点の 数。値が大きいほど → スカイドームが密になる(大きな 解像度や空が多く見えるシーンに有利)が、必要メモリも増える。5 000 は4Kレンダリング向けのスイートスポット。低解像度では 2 000–3 000 で十分。点は、各トレーニングカメラのビューベクトルとの コサイン距離に基づき、対応する空マスク済みピクセルで初期化される — どのカメラのビューコーンからも見えないサンプル点は、低い不透明度初期値のまま奥に 残るが、トレーニング中は変更されない(凍結されている)。
T47skyDomeRadiusMultiplier
詳細
デフォルト: 30.0(初期化時 + ほとんどのプリセット)、59.0(P9 Outdoor) 範囲: 5.0 – 200.0
技術詳細
シーンの広がり(=カメラ位置間の平均距離)に対する スカイドーム球の相対半径。30 = 球の直径が カメラ点群の30倍。小さすぎる場合(< 5)→ スカイドームがシーン 自体に干渉する(例えばスカイドームのスプラットが前景に来てしまう);大きすぎる場合(> 100)→ スカイドーム位置でfloat32の精度低下が発生し、 遠方でレンダリングの不具合が起きる。広大な屋外シーンには 59.0 が適切な値であり — デフォルトの 30.0 は奥行きのある風景には小さすぎ、その場合スカイドームのピクセルが画像端に「壁」のように見えてしまう。
T48frozenGaussianCount
詳細
デフォルト: 0(=凍結されたガウシアンなし) 範囲: 0 または 1 – T46
技術詳細
バッファの先頭にある、オプティマイザ内で 位置/スケール/回転の勾配がゼロに設定されるガウシアンの数 — これらはトレーニング全体を通して空間的に固定されたままとなる。 Density-Controlはこれらをクローン・分割・剪定してはならない。スカイドーム挿入(T45参照)で 使用される: スカイドームが有効な場合、このフィールドは 自動的に T46 skyDomeSampleCount に設定される。手動での設定も 可能(例えばLiDARスキャンから事前配置された点群を 凍結するため)だが、UI上では直接アクセスできない。重要な点: バッファ内の最初のN個の ガウシアンが常に凍結対象である — バッファ内の順序が 決め手であり、明示的なインデックスではない。
Adam + LR スケジュール (T49–T55)
T49adamResetIteration
詳細
Default: 0 (= 無効) Range: 0 または 100 –
技術詳細
Adam オプティマイザーのモーメンタム蓄積量(m1、m2)をゼロにリセットするイテレーション。 以降のバイアス補正は iter の代わりに (iter - adamResetIteration) を使って動作する。 Densification 終了後にリセットすると結果が明確に悪化する。理由は、Densification 中に蓄積された Adam のモーメンタムが典型的な勾配の大きさに関する情報を持っており、Refinement フェーズを 加速させているため。それを捨てると、Refinement 最初の~500イテレーション分の収束が失われる。 そのため全プリセットで0に設定されており、UI からは変更できない。
T50positionLRScheduleEndIteration
詳細
Default: 0 (初期化子 = 「maxIterations を使用」)、20 000 (.full — Cosine は maxIter=35K でも20Kで終了)、30 000 (.fullClassicPaper) Range: 0 または 1 000 –
技術詳細
Position-LR の Cosine Annealing カーブが最小値に達するイテレーション。0の場合、 T1 maxIterations と同一になる。0より大きい場合、スケジュールはこの値まで進み、 その後は T4 positionLearningRateFinal の値で一定に保たれる。これにより、最小だが一定の 学習率での「extended refinement phase(拡張リファインメントフェーズ)」が可能になる — 再度の減衰なしにゆっくりと位置を精緻化する。.full はこれを行う(スケジュール終了が 20K、トレーニングは35Kまで続く); 近傍 — 15Kから25K — ではほとんど変化がなく、20Kが 最良の妥協点。T51 と組み合わせて使うことで、拡張フェーズにおける非位置系LRも 変更できる。
T51extendedPhaseLRDecay
詳細
Default: 0.0 (= 無効、LR は一定) Range: 0 または 0.01 – 1.0
技術詳細
「extended phase(拡張フェーズ)」—つまり T50 に到達し、Position-LR がすでに T4 の値になった後—における非位置系LR(スケール、回転、不透明度、SH)の最小乗数。 0.1の場合、スケール/回転/不透明度/SH は 1.0(=標準LR)から標準の0.1倍へと Cosine 減衰する。 0.0(デフォルト)の場合、これらは一定のまま。ゼロまでの完全な減衰は、減衰なしと同じ結果を もたらす — 減衰ありの方が挙動は「きれい」に見えるが、測定可能なレベルでの向上はない。 そのため全プリセットで0に設定されており、UI からは変更できない。
T52adaptiveDensifyThreshold
詳細
Default: false Range: boolean
技術詳細
実験的機能: true の場合、アプリは各 Densification ステップで現在の勾配分布の p98 を計算し、それを動的な閾値として使用する(T11 で設定された値の少なくとも0.5倍に クランプされ、大きく外れすぎないようになっている)。仮説: 現在のシーン段階への 自動適応により、Density Control がより堅牢になる — 例えば序盤は厳しい Pruning、 後半は緩めに、あるいはその逆。実際にはガウシアン数が劇的に落ち込む — Mass-Pruning が発生する。これは最初の数イテレーションで p98 が極端に高く、その後ほとんど何も 閾値を超えなくなるため。固定閾値はすでに十分にキャリブレーションされており、 動的な適応は利益より害の方が大きい。T77 は rolling median による代替の Adaptive ロジックを提供しており、この問題を回避している。
T53mergeAfterDensification
詳細
Default: false (初期化子)、true (.full、 .classicBalanced、.fullClassicPaper) Range: boolean
技術詳細
Densification フェーズの終了時(イテレーション T2)に、近接していてスケールと色が似ているガウシアンをまとめる一度限りの マージパスが実行される。可視の品質低下なしにガウシアン数を通常5–15%削減する。 意図: 集中的なクローン作成の後、何も新しい情報をもたらさない準同一ガウシアンの クラスターが発生する — マージによってオプティマイザーの容量が他の領域のために 解放される。Classic Quality プリセットの標準機能。MCMC では使用されない。MCMC は Relocation ロジックによって、そもそもそのようなクラスターを発生させないため。
T54densifyPhase2FromIteration
詳細
Default: 0 (= 無効) Range: 0 または T2 – T1
技術詳細
実験的機能: Refinement の一時停止後、このイテレーションから始まり T55 まで 続く2回目の Densification フェーズを可能にする。仮説: Refinement フェーズの後、 勾配蓄積器はより安定した大きさを持ち、どの領域が追加のガウシアンをまだ必要と しているかをより正確に示せる。実際には、2回目の Densification フェーズはガウシアン 数がゼロになるまでカスケード状に終わる — Refinement Pruning(T40)と合わさって、 バッファを空にしてしまう。そのため全プリセットで0に設定されており、UIからは 変更できない。
T55densifyPhase2UntilIteration
詳細
Default: 0 Range: 0 または T54 – T1 Defined in:
技術詳細
2回目の Densification フェーズの終了点。T54 > 0 の場合にのみ意味を持つ。 両フィールドとも無効。
ポストプロセッシング + Apple AI (T56–T60)
T56postTrainingCompactification
詳細
Default: true (すべてのProduction-Presetで), false (.quickTest, .preview) Range: boolean
技術詳細
トレーニング終了後、sigmoid(opacity) < 0.01 のGaussianは 強制的に削除される(画像への寄与が実質的にないため)。Gaussian数を 典型的に58 %、エクスポート時のファイルサイズを55 %削減し、視認できる 品質低下は伴わない。Production-Presetでは標準で有効になっている—最終 成果物はできる限りコンパクトな形で提供されるべきだからだ。.quickTest では無効になっている。診断用の実行はそもそもエクスポートされないため である。T42 midTrainingCompactificationIterations とは異なり、 Compactificationは最後にのみ行われる—それまではRefinementがすべての Gaussianを利用できる。
T57metalFXUpscaling
詳細
Default: false Range: boolean
技術詳細
⚠ 2026-07-18以降廃止され、いかなる効果も持たない。このフィールドは Inspector内のピッカー「Viewport Scaling」(Off/MetalFX/Lanczos)に属して いたものだ。レンダラーはこれを一度も読み取ったことがない:Blitの判断は 純粋に幾何学的なもので(スーパーサンプリングでレンダリングされた場合⇒ アンチエイリアス処理のためのMPS-Lanczosダウンサンプル、それ以外はバイ リニア)、MetalFXパスに至っては呼び出し箇所自体が存在しなかった。ピッカー とそれが送出していた2つの誤情報は削除され、オーバーレイの表記は 「Scaling」ではなく現在「Sampling」となっており、アプリ内のどこにも MetalFXによるアップスケーリングは存在しない。フィールド自体は残されている が、これはトレーニング設定が完全な形で保存されるためだ—保存された すべてのシーン、すべてのPreset、そしてすでにエクスポートされたPLYの 設定コメント内にこの値が含まれている;削除すると再書き込みの際にこの キーが静かに欠落し、この互換性が壊れてしまう。同じ理由から、この フィールドは「Modified」比較の対象からも除外されている:古いシーンが true を保持している可能性があり、UI経由でこれをリセットする手段は もはや存在しない。誰もこれを読んでいない—再び配線し直さないように。
T58mpsLanczosScaling
詳細
Default: false Range: boolean
技術詳細
⚠ 2026-07-18以降廃止され、いかなる効果も持たない—詳しくは T57 metalFXUpscaling を参照。なぜこのフィールドをそれでも保存し 続けなければならないかもそこに記載されている。ありがちな誤解を明確に 否定しておきたい:アプリはViewport内で確かにMPS-Lanczosを使用している が、それを制御しているのは純粋に幾何学的な条件のみだ—スーパー サンプリングでレンダリングされた画像がアンチエイリアスのために縮小 計算される。これはダウンスケーリングであってアップスケーリングでは なく、このフィールドがそれを起動したことは一度もない。
T59livePreviewInterval
詳細
Default: 50(Initializer;Presetはこのフィールドを設定 しない)Range: 0(オフ)、50、250、または1 000(設定画面の ピッカー内)
技術詳細
トレーニング中に3Dビューアが現在のGaussianでどのくらいの頻度で 更新されるかを表す。50 = 50イテレーションごとに新しいレンダリングを 行う—進捗を確認するには十分でありながら、トレーニングを目立って 遅くすることはない。0 = ビューアはまったく更新されない(バックグラウンド トレーニング、最大速度)。長時間のMCMC実行では、更新のオーバーヘッドが 積み重なるため、250や1 000にする価値がある。特殊な役割: このフィールドはトレーニング設定に属してはいるが、アプリ全体の設定 (設定 → トレーニング)であり、トレーニング・レシピの一部ではない。 そのため「Modified」比較からは除外されており、Presetを切り替えても 保持され、2026-07-18以降シーンを開いた際にファイルから読み込まれる ことはなくなった—以前はシーンを読み込むと、ユーザーの フレームレート設定がシーン作者のものに(「オフ」も含めて)静かに 置き換わってしまい、それを取り戻す手段が他になかった。
T60perceptualLossWeight
詳細
Default: 0.0(= 無効)Range: 0 または 0.001 – 0.5
技術詳細
知覚的損失項(マルチスケール・ブラー・特徴マッチング)の重み。 L1+SSIMよりも高いレベルで構造的・テクスチャ的な類似性を捉える— 典型的には「ピクセル単位で完全に一致すること」よりも「見た目が 自然であること」が重要な場面で使われる。この値はすべてのPresetで 0.0(オフ)になっている。UI上ではInspectorの「Training」セクション にあるPerceptual Lossスライダーで設定でき、範囲は0から 0.20まで0.01刻みで、0のときアプリには「Off」と表示される。
MCMCデシマライゼーション(密度制御)(T61–T73)
T61densificationStrategy
詳細
デフォルト: .classic(初期化+クラシックプリセット)、.mcmc (全MCMCプリセット+シーンクラス) 範囲: .classic または .mcmc
技術詳細
クラシックデシマライゼーション (クローン/分割/剪定、Kerbl et al.~2023)とMCMCデシマライゼーション(Stochastic Gradient Langevin Dynamics with Relocation、Kheradmand et al.~NeurIPS 2024)を切り替える。.classicの場合はT11–T16が評価され、.mcmcの場合は T62–T73が評価される。切り替え時の注意: クラシックのデフォルトとMCMCのデフォルトは まったく異なるキャリブレーションがされている — Expert Viewでピッカーを 切り替えるだけで対応するプリセットを読み込まないと、1.4.3のバグのような大量消滅 (460K → 1イテレーションで5になる。MCMCのOpacityRegが0.01のままクラシックの Opacity値を殺してしまうため)を招く恐れがある。そのためMCMC初期化のデフォルトは意図的に 「マイルド」に設定されている(すべての正則化値は0.0)。
T62mcmcMaxGaussians
詳細
デフォルト: 150,000(初期化+.fullMCMC+.mcmcBalanced)、 100,000(.mcmcPreview)、1,500,000(.fullMCMCMip — Mip-Splattingバリアント、10倍の予算)、1.19M(.renderPreset)、1.25M (.outdoorPreset)、670K(.indoorPreset) 範囲: 0 (=「バッファ容量を使用」)または10,000 – 5,000,000 定義箇所:
技術詳細
MCMC戦略における、Gaussianの数のハード上限。 その数はT70 mcmcGrowthRate(通常5%)によって、リロケーションステップごとにこの 上限まで段階的に増加していく。150Kは良い出発点である — これより大幅に上げると、スプラットの品質が薄まってしまう(小さく冗長な Gaussianが増えすぎる)。大幅に下げると、シーンが密度不足のままになる。非常に 大規模なシーン(例えば1,545枚の写真によるドローン撮影で158KのSfM初期値)では 150Kでは低すぎる — そのため1.4.5で T72 mcmcCapMultiplier + T73 mcmcAutoScaleBySceneの拡張が追加された。 シーンクラスプリセットは、670K(インドア)から1.25M(アウトドア)の間で シーン固有の値を使用する。値が0の場合、エンジンはバッファの全容量を上限として使用する。
T63mcmcNoiseScale
詳細
デフォルト: 0.00005(5e-5=論文のデフォルト値) 範囲: 1e-6 – 1e-3
技術詳細
各MCMCイテレーションで各Gaussianの位置に加算される ガウスノイズの倍率(SGLDロジック)。高い=より多くの探索(Gaussianがより 動き回り、潜在的に良い位置を見つける)、低い=より活用重視(Gaussianはすでに 良い場所に留まる)。5e-5が適切な値である — これより明らかに小さいと探索が不十分になり、明らかに大きい(1e-4)と過剰になり、 スプラットが崩れてしまう。トレーニング時間にわたってコサイン減衰され、 T69 mcmcNoiseDecayEndまで続く — 減衰範囲の終端でノイズは実質0になり、 Gaussianは収束する。
T64mcmcOpacityRegWeight
詳細
デフォルト: 0.0(=RadianceKitのデフォルトでは無効化、論文では 0.01) 範囲: 0または0.001 – 0.05
技術詳細
MCMC特有のOpacityに対するL1ペナルティ。 論文のデフォルト0.01(未使用のGaussianをゼロ方向に押し、 リロケーション対象にする)。RadianceKitでは、この正則化を使わない方が 測定可能な形で結果が優れている。理由: T68 mcmcDeadOpacityThresholdで 定義される剪定基準だけで十分であり、追加のL1ペナルティは価値のある 低Opacity Gaussianまで殺してしまう。そのためデフォルトは0。 注意: 1.4.3ベータビルドでは初期化のデフォルトが誤って0.01に なっており、これが大量消滅バグの原因だった(T61の解説を参照)。 1.4.4以降は0.0に修正済み。
T65mcmcScaleRegWeight
詳細
デフォルト: 0.0(=無効化、論文では0.01) 範囲: 0 または0.001 – 0.05
技術詳細
MCMC特有の、スケール固有値に対するL1ペナルティ。 論文のデフォルト0.01。ここでもT64と同じ理由で、正則化を使わない方が 結果が優れている。すべてのRadianceKit MCMCプリセットで無効。T64と 同様の注意: 1.4.3のバグ。
T66mcmcRelocationInterval
詳細
デフォルト: 100(初期化+全MCMCプリセット、論文標準値)、 155(P9アウトドア) 範囲: 50 – 500
技術詳細
MCMCが死んだGaussian (sigmoid(opacity) < T68 mcmcDeadOpacityThreshold)を新しい位置に リロケーションするイテレーション間隔。より短い間隔(例えば50)は破壊的に働きすぎ、 Lossが変動する。かなり長い間隔(例えば200)はMCMCの反応性を奪う。100が 正しい値である。屋外シーンでは155とやや高めになっている — より長い間隔により、新しく配置されたGaussianを次のリロケーションイベントが 圧力をかける前に、Adamが統合するための時間を稼げる。
T67mcmcWarmupIterations
詳細
デフォルト: 500 範囲: 100 – 5,000
技術詳細
まだMCMCリロケーションが行われない、初期 イテレーションの数。このウォームアップの後にのみ、リロケーションロジックが 開始される。目的: 最初のイテレーションではOpacity値がまだ安定しておらず — すぐにリロケーションを開始すると、Gaussianが間違った場所に配置され、 すぐにまた移動させる必要が生じ、Adamのモーメンタムを破壊してしまう。 論文のデフォルトは500。RadianceKitはこの値を、堅牢であることが実証された ためそのまま採用している。
T68mcmcDeadOpacityThreshold
詳細
デフォルト: 0.005(初期化、論文標準)、0.01(.fullMCMCと全 MCMCプリセット) 範囲: 0.001 – 0.05
技術詳細
これを下回るとGaussianが「死んでいる」と みなされ、リロケーション対象となる、sigmoid(Opacity)のしきい値。0.01が 適切な値である — 0.005ではほとんど変化がなく、0.02では 悪化する。高い=より積極的なリロケーション(より多くのGaussianが移動される)、 低い=より慎重。0.01はおおよそ「0.5%の視覚的可視性」に相当する。 P10インドアは0.0142を使用している。
T69mcmcNoiseDecayEnd
詳細
デフォルト: 0(初期化=「減衰なし」)、160,000(.fullMCMC = 200Kの80%)、96,000(.mcmcBalanced = 120Kの80%)、40,000 (.mcmcPreview) 範囲: 0または1,000 –
技術詳細
T63 mcmcNoiseScaleのノイズが完全にゼロまで 減衰しきるイテレーション(イテレーション0からここまでのコサイン減衰)。 maxIterationsの80%が適切な値である — これによりMCMCに十分な探索時間が与えられつつ、最後の20%はノイズなしで 収束に充てられる。0=全イテレーションを通じて一定のノイズ(めったに 意味がなく、その場合MCMCは収束できない)。
T70mcmcGrowthRate
詳細
デフォルト: 0.05(論文標準=5%) 範囲: 0.01 – 0.2
技術詳細
リロケーションステップごとの、MCMC個体数 ターゲットの成長率。ロジック: 各リロケーションイベントごとに、目標個体数が (1 + growthRate)倍に増加し、T62 mcmcMaxGaussians(または T72/T73によってスケーリングされたバリアント)に達するまで続く。0.05が 適切な値である — より高い値は成長が速すぎる結果を招き (Adamのモーメンタムが統合しきれないうちにGaussianが挿入されてしまう)、 より低い値は最終的にシーンが密度不足になる。
T71mcmcSigmoidK
詳細
デフォルト: 100.0 範囲: 10.0 – 500.0 定義箇所:
技術詳細
MCMCノイズ減衰のためのシグモイドシャープネス パラメータ。SGLDステップでは、Gaussianごとのノイズがこれによって 減衰される — 高不透明度のGaussian(ロジットが正のもの)は、 低不透明度のものより指数関数的に少ないノイズしか受け取らない。K = 100は シャープで、つまり「フルノイズ」から「ノイズなし」への遷移がOpacity 0.5 付近で非常に速く起こる。K = 100が適切な値である — より小さい値 (10–50)は高不透明度のGaussianも一緒に揺れてしまい(収束済みのGaussianを 破壊する)、より大きい値(500超)は遷移を人工的に硬くしすぎ、死んだ Gaussianがまったく動かなくなってしまう。
T72mcmcCapMultiplier
詳細
デフォルト: 3.0(初期化+.fullMCMC)、2.0(.mcmcPreview)、 2.5(.mcmcBalanced)、2.98(P8レンダー)、5.32(P9アウトドア)、1.76(P10 インドア) 範囲: 0(=無効化)または1.0 – 10.0
技術詳細
1.4.5の新機能: シーン適応型の上限スケーリング。 T73 mcmcAutoScaleBySceneがtrueの場合、実効上限は (バッファ容量にクランプされる形で)計算される。背景: 大規模なシーン (例えば1,545枚の写真によるドローン撮影 → 158KのSfM初期値)では T62 = 150,000が低すぎる — Density Controlがまったく成長できなくなって しまう。倍率3.0の場合、この例では上限が474K(158K × 3.0)にスケーリングされる。 シーンクラスプリセットはシーン固有の値を使用する: アウトドアは高い倍率 (5.32 → 156K個の初期点に対して約830Kの上限)の恩恵を受け、インドアは 1.76で十分である(壁がより早く飽和するため)。上限の完全な解決方法については メソッドを参照。
T73mcmcAutoScaleByScene
詳細
デフォルト: true(初期化+全MCMCプリセット) 範囲: boolean
技術詳細
1.4.5の新機能: シーン認識型の上限ロジックの マスタースイッチ(T72 + を参照)。falseの場合、上限としては T62 mcmcMaxGaussiansのみが使われる(1.4.4の挙動に戻る)。デフォルトで オンになっているのは、そうしないと1.4.3の大規模シーンにおける大量消滅 問題が再発するため。手動で無効化するのは、明示的に固定の上限を設定したい 場合のみ —例えば、最終サイズを事前に把握できる150Kバリアントを トレーニングしたい場合など。
Mip-Splatting (T74–T76)
ステータス: Mip-Splattingは実際の運用では画質の向上をもたらさず、屋外シーンの一部ではむしろ悪化させました。これらのフィールドは実験用のオプトイン のまま残されています。出荷されるすべてのPresetではMip-Splattingはオフです。
T74useMipSplatting
詳細
Default: false (すべてのProduction Preset), true (.fullMCMCMip — 研究用Sibling) Range: boolean
技術詳細
Mip-Splatting (Yu et al.~CVPR 2024) を有効化する: 3D平滑化フィルター + 2Dフィルター + αコンペンセーションで構成され、 per-Gaussianの周波数を、最も密なトレーニングカメラのサンプリングレートの ナイキスト限界に制限します。理論上の狙いは、トレーニング解像度から外れたスケール (トレーニング解像度の0.5倍または2倍)でレンダリングする際の エイリアシングの排除です。プリプロセスシェーダーとBackward-Projectionシェーダー内で 有効化されており、機能としては正しく動作します。しかし実際には、期待していた画質向上は得られませんでした。トレーニング解像度でレンダリングしてもほとんど変化がなく、屋外シーンではむしろ画質が悪化します。考えられる説明の一つは、多数のGaussianが関与すると、3Dの平滑化がMCMCのRelocationと拮抗してしまうというものです。このフィールドは、独自のマルチスケール実験のために利用可能なまま残されています。
T75mipSmoothing3DScale
詳細
Default: 0.2 (論文のDefault) Range: 0.05 – 1.0
技術詳細
3D平滑化スケールパラメーター (Yu et al.~§3.3, 論文のDefaultは0.2)。値が大きいほどGaussianあたりのワールド空間での平滑化が強くなり (=アンチエイリアシング効果は増すものの、Defaultスケールでのぼけも増える)、 値が小さいほどシャープになりますがエイリアシングが起きやすくなります。 T74 useMipSplatting = true の場合にのみ参照されます。これ以上の最適化は行っていません — 論文のDefaultである0.2の時点で、すでにMip-Splattingによる効果は得られていないためです。
T76mipFilter2DVariance
詳細
Default: 0.3 (= これまでの挙動と完全に同一) Range: 0.1 – 1.0
技術詳細
Σ_2D対角成分に加算される2D Mipフィルターの分散 (分散そのものであり、二乗ではありません)。0.3は、Mip-Splatting導入前にカーネル内に 固定値として書かれていた値そのものです。T74 useMipSplatting = false の場合、カーネルはこの値を完全に無視し、ハードコードされた0.3を書き込みます — そのため、 これまでの挙動が変わることは絶対にありません。trueの場合は、 ここで設定した値が使用されます。Mip-Sweep用にフィールドカタログ内に残されています。
適応的Densification (T77–T79)
T77adaptiveDensification
詳細
Default: false Range: boolean
技術詳細
固定の T11 densifyGradThreshold に代わる Rolling-Median-Trackerです。trueの場合、各 Densify-Stepで現在の閾値が median(直近N件のavgGradサンプル) × T79 adaptiveDensifyMultiplier によって上書きされます。N = T78 adaptiveWindow。T52 でMass-Pruningを発動させるp98バリアントよりも厳格です:定常状態ではMedianの2倍はグラデーション分布のおよそp70–p80に位置します。単独でオンにしても品質面の向上はもたらされません。Curriculum(T80/T81を参照)と組み合わせて初めて効果が出ます — その場合、向上分を担うのはCurriculumの方で、このフィールドはむしろ安定性の役割を担います。これに対応する操作要素はありません:このフィールドは すべてのPresetでオフになっており、編集済みのPresetファイルを通じてのみ 値を設定できます。
T78adaptiveWindow
詳細
Default: 1 000 Range: 100 – 10 000 Defined in:
技術詳細
Densification-Events単位でのRolling-Median-Window(イテレーション単位では ありません — T13 densifyInterval の各ステップが1つのサンプルを提供します)。 デフォルトの1 000は — 直近100 000 回のトレーニングイテレーションがMedianに寄与することを意味し、つまり通常はここまでのトレーニング履歴全体が対象になります。初期フェーズ(T78 サンプルに達する前):Trackerは nilを返す → 固定閾値 T11 へのフォールバック。関連するのはのみです。
T79adaptiveDensifyMultiplier
詳細
Default: 2.0 Range: 1.0 – 4.0
技術詳細
適応的閾値のためのRolling-Medianに対する 乗数です。デフォルトの2.0は典型的なグラデーション分布のおよそp70–p80に 相当します。低くする=より積極的な成長(クローンが増える)、高くする=より 厳格(クローンが減る)。1.5~3.0の範囲では2.0が最適な値です。関連するのはのみです。
カリキュラム (T80–T81)
T80curriculumResolutionRamp
詳細
デフォルト: false 範囲: boolean
技術詳細
トレーニング解像度は0.5×から始まり、 T50 positionLRScheduleEndIteration / 2(T50が未設定の場合は T1 maxIterations / 2)の時点で T22 trainingRenderScaleへと切り替わる。有効化されている場合は T23 resolutionWarmupScaleを上書きする。2つのアダプティブ機能(T77を参照)のうち、実際の品質向上を担うのはこのカリキュラムだ — 段階的な解像度の引き上げにより、アプリは細部の作り込みに移る前に、より低い解像度で大まかなジオメトリを見つける時間を得られる。UI上では調整できず — 編集したPresetファイルを経由する必要があり、その場合はT81と組み合わせるのが妥当だ。
T81curriculumSHProgression
詳細
デフォルト: false 範囲: boolean
技術詳細
T21 shDegreeUpgradeIterationsを [maxIter/4, maxIter/2, maxIter*3/4]で上書きし、SHのランクアップをトレーニング時間の前半に集中させるのではなく、均等に分散させる。仮説としては、安定したジオメトリがカラーディテールの爆発的増加より先に確立されることで、視線方向に依存する光沢効果がより正確に位置づけられる。T77と組み合わせることで一部のシーンで効果が得られるが、それを支えているのはこのフィールドであり、T77単体では不十分だ。 UI上では調整できず — 編集したPresetファイルを経由する必要がある。
静的プリセット (TP1–TP9)
ここでは初期化デフォルトとの構造的な違いのみを扱う。UI プリセット P1–P11 すべてのマーケティング的な説明については、第7章を参照してほしい。
TP1.preview
詳細
10 GB 以上の RAM を搭載したシステム向けの診断/プレビュー用プリセット。 初期化デフォルトからの変更点:
maxIterations30 000 → 5 000densifyUntilIteration15 000 → 3 500(maxIter の 70 %)positionLearningRateFinal1.6e-6 → 1.6e-5(10 倍高く、減衰もより緩やか)shDCLearningRate、shRestLearningRate、opacityLearningRate、scaleLearningRate、rotationLearningRateはそれぞれ 2 倍opacityResetInterval3 000 → 100 000(事実上無効 — リセットは短い学習を台無しにするため)shDegreeUpgradeIterations[1K, 2K, 3K]→[1K, 2K](これほど短い実行では degree 3 は収束しない)trainingRenderScale1.0 → 0.5
TP2.full
詳細
プロダクション品質のクラシック版。変更点:
maxIterations30 000 → 35 000(これ以上だとオーバートレーニングの危険 — Gaussian が増えるだけで品質は向上しない)densifyUntilIteration15 000 → 5 000(実績のある値。これより遅く止めると悪化する)- すべての LR を 2 倍
positionLearningRateFinal1.6e-6 → 1.6e-5(論文デフォルトの 10 倍)densifyGradThreshold2e-6 → 1.1e-6(1.0× 解像度向けに較正済み)densifyInterval100 → 200pruneOpacityThreshold0.005 → 0.001opacityResetInterval3 000 → 100 000(実質的に無効化)shDegreeUpgradeIterations[1K, 2K, 3K]→[2K, 5K, 8K](アップグレードを遅延)opacityDecayFactor0.0 → 0.9995(HTGS 方式、明確な品質向上)opacityDecayInterval50(変更なし)mergeAfterDensificationfalse → truepositionLRScheduleEndIteration0 → 20 000postTrainingCompactificationtrue(.fullの初期化デフォルトとしてすでに設定済み)
TP3.fullClassicPaper
詳細
TP2 の論文準拠クラシック版。TP2 からの変更点:
maxIterations35 000 → 30 000(論文の標準値)densifyUntilIteration5 000 → 15 000(論文: maxIter の 50 %)positionLearningRateFinal1.6e-5 → 1.6e-6(論文デフォルト)opacityLearningRate、scaleLearningRate、rotationLearningRateを論文デフォルト(0.05、0.005、0.001)に戻すdensifyGradThreshold1.1e-6 → 2e-7(Bicycle での約 1–2 M Gs 向けに較正済み)densifyInterval200 → 100(論文)pruneOpacityThreshold0.001 → 0.005(論文デフォルト)opacityResetInterval100 000 → 3 000(論文 §5.2、リスクあり — RadianceKit の環境では品質を損なう)opacityDecayFactor0.9995 → 0.0(論文には decay がない)positionLRScheduleEndIteration20 000 → 30 000(cosine が maxIter の 100 % で実行される)
TP4.fullMCMC
詳細
プロダクション品質の MCMC 版。初期化デフォルトからの変更点:
maxIterations30 000 → 200 000(MCMC はクラシックの約 5 倍のイテレーション数を必要とする)densifyUntilIteration15 000 → 160 000(maxIter の 80 %)positionLearningRateFinal1.6e-6 → 1.6e-5- LR スケジュールは TP2 と同様(すべて 2 倍)
ssimWeight0.2 → 0.05(MCMC はより強い L1 シグナルを必要とする)shDegreeUpgradeIterations[1K, 2K, 3K]→[2K, 5K, 8K]densificationStrategy.classic→.mcmcmcmcMaxGaussians150 000(初期化デフォルトですでに設定済み、プリセットで確認)mcmcNoiseScale5e-5(論文の値、実績あり)mcmcDeadOpacityThreshold0.005 → 0.01mcmcNoiseDecayEnd0 → 160 000(maxIter の 80 %)mcmcCapMultiplier3.0(初期化デフォルトですでに設定済み)mcmcAutoScaleByScenetrue(初期化デフォルトですでに設定済み)opacityResetInterval3 000 → 200 000(事実上無効。MCMC はリセットの代わりに Reloc を使う)
TP5.fullMCMCMip
詳細
オリジナル論文の Gaussian 予算を用いた TP4 の Mip-Splatting 版。TP4 からの変更点:
mcmcMaxGaussians150 000 → 1 500 000(10 倍、論文の規模)useMipSplattingfalse → true(Mip オン)
TP6.classicBalanced
詳細
中位クラシック。TP2 からの変更点:
maxIterations35 000 → 20 000(30 000 とほぼ同じ結果を、目に見えて短い待ち時間で得られる)positionLRScheduleEndIteration20 000 → 0(cosine が maxIter = 20K で実行され、延長フェーズなし)
TP7.mcmcPreview
詳細
MCMC 診断用。TP4 からの変更点:
maxIterations200 000 → 60 000densifyUntilIteration160 000 → 48 000(80 %)mcmcMaxGaussians150 000 → 100 000mcmcNoiseDecayEnd160 000 → 40 000mcmcCapMultiplier3.0 → 2.0(プレビューはより控えめにスケーリングする)
TP8.mcmcBalanced
詳細
中位 MCMC。TP4 からの変更点:
maxIterations200 000 → 120 000densifyUntilIteration160 000 → 96 000(80 %)mcmcNoiseDecayEnd160 000 → 96 000(80 %)mcmcCapMultiplier3.0 → 2.5(プレビューの 2.0 とフルの 3.0 の中間)
TP9.quickTest
詳細
純粋な動作確認用。初期化デフォルトからの変更点:
maxIterations30 000 → 1 000densifyUntilIteration15 000 → 500densifyGradThreshold2e-6 → 4e-6(0.25× 解像度向けに較正済み)densifyInterval100 → 50opacityResetInterval3 000 → 100 000(短すぎるためオフ)trainingRenderScale1.0 → 0.25
アプリがGaussianの上限をどう決めるか
「MCMCがGaussianを最大どこまで増やしてよいか」という問いに対する最終的な答えだ。ここには3つの値が関わる:T62 mcmcMaxGaussiansで設定された値、シーンのSfM初期点の数、そしてあらかじめ確保されたバッファ容量。アプリは次の順序で計算する:
+ 出発点はT62だ。これが0になっている場合、アプリは150,000を設定する—このセーフティネットが1.4.3で説明したMass-Extinctionの事態を防ぐ。 + T73 mcmcAutoScaleBySceneがオンになっていて、かつT72 mcmcCapMultiplierが0より大きい場合、アプリは出発点の値を「初期点数 × T72」と比較し、大きい方の値を採用する。 + 最後に、その結果をバッファ容量の範囲内に制限する。
例:Bicycle(Mip-NeRF 360、194枚の写真フレーム)→ SfM初期点は~156 K点、T62 = 150 000、T72 = 5.32、Auto-scaleオン、バッファ容量8M。156 K × 5.32 は830 Kとなり、これは150,000より大きく8Mより小さい—つまり実効上限は830 Kだ。MCMCのRelocationはこの上限を守る。
MCMCにおける実際の最大Splat数を計算する。アプリは「Max Gaussians」の設定値を見て、シーンが最初にどれだけの点を持っているかを確認し、「Auto-scale by scene」がオンになっていれば乗数でスケーリングする。こうすることで、小さなシーンと巨大なシーンに同じ値を強制するのではなく、上限がシーンに合わせて調整される。これについて自分で何かする必要はない—アプリがトレーニング開始時に自動的に計算する。
どのフィールドが何のためか?(チートシート)
| 目的 | 調整するフィールド |
|---|---|
| 遠景でのディテールを増やす | T62 mcmcMaxGaussians を高く、 T72 mcmcCapMultiplier を5以上に |
| 全体的なディテールを増やす(Classic) | T1 maxIterations を高く(40K以下)、 T2 densifyUntilIteration をT1の14%以下に |
| ドローン撮影でのフローターを減らす | T43 frustumCullEnabled をオン、 T20 skyMaskingEnabled をオン、T45 skyDomeEnabled をオン |
| 屋外シーンで美しい空にする | T45 skyDomeEnabled をオン、 T47 skyDomeRadiusMultiplier を30~60に |
| エクスポートファイルを小さくする | 戦略 .mcmc(T61)、 T56 postTrainingCompactification をオン、T62 mcmcMaxGaussians を 20万以下に |
| トレーニングを高速化する | T22 trainingRenderScale を0.5に、 T1 maxIterations を半分にする — ただし両方は変更しないこと! |
| より良いハイライトを得る | T21 shDegreeUpgradeIterations を [2K, 5K, 8K] に(前倒しにしすぎない)、MCMC + 20万イテレーション |
| ライブプレビューをより頻繁に | T59 livePreviewInterval を50に — 「環境設定 → トレーニング」で選択できる最も高頻度の値 |
| 影の境界をより滑らかにする | T17 ssimWeight をやや高め (0.15~0.25)に、ただし0.3を超えないこと |
| 室内シーンをコンパクトに保つ | P10 屋内プリセット( T72 = 1.76) |
危険なフィールド
これらのフィールドは、設定を誤るとOOM、アプリクラッシュ、Gaussiansの大量消滅、あるいは使い物にならないベンチマークデータを引き起こす可能性があります。 特に注意して扱ってください。
- T11 densifyGradThreshold — 半分に減らすと2〜4倍ものGaussiansが生成され、あっという間にGPUメモリを圧迫します。もう一つ注意すべき点:T22 trainingRenderScaleと整合させる必要があります(1.0× → 1e-6、 0.5× → 2e-6、0.25× → 4e-6)。 - T72 mcmcCapMultiplier — 20万点を超えるSfM初期点を持つ大規模シーンでmultiplierが5を超えると、数百万Gaussians規模のResolved Capが生じます。36GB RAMのMacではOOMになる可能性があります。屋外用の値5.32が機能するのは、対応する参照シーンが約15.6万個の初期点を持っているから(→ 83万のCap)に過ぎません。 - T39 testViewIndices — プリセットファイル内で手動設定すると、品質測定が使い物にならなくなることがあります(すべてのインデックスがNを超える → ホールドアウトなし)。リストは空のままにしてください。 - T64 mcmcOpacityRegWeight と T65 mcmcScaleRegWeight — 1.4.3ベータでは0.01に設定されており、これが大量消滅を引き起こしました(1回のイテレーションで46万 → 5個のGaussiansに減少)。1.4.4以降は0.0に固定されていますが、手動で値を上げるとこの問題を再現できてしまいます。 - T15 opacityResetInterval — 100,000以上(実質オフ)に設定されておらず、かつトレーニングが10,000イテレーション未満の場合、リセットが収束を破壊します。.previewがmaxIterations = 5,000にもかかわらずこれを100,000に設定しているのはそのためです。 - T54/T55 densifyPhase2* — 第2Densificationフェーズは、Gaussiansがゼロになるまでのカスケードで終わります。両方とも0のままにしてください。 - T74 useMipSplatting — 画質の向上はもたらさず、一部の屋外シーンではむしろ画質を悪化させる可能性があります。デフォルトではオフになっており、実験用途にのみオプトインで使用してください。
このリストに載っているフィールドを変更したい場合は、事前に現在のプリセットのバックアップ(JSONとしてエクスポート)を取り、結果を再現可能な形で測定できるかどうかを検討してください。そうしないと、後になって改善したのか悪化させたのか分からなくなってしまいます。