用户指南

第 6 章 — 训练配置

预览预设导出为 JSON 并在 TextEdit 中显示 —— 字段 id/name/category/version/createdAt/description,trainingConfig 包含所有相关参数(maxIterations 5000、densifyUntilIteration 3500、ssimWeight 0.20、renderScale 0.50、strategy classic、cameraAlignment applePhotogrammetry、densifyGradThreshold 2.0e-06、opacityResetInterval 3000、minOpacity 0.005、六个布尔开关)
预览预设导出为 JSON 并在 TextEdit 中显示 — 字段 id/name/category/version/createdAt/description, trainingConfig 包含所有相关参数(maxIterations 5000、 densifyUntilIteration 3500、ssimWeight 0.20、renderScale 0.50、 strategy classic、cameraAlignment applePhotogrammetry、 densifyGradThreshold 2.0e-06、opacityResetInterval 3000、minOpacity 0.005、六个布尔开关)

一个典型的预设 JSON 导出示例。 顶层字段:id(UUID)、name、(classic | mcmc | sceneClass | custom)、(Schema 版本)、 (时间戳)、(自由文本)。嵌套的 对象包含对可复现性至关重要的 参数 — 导入时,整个区块会被读入 训练配置,App 版本中的默认值会填充 JSON 中缺失的字段(例如 App 更新之后)。想把预设交给 另一台 Mac 的人,只需把这个 JSON 文件发过去即可。

训练配置是 RadianceKit 中每次训练运行的核心。它汇集了 影响训练的每一个参数 — 从最大迭代次数、八个学习率, 到 MCMC、Mip-Splatting、Curriculum 以及场景感知 Cap 逻辑的专用字段。你可以在侧边栏的 训练配置区块(专家视图)中编辑它,将其保存 为预设,或以 JSON 导出的形式交给另一台 Mac。 训练开始时,正是这个对象被冻结并传递给 GPU 后端。

本章是面向高级用户的参考资料。它列出了训练配置中 80 个可设置字段、9 个内置预设,以及 高斯 Cap 的场景相关解析方式。如有疑问, 以所选预设设定的值为准 — 你可以在 Inspector 或 预设的 JSON 导出中看到它。

目录:

+ 迭代次数 (T1–T2) + 学习率 (T3–T10) + 致密化 — 经典 (T11–T16) + 损失 (T17–T20) + SH 阶数渐进 (T21) + 性能 (T22–T24) + 诊断与点云预处理 (T26–T30) + 正则化 (T31–T37) + 精细化 (T38–T44) + 天空穹顶 (T45–T48) + Adam + 学习率调度 (T49–T55) + 后处理 + Apple AI (T56–T60) + MCMC 致密化 (T61–T73) + Mip-Splatting (T74–T76) + 自适应致密化 (T77–T79) + Curriculum (T80–T81) + 静态预设 (TP1–TP9) + App 如何确定高斯 Cap + 哪个字段用来做什么?(速查表) + 危险字段

迭代次数(T1–T2)

T1maxIterations

详细信息

默认值: 30 000(初始化器), 35 000(.full), 200 000 (.fullMCMC范围: 1 000 – 500 000(UI 滑块),逻辑中无硬性 上限

技术细节

后端要执行的训练迭代总数。一次迭代指的是对单个训练相机 执行一次前向渲染、对所有损失分量(L1 + SSIM + 可选正则化项 + 天空遮罩) 执行一次反向传播,以及执行一次 Adam 优化器步骤。这个数字会直接影响其他 调度:位置学习率遵循从 0 到 T1 本身或到 T50 positionLRScheduleEndIteration 的余弦退火曲线;密集化在 T2 densifyUntilIteration 处停止;MCMC 噪声衰减在 T69 mcmcNoiseDecayEnd 处结束;SH 阶数升级发生在 T21 中定义的三个 标记处。经典密集化的经验范围是 20 000–35 000 次迭代,MCMC 则是 60 000–200 000 次。大幅超出 Preset 中预设的值很少能带来额外的质量提升 — Adam 动量会饱和,而且没有学习率衰减终点会导致损失停滞。反过来, 低于约 5 000 次会导致几何体收敛不完整(密度控制没有足够时间进行 克隆/分裂)。

T2densifyUntilIteration

详细信息

默认值: 15 000(初始化器), 5 000(.full), 160 000 (.fullMCMC范围: 0 – T1 maxIterations

技术细节

密集化停止的迭代次数。在此之前,Gaussians 会按照 T11–T16 (Classic)或 T67–T70(MCMC)中参数化的规则进行克隆、分裂和剪枝; 此后 Gaussians 数量保持不变,只有位置、旋转、缩放、不透明度和 SH 系数继续被优化(精细化阶段)。在 3DGS 原始论文中,该值为 T1 的 50%,而在 RadianceKit 的 .full Preset 中仅约 14%(35 000 中的 5 000):大约 5 000 次迭代之后,进一步的密集化反而会让结果变差 —— 更多的浮点噪点(Floaters)、更高的内存需求、却没有质量提升。相反, MCMC 让重定位(Relocation)运行到 T1 的 80%,因为 MCMC 不会产生 有害的浮点噪点。若 T2 设置得过小(< 1 000),生成的 Gaussians 会过少;在 Classic 中设置得过大(> T1 的 50%)会导致过度增长 (Overgrowth)以及 RGB 饱和度异常(参见室外过训练发现)。

学习率(T3–T10)

T3positionLearningRate

详细信息

默认值: 0.00016 范围: 1e-7 – 1e-3(推荐)

技术细节

Adam 优化器在训练开始时(迭代 0)为每个 Gaussian 的 XYZ 位置设定的学习率。遵循余弦退火曲线,随着训练进行逐渐降至 T4 positionLearningRateFinal。默认值 0.00016 来自 3DGS 原始论文(Kerbl et al.~2023),在 RadianceKit 中即使提高图像分辨率也无需缩放此值 ——— 位置是在世界坐标系中移动的,而不是在像素空间中。明显调高该值(> 0.0005)会导致 Gaussians 在长距离内跳跃,使 loss 变得不稳定; 明显调低(< 0.00005)则会导致初始化错误的点云永远找不到自己的位置。因此对于绝大多数场景,默认值都是正确的选择。请注意:在 .fullMCMC 中我们有意让此值保持默认 — MCMC 需要 恒定的学习率来支撑其 Relocation 逻辑,因此在这里调参没有意义。

T4positionLearningRateFinal

详细信息

默认值: 0.0000016(初始化器 + 论文), 0.000016(.full, .fullMCMC — 高 10 倍) 范围: 0 – T3 positionLearningRate

技术细节

位置学习率余弦退火曲线的终值。 该值在 T1 maxIterations 处达到,或者如果设置了 T50 positionLRScheduleEndIteration,则在该处达到。RadianceKit 的 .full 预设使用 0.000016 — 即比论文默认值 0.0000016 高 10 倍。 无论是明显更小的终值还是明显更大的初值,都会显著恶化结果。这个较高的终值不是折中方案,而是 刻意的选择:如果衰减过强,Gaussians 会在 精修阶段失去对新出现的 Densification 候选进行调整的能力。可以缩短 Schedule 阶段(T50 < T1), 使 T4 在训练结束前就已经达到,训练剩余部分则以恒定的最小学习率进行 — 典型配置为:T50 = 20 000T1 = 35 000,即精修阶段以 0.000016 进行 15 000 次迭代。

T5shDCLearningRate

详细信息

默认值: 0.0025(初始化器 + 论文), 0.005(.full 及所有 MCMC 预设 — 2 倍) 范围: 0.0001 – 0.05

技术细节

用于球谐颜色 DC 分量(degree 0,即恒定反照率)的 Adam 学习率。SH-DC 对应 Gaussian 与方向无关的基础色调,可以说是「基础颜色」。 RadianceKit 在质量预设中将论文默认值翻倍 —— 这加快了颜色的收敛, 这在训练时间较短(少于 5 000 次迭代)时是必要的,否则 SH-DC 无法成型。与几何学习率不同,SH-DC 没有衰减;学习率 在所有迭代中保持恒定(或仅遵循 T51 中可选的 extended-phase 衰减)。若值再进一步明显调高(约 0.01), 结果又会恶化,颜色会变得不稳定。

T6shRestLearningRate

详细信息

默认值: 0.000125(初始化器 + 论文), 0.00025(.full 及 MCMC — 2 倍) 范围: 0.000001 – 0.005

技术细节

用于高阶球谐系数(Degree 1、2、3 — 即依赖于 观察方向的颜色分量,负责高光、反射和柔和的着色)的 Adam 学习率。按照论文惯例比 T5 小 20 倍,因为这些 系数的数量呈平方增长(Degree 1 有 3 个,Degree 2 有 5 个, Degree 3 有 7 个 → 每个 Gaussian 共 15 个浮点数),如果学习率不够小 就会使画面过饱和。分两个阶段逐步解锁 — 直到 T21 shDegreeUpgradeIterations 中的第一个标记之前,只有 Degree 0 激活 (也就是只有 T5),之后是 1,再之后是 2,最后是 3。较小的值在这里 在具有大量漫反射光照的场景中尤为重要;对于非常有光泽的 表面(车漆、水面),调整此值收效不大 — 因为 SH 表示本身就存在局限性。

T7opacityLearningRate

详细信息

默认值: 0.05(初始化器 + 论文), 0.1(.full,MCMC — 2 倍) 范围: 0.001 – 1.0

技术细节

用于每个 Gaussian 的 logit 不透明度的 Adam 学习率。 应用将不透明度存储为不受约束的浮点值, 并用 Sigmoid 将其变换到 [0, 1] 范围内;学习率作用于 logit 空间。 质量预设将论文默认值翻倍至 0.1;这让剪枝更高效 —— 失效的 Gaussians 会更快低于 T14 pruneOpacityThreshold。哪个值效果最好, 取决于 Adam 的配置;两者之间的相互作用并非无关紧要。较低的值(< 0.01) 会导致「死亡的」Gaussians 长期存在并占用内存;过高的值(> 0.5) 可能导致不透明度爆炸,因此优化器将 logit 值 严格限制在 [-15, 3] 范围内。

T8opacityLearningRateFinal

详细信息

默认值: 0.0(=「无衰减」) 范围: 0 或 0.001 – T7 opacityLearningRate

技术细节

不透明度学习率可选的余弦衰减终值。若为 0.0, 则禁用衰减,不透明度学习率在整个训练过程中 保持在 T7 的恒定值。从 0.1 衰减到 0.01 会明显使结果变差; 因此默认值设为「关闭」。该字段背后的假设是:在精修阶段, 恒定的不透明度学习率可能导致振荡,使得已经达到 正确透明度的 Splats 因随机的梯度波动而 被重新移动。经验上并不能证实这一点 — logit 限幅逻辑 本来就会拦截这种情况。此字段仍保留, 以供未来实验使用;即使是非常长的 MCMC 运行 (> 500K 次迭代)也可能从中受益。

T9scaleLearningRate

详细信息

默认值: 0.005(初始化器 + 论文), 0.01(.full,MCMC — 2 倍) 范围: 0.0001 – 0.1

技术细节

用于每个 Gaussian 的三个缩放分量(在 log 空间中, RadianceKit 存储 log(scale) 以保持缩放值为正)的 Adam 学习率。论文默认值为 0.005,在 RadianceKit 中为了在调优后的学习率配置下获得 更好的缩放收敛效果而翻倍至 0.01。如果该值与其他质量学习率保持在论文默认值, 会产生明显过少的 Gaussians —— Density-Control 无法克隆,因为缩放更新跟进得太慢。 缩放控制每个 Gaussian 的延展程度 — 学习过快 会产生「针状」Gaussians(极长且细的 splats, 参见 T34 scaleRatioPruneThreshold),学习过慢则会让 Splats 保持过于紧凑,Density-Control 不得不频繁分裂。

T10rotationLearningRate

详细信息

默认值: 0.001(初始化器 + 论文), 0.002(.full,MCMC — 2 倍) 范围: 0.0001 – 0.05

技术细节

用于每个 Gaussian 的四个四元数分量的 Adam 学习率。四元数在每次优化器步骤中,在 Adam 更新之后都会重新归一化(L2 范数 = 1)— 否则 协方差矩阵会退化。RadianceKit 在质量预设中将论文默认值翻倍, 因为相对于缩放/位置,旋转具有较小的 绝对梯度幅度(在单位球面上每一步都很短), 如果不翻倍,旋转在 35 000 次迭代的窗口内 将明显收敛不足。在 NeRF-Blender 场景 (Lego、Chair)中,旋转的影响尤为明显 — 物体的边缘 需要经过 5 000–10 000 次迭代后才能真正对齐。

密集化 — 经典模式 (T11–T16)

T11densifyGradThreshold

详细信息

默认值: 0.000002(Initializer,针对 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 通过滚动中位数 提供了一种替代的自适应逻辑。 这个字段绝非无害 — 减半会产生 2–4 倍 更多的 Gaussian(内存压力,OOM 风险);翻倍则可能使场景 密集化不足。

T12densifyFromIteration

详细信息

默认值: 500 范围: 100 – 5 000

技术细节

密集化开始生效的第一个迭代次数。在此之前, 只在初始的 SfM 点云上进行"纯粹"的学习,不会生成新的 Gaussian。默认值 500 来自 3DGS 论文,为初始化留出 稳定的时间 — 如果从第 0 次迭代就开始密集化, 位置错误的 SfM 点会在找到正确位置之前就被大量克隆。 明显更晚开始(比如 1 000)会让结果略微变差;建议保持默认值。

T13densifyInterval

详细信息

默认值: 100(Initializer,MCMC),200(.full范围: 50 – 1 000

技术细节

两次密集化步骤之间相隔多少次迭代。论文默认值 100 — 每 100 次迭代评估一次密集化候选列表,进行克隆/分裂,同时 移除剪枝候选列表中的项(sigmoid(opacity) < T14 pruneOpacityThreshold)。对于 .full,200 被证明效果更好 —— 这减轻了 GPU 负担,因为重组过程运行得更少,并给每个 Gaussian 更多时间在克隆操作后稳定下来。在 Quality 设置下, 更短的间隔会导致过度密集化:产生明显更多的 Gaussian, 但画面并没有变好。在 MCMC 中,这同一字段被解释为 重定位间隔;有关 MCMC 专属逻辑请参见 T67 mcmcRelocationInterval

T14pruneOpacityThreshold

详细信息

默认值: 0.005(Initializer,论文,MCMC),0.001(.full范围: 0.0001 – 0.1

技术细节

Sigmoid 不透明度阈值,低于该值的 Gaussian 会在下一次 密集化步骤中被删除。与 T7 opacityLearningRate 以及优化器中的 logit 钳制逻辑共同作用。在 .full 中该值为 0.001 而非 0.005 —— 只有在极端视角下才起作用的 splat 因此得以 保留更久,为 SH 细节做出贡献。更小的值(比如 0.0001) 已经没有意义了:剪枝太少,浪费内存。重要提示: 密度控制必须始终执行剪枝,即使缓冲区容量已经因为 其他措施而占满 — 否则会累积失效的 Gaussian, 数量就会停滞不前。

T15opacityResetInterval

详细信息

默认值: 3 000(Initializer + 论文),100 000(.full = 实际上已禁用),200 000(.fullMCMC = 已禁用) 范围: 1 000 – 100 000+

技术细节

每隔多少次迭代,所有 Gaussian 的不透明度会被重置为一个 较低的值(约 0.01)— 这是 3DGS 论文中的一项措施, 用来重新评估"冻结"的 splat。结合 RadianceKit 的预热机制、 随机训练设置以及翻倍的学习率,不透明度重置会明显 损害质量,而优化器中的 logit 钳制本身已经涵盖了它的功能。 因此在 .full 中它实际上被禁用了(100 000 > 35 000 = 从不触发)。 在 .fullClassicPaper(忠实于论文的变体)中,它被有意 重新设为 3 000 — 那里的目标是达到原始论文的 Gaussian 预算。

T16maxScreenSize

详细信息

默认值: 0.0(= 已禁用) 范围: 0(关闭)或 > 0

技术细节

一个 Gaussian 在被强制分裂之前允许达到的最大屏幕空间 尺寸(以投影像素计)。该值被设为 0 —— RadianceKit 的 密度控制改用同一套梯度逻辑中的世界空间尺度阈值。它仍然 保留在字段目录中,因为未来关于 Mip-Splatting (T74–T76)或场景特定 splatting 策略的实验可能会 受益于它。启用它(数值 > 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 对经典 Densification 来说是正确的选择——哪怕只是 0.3 也会明显使结果变差。而对 MCMC 而言,合适的值反而是 0.05,因为 MCMC 通过其随机化探索需要更强的 L1 信号成分——更高的 SSIM 权重会稀释 Relocation 决策的准确性。SSIM 的计算成本明显高于 L1(需要对整幅图像做局部 11×11 窗口计算);RadianceKit 使用了 MPS 加速的实现,每张 1080p 图像的耗时保持在 1 ms 以下。场景类别预设针对不同场景类型使用介于 0.082(.outdoorPreset)与 0.171(.indoorPreset)之间的专属数值。

T18ssimWeightRefinement

详细信息

默认值: 0.0(=「不切换,保持 ssimWeight」) 范围: 0 或 0 – 1.0

技术细节

用于 T2 densifyUntilIteration 之后精细化阶段的 可选 SSIM 数值。在精细化阶段将 0.2 提高到 0.3 会使结果在两个指标上都变差——无论是 L1 还是 SSIM;因此默认值设为 0.0。该字段背后的假设是, 在 Densification 完成之后——即不再产生新的 Gaussians 时—— 更强的 SSIM 权重会使结构清晰度最大化。 但实践证明这是错误的:提高 SSIM 权重实际上等同于间接 降低了 L1 权重,而 L1 在最终精细化阶段是明显更具信息量的信号。 该字段仍保留,供未来结合感知损失(T60)或 边缘损失(T19)进行实验时使用——在这些情况下针对精细化阶段 定制损失组合可能是有意义的。

T19edgeLossWeight

详细信息

默认值: 0.0(= 已禁用) 范围: 0 或 0.001 – 1.0

技术细节

实验性损失项:一个 Sobel 梯度域 L1 损失的权重, 它在 L1+SSIM 之外,直接比较图像边缘 (真值 Sobel 与渲染 Sobel)。假设是: 边缘信息是图像质量的一个感知上的基石, 显式的边缘项应该能鼓励 Gaussians 更好地 命中边缘。但实践中它没有任何作用:一个可察觉的权重(0.1)会使结果变差,一个很小的权重(0.01)则对质量毫无影响,却仍会消耗计算时间。Sobel 处理步骤需要对真值图像和渲染图像 各额外执行一次 MPS 前向计算。因此永久 禁用。未来可能的用例:具有生硬人工边缘 的场景(建筑、家具、渲染图)可能会从中受益—— 不过场景类别预设并未使用此项,而是通过缩放 SSIM 权重来实现类似效果。

T20skyMaskingEnabled

详细信息

默认值: false(初始化器及所有预设) 范围: boolean

技术细节

启用天空遮罩(Sky Masking)。启用后,会借助 Apple Vision 框架 在每张图像中 识别出天空区域并进行遮罩处理,将该区域的损失值 设为零。目的:室外场景常常会因为蓝色/灰色/白色的 天空像素而使 App 倾向于恰好在那里放置 Gaussians—— 这会被感知为「浮游物(floater)」。如果没有天空遮罩,该区域的损失 永远不会为零,因为图像中的天空会有细微变化,而 App 会永无止境地试图用 Splats 将其还原出来。Vision 遮罩 在训练前针对每个相机计算一次,并保存在内存中。通常与 T45 skyDomeEnabled 一同启用(相关 UI 逻辑位于 设置界面中)。对于室内场景或合成渲染图,应保持 禁用状态——否则遮罩会在这些场景中错误地 将天花板或墙壁识别为「天空」。

SH度数升级序列 (T21)

T21shDegreeUpgradeIterations

详细信息

默认值: [1_000, 2_000, 3_000](初始化器), [2_000, 5_000, 8_000].full,MCMC), [1_000, 2_000].preview — 跳过Degree 3) 范围: [Int],每个值在 [0, maxIterations] 之间,单调递增

技术细节

激活SH度数从0→1、 1→2、2→3提升的迭代点。在第一个标记之前,只有 DC分量是激活的(也就是T5 shDCLearningRate),第一个标记之后是 DC + 3个Degree-1系数,第二个标记之后再加5个 Degree-2系数,第三个标记之后是全部15个系数。 每个Gaussian的内存需求随之分级增长 — 4个浮点数 → 16个 浮点数 → 36个浮点数 → 64个浮点数。质量Preset相对初始化器默认值 延迟了升级时机,因为几何形状应该先稳定下来, 之后再叠加频率更高的颜色细节。较早的标记 [1K, 2K, 3K].full中会得到明显更差的结果。.preview在Degree 2处封顶,因为 Degree 3在5000次迭代内无法收敛,只会 消耗优化器的容量。课程学习(T80–T81)提供了一种替代逻辑,会动态覆盖这个列表。

性能(T22–T24)

T22trainingRenderScale

详细信息

默认值: 1.0(初始化器、.full、MCMC、场景类),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×)的阈值(4e-6)比 .full (1.0×,1.1e-6)高得多。RadianceKit 在遇到超大图像时会发出警告并自动调整 — 目标分辨率为 3 MP。对于极端的 4K 输入图像,0.5 甚至 0.25 都是合理的,否则任何 Mac 都只能退化为 CPU 压实运算。

T23resolutionWarmupScale

详细信息

默认值: 0.0(= 已禁用) 范围: 0 或 0.1 –

技术细节

在 Densification 阶段(迭代 0 到 T2)以比 Refinement 阶段更低的分辨率进行训练。对于 .full 此项已关闭,因为在 T22 = 1.0 且使用余弦退火时,节省的时间很有限,而质量会略微受损。之所以仍保留在字段目录中,是因为在 4K 输入和长时间训练运行时它可能重新变得有意义 — Curriculum(T80)采用了类似的逻辑,但那里它与 LR 调度耦合在一起。如果此项启用且 T80 curriculumResolutionRamp 也为 true,则以 Curriculum 为准,覆盖此值。

T24tileSize

详细信息

默认值: 16 范围: 8、16、32

技术细节

光栅化图块(tile)的像素大小。Gaussian Splatting 渲染是基于图块的:图像被划分为 16×16 像素的小块,每个图块收集与其相关的 Gaussians,按深度排序后进行混合。16 是几乎所有 3DGS 实现都采用的标准值,并且在 RadianceKit 的 Metal 内核中是硬编码的;更改此值将需要重新编译着色器,在当前版本中并不可行。之所以仍保留此字段,是为了将来某个引擎版本能够动态支持图块大小时可以使用。

诊断与点云准备 (T26–T30)

T26depthDistortionWeight

详细信息

默认值: 0.0 (= 已禁用) 范围: 0 或 0.0001 – 0.05

技术细节

实验性功能:深度失真正则化损失(Depth-Distortion-Regularisierungs-Loss)的权重。它对沿渲染射线纵深分布过散、但概念上属于 同一表面的 Gaussians 进行惩罚 — 这鼓励深度分布更加集中, 从而减少 Floaters(浮点噪声)。在所有测试过的强度下,结果都变差了,而不是变好。理论上的优势 — 提升多视角一致性 — 并未体现在 L1 Loss 中,因为该假设隐含地 假定 SfM 几何是正确的,Gaussians 只需要「堆叠」起来即可。但在 实践中,SfM 点云通常才是最薄弱的环节,而不是堆叠方式。此功能保留可用, 适用于姿态特别干净的多视角数据集(合成数据、带 Ground Truth 的 Mip-NeRF 360)。

T27singleViewOverfit

详细信息

默认值: false 范围: boolean

技术细节

诊断开关:若为 true,则每次训练迭代都强制使用相机索引 0, 而不是从相机池中随机选取。目的:如果模型连单个视角都无法过拟合 (也就是说,即使经过 10000 次迭代,View 0 上的损失也不趋近于零), 那么前向/反向传播过程中必然存在根本性的错误。此开关在开发 Metal 着色器和可微分光栅化核心(Differentiable-Rasterizer-Kernels)期间被大量使用。 如今仅在训练后端有人修改代码需要交叉验证时,作为健全性检查(Sanity-Check) 使用。界面中没有对应的开关 — 该字段在所有 Preset 中均为关闭状态, 且始终如此。

T28maxCameras

详细信息

默认值: 0 (= 「使用所有相机」) 范围: 0 或 1 – N

技术细节

诊断限制:仅使用前 N 台相机进行训练,忽略其余所有相机。最初的目的是验证以下假设: 相机数量过多会产生梯度冲突(同一个 Gaussian 收到过多相互矛盾的 损失信号)。人为限制并不会带来优势 —— 更多帧数几乎总是能带来更高的质量。 界面中没有对应的操作元素;该字段在所有 Preset 中均为 0,即「所有 相机」。

T29maxInitialPoints

详细信息

默认值: 0 (= 「使用所有 SfM 点」) 范围: 0 或 1 000 – 200 000+

技术细节

保护机制:限制训练开始时使用的初始 SfM 点数量。密集的 COLMAP 重建可能产生超过 60 000 个点,在较大的初始尺度下会导致每个 像素重叠处出现 200–300 个 Gaussians — 这会形成一片「雾场」, 使训练无法收敛。将点数下采样到约 16 000 个(训练引擎中的硬性上限逻辑) 可以将初始密度调整到参考 3DGS 所使用的水平,并大幅降低重叠程度。 应用程序在重建结果非常密集时会自行进行此设置;没有对应的操作元素。

T30cameraClusterOutlierMultiplier

详细信息

默认值: 10.0 (所有 Preset 中均如此 — 从未被覆盖) 范围: 1.0 – 100.0

技术细节

相机聚类离群点过滤器(Camera-Cluster-Outlier-Filter)的乘数。训练开始前,训练引擎会计算 所有相机位置的质心(Centroid),以及某一相机与质心之间的最大距离。 若某个 SfM 点与质心的距离超过 multiplier × maxCameraDistance, 则将其视为离群点并丢弃。默认值 10× 是刻意选得比较宽松的。一个微妙的 副作用是:SfM 更紧密(相机彼此更靠近)→ 阈值更小 → 更多点被判定为 离群点并被丢弃。SfM 更松散 → 阈值更大 → 更少的点被丢弃。由此产生一个 出人意料的效应:一个更紧密、本应更好的 SfM 重建反而可能使训练效果 变差,因为过多的初始点被丢弃了。该字段在所有 Preset 中均为 10, 且在界面中不可调整。低于 5 的值通常过于严格,高于 20 则基本 不起作用。

正则化 (T31–T37)

T31coarseToFineBlurRadius

详细信息

默认值: 0(= 禁用) 范围: 0 或 1 – 10

技术细节

实验性功能:一个 Box-Blur 半径,在 Densification 阶段开始时应用到 Ground-Truth 图像上,并线性地 在 Densification 结束(T2)时降为 0。假设是: 从粗到细的训练(Coarse-to-Fine-Training)——先学习粗略结构,再学习细节 ——应能带来更稳定的几何结构。但在所有测试过的半径下,结果反而变差了。失败的原因是: Densification 的判断依据是图像域内的梯度,而模糊 恰恰削弱了那些用于判定"此处需要克隆"的关键信号。 该功能保留在特性目录中,以备将来配合其他 密度控制方案进行测试。

T32scaleRegWeight

详细信息

默认值: 0.0(= 禁用) 范围: 0 或 0.0001 – 0.05

技术细节

实验性功能:对世界空间尺度施加的 L1 正则化。惩罚变得过大的 Gaussians——防止出现"超级 Splat",即一个 Gaussian 覆盖了整面墙。 开启后 Gaussian 数量会暴增至数百万,结果也会大幅变差。原因在于:尺度 正则化会与密度控制发生冲突——较小的尺度意味着需要更多 Gaussians,因此密度控制会更频繁地分裂,进而带来更大的梯度 计算开销。默认禁用,但已记录以备用于 Mip-Splatting 实验(T74):在该场景下,设置一个 尺度下限或许是有意义的。

T33anisotropyRegWeight

详细信息

默认值: 0.0(= 禁用) 范围: 0 或 0.0001 – 0.05

技术细节

实验性功能:对 max(scale)/min(scale) 比值施加的惩罚, 目的是防止出现极度拉长的"针状"Gaussians(会被感知为漂浮物 floater)。 在所有测试过的强度下,结果都明显变差。原因是: 该正则化会迫使 Splat 趋向"圆形",而这在 平坦表面(墙面、桌面、地面)上恰恰是错误的方向——在那里, 扁平、宽阔的 Gaussian 比球形的更高效。 默认禁用。T34 scaleRatioPruneThreshold 更有针对性地追求同样的目的,但同样默认关闭。

T34scaleRatioPruneThreshold

详细信息

默认值: 0.0(= 禁用) 范围: 0 或 5.0 – 100.0(典型值 10.0 – 30.0)

技术细节

实验性的训练后剪枝功能,会删除任何 max(scale)/min(scale) 比值超过此处设定的线性阈值的 Gaussian。目标是那些仅靠正则化无法消除的、极度拉长的 "针状/盘状"漂浮物。测试中,剪枝确实按预期去除了漂浮物, 但同时也误删了墙面和地面上一些 有意义的扁平 Splat——图像因此变得更多孔洞。因此默认关闭。自 1.8 版本起,Inspector 的"Training"部分下、副标题 "Runs automatically at the end of training"下方, 提供了开关 Remove Needle/Disc Floaters。启用后它的运作方式刻意保守 (只处理最长轴大约是最短轴 50 倍以上的 Splat), 并从下一次训练运行起生效。

T35opacityRegWeight

详细信息

默认值: 0.0(= 禁用) 范围: 0 或 0.0001 – 0.05

技术细节

实验性功能:二元交叉熵惩罚(Binary-Cross-Entropy-Penalty),会将 不透明度拉向 0 或 1(即远离"半透明"状态)。 假设:更锐利的不透明度分布会提升图像清晰度。 与 T33 一样,这项正则化会牺牲质量;两者均默认禁用。注意:在 1.4.3-Beta 中曾出现一个 Bug,恰好在该字段的 默认值发生了变化(初始化值 = 0.01),导致 Gaussian 数量 大规模消失(460 K → 一次迭代后仅剩 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 次后 约剩余 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)会部分抵消该效果, 因为两次应用之间会经过足够多的梯度更新, 使不透明度重新升高。较短的间隔(<20)则会使 Decay 过于激进。仅在 Densification 阶段生效。

细化优化(T38–T44)

T38gradientAccumulationSteps

详细信息

默认值: 1(= "每个 Adam 步骤对应一个 View") 范围: 1 – 8

技术细节

在执行一次 Adam 更新之前,梯度会被累积的 View 数量。当 > 1 时,应用会走一条单独的、"非融合"(unfused)的反向投影路径,该路径 将梯度汇总到一个独立的缓冲区中;最终应用时会按 1/N 缩放,以保持幅度恒定。在经典训练中,值为 2 不会带来质量提升,反而会耗费时间,因为非融合路径比融合路径更昂贵。而在 MCMC 中,accum = 2 却能显著缩小与 Classic 之间的质量差距 — 因此在那里作为一个开关提供。在预设中,此值 固定为 1。在界面中,你可以通过 Inspector 中"训练"部分的 MCMC Quality 开关来使用它:开启时, 应用每步累积 2 个 View,关闭时为 1 个。除 1 和 2 之外的其他值 只能通过编辑过的预设文件来设置。

T39testViewIndices

详细信息

默认值: [](= 空,所有 View 都用于 训练) 范围: Set<Int>,Camera 索引的任意子集

技术细节

Camera 索引的集合,这些索引不会 用于训练,而是作为留出集(holdout)保留用于 PSNR/SSIM/LPIPS 评估。 仅在内部测量运行中会被填充:即从索引 0 开始,每隔第八个 View (LLFF 标准,与 Mip-NeRF-360 和 3DGS 论文的惯例一致)。在 出厂状态下,此字段保持为空 — 训练会使用所有 View,界面中 也没有针对它的操作元素。注意: 在不了解索引含义的情况下手动在预设文件中设置此字段,会使一次 测量变得无效(例如当所有索引都设置在 N 以上,而实际只有 N-50 个 View 时 → 没有留出集 → 没有评估)。在导出自己的预设时不会 写入 testViewIndices,因为它依赖于具体场景,否则会在不同数据集之间 留下毫无意义的值。

T40refinementPruneInterval

详细信息

默认值: 0(= 禁用) 范围: 0 或 100 – 5 000

技术细节

在细化阶段(T2 之后),每隔 N 次迭代会运行一次额外的剪枝过程, 移除 sigmoid(opacity) < T41 refinementPruneOpacityThreshold 的 Gaussians。目的:在 Densification 阶段有规律的密度控制调用,之后就没有了 — 但那些不透明度持续下降的 Gaussians 仍留在缓冲区中。 在实践中,这种额外的剪枝有害:与第二个 Densification 阶段(T54)结合,可能会将 Gaussian 数量完全清空。所有预设中都设为 0, 在界面中不可调整;如果仍然通过编辑过的预设文件来设置它, 1 000 或 2 000 是合理的取值。

T41refinementPruneOpacityThreshold

详细信息

默认值: 0.0(= "使用 T14") 范围: 0 或 0.001 – 0.1

技术细节

用于细化剪枝的独立不透明度阈值。Densification 之后, 大多数 Gaussians 已达到明显更高的不透明度(> 0.001),因此 标准的 T14 pruneOpacityThreshold 会显得过于宽松。如果 T40 处于激活状态, 此字段决定其自身的阈值。为 0.0 时,将继续使用 T14。 只有当 T40 > 0 时才有意义。

T42midTrainingCompactificationIterations

详细信息

默认值: [](= 禁用) 范围: [Int],取值范围在 (densifyUntilIteration, maxIterations) 之间

技术细节

细化阶段中运行 Compactification 过程的显式迭代 时间点(移除 sigmoid(opacity) < 0.01 以及 Outlier-Scale-Gaussians,逻辑与 T56 postTrainingCompactification 相同)。目的:长时间的细化阶段 可能出现彩纸屑/浮游物(Confetti/Floater)的累积,其球谐系数(SH)随后会对 特定视角的伪影产生过拟合。若激活,典型配置为: [10000, 20000, 30000](对应 40K Classic)。但是: 自由选择的清理时间点会持续使最终结果变差 — Gaussian 数量虽然明显下降,但图像误差反而上升得更多。因此,作为可自由选择的迭代列表,此字段在所有预设中都保持为空。若要获得这一效果本身, 可在界面中通过 Inspector "训练"部分的 Floater Cleanup 开关来实现:对于迭代次数达到 30 000 及以上的经典运行, 它会在训练中途安排两次清理过程。 自定义时间点只能通过编辑过的预设文件来设置。

T43frustumCullEnabled

详细信息

默认值: false 范围: boolean

技术细节

训练结束后,会移除所有位于所有训练相机视锥体(Frusta)并集之外的 Gaussians。 这类 Gaussians 从未受到损失信号的约束, 必然是浮游物(Floater)。对于新视角位于相机路径后方或侧方的场景 (例如线性无人机飞行的背面),此方法尤其有效 — 这类浮游物 在训练阶段从未可见,但在之后于 3D 查看器中移动时却清晰可见。在无人机飞行场景中,这明显能减少浮游物,因此作为可选项提供。 默认值为 false,因为在具有完整环绕覆盖的物体拍摄中, 视锥体并集会覆盖整个场景,此功能不会移除任何内容 — 在设置中的"Floater Reduction"下提供该选项。户外预设未启用它,因为天空穹顶在那里能更好地解决同样的问题。

T44frustumCullExpansion

详细信息

默认值: 1.1 范围: 1.0 – 2.0

技术细节

T43 frustumCullEnabled 的 NDC 边距。1.0 会 正好在图像边缘处切割,这会过度削减图像边缘处不稳定的 Splats。1.1 = 在精确的相机取景之外增加 10% 的填充 — 这为那些在略微偏移的新视角中仍可能可见的边缘像素 提供了一定的容差。值 > 1.2 会使剪切 实际上失效,因为扩展后的视锥体覆盖的空间大得多。

天空穹顶 (T45–T48)

T45skyDomeEnabled

详细信息

默认值: false(初始化器 + 除 P9 户外外的所有 Preset) 范围: boolean

技术细节

在训练开始前会生成一个球形点云(使用 T46 个采样点的 Fibonacci-sphere),以场景中心为圆心、 T47 skyDomeRadiusMultiplier × scene_extent 为半径放置, 并使用所有训练相机中经过天空遮罩处理的像素颜色 (参见 T20 skyMaskingEnabled)进行初始化。这些 Sky-Dome-Gaussians 会被插入到 Gaussian 缓冲区的开头, 并在训练期间被「冻结」(位置/缩放/旋转梯度 = 0, 只有 SH 和不透明度仍可优化)。效果:用户在新视角中看到的 不再是远处漆黑的「碎纸屑」区域,而是真实的天空。 在无人机和风景类场景中效果非常好;在户外 Preset(P9)中默认开启。 室内场景请关闭 — 球体会毫无意义地悬在房间外面。

T46skyDomeSampleCount

详细信息

默认值: 5 000 范围: 1 000 – 50 000(典型值 2 000 – 10 000)

技术细节

Sky-Dome 球面上 Fibonacci-Sphere 采样点的数量。 数值越高 → Sky-Dome 越密集(在大分辨率、大面积可见天空的情况下效果更好), 但内存需求也更高。5 000 是 4K 渲染的最佳平衡点; 在较低分辨率下 2 000–3 000 就足够了。这些采样点会 根据与每个训练相机视线向量的余弦距离,用相应的天空遮罩像素 进行初始化 — 那些视锥范围内没有相机看到的采样点, 会以较低的初始不透明度留在后方,但在训练中不会被改变(已冻结)。

T47skyDomeRadiusMultiplier

详细信息

默认值: 30.0(初始化器 + 大多数 Preset)、59.0(P9 户外) 范围: 5.0 – 200.0

技术细节

Sky-Dome 球体半径相对于场景范围的倍数 (场景范围 = 相机位置之间的平均距离)。30 表示球体直径 是相机点云的 30 倍。太小(< 5)→ Sky-Dome 会与场景本身发生干涉 (例如某个 Sky-Dome 的 splat 落到了前景中);太大(> 100)→ Sky-Dome 位置处出现 float32 精度损失, 从而在远处引发渲染故障。对于开阔的户外场景,59.0 是合适的值 —— 默认的 30.0 对于纵深较大的风景来说太小了,这时 Sky-Dome 的像素会在图像边缘明显渲染成一堵「墙」。

T48frozenGaussianCount

详细信息

默认值: 0(= 没有被冻结的 Gaussians) 范围: 0 或 1 – T46

技术细节

缓冲区开头有多少个 Gaussians 的 位置/缩放/旋转梯度会在优化器中被设为零 — 它们在整个训练过程中保持空间上的静止。 密度控制不得对它们进行克隆、拆分或剪除。用于 Sky-Dome 注入(参见 T45):当 Sky-Dome 开启时, 该字段会自动设置为 T46 skyDomeSampleCount。也可以手动设置 (例如为了冻结一个来自 LiDAR 扫描的预先放置的点云), 但在 UI 中不能直接访问。重要提示:缓冲区中的前 N 个 Gaussians 始终是被冻结的那些 — 由缓冲区中的顺序决定, 而不是某个显式索引。

Adam + LR-Schedule (T49–T55)

T49adamResetIteration

详细信息

默认值: 0(= 已禁用) 范围: 0 或 100 –

技术细节

Adam 优化器的动量累加器(m1、m2)被重置为零的迭代次数。此后偏差修正使用 (iter - adamResetIteration) 而不是 iter 来计算。在 Densification 结束后进行重置会明显恶化结果。原因:在 Densification 期间积累的 Adam 动量携带了关于典型梯度幅度的信息,能加速细化阶段。把它丢弃会让最初约 500 次细化迭代损失收敛速度。因此在所有 Preset 中都设为 0,界面中不可调整。

T50positionLRScheduleEndIteration

详细信息

默认值: 0(初始化器 = “使用 maxIterations”),20 000 (.full — 尽管 maxIter=35K,余弦曲线仍在 20K 结束),30 000 (.fullClassicPaper范围: 0 或 1 000 –

技术细节

位置学习率的余弦退火曲线达到最小值的迭代次数。若为 0,则等同于 T1 maxIterations。若 > 0,调度会在该值处结束,之后保持在 T4 positionLearningRateFinal 上恒定不变。这允许有一个“扩展细化阶段”,以最小但恒定的学习率——缓慢地细化位置而不再次衰减。.full 就是这样做的(调度在 20K 结束,训练持续到 35K);在附近区域——15K 到 25K——几乎没有变化,20K 是最佳折中点。与 T51 配合使用,可在扩展阶段同时修改非位置类学习率。

T51extendedPhaseLRDecay

详细信息

默认值: 0.0(= 已禁用,学习率恒定) 范围: 0 或 0.01 – 1.0

技术细节

在“扩展阶段”——即达到 T50 且位置学习率已经处于 T4 之后——非位置类学习率(缩放、旋转、不透明度、SH)的最小乘数。若为 0.1,缩放/旋转/不透明度/SH 各自会以余弦方式从 1.0(= 其标准学习率)衰减到其标准值的 0.1×。若为 0.0(默认),它们保持恒定。完全衰减到零得到的结果与完全不衰减一样——带有衰减的行为看起来更“干净”,但没有可测量的提升。因此在所有 Preset 中都设为 0,界面中不可调整。

T52adaptiveDensifyThreshold

详细信息

默认值: false 范围: boolean

技术细节

实验性:若为 true,应用会在每个 Densification 步骤中计算当前梯度分布的第 98 百分位数(p98),并将其用作动态阈值(被限制在 T11 配置值的至少 0.5× 以上,以免偏离过大)。假设:自动适应当前场景阶段能让密度控制更稳健——例如初期更严格地剪枝,后期更宽松,或反之。实际情况是 Gaussian 数量会急剧崩溃——大规模剪枝,因为 p98 在最初几次迭代中极高,之后几乎没有梯度能超过该阈值。固定阈值已经校准得很好,动态调整弊大于利。T77 通过滚动中位数提供了一种替代的自适应逻辑,避免了这个问题。

T53mergeAfterDensification

详细信息

默认值: false(初始化器),true(.full.classicBalanced.fullClassicPaper范围: boolean

技术细节

在 Densification 阶段结束时(迭代 T2),会执行一次性的合并处理,将彼此靠近、缩放和颜色相似的 Gaussian 合并起来。通常能在没有明显质量损失的情况下减少 5–15% 的 Gaussian 数量。原因:在密集克隆之后会产生一些几乎完全相同的 Gaussian 簇,它们没有带来任何新信息——合并可以为其他区域释放优化器的容量。这是 Classic Quality Preset 的标准做法。在 MCMC 中不使用,因为 MCMC 的重定位逻辑本身就不会产生这类簇。

T54densifyPhase2FromIteration

详细信息

默认值: 0(= 已禁用) 范围: 0 或 T2T1

技术细节

实验性:允许在细化暂停之后,从该迭代次数开始进入第二个 Densification 阶段,一直持续到 T55。假设:在一个细化阶段之后,梯度累加器的幅度会更稳定,从而能更准确地判断哪些区域仍需要额外的 Gaussian。实际情况是第二个 Densification 阶段会引发级联式崩溃,最终 Gaussian 数量降为零——与细化剪枝(T40)一起把缓冲区清空。因此在所有 Preset 中都设为 0,界面中不可调整。

T55densifyPhase2UntilIteration

详细信息

默认值: 0 范围: 0 或 T54T1 定义于:

技术细节

第二个 Densification 阶段的结束点。仅当 T54 > 0 时相关。两个字段一起被禁用。

后期处理 + Apple AI(T56–T60)

T56postTrainingCompactification

详细信息

默认值: true(所有生产环境 Preset 中)、false (.quickTest.preview取值范围: boolean

技术细节

训练结束后,sigmoid(opacity) < 0.01 的 Gaussians 会被硬性移除(它们对图像几乎没有贡献)。将 Gaussian 数量典型地减少 58 %, 导出文件大小减少 55 %,且没有可见的质量损失。 默认在生产环境 Preset 中启用 — 最终成果应尽可能紧凑地交付。 在 .quickTest 中关闭,因为诊断运行本来就不会导出。 与 T42 midTrainingCompactificationIterations 不同,Compactification 只在最后进行 — 在此之前的 Refinement 可以使用全部 Gaussians。

T57metalFXUpscaling

详细信息

默认值: false 取值范围: boolean

技术细节

⚠ 自 2026-07-18 起已停用,不再产生任何效果。该字段曾属于 Inspector 中的「Viewport Scaling」选择器(Off/MetalFX/Lanczos)。 渲染器从未读取过它:Blit 决策纯粹基于几何关系(以超采样方式渲染 ⇒ 使用 MPS-Lanczos 降采样以实现抗锯齿,否则使用双线性插值),而 MetalFX 路径根本没有调用点。该选择器以及它所提供的两条错误信息已被移除; 叠加层的标注现在是「Sampling」,而非「Scaling」,应用中任何地方都不再 通过 MetalFX 进行放大。字段本身仍然保留,因为训练配置会被完整保存 — 它存在于每个已保存的场景、每个 Preset 以及每个已导出 PLY 的设置注释中; 删除它会导致该键在重新写入时被静默丢弃,破坏这种数据交换。出于同样的 原因,该字段被排除在「Modified」比较之外:旧场景可能携带 true 值,而现在已经没有办法通过界面将其重置。没有任何地方读取它 — 不要 重新接线。

T58mpsLanczosScaling

详细信息

默认值: false 取值范围: boolean

技术细节

⚠ 自 2026-07-18 起已停用,不再产生任何效果 — 参见 T57 metalFXUpscaling,其中也说明了为什么该字段仍需继续被保存。 有一个显而易见的误解需要特别指出:应用确实在 Viewport 中使用了 MPS-Lanczos,但这完全由几何关系决定 — 以超采样方式渲染出的图像 会被向下运算以实现抗锯齿。这是一种降采样,而非放大,而这个字段 从未触发过它。

T59livePreviewInterval

详细信息

默认值: 50(初始化值;Preset 不设置该字段) 取值范围: 设置面板选择器中的 0(关闭)、50、250 或 1 000

技术细节

训练过程中 3D 视图以当前 Gaussians 更新的频率。 50 = 每 50 次迭代进行一次新渲染 — 足以观察进度,同时不会明显拖慢 训练速度。0 = 视图完全不更新(后台训练,最高速度)。对于长时间的 MCMC 运行,250 或 1 000 值得一试,因为更新开销累积起来会有影响。 特殊角色: 该字段虽然属于训练配置,但它是一个应用范围的设置 (设置 → 训练),而不是训练配方的一部分。因此它被排除在「Modified」 比较之外,在切换 Preset 时保持不变,并且自 2026-07-18 起,打开场景时 不再从文件中读取该值 — 此前,加载的场景会静默地将用户的 帧率替换为场景作者的帧率,包括「关闭」在内,而且没有第二个地方可以 将其恢复。

T60perceptualLossWeight

详细信息

默认值: 0.0(= 已禁用) 取值范围: 0 或 0.001 – 0.5

技术细节

一个感知损失项(多尺度模糊特征匹配)的权重。 它在比 L1+SSIM 更高的层面上捕捉结构和纹理上的相似性 — 通常适用于 「像素级精确」不如「看起来真实」重要的场合。所有 Preset 中该值均为 0.0(关闭)。在界面中,你可以通过 Inspector「训练」区块中的 Perceptual Loss 滑块进行设置,范围为 0 到 0.20,步长为 0.01; 为 0 时应用显示「Off」。

MCMC 稠密化(T61–T73)

T61densificationStrategy

详细信息

默认值: .classic(Initializer + Classic 预设),.mcmc (所有 MCMC 预设 + Scene-Class)范围: .classic.mcmc

技术细节

在 Classic 稠密化 (克隆/拆分/剪除,Kerbl et al.~2023)和 MCMC 稠密化(带重定位的随机梯度朗之万动力学,Kheradmand et al.~NeurIPS 2024)之间进行选择。选择 .classic 时会读取 T11–T16,选择 .mcmc 时会读取 T62–T73。切换时要注意:Classic 默认值与 MCMC 默认值的校准方式完全不同 — 谁在专家视图中切换了这个选择器,却没有加载相应的预设,就有可能重蹈 1.4.3 版本 bug 式的大规模灭绝 (460 K → 5,仅一次迭代内,因为 MCMC-OpacityReg 设为 0.01 会杀死 Classic 的不透明度)。因此 MCMC-Init 的默认值被有意「柔化处理」(所有正则化值均为 0.0)。

T62mcmcMaxGaussians

详细信息

默认值: 150 000(Initializer + .fullMCMC + .mcmcBalanced), 100 000(.mcmcPreview),1 500 000(.fullMCMCMip — 带 10× 预算的 Mip-Splatting 变体),1.19 M(.renderPreset),1.25 M (.outdoorPreset),670 K(.indoorPreset范围: 0(= 「使用缓冲区容量」)或 10 000 – 5 000 000 定义于:

技术细节

MCMC 策略下高斯数量的硬性上限。数量会随着 T70 mcmcGrowthRate (通常为 5 %)在每个重定位步骤逐渐增长,直到达到该上限。150 K 是一个良好的起始值 —— 明显超过这个值会稀释 Splat 质量(出现过多细小、冗余的高斯),明显低于则场景会稠密化不足。对于非常大的场景(例如 1 545 张照片的无人机航拍 含 158 K SfM 初始化点),150 K 就太低了 — 因此才有了 1.4.5 版本的扩展 T72 mcmcCapMultiplier + T73 mcmcAutoScaleByScene。Scene-Class 预设使用了介于 670 K(室内)到 1.25 M(室外)之间的场景专属值。 若值为 0,引擎会使用完整的缓冲区容量作为上限。

T63mcmcNoiseScale

详细信息

默认值: 0.00005(5e-5 = 论文默认值)范围: 1e-6 – 1e-3

技术细节

高斯噪声的乘数,在每次 MCMC 迭代中加到每个高斯的位置上 (SGLD 逻辑)。越高 = 探索性越强(高斯移动得更多,可能找到 更好的位置),越低 = 越偏向利用(高斯 留在已经表现良好的位置)。5e-5 是合适的取值 —— 明显更小意味着探索不足,明显更大(1e-4)则太多, Splat 会散乱。会在训练时间中通过余弦衰减,直到 T69 mcmcNoiseDecayEnd — 在衰减区间结束时噪声 实际为 0,高斯收敛。

T64mcmcOpacityRegWeight

详细信息

默认值: 0.0(= 在 RadianceKit 默认设置中已禁用,论文值: 0.01)范围: 0 或 0.001 – 0.05

技术细节

针对不透明度的 MCMC 专属 L1 惩罚项。 论文默认值 0.01(把未使用的高斯压向零,使它们 可用于重定位)。在 RadianceKit 中,不使用该正则化项的结果明显更好。原因: 由 T68 mcmcDeadOpacityThreshold 定义的剪除标准 本身已足够 — 额外的 L1 惩罚也会迫使 有价值的低不透明度高斯死亡。因此默认值为 0。 注意: 在 1.4.3 Beta 版本中,Initializer 的默认值曾被错误地设为 0.01,导致了大规模灭绝 bug(参见 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 版本的 bug。

T66mcmcRelocationInterval

详细信息

默认值: 100(Initializer + 所有 MCMC 预设,论文标准值), 155(P9 室外)范围: 50 – 500

技术细节

MCMC 将死亡的高斯 (sigmoid(opacity) < T68 mcmcDeadOpacityThreshold)重定位到新位置的迭代间隔。较短的间隔(大约 50)显得过于剧烈,损失会波动;明显更长的间隔(大约 200)则会让 MCMC 失去反应能力。100 是正确的取值。对于室外场景,该值略高,为 155 —— 更长的间隔为 Adam 提供了更多时间来整合 新放置的高斯,然后下一次重定位事件才会 再次对它们施加压力。

T67mcmcWarmupIterations

详细信息

默认值: 500 范围: 100 – 5 000

技术细节

初始迭代次数,在此期间还不会发生 MCMC 重定位。只有过了这个预热阶段之后才会开始 重定位逻辑。原因:在最初的迭代中,不透明度值还 没有稳定下来 — 如果直接开始重定位, 高斯会被放置在错误的位置,然后又必须马上被 移动,这会破坏 Adam 的动量。论文默认值为 500。 RadianceKit 采用了这个值,因为它已被证明足够稳健。

T68mcmcDeadOpacityThreshold

详细信息

默认值: 0.005(Initializer,论文标准值),0.01(.fullMCMC 及所有 MCMC 预设)范围: 0.001 – 0.05

技术细节

sigmoid(不透明度) 的阈值,低于该值的 高斯即被视为「死亡」,可以被考虑用于重定位。0.01 是合适的取值 —— 0.005 几乎没有变化,0.02 效果更差。更高 = 更激进的重定位(更多高斯会被移动),更低 = 更谨慎。0.01 大致相当于「0.5 % 视觉可见度」。 P10 室内使用 0.0142。

T69mcmcNoiseDecayEnd

详细信息

默认值: 0(Initializer = 「无衰减」),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 动量能够整合它们之前就被插入),更低的值则会导致 场景最终稠密化不足。

T71mcmcSigmoidK

详细信息

默认值: 100.0 范围: 10.0 – 500.0 定义 于:

技术细节

MCMC 噪声衰减的 sigmoid 锐度参数。 在 SGLD 步骤中,每个高斯的噪声 被衰减 — 高不透明度的高斯 (其 logit 为正)获得的噪声呈指数级减少,相较于 低不透明度的高斯。K = 100 是锐利的,也就是说从「完全噪声」 到「无噪声」的过渡在不透明度 0.5 附近非常快速地发生。K = 100 是合适的取值 —— 更小的值(10–50)会让高不透明度的 高斯也跟着「抖动」(破坏已收敛的高斯),更大的值(> 500)会使过渡人为地变得生硬,死亡的高斯就 完全不再被移动了。

T72mcmcCapMultiplier

详细信息

默认值: 3.0(Initializer + .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 张照片的无人机航拍 → 158 K SfM 初始化),T62 = 150 000 就太低了 — Density-Control 根本无法增长。使用乘数 3.0, 在这个例子中上限会被缩放到 474 K(158 K × 3.0)。 Scene-Class 预设使用了场景专属的值:室外场景受益于较高的乘数(5.32 → 在 156 K 初始化点时约 830 K 上限),室内场景则只需 1.76(墙面更快饱和)。完整的上限解析 请参见 -方法。

T73mcmcAutoScaleByScene

详细信息

默认值: true(Initializer + 所有 MCMC 预设)范围: boolean

技术细节

1.4.5 版本功能:场景感知 上限逻辑的总开关(参见 T72 +)。若为 false,则 仅使用 T62 mcmcMaxGaussians 作为上限(回到 1.4.4 版本的行为)。默认开启,因为否则大型场景中 1.4.3 版本的大规模灭绝问题会重新出现。只有在你明确想要设置一个 固定上限时才手动禁用它 — 例如为了训练一个终值大小可预测的 150 K 变体。

Mip-Splatting (T74–T76)

状态: Mip-Splatting 在实践中没有带来任何质量提升,在某些室外场景中反而造成了损害。这些字段仍保持 opt-in (可选启用)状态,供实验使用;在所有出厂 Preset 中,Mip-Splatting 均为关闭状态。

T74useMipSplatting

详细信息

默认值: false(所有生产环境 Preset), true (.fullMCMCMip — 研究用姊妹版本) 范围: boolean

技术细节

启用 Mip-Splatting(Yu 等,CVPR 2024): 一种 3D 平滑滤波器 + 2D 滤波器 + α 补偿机制,将每个 Gaussian 的频率限制在 最密集训练相机采样率的奈奎斯特(Nyquist)极限内。理论目标:消除在非训练缩放比例 (训练分辨率的 0.5× 或 2×)下渲染时的锯齿(Aliasing)。该功能已在预处理和反向投影 Shader 中启用,功能上运作正确。但在实践中,期望的质量提升并未出现:在训练分辨率下渲染时几乎没有任何变化,而在室外场景中图像质量甚至变差了。一种可能的解释是:一旦有大量 Gaussian 参与运算,3D 平滑就会与 MCMC 重定位(Relocation)产生对抗效果。该字段仍保留,供自行进行多尺度(Multi-Scale)实验使用。

T75mipSmoothing3DScale

详细信息

默认值: 0.2(论文默认值) 范围: 0.05 – 1.0

技术细节

3D 平滑缩放参数(Yu 等,§3.3, 论文默认值 0.2)。数值越大 = 每个 Gaussian 的世界空间平滑程度越高(= 抗锯齿效果越强,但在默认缩放比例下也会带来更多模糊),数值越小 = 更清晰但更容易出现锯齿。仅当 T74 useMipSplatting = true 时才会被读取。未做进一步优化 —— 即便使用论文默认值 0.2,Mip-Splatting 也未带来任何提升。

T76mipFilter2DVariance

详细信息

默认值: 0.3(= 与此前的行为完全一致) 范围: 0.1 – 1.0

技术细节

2D Mip 滤波器方差,会被加到 Σ_2D 对角线上(此处为方差本身,未经平方)。0.3 正是 Mip-Splatting 引入之前,硬编码在内核中的固定值。若 T74 useMipSplatting = false,内核会完全忽略此处设置的值, 转而写入硬编码的 0.3 —— 从而保证此前的行为绝对不会发生任何变化。若启用,则 会使用此处设置的值。该字段仍保留在字段目录中,供 Mip 参数扫描(Sweep)使用。

自适应致密化 (T77–T79)

T77adaptiveDensification

详细信息

默认值: false 范围: boolean

技术细节

Rolling-Median-Tracker,作为固定的 T11 densifyGradThreshold 的替代方案。若设为 true,则在每个 Densify-Step 中,用 median(最近 N 个 avgGrad 样本) × T79 adaptiveDensifyMultiplier 覆盖当前的阈值。N = T78 adaptiveWindow。比 T52 中触发大规模剪枝(Mass-Pruning)的 p98 变体更严格:在稳定状态下,中位数乘以 2 大约位于梯度分布的 p70–p80 处。单独开启该字段不会带来质量提升;但与课程学习(Curriculum,见 T80/T81)一起使用时会有提升——在这种情况下,质量收益主要来自课程学习,而这个字段更多地贡献稳定性。为此并没有设置操作控件:该字段在所有 Preset 中都是关闭的,只能通过编辑 Preset 文件来 设置。

T78adaptiveWindow

详细信息

默认值: 1 000 范围: 100 – 10 000 定义位置:

技术细节

以 Densification-Events 为单位的 Rolling-Median-Window(并非 迭代次数——每个 T13 densifyInterval 步骤产生一个样本)。 默认值 1 000——这意味着最近 100 000 次训练迭代都会计入中位数,也就是说通常涵盖到目前为止的 整个训练历史。早期阶段(不足 T78 个样本前):Tracker 返回 nil → 回退到固定阈值 T11。仅在以下情况下才有意义。

T79adaptiveDensifyMultiplier

详细信息

默认值: 2.0 范围: 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。在两项自适应增强功能中(参见 T77),真正带来质量提升的正是这个训练课程——逐步提高分辨率能让程序有时间先在较低分辨率下确定粗略几何结构,然后再转向精细细节处理。界面中无法调整——只能通过编辑 Preset 文件来设置,而且最好与 T81 一起使用。

T81curriculumSHProgression

详细信息

默认值: false 范围: boolean

技术细节

[maxIter/4, maxIter/2, maxIter*3/4] 覆盖 T21 shDegreeUpgradeIterations,也就是把 SH 级别提升均匀地分布在整个训练时间内,而不是前置集中处理。假设是:在色彩细节爆发之前先建立稳定的几何结构,这样能让依赖于视角方向的光泽效果定位更精确。与 T77 搭配使用时,在某些场景中能带来提升;但真正起作用的是这个字段,仅靠 T77 是不够的。界面中无法调整——只能通过编辑 Preset 文件来设置。

静态预设(TP1–TP9)

这里只列出与初始化器默认值的结构性差异。十一个 UI 预设 P1–P11 的完整营销描述可以在第 7 章找到。

TP1.preview

详细信息

用于系统内存 ≥ 10 GB 的诊断/预览预设。相对于初始化器的 Overrides:

  • maxIterations 30 000 → 5 000
  • densifyUntilIteration 15 000 → 3 500(maxIter 的 70 %)
  • positionLearningRateFinal 1.6e-6 → 1.6e-5(高 10 倍,衰减不那么激进)
  • shDCLearningRateshRestLearningRateopacityLearningRatescaleLearningRaterotationLearningRate 各自 2 倍
  • opacityResetInterval 3 000 → 100 000(实际上等于关闭 — reset 会破坏短时间训练)
  • shDegreeUpgradeIterations [1K, 2K, 3K][1K, 2K](Degree 3 在如此短的运行中无法收敛)
  • trainingRenderScale 1.0 → 0.5

TP2.full

详细信息

生产质量的 Classic 版本。Overrides:

  • maxIterations 30 000 → 35 000(超过此值有过度训练风险:Gaussians 数量增加但质量不再提升)
  • densifyUntilIteration 15 000 → 5 000(久经验证的数值;更晚停止效果更差)
  • 所有 LR 2 倍
  • positionLearningRateFinal 1.6e-6 → 1.6e-5(比论文默认值高 10 倍)
  • densifyGradThreshold 2e-6 → 1.1e-6(针对 1.0× 分辨率校准)
  • densifyInterval 100 → 200
  • pruneOpacityThreshold 0.005 → 0.001
  • opacityResetInterval 3 000 → 100 000(实际上已停用)
  • shDegreeUpgradeIterations [1K, 2K, 3K][2K, 5K, 8K](延迟提升等级)
  • opacityDecayFactor 0.0 → 0.9995(HTGS 方案,质量提升明显)
  • opacityDecayInterval 50(不变)
  • mergeAfterDensification false → true
  • positionLRScheduleEndIteration 0 → 20 000
  • postTrainingCompactification true(对于 .full 这已是初始化器默认值)

TP3.fullClassicPaper

详细信息

TP2 的忠于论文的 Classic 变体。相对于 TP2 的 Overrides:

  • maxIterations 35 000 → 30 000(论文标准)
  • densifyUntilIteration 5 000 → 15 000(论文:maxIter 的 50 %)
  • positionLearningRateFinal 1.6e-5 → 1.6e-6(论文默认值)
  • opacityLearningRatescaleLearningRaterotationLearningRate 恢复为论文默认值(0.05、0.005、0.001)
  • densifyGradThreshold 1.1e-6 → 2e-7(针对 Bicycle 上约 1–2 M Gs 校准)
  • densifyInterval 200 → 100(论文)
  • pruneOpacityThreshold 0.001 → 0.005(论文默认值)
  • opacityResetInterval 100 000 → 3 000(论文 §5.2,有风险 — 在 RadianceKit 的设置中会损失质量)
  • opacityDecayFactor 0.9995 → 0.0(论文没有 decay)
  • positionLRScheduleEndIteration 20 000 → 30 000(cosine 运行到 maxIter 的 100 %)

TP4.fullMCMC

详细信息

生产质量的 MCMC。相对于初始化器的 Overrides:

  • maxIterations 30 000 → 200 000(MCMC 需要比 Classic 多约 5 倍的迭代次数)
  • densifyUntilIteration 15 000 → 160 000(maxIter 的 80 %)
  • positionLearningRateFinal 1.6e-6 → 1.6e-5
  • LR 计划与 TP2 相同(全部 2 倍)
  • ssimWeight 0.2 → 0.05(MCMC 需要更强的 L1 信号)
  • shDegreeUpgradeIterations [1K, 2K, 3K][2K, 5K, 8K]
  • densificationStrategy .classic.mcmc
  • mcmcMaxGaussians 150 000(初始化器中已有,预设中确认)
  • mcmcNoiseScale 5e-5(论文数值,久经验证)
  • mcmcDeadOpacityThreshold 0.005 → 0.01
  • mcmcNoiseDecayEnd 0 → 160 000(maxIter 的 80 %)
  • mcmcCapMultiplier 3.0(初始化器中已有)
  • mcmcAutoScaleByScene true(初始化器中已有)
  • opacityResetInterval 3 000 → 200 000(实际上关闭,MCMC 使用 Reloc 而非 Reset)

TP5.fullMCMCMip

详细信息

TP4 的 Mip-Splatting 变体,采用原始论文的 Gaussian 预算。相对于 TP4 的 Overrides:

  • mcmcMaxGaussians 150 000 → 1 500 000(10 倍,论文数量级)
  • useMipSplatting false → true(Mip 开启)

TP6.classicBalanced

详细信息

中等级 Classic。相对于 TP2 的 Overrides:

  • maxIterations 35 000 → 20 000(结果实际上与 30 000 相同,但等待时间明显更短)
  • positionLRScheduleEndIteration 20 000 → 0(Cosine 运行到 maxIter = 20K,没有延长阶段)

TP7.mcmcPreview

详细信息

MCMC 诊断。相对于 TP4 的 Overrides:

  • maxIterations 200 000 → 60 000
  • densifyUntilIteration 160 000 → 48 000(80 %)
  • mcmcMaxGaussians 150 000 → 100 000
  • mcmcNoiseDecayEnd 160 000 → 40 000
  • mcmcCapMultiplier 3.0 → 2.0(Preview 缩放更保守)

TP8.mcmcBalanced

详细信息

中等级 MCMC。相对于 TP4 的 Overrides:

  • maxIterations 200 000 → 120 000
  • densifyUntilIteration 160 000 → 96 000(80 %)
  • mcmcNoiseDecayEnd 160 000 → 96 000(80 %)
  • mcmcCapMultiplier 3.0 → 2.5(介于 Preview 的 2.0 和 Full 的 3.0 之间)

TP9.quickTest

详细信息

纯功能测试。相对于初始化器的 Overrides:

  • maxIterations 30 000 → 1 000
  • densifyUntilIteration 15 000 → 500
  • densifyGradThreshold 2e-6 → 4e-6(针对 0.25× 分辨率校准)
  • densifyInterval 100 → 50
  • opacityResetInterval 3 000 → 100 000(关闭,因为时间太短)
  • trainingRenderScale 1.0 → 0.25

应用如何确定 Gaussian 上限

对于「MCMC 最多能让 Gaussians 增长到多少?」这个问题的权威答案。这里涉及三个数值:T62 mcmcMaxGaussians 中设置的值、你场景中 SfM 初始点的数量,以及预先保留的 Buffer 容量。 应用按以下顺序计算:

+ 起始值是 T62。如果它是 0,应用会设为 150 000 — 这个安全底线可以避免 1.4.3 中提到的大规模灭绝事故。 + 如果 T73 mcmcAutoScaleByScene 已启用,且 T72 mcmcCapMultiplier 大于 0,应用会将起始值与「初始点数 × T72」进行比较, 取两者中较大的值。 + 最后,将结果限制在 Buffer 容量之内。

示例:Bicycle(Mip-NeRF 360,194 张照片帧)→ SfM 初始点约 156 K, T62 = 150 000T72 = 5.32,Auto-scale 已启用,Buffer 容量为 8 M。156 K × 5.32 得出 830 K,比 150 000 大,也比 8 M 小 — 因此有效上限是 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 ≤ 200K
更快的训练T22 trainingRenderScale 0.5, T1 maxIterations 减半 — 但不要两者同时!
更好的高光效果T21 shDegreeUpgradeIterations 使用 [2K, 5K, 8K](不要提前集中), MCMC + 200K 次迭代
更频繁的实时预览T59 livePreviewInterval 设为 50 — 这是 "设置 → 训练"中提供的最密集数值
阴影过渡更柔和T17 ssimWeight 略微调高 (0.15–0.25),但不要超过 0.3
保持室内场景紧凑P10 室内 Preset( 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 — 在拥有 > 200 K SfM 初始点的大型场景中,若 Multiplier > 5,会产生数百万 Gaussians 的 Resolved-Cap。在 36 GB 内存的 Mac 上可能导致 OOM。户外场景的默认值 5.32 之所以可行,仅仅是因为对应的参考场景大约有 156 K 初始点 → 830 K Cap。 - T39 testViewIndices — 在预设文件中手动设置该值可能使质量测量失去意义(所有 Index > N → 没有 Holdout)。请将该列表留空。 - T64 mcmcOpacityRegWeightT65 mcmcScaleRegWeight — 在 1.4.3-Beta 中被设为 0.01,导致了大规模消失(一次迭代中从 460 K → 5 个 Gaussians)。自 1.4.4 起已固定为 0.0,但手动调高仍可重现该问题。 - T15 opacityResetInterval — 如果不设为 100 000+(实际上等于关闭)且训练少于 10 000 次迭代,重置会破坏收敛。因此 .preview 即便 maxIterations = 5 000,也将其设为了 100 000。 - T54/T55 densifyPhase2* — 第二阶段的 Densification 会级联下降直至 Gaussians 归零。请将两者都保持为 0。 - T74 useMipSplatting — 不会带来质量提升,甚至可能在某些室外场景中降低图像质量。默认关闭,仅作为实验性选项手动开启。

如果某个字段出现在此列表中而你仍想修改它,请先备份当前的 Preset(导出为 JSON),并考虑一下你是否能够可重复地测量结果 — 否则事后你将无法判断自己带来的究竟是改善还是恶化。