Глава 6 — Конфигурация обучения

Типичный экспорт пресета в JSON. Поля верхнего уровня: id (UUID), name, (classic | mcmc | sceneClass | custom), (версия схемы), (отметка времени), (свободный текст). Вложенный -объект содержит критически важные для воспроизводимости параметры — при импорте весь блок считывается в конфигурацию обучения, а значения по умолчанию из версии приложения заполняют поля, которых нет в JSON (например, после обновления приложения). Тот, кто передаёт пресет на другой Mac, просто отправляет этот JSON-файл.
Конфигурация обучения — это сердце каждого тренировочного запуска в RadianceKit. Она объединяет каждый параметр, влияющий на обучение — от максимального числа итераций через восемь скоростей обучения до специальных полей для MCMC, Mip-Splatting, curriculum и scene-aware-логики предела (cap). Ты редактируешь её в сайдбаре в разделе секции конфигурации обучения (Expert View), сохраняешь её как пресет или передаёшь как JSON-экспорт на другой Mac. При обучении именно этот объект замораживается и передаётся в GPU-backend.
Эта глава — справочный материал для опытных пользователей. Она перечисляет 80 настраиваемых полей конфигурации обучения, 9 поставляемых пресетов и зависящее от сцены разрешение предела гауссиан (Gaussian-Cap). В случае сомнений действует значение, которое задаёт выбранный пресет — ты видишь его в Inspector или в JSON-экспорте пресета.
Содержание:
+ Итерации (T1–T2) + Скорости обучения (T3–T10) + Densification — Classic (T11–T16) + Loss (T17–T20) + Прогрессия степени SH (T21) + Производительность (T22–T24) + Диагностика и подготовка облака точек (T26–T30) + Регуляризация (T31–T37) + Уточнение (T38–T44) + Небесный купол (T45–T48) + Adam + LR-расписание (T49–T55) + Постобработка + Apple AI (T56–T60) + MCMC-Densification (T61–T73) + Mip-Splatting (T74–T76) + Адаптивная Densification (T77–T79) + Curriculum (T80–T81) + Статические пресеты (TP1–TP9) + Как приложение определяет Gaussian-Cap + Какое поле для чего? (шпаргалка) + Опасные поля
Итерации (T1–T2)
T1maxIterations
ПОДРОБНОСТИ
По умолчанию: 30 000 (Initializer), 35 000 (.full), 200 000 (.fullMCMC) Диапазон: 1 000 – 500 000 (UI-слайдер), нет жёсткого верхнего предела в логике
ТЕХНИЧЕСКИ
Общее количество итераций обучения, через которые проходит бэкенд. Одна итерация означает форвард-рендер одной тренировочной камеры, обратный проход по всем компонентам loss (L1 + SSIM + опциональные регуляризации + Sky-Mask) и один шаг оптимизатора Adam. Это число напрямую влияет на другие расписания: Position-Lernrate следует по кривой Cosine-Annealing от 0 до либо самого T1, либо до T50 positionLRScheduleEndIteration; Densification останавливается на T2 densifyUntilIteration; MCMC-Noise-Decay заканчивается на T69 mcmcNoiseDecayEnd; SH-Degree-Upgrades происходят на трёх отметках, определённых в T21. При классической Densification проверенный диапазон составляет 20 000–35 000 итераций, при MCMC — 60 000–200 000. Резкое увеличение сверх значений, заданных в Preset, редко даёт дополнительное качество — Adam-Momentum насыщается, а без завершения LR-Decay loss стагнирует. И наоборот, значение ниже ~5 000 приводит к недостаточно сходящимся геометриям (у Density-Control слишком мало времени на клонирование/сплиттинг).
T2densifyUntilIteration
ПОДРОБНОСТИ
По умолчанию: 15 000 (Initializer), 5 000 (.full), 160 000 (.fullMCMC) Диапазон: 0 – T1 maxIterations
ТЕХНИЧЕСКИ
Итерация, начиная с которой Densification прекращается. До этого момента Gaussians клонируются, сплитятся и прунятся по правилам, параметризованным в T11–T16 (Classic) или T67–T70 (MCMC); после этого количество Gaussians остаётся постоянным, и оптимизируются только позиции, вращения, масштабы, непрозрачности и коэффициенты SH (фаза Refinement). В оригинальной статье 3DGS значение составляет 50 % от T1, в пресете .full RadianceKit — всего ~14 % (5 000 из 35 000): примерно после 5 000 итераций дальнейшая денсификация скорее ухудшает результат — больше Floaters, больше требований к памяти, без прироста качества. MCMC же позволяет Relocation работать до 80 % от T1, потому что MCMC не порождает вредных Floaters. Если T2 выбран слишком малым (< 1 000), возникает слишком мало Gaussians; слишком большое значение при Classic (> 50 % от T1) приводит к Overgrowth и выбросам RGB-Saturation (см. Outdoor-Overtraining-Findings).
Скорости обучения (T3–T10)
T3positionLearningRate
ПОДРОБНОСТИ
По умолчанию: 0.00016 Диапазон: 1e-7 – 1e-3 (рекомендуется)
ТЕХНИЧЕСКИ
Скорость обучения Adam для XYZ-позиции каждой Gaussian в начале обучения (итерация 0). Следует кривой Cosine-Annealing и снижается по ходу обучения до значения T4 positionLearningRateFinal. Значение по умолчанию 0.00016 взято из оригинальной статьи 3DGS (Kerbl et al.~2023) и в RadianceKit не масштабируется даже при увеличении разрешения изображения — позиция перемещается в мировой системе координат, а не в пиксельном пространстве. Значительное увеличение (> 0.0005) приводит к тому, что Gaussians совершают скачки на большие расстояния, и Loss становится нестабильным; значения значительно ниже (< 0.00005) приводят к тому, что неверно инициализированные облака точек никогда не находят своё место. Для подавляющего большинства сцен значение по умолчанию является правильным выбором. Обрати внимание: при .fullMCMC мы сознательно оставляем это значение по умолчанию — MCMC требует постоянных скоростей обучения для своей логики Relocation, поэтому подстройка здесь не приносит пользы.
T4positionLearningRateFinal
ПОДРОБНОСТИ
По умолчанию: 0.0000016 (Initializer + статья), 0.000016 (.full, .fullMCMC — в 10 раз выше) Диапазон: 0 – T3 positionLearningRate
ТЕХНИЧЕСКИ
Конечное значение кривой Cosine-Annealing для LR позиции. Достигается либо при T1 maxIterations, либо, если задано, при T50 positionLRScheduleEndIteration. Пресет .full в RadianceKit использует 0.000016 — то есть в 10 раз выше значения по умолчанию из статьи 0.0000016. Как значительно меньшее конечное значение, так и значительно большее начальное значение заметно ухудшают результат. Высокое конечное значение — это не компромисс, а сознательный выбор: при слишком сильном затухании Gaussians теряют во время фазы 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
ТЕХНИЧЕСКИ
Скорость обучения Adam для DC-компоненты (степень 0, то есть постоянного альбедо) цвета spherical-harmonic. SH-DC соответствует независимому от направления базовому тону Gaussian, своего рода «базовому цвету». RadianceKit удваивает значение по умолчанию из статьи в пресетах Quality — это ускоряет сходимость цвета, что необходимо, потому что при коротком обучении (< 5 000 итераций) SH-DC иначе не успевает сформироваться. В отличие от геометрических LR, у SH-DC нет затухания; скорость обучения остаётся постоянной на всех итерациях (или следует только опциональному затуханию extended-phase из T51). Ещё значительно более высокие значения (около 0.01) снова ухудшают результат и делают цвета нестабильными.
T6shRestLearningRate
ПОДРОБНОСТИ
По умолчанию: 0.000125 (Initializer + статья), 0.00025 (.full и MCMC — 2×) Диапазон: 0.000001 – 0.005
ТЕХНИЧЕСКИ
Скорость обучения Adam для коэффициентов SH более высокого порядка (степени 1, 2, 3 — то есть цветовые составляющие, зависящие от направления взгляда, отвечающие за блики, отражения и мягкую тень). В 20 раз меньше T5 согласно конвенции статьи, потому что эти коэффициенты растут квадратично по количеству (3 для степени 1, 5 для степени 2, 7 для степени 3 → всего 15 float на Gaussian) и без меньшей скорости обучения перенасытили бы изображение. Активируется в два этапа — до первой отметки в T21 shDegreeUpgradeIterations активна только степень 0 (то есть только T5), затем 1, позже 2, наконец 3. Низкие значения здесь особенно важны на сценах с большим количеством рассеянного освещения; на очень блестящих поверхностях (автомобильный лак, вода) крутить особо не имеет смысла — сама SH-репрезентация ограничена по возможностям.
T7opacityLearningRate
ПОДРОБНОСТИ
По умолчанию: 0.05 (Initializer + статья), 0.1 (.full, MCMC — 2×) Диапазон: 0.001 – 1.0
ТЕХНИЧЕСКИ
Скорость обучения Adam для logit-непрозрачности каждой Gaussian. Приложение хранит непрозрачность как неограниченное значение float и преобразует его сигмоидой в [0, 1]; LR действует в logit-пространстве. Пресеты Quality удваивают значение по умолчанию из статьи до 0.1; это делает pruning эффективнее — мёртвые Gaussians быстрее опускаются ниже T14 pruneOpacityThreshold. При этом, какое значение оптимально, зависит от конфигурации Adam; взаимодействие этих двух факторов нетривиально. Низкие значения (< 0.01) приводят к тому, что «мёртвые» Gaussians вечно лежат без дела и потребляют память; слишком высокие значения (> 0.5) могут привести к взрыву opacity, поэтому оптимизатор жёстко ограничивает logit-значение диапазоном [-15, 3].
T8opacityLearningRateFinal
ПОДРОБНОСТИ
По умолчанию: 0.0 (= «без затухания») Диапазон: 0 или 0.001 – T7 opacityLearningRate
ТЕХНИЧЕСКИ
Опциональное конечное значение Cosine-затухания для LR opacity. Если 0.0, затухание отключено, и LR opacity остаётся постоянной на протяжении всего обучения на уровне T7. Затухание с 0.1 до 0.01 заметно ухудшает результат; поэтому по умолчанию оно «выключено». Гипотеза, стоящая за этим полем: в фазе Refinement постоянная LR opacity могла бы приводить к колебаниям, так что сплаты, уже достигшие правильной степени прозрачности, снова смещались бы из-за случайных колебаний градиента. Эмпирически это не подтверждается — логика logit-clamping и так это перехватывает. Поле остаётся доступным для будущих экспериментов; даже очень долгие MCMC-прогоны (> 500K итераций) могли бы от этого выиграть.
T9scaleLearningRate
ПОДРОБНОСТИ
По умолчанию: 0.005 (Initializer + статья), 0.01 (.full, MCMC — 2×) Диапазон: 0.0001 – 0.1
ТЕХНИЧЕСКИ
Скорость обучения Adam для трёх компонент масштаба каждой Gaussian в log-пространстве (RadianceKit хранит log(scale), чтобы масштабы оставались положительными). Значение по умолчанию из статьи 0.005, в RadianceKit удвоено до 0.01 для лучшей сходимости масштаба при настроенных конфигурациях скоростей обучения. Если значение остаётся в связке с остальными скоростями обучения Quality на уровне значения по умолчанию из статьи, получается заметно слишком мало Gaussians — Density-Control не может клонировать, потому что обновления масштаба слишком медленно поспевают. Масштаб контролирует протяжённость каждой Gaussian — слишком быстрое обучение приводит к «игольчатым» Gaussians (чрезвычайно длинные тонкие сплаты, см. T34 scaleRatioPruneThreshold), слишком медленное обучение оставляет сплаты слишком компактными, и Density-Control приходится слишком часто делать split.
T10rotationLearningRate
ПОДРОБНОСТИ
По умолчанию: 0.001 (Initializer + статья), 0.002 (.full, MCMC — 2×) Диапазон: 0.0001 – 0.05
ТЕХНИЧЕСКИ
Скорость обучения Adam для четырёх компонент кватерниона каждой Gaussian. Кватернион на каждом шаге оптимизатора после обновления Adam повторно нормализуется (L2-норма = 1) — иначе матрица ковариации вырождалась бы. RadianceKit удваивает значение по умолчанию из статьи в пресетах Quality, потому что у ротации по сравнению со масштабом / позицией меньшие абсолютные величины градиента (на единичной сфере каждый шаг остаётся коротким), и без удвоения ротация в окне из 35 000 итераций была бы заметно недосходившейся. На сценах NeRF-Blender (Lego, Chair) ротация сказывается особенно сильно — края объектов выравниваются правильно только после 5 000–10 000 итераций.
Densification — Классика (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 и напрямую несравним с world-space-пайплайном RadianceKit. С помощью флага T52 adaptiveDensifyThreshold значение можно вычислять во время выполнения из p98 текущего распределения градиентов — однако на реальных сценах количество Gaussian при этом резко обваливается (массовый прунинг); флаг остаётся выключенным. T77–T79 предлагают альтернативную адаптивную логику через rolling median. Это поле небезопасно — уменьшение вдвое создаёт в 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 то же самое поле интерпретируется как интервал релокации; см. T67 mcmcRelocationInterval для MCMC-специфичной логики.
T14pruneOpacityThreshold
ПОДРОБНОСТИ
По умолчанию: 0.005 (Initializer, статья, MCMC), 0.001 (.full) Диапазон: 0.0001 – 0.1
ТЕХНИЧЕСКИ
Порог sigmoid-непрозрачности, ниже которого Gaussian удаляется на следующем шаге денсификации. Действует вместе с T7 opacityLearningRate и логикой logit-clamp в оптимизаторе. В .full значение составляет 0.001 вместо 0.005 — сплаты, играющие роль только при экзотических углах обзора, благодаря этому дольше сохраняются и вносят вклад в детализацию SH. Ещё меньшие значения (около 0.0001) уже не дают эффекта: прунится слишком мало и расходуется память впустую. Важно: контроль плотности ДОЛЖЕН ВСЕГДА прунить, даже если ёмкость буфера уже заполнена другими мерами — иначе накапливаются мёртвые Gaussian и счётчик замирает.
T15opacityResetInterval
ПОДРОБНОСТИ
По умолчанию: 3 000 (Initializer + статья), 100 000 (.full = фактически отключено), 200 000 (.fullMCMC = отключено) Диапазон: 1 000 – 100 000+
ТЕХНИЧЕСКИ
Через сколько итераций непрозрачность всех Gaussian сбрасывается до низкого значения (~0.01) — мера из статьи 3DGS для переоценки «замёрзших» сплатов. Вместе с прогревом (warmup) RadianceKit, стохастической схемой обучения и удвоенными скоростями обучения сброс непрозрачности заметно снижает качество, а logit-clamp в оптимизаторе и так уже покрывает эту функцию. Поэтому в .full он практически отключён (100 000 > 35 000 = никогда не срабатывает). В .fullClassicPaper (верный статье вариант) он намеренно снова установлен на 3 000 — там задача состоит в достижении бюджетов Gaussian из оригинальной статьи.
T16maxScreenSize
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено) Диапазон: 0 (выкл) или > 0
ТЕХНИЧЕСКИ
Максимальный размер в экранном пространстве (в спроецированных пикселях), которого может достичь Gaussian, прежде чем она будет принудительно разделена. Значение установлено на 0 — контроль плотности RadianceKit вместо этого использует пороговое значение масштаба world-space из той же градиентной логики. Остаётся в каталоге полей, потому что будущие эксперименты с Mip-Splatting (T74–T76) или сценоспецифичными стратегиями сплаттинга могли бы извлечь из этого пользу. Активация (значение > 0, например 20) заставила бы сильно выросшие на экране сплаты разделяться — это актуально для больших гладких участков стен, где один гигантский сплат даёт слишком мало детализации.
Loss (T17–T20)
T17ssimWeight
ПОДРОБНОСТИ
По умолчанию: 0.2 (инициализатор + статья + .full), 0.05 (все пресеты MCMC) Диапазон: 0.0 – 1.0
ТЕХНИЧЕСКИ
Вес компонента D-SSIM в комбинированной функции потерь loss = (1 - λ) * L1 + λ * D-SSIM, где λ = T17. Значение по умолчанию из статьи о 3DGS, 0.2, — правильный выбор для Classic-Densification — уже 0.3 заметно ухудшает результат. Для MCMC подходящее значение, напротив, составляет 0.05, потому что MCMC из-за своего стохастического исследования нуждается в более сильной доле L1-сигнала — более высокие веса SSIM размыли бы решения по релокации. SSIM заметно дороже вычислять, чем L1 (локальные окна 11×11 по всему изображению); RadianceKit использует реализацию с ускорением через MPS, которая укладывается менее чем в 1 мс на изображение 1080p. Пресеты Scene-Class используют специфичные для сцены значения между 0.082 (.outdoorPreset) и 0.171 (.indoorPreset).
T18ssimWeightRefinement
ПОДРОБНОСТИ
По умолчанию: 0.0 (= «без смены, оставить ssimWeight») Диапазон: 0 или 0 – 1.0
ТЕХНИЧЕСКИ
Опциональное значение SSIM для фазы Refinement после T2 densifyUntilIteration. Повышение с 0.2 до 0.3 в фазе Refinement ухудшает результат по обеим метрикам — и L1, и SSIM; поэтому значение по умолчанию — 0.0. Гипотеза, стоящая за этим полем, заключалась в том, что после Densification — когда новые Gaussians больше не появляются — более сильная доля SSIM максимизирует структурную резкость. Эмпирически неверно: повышение веса SSIM косвенно означает снижение веса L1, а L1 — заметно более информативный сигнал на финальной фазе Refinement. Поле остаётся доступным для будущих экспериментов с перцептивной функцией потерь (T60) или Edge-Loss (T19), где специфичная для Refinement композиция функции потерь может иметь смысл.
T19edgeLossWeight
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено) Диапазон: 0 или 0.001 – 1.0
ТЕХНИЧЕСКИ
Экспериментальный член функции потерь: вес L1-функции потерь в области градиентов Собеля, который напрямую сравнивает края изображения (Sobel эталонного изображения против Sobel рендера) в дополнение к L1+SSIM. Гипотеза: информация о краях — перцептивная основа качества изображения, и явный член должен побуждать Gaussians точнее попадать по краям. На практике толку никакого: заметный вес (0.1) ухудшает результат, небольшой (0.01) не меняет качество вообще, но стоит времени вычислений. Проход Sobel стоит дополнительного прямого прохода MPS по эталонному изображению и рендеру. Поэтому постоянно отключён. Возможное применение в будущем: сцены с жёсткими искусственными краями (архитектура, мебель, рендеры) могли бы выиграть — однако пресеты Scene-Class используют для этого не данный член, а масштабируют вес SSIM.
T20skyMaskingEnabled
ПОДРОБНОСТИ
По умолчанию: false (инициализатор и все пресеты) Диапазон: boolean
ТЕХНИЧЕСКИ
Включает Sky Masking. При этом в каждом изображении с помощью фреймворка Apple Vision маскируется область неба, и функция потерь в этой области обнуляется. Смысл: сцены на улице часто страдают от того, что синие/серые/белые пиксели неба заставляют приложение размещать Gaussians именно там — что воспринимается как «floater». Без маски неба потери в этой области никогда не были бы равны нулю, потому что небо на изображении слегка меняется, а приложение бесконечно пытается воспроизвести это сплатами. Маска Vision вычисляется один раз для каждой камеры перед обучением и хранится в ОЗУ. Обычно включается вместе с T45 skyDomeEnabled (логика UI в представлении настроек). Для сцен в помещении или синтетических рендеров оставлять отключённым — маска ошибочно распознавала бы там потолки или стены как «небо».
SH-Degree-Progression (T21)
T21shDegreeUpgradeIterations
ПОДРОБНОСТИ
Standard: [1_000, 2_000, 3_000] (Initializer), [2_000, 5_000, 8_000] (.full, MCMC), [1_000, 2_000] (.preview — Degree 3 übersprungen) Bereich: [Int], jeder Wert in [0, maxIterations], monoton steigend
ТЕХНИЧЕСКИ
Iterationen, an denen der aktive SH-Degree von 0→1, 1→2, 2→3 hochgeschaltet wird. Vor der ersten Marke sind nur die DC-Komponenten aktiv (also T5 shDCLearningRate), nach der ersten Marke die DC + 3 Degree-1-Koeffizienten, nach der zweiten Marke + 5 Degree-2-Koeffizienten, nach der dritten Marke alle 15 Koeffizienten. Der Speicherbedarf pro Gaussian wächst dabei in Stufen — 4 Floats → 16 Floats → 36 Floats → 64 Floats. Die Quality-Presets verzögern die Aufstufungen gegenüber den Initializer-Defaults, weil die Geometrie zuerst stabilisieren soll, bevor die Farbdetails mit ihrer höheren Frequenz draufkommen. Die früheren Marken [1K, 2K, 3K] liefern in .full ein spürbar schlechteres Ergebnis. .preview kappt bei Degree 2, weil Degree 3 in 5 000 Iterationen nicht konvergiert und nur Optimizer-Kapazität verbraucht. Das Curriculum (T80–T81) bietet eine alternative Logik, die diese Liste dynamisch überschreibt.
Производительность (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×) порог гораздо выше (4e-6), чем у .full (1.0×, 1.1e-6). RadianceKit предупреждает при очень крупных изображениях и автоматически подстраивается — целевое разрешение 3 МП. При экстремальных 4K-исходных изображениях имело бы смысл 0.5 или даже 0.25, иначе любой Mac окажется лишь в CPU-компакции.
T23resolutionWarmupScale
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено) Диапазон: 0 или 0.1 –
ТЕХНИЧЕСКИ
Обучай фазу Densification (итерации от 0 до T2) в более низком разрешении, чем фазу Refinement. Для .full это отключено, потому что при T22 = 1.0 и Cosine-Annealing выигрыш во времени мал, а качество немного страдает. Остаётся в каталоге параметров, потому что при 4K-исходниках и длительных прогонах обучения могла бы снова оказаться полезной — Curriculum (T80) использует похожую логику, но там она связана с расписанием LR. Если включено и T80 curriculumResolutionRamp также true, побеждает Curriculum и переопределяет это значение.
T24tileSize
ПОДРОБНОСТИ
По умолчанию: 16 Диапазон: 8, 16, 32
ТЕХНИЧЕСКИ
Размер плиток растеризации в пикселях. Рендеринг Gaussian Splatting выполняется по плиткам: изображение разбивается на плитки 16×16 пикселей, каждая плитка собирает относящиеся к ней Gaussians, сортирует их по глубине и смешивает. 16 — это стандарт, используемый практически всеми реализациями 3DGS, и он захардкожен в Metal-ядрах RadianceKit; изменение этого значения потребовало бы перекомпиляции шейдеров и в текущем состоянии неэффективно. Остаётся полем на случай, если будущая версия движка будет поддерживать динамический размер плитки.
Диагностика и подготовка облака точек (T26–T30)
T26depthDistortionWeight
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено) Диапазон: 0 или 0.0001 – 0.05
ТЕХНИЧЕСКИ
Экспериментально: вес регуляризационного лосса Depth Distortion. Штрафует Gaussians, которые вдоль луча рендеринга расположены глубоко друг за другом, но концептуально принадлежат одной и той же поверхности — это способствует концентрированным распределениям глубины и уменьшает Floaters. При всех опробованных значениях результат становится хуже, а не лучше. Теоретическое преимущество — улучшение мультивидовой согласованности — не отражается в L1-лоссе, потому что гипотеза неявно предполагает, что геометрия SfM корректна и Gaussians нужно только «уложить друг на друга». На практике облако точек SfM обычно является самым слабым компонентом, а не укладка. Остаётся доступным для мультивидовых датасетов с особенно чистыми позами (Synthetic, Mip-NeRF 360 с эталонными данными).
T27singleViewOverfit
ПОДРОБНОСТИ
По умолчанию: false Диапазон: boolean
ТЕХНИЧЕСКИ
Диагностический флаг: если true, в каждой итерации обучения принудительно используется камера с индексом 0 вместо случайной из пула камер. Смысл: если модель не может переобучиться даже на один единственный ракурс (то есть лосс на View 0 не стремится к нулю даже после 10 000 итераций), значит в forward/backward-проходе есть фундаментальная ошибка. Этот переключатель интенсивно использовался во время разработки Metal-шейдеров и дифференцируемых ядер растеризатора. Сегодня доступен только как проверка работоспособности, если кто-то изменил что-то в бэкенде обучения и хочет перепроверить. В интерфейсе для этого нет переключателя — поле выключено во всех пресетах и остаётся таковым.
T28maxCameras
ПОДРОБНОСТИ
По умолчанию: 0 (= «использовать все камеры») Диапазон: 0 или 1 – N
ТЕХНИЧЕСКИ
Диагностическое ограничение: обучать только на первых N камерах, игнорировать все остальные. Изначальный смысл: проверить гипотезу, что слишком много камер создают конфликты градиентов (слишком много противоречивых сигналов лосса для одного и того же Gaussian). Искусственное ограничение не даёт преимущества — больше кадров практически всегда даёт больше качества. В интерфейсе для этого нет элемента управления; поле во всех пресетах установлено на 0, то есть «все камеры».
T29maxInitialPoints
ПОДРОБНОСТИ
По умолчанию: 0 (= «использовать все точки SfM») Диапазон: 0 или 1 000 – 200 000+
ТЕХНИЧЕСКИ
Защитный механизм: ограничивает количество начальных точек SfM, с которыми начинается обучение. Плотные реконструкции COLMAP могут производить > 60 000 точек, что при больших начальных масштабах приводит к 200–300 Gaussians на перекрытие пикселя — из-за этого получается «поле тумана», в котором обучение не сходится. Субдискретизация до ~16 000 точек (логика жёсткого ограничения в движке обучения) приводит начальную плотность к уровню, используемому эталонной 3DGS, и значительно уменьшает перекрытие. Приложение устанавливает это самостоятельно при очень плотных реконструкциях; элемента управления для этого нет.
T30cameraClusterOutlierMultiplier
ПОДРОБНОСТИ
По умолчанию: 10.0 (все пресеты — никогда не переопределяется) Диапазон: 1.0 – 100.0
ТЕХНИЧЕСКИ
Множитель для фильтра выбросов кластера камер. Перед обучением движок обучения вычисляет центроид всех позиций камер и максимальное расстояние камеры от центроида. Точки SfM, расстояние которых от центроида превышает multiplier × maxCameraDistance, отбрасываются как выбросы. Значение по умолчанию 10× выбрано намеренно щедрым. Тонкий побочный эффект: более тесное SfM (камеры расположены ближе друг к другу) → меньший порог → больше точек отбрасывается как выбросы. Более рассеянное SfM → больший порог → меньше точек отбрасывается. Отсюда следует неожиданный эффект: более тесная и сама по себе лучшая реконструкция SfM может ухудшить обучение, потому что отбрасывается слишком много начальных точек. Поле во всех пресетах установлено на 10 и в интерфейсе не регулируется. Значения ниже 5 обычно слишком строгие, выше 20 не дают эффекта.
Регуляризация (T31–T37)
T31coarseToFineBlurRadius
ПОДРОБНОСТИ
По умолчанию: 0 (= отключено) Диапазон: 0 или 1 – 10
ТЕХНИЧЕСКИ
Экспериментально: радиус box-blur, который в начале фазы Densification применяется к ground-truth-изображению и линейно уменьшается до 0 к концу Densification (T2). Гипотеза: Coarse-to-Fine-обучение — сначала выучить грубые структуры, затем детали — должно давать более стабильную геометрию. На всех опробованных радиусах результат становится хуже. Причина сбоя: Densification принимает решения на основе градиентов в домене изображения, а размытие уменьшает именно те сигналы, которые важны для «здесь нужно клонировать». Остаётся в каталоге функций для будущих тестов с другой схемой density-control.
T32scaleRegWeight
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено) Диапазон: 0 или 0.0001 – 0.05
ТЕХНИЧЕСКИ
Экспериментально: L1-регуляризация на масштаб в мировом пространстве. Наказывает Gaussians, которые становятся слишком большими — предотвращает «мега-сплаты», покрывающие целые стены одним Gaussian. При включении число Gaussians взрывается до миллионов, а результат становится в разы хуже. Причина: регуляризация масштаба вступает в конфликт с density-control — меньшие масштабы означают, что нужно больше Gaussians, поэтому density-control чаще выполняет split, что в свою очередь означает больше затрат на градиенты. Отключено, но задокументировано для экспериментов с Mip-Splatting (T74): в этом контексте нижняя граница масштаба могла бы иметь смысл.
T33anisotropyRegWeight
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено) Диапазон: 0 или 0.0001 – 0.05
ТЕХНИЧЕСКИ
Экспериментально: штраф на отношение max(scale)/min(scale), призван предотвращать крайне вытянутые «игольчатые» Gaussians, которые воспринимаются как флоатеры. На всех опробованных значениях результат заметно ухудшается. Причина: регуляризация принуждает сплаты к «округлой» форме, что на плоской поверхности (стена, стол, пол) в корне неверно — там плоский, широкий Gaussian эффективнее, чем шарообразный. Отключено. T34 scaleRatioPruneThreshold преследует ту же цель более прицельно, но также по умолчанию выключен.
T34scaleRatioPruneThreshold
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено) Диапазон: 0 или 5.0 – 100.0 (типично 10.0 – 30.0)
ТЕХНИЧЕСКИ
Экспериментальное пост-обучающее прореживание, удаляющее каждый Gaussian, чьё отношение max(scale)/min(scale) превышает заданный здесь линейный порог. Нацелено на крайне вытянутые «игольчатые/дисковые» флоатеры, которые нельзя устранить одной лишь регуляризацией. В тестах прореживание удаляло флоатеры, как и ожидалось, но одновременно и полезные плоские сплаты на стенах и полах — изображение становилось более дырявым. Поэтому по умолчанию выключено. С версии 1.8 для этого есть переключатель Remove Needle/Disc Floaters в разделе Inspector «Training», под строкой «Runs automatically at the end of training». Во включённом состоянии он работает намеренно консервативно (только сплаты, у которых самая длинная ось примерно в 50 раз превышает самую короткую) и действует начиная со следующего запуска обучения.
T35opacityRegWeight
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено) Диапазон: 0 или 0.0001 – 0.05
ТЕХНИЧЕСКИ
Экспериментально: штраф binary-cross-entropy, притягивающий непрозрачность к 0 или 1 (то есть от «полупрозрачности»). Гипотеза: более резкое распределение непрозрачности улучшит чёткость изображения. Вместе с T33 эта регуляризация стоит качества; обе отключены. Внимание: в 1.4.3-Beta появился баг, который изменил именно это поле в значении по умолчанию (инициализатор = 0.01), что привело к массовому вымиранию числа Gaussians (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 итераций sigmoid-непрозрачность каждого Gaussian умножается на этот коэффициент. 0.9995 × 100 применений даёт около 95 % сохранения на фазу Densification — лёгкое, но устойчивое понижающее давление на все значения непрозрачности, которое надёжно опускает слабо вносящие вклад Gaussians ниже 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 (= «одна View на шаг Adam») Диапазон: 1 – 8
ТЕХНИЧЕСКИ
Количество Views, градиенты которых накапливаются перед выполнением обновления Adam. При > 1 приложение работает по отдельному, «unfused» пути Backward-Project, который суммирует градиенты в отдельном буфере; финальное применение масштабируется с 1/N, чтобы сохранить постоянную величину. При классическом обучении значение 2 не даёт прироста качества, но стоит времени, потому что unfused-путь дороже, чем fused. При MCMC же accum = 2 заметно сокращает разрыв в качестве по сравнению с Classic — поэтому там он предлагается как переключатель. В пресетах значение установлено на 1. В интерфейсе ты достигаешь этого через переключатель MCMC Quality в разделе инспектора «Training»: включённый переключатель означает, что приложение накапливает 2 Views на шаг, выключенный — 1. Другие значения, кроме 1 и 2, можно задать только через отредактированный файл пресета.
T39testViewIndices
ПОДРОБНОСТИ
По умолчанию: [] (= пусто, все Views используются для обучения) Диапазон: Set<Int>, произвольное подмножество индексов камер
ТЕХНИЧЕСКИ
Набор индексов камер, которые НЕ используются для обучения, а сохраняются как holdout для оценки PSNR/SSIM/LPIPS. Заполняется только во внутренних измерительных прогонах: тогда каждая восьмая View, начиная с индекса 0 (стандарт LLFF, идентичный соглашениям Mip-NeRF-360 и статьи 3DGS). В поставляемой версии поле остаётся пустым — обучение использует все Views, и в интерфейсе для этого нет элемента управления. Осторожно: ручная установка этого поля в файле пресета без понимания индексов делает измерение непригодным (например, если все индексы установлены выше N, а Views всего N-50 → нет holdout-ов → нет оценки). При экспорте собственного пресета testViewIndices не записывается, потому что оно зависит от сцены и иначе оставляло бы бессмысленные значения между разными наборами данных.
T40refinementPruneInterval
ПОДРОБНОСТИ
По умолчанию: 0 (= отключено) Диапазон: 0 или 100 – 5 000
ТЕХНИЧЕСКИ
Каждые N итераций во время фазы уточнения (после T2) будет запускаться дополнительный проход прунинга, который удаляет Gaussians с sigmoid(opacity) < T41 refinementPruneOpacityThreshold. Смысл: во время Densification происходят регулярные вызовы density control, после этого — уже нет — но Gaussians, чья opacity продолжает снижаться, остаются в буфере. На практике этот дополнительный прунинг вредит: вместе со второй фазой Densification (T54) он может полностью опустошить набор Gaussians. Во всех пресетах стоит 0 и в интерфейсе не регулируется; если всё же задать это через отредактированный файл пресета, разумными значениями будут 1 000 или 2 000.
T41refinementPruneOpacityThreshold
ПОДРОБНОСТИ
По умолчанию: 0.0 (= «использовать T14») Диапазон: 0 или 0.001 – 0.1
ТЕХНИЧЕСКИ
Отдельный порог opacity для прунинга уточнения. После Densification большинство Gaussians достигают значительно более высокой opacity (> 0.001), так что стандартный T14 pruneOpacityThreshold был бы слишком мягким. Если T40 активен, это поле определяет собственный порог. При 0.0 продолжает использоваться T14. Актуально только если T40 > 0.
T42midTrainingCompactificationIterations
ПОДРОБНОСТИ
По умолчанию: [] (= отключено) Диапазон: [Int], значения в (densifyUntilIteration, maxIterations)
ТЕХНИЧЕСКИ
Явные точки-итерации во время фазы уточнения, на которых выполняется проход Compactification (удаляет Gaussians с sigmoid(opacity) < 0.01 + с выбросной шкалой, та же логика, что у T56 postTrainingCompactification). Смысл: длинные фазы уточнения могут демонстрировать накопление конфетти/плавающих артефактов, чей SH затем переобучается на специфичные для view артефакты. Типичная конфигурация в случае активации: [10000, 20000, 30000] для 40K Classic. НО: произвольно выбранные метки уборки последовательно ухудшают конечный результат — число Gaussians заметно снижается, но ошибка изображения растёт сильнее. Как произвольно задаваемый список итераций поле поэтому остаётся пустым во всех пресетах. Сам эффект достигается в интерфейсе через переключатель Floater Cleanup в разделе инспектора «Training»: при классических запусках от 30 000 итераций он размещает два прохода уборки посреди обучения. Собственные метки можно задать только через отредактированный файл пресета.
T43frustumCullEnabled
ПОДРОБНОСТИ
По умолчанию: false Диапазон: boolean
ТЕХНИЧЕСКИ
После обучения удаляются все Gaussians, находящиеся вне объединения всех фрустумов камер обучения. Такие Gaussians никогда не ограничивались сигналом loss и всегда являются плавающими артефактами. Особенно эффективно для сцен, в которых Novel-View находится позади или сбоку от пути камеры (например, обратная сторона линейного полёта дрона) — плавающие артефакты там во время фазы обучения никогда не видны, но при последующем перемещении в 3D-просмотрщике вполне видны. На полётах дронов это заметно уменьшает число плавающих артефактов, поэтому доступно как опция для включения. По умолчанию false, потому что при съёмках объектов с полным орбитальным покрытием объединение фрустумов охватывает всю сцену, и функция ничего не удаляет — предлагается в Settings под «Floater Reduction». Пресет для съёмок на улице не включает это, потому что sky-dome там решает ту же проблему лучше.
T44frustumCullExpansion
ПОДРОБНОСТИ
По умолчанию: 1.1 Диапазон: 1.0 – 2.0
ТЕХНИЧЕСКИ
NDC-margin для T43 frustumCullEnabled. 1.0 обрезал бы точно по краю кадра, что слишком сильно укорачивало бы шаткие сплаты у края кадра. 1.1 = 10 % запаса сверх точного кадрирования камеры — даёт немного допуска для краевых пикселей, которые в слегка смещённой Novel-View всё же могут стать видимыми. Значения > 1.2 делают отсечение практически неэффективным, потому что расширенный фрустум охватывает намного больше пространства.
Небесный купол (T45–T48)
T45skyDomeEnabled
ПОДРОБНОСТИ
По умолчанию: false (инициализатор + все пресеты кроме P9 Outdoor) Диапазон: boolean
ТЕХНИЧЕСКИ
Перед началом обучения генерируется сферическое облако точек (Fibonacci-sphere с T46 точками-сэмплами), размещённое на радиусе T47 skyDomeRadiusMultiplier × scene_extent вокруг центра сцены и инициализированное цветами из sky-маскированных пикселей всех обучающих камер (см. T20 skyMaskingEnabled). Эти Sky-Dome-гауссианы вставляются в начало Gaussian-буфера и на время обучения «замораживаются» (градиенты позиции/масштаба/вращения = 0, оптимизируемыми остаются только SH и Opacity). Эффект: вместо чёрных областей-«конфетти» вдали пользователь видит в новых видах настоящее небо. На дрон-съёмках и ландшафтных сценах это работает очень хорошо; в пресете Outdoor (P9) опция включена по умолчанию. Для сцен в помещении лучше выключить — сфера бессмысленно висела бы за пределами помещения.
T46skyDomeSampleCount
ПОДРОБНОСТИ
По умолчанию: 5 000 Диапазон: 1 000 – 50 000 (обычно 2 000 – 10 000)
ТЕХНИЧЕСКИ
Количество точек-сэмплов Fibonacci-sphere на сфере Sky-Dome. Более высокие значения → более плотный небесный купол (лучше при больших разрешениях и большой видимой площади неба), но выше требования к памяти. 5 000 — оптимальное значение для рендеринга в 4K; при более низких разрешениях достаточно 2 000–3 000. Точки инициализируются по cosine-расстоянию к каждому вектору обзора обучающей камеры с соответствующими sky-маскированными пикселями — точки-сэмплы, чей view-cone не видит ни одна камера, остаются сзади с низким начальным значением непрозрачности, но не изменяются в ходе обучения (заморожены).
T47skyDomeRadiusMultiplier
ПОДРОБНОСТИ
По умолчанию: 30.0 (инициализатор + большинство пресетов), 59.0 (P9 Outdoor) Диапазон: 5.0 – 200.0
ТЕХНИЧЕСКИ
Радиус сферы Sky-Dome относительно протяжённости сцены (= среднее расстояние между позициями камер). 30 = сфера имеет 30-кратный диаметр облака камер. Слишком маленькое значение (< 5) → Sky-Dome вмешивается в саму сцену (например, один Sky-Dome-сплэт оказывается на переднем плане); слишком большое (> 100) → потеря точности float32 в позициях Sky-Dome, что вызывает глитчи рендеринга вдали. Для протяжённых сцен на открытом воздухе подходящим значением является 59.0 — стандартные 30.0 слишком малы для глубоких ландшафтов, тогда пиксели Sky-Dome заметно отрисовываются по краям кадра как «стена».
T48frozenGaussianCount
ПОДРОБНОСТИ
По умолчанию: 0 (= нет замороженных гауссианов) Диапазон: 0 или 1 – T46
ТЕХНИЧЕСКИ
Количество гауссианов в начале буфера, чьи градиенты позиции/масштаба/вращения в оптимизаторе устанавливаются в ноль — они остаются пространственно неподвижными на протяжении всего обучения. Density-control не может их клонировать, разделять или удалять. Используется для внедрения Sky-Dome (см. T45): если Sky-Dome включён, это поле автоматически устанавливается в T46 skyDomeSampleCount. Возможна и ручная установка (например, чтобы заморозить заранее размещённое облако точек из LiDAR-скана), но в UI это напрямую недоступно. Важно: первые N гауссианов в буфере всегда являются замороженными — порядок в буфере определяет это, а не явный индекс.
Adam + LR-Schedule (T49–T55)
T49adamResetIteration
ПОДРОБНОСТИ
По умолчанию: 0 (= отключено) Диапазон: 0 или 100 –
ТЕХНИЧЕСКИ
Итерация, на которой аккумуляторы момента Adam-оптимизатора (m1, m2) сбрасываются на ноль. Коррекция смещения (bias correction) после этого работает с (iter - adamResetIteration) вместо iter. Сброс после окончания Densification заметно ухудшает результат. Причина: момент Adam, накопившийся во время Densification, несёт информацию о типичных магнитудах градиентов и ускоряет фазу Refinement. Выбросить его — значит потерять первые ~500 итераций Refinement по скорости сходимости. Поэтому во всех Presets стоит 0 и в интерфейсе не регулируется.
T50positionLRScheduleEndIteration
ПОДРОБНОСТИ
По умолчанию: 0 (инициализатор = «используй maxIterations"), 20 000 (.full — Cosine заканчивается на 20K несмотря на maxIter=35K), 30 000 (.fullClassicPaper) Диапазон: 0 или 1 000 –
ТЕХНИЧЕСКИ
Итерация, на которой кривая Cosine-Annealing для Position-LR достигает своего минимума. Если 0, это идентично T1 maxIterations. Если > 0, расписание идёт до этого значения и затем остаётся на уровне T4 positionLearningRateFinal постоянным. Это позволяет «расширенную фазу refinement» с минимальной, но постоянной скоростью обучения — медленно дорабатывает позиции без повторного затухания. .full делает именно это (расписание заканчивается на 20K, обучение идёт до 35K); в окрестности — 15K до 25K — почти ничего не меняется, 20K — лучший компромисс. Используется вместе с T51, чтобы также модифицировать не-Position-LR в расширенной фазе.
T51extendedPhaseLRDecay
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено, постоянные LR) Диапазон: 0 или 0.01 – 1.0
ТЕХНИЧЕСКИ
Минимальный множитель для не-Position-LR (масштаб, вращение, непрозрачность, SH) в «расширенной фазе» — то есть после достижения T50, когда Position-LR уже на уровне T4. Если 0.1, масштаб/вращение/непрозрачность/SH со своей стороны затухают по косинусу с 1.0 (= их стандартный LR) до 0.1× от их стандарта. Если 0.0 (по умолчанию), они остаются постоянными. Полное затухание до нуля даёт тот же результат, что и полное отсутствие затухания — поведение с затуханием выглядит «чище», но измеримо не лучше. Поэтому во всех Presets стоит 0 и в интерфейсе не регулируется.
T52adaptiveDensifyThreshold
ПОДРОБНОСТИ
По умолчанию: false Диапазон: boolean
ТЕХНИЧЕСКИ
Экспериментально: если true, приложение на каждом шаге Densification вычисляет p98 текущего распределения градиентов и использует его как динамический порог (ограниченный снизу минимум 0.5× от настроенного значения из T11, чтобы он не улетал слишком далеко). Гипотеза: автоматическая подстройка под текущую фазу сцены сделала бы Density-Control более устойчивым — например, в начале более строгий pruning, позже более мягкий, или наоборот. На практике количество Gaussian-примитивов резко обрушивается — Mass-Pruning, потому что p98 в первых итерациях экстремально высок и после этого почти ничего больше не превышает порог. Фиксированный порог уже хорошо откалиброван, динамическая подстройка вредит больше, чем помогает. T77 предлагает альтернативную адаптивную логику через rolling median, которая обходит эту проблему.
T53mergeAfterDensification
ПОДРОБНОСТИ
По умолчанию: false (инициализатор), true (.full, .classicBalanced, .fullClassicPaper) Диапазон: boolean
ТЕХНИЧЕСКИ
В конце фазы Densification (итерация T2) выполняется однократный проход Merge, который объединяет близко расположенные Gaussian-примитивы с похожим масштабом и цветом. Уменьшает количество Gaussian-примитивов обычно на 5–15 % без заметной потери качества. Смысл: после интенсивного клонирования возникают кластеры почти идентичных Gaussian-примитивов, не добавляющих ничего нового — слияние высвобождает ёмкость оптимизатора для других областей. Стандарт в Classic-Quality Presets. В MCMC не используется, потому что MCMC благодаря своей логике Relocation вообще не даёт таким кластерам возникнуть.
T54densifyPhase2FromIteration
ПОДРОБНОСТИ
По умолчанию: 0 (= отключено) Диапазон: 0 или T2 – T1
ТЕХНИЧЕСКИ
Экспериментально: позволяет вторую фазу Densification, которая после паузы Refinement на этой итерации начинается и идёт до T55. Гипотеза: после фазы Refinement аккумуляторы градиентов имеют более стабильные магнитуды и могут точнее определить, каким областям ещё нужны дополнительные Gaussian-примитивы. На практике вторая фаза Densification заканчивается каскадом вплоть до нуля Gaussian-примитивов — вместе с pruning'ом Refinement (T40) она полностью опустошает буфер. Поэтому во всех Presets стоит 0 и в интерфейсе не регулируется.
T55densifyPhase2UntilIteration
ПОДРОБНОСТИ
По умолчанию: 0 Диапазон: 0 или T54 – T1 Определено в:
ТЕХНИЧЕСКИ
Конец второй фазы Densification. Актуально только если T54 > 0. Оба поля вместе отключены.
Пост-обработка + Apple AI (T56–T60)
T56postTrainingCompactification
ПОДРОБНОСТИ
По умолчанию: true (во всех Production-пресетах), false (.quickTest, .preview) Диапазон: boolean
ТЕХНИЧЕСКИ
После завершения обучения Gaussians с sigmoid(opacity) < 0.01 безжалостно удаляются (они практически не вносят вклад в изображение). Уменьшает количество Gaussians в среднем на 58 % и размер экспортируемого файла на 55 % без заметной потери качества. По умолчанию активна в Production-пресетах — итоговый результат должен поставляться максимально компактным. В .quickTest отключена, поскольку диагностический прогон всё равно не экспортируется. В отличие от T42 midTrainingCompactificationIterations, компактификация здесь происходит только в самом конце — уточнение (refinement) может до тех пор использовать все Gaussians.
T57metalFXUpscaling
ПОДРОБНОСТИ
По умолчанию: false Диапазон: boolean
ТЕХНИЧЕСКИ
⚠ С 2026-07-18 отключено и не имеет никакого эффекта. Это поле относилось к переключателю „Viewport Scaling" (Off/MetalFX/Lanczos) в Inspector. Рендерер никогда его не читал: решение о блите принимается чисто геометрически (при супердискретизированном рендере ⇒ MPS-Lanczos-даунсемплинг для сглаживания краёв, иначе билинейный), а для пути MetalFX точки вызова вообще не существовало. Переключатель и два ложных сообщения, которые он порождал, удалены; подпись оверлея теперь называется „Sampling", а не „Scaling", и нигде в приложении масштабирование через MetalFX не выполняется. Само поле осталось, потому что конфигурация обучения сохраняется целиком — оно присутствует в каждой сохранённой сцене, в каждом пресете и в комментарии настроек уже экспортированных PLY; удаление поля привело бы к тому, что ключ молча выпадал бы при перезаписи и ломал этот обмен. По той же причине поле исключено из сравнения „Modified": старая сцена может нести значение true, и больше нет способа сбросить это через интерфейс. Ничего его не читает — не подключайте заново.
T58mpsLanczosScaling
ПОДРОБНОСТИ
По умолчанию: false Диапазон: boolean
ТЕХНИЧЕСКИ
⚠ С 2026-07-18 отключено и не имеет никакого эффекта — см. T57 metalFXUpscaling, там же объясняется, почему поле всё же должно сохраняться. Стоит явно указать на одно напрашивающееся заблуждение: приложение действительно использует MPS-Lanczos во Viewport, но управляется это исключительно геометрией — изображение, отрендеренное с супердискретизацией, уменьшается для сглаживания краёв. Это уменьшение масштаба, а не увеличение, и данное поле его никогда не запускало.
T59livePreviewInterval
ПОДРОБНОСТИ
По умолчанию: 50 (инициализатор; пресеты это поле не задают) Диапазон: 0 (выкл), 50, 250 или 1 000 в переключателе настроек
ТЕХНИЧЕСКИ
Как часто во время обучения 3D-просмотрщик обновляется текущими Gaussians. 50 = новый рендер каждые 50 итераций — достаточно, чтобы наблюдать прогресс, не замедляя обучение заметным образом. 0 = просмотрщик вообще не обновляется (фоновое обучение, максимальная скорость). При длительных прогонах MCMC имеет смысл выбрать 250 или 1 000, поскольку накладные расходы на обновление в сумме дают о себе знать. Особая роль: хотя поле относится к конфигурации обучения, оно является общесистемной настройкой приложения (Настройки → Обучение), а не частью рецепта обучения. Поэтому оно исключено из сравнения „Modified", сохраняется при смене пресета и с 2026-07-18 больше не считывается из файла при открытии сцены — раньше загруженная сцена молча заменяла частоту обновления пользователя частотой автора сцены, включая значение „Выкл", и не было второго места, откуда её можно было бы восстановить.
T60perceptualLossWeight
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено) Диапазон: 0 или 0.001 – 0.5
ТЕХНИЧЕСКИ
Вес перцептивного члена функции потерь (Multi-Scale-Blur-Feature-Matching). Улавливает структурное и текстурное сходство на более высоком уровне, чем L1+SSIM — типично там, где „попиксельная точность" менее важна, чем „выглядит реалистично". Во всех пресетах значение равно 0.0 (выкл). В интерфейсе оно настраивается через регулятор Perceptual Loss в разделе Inspector „Training", диапазон от 0 до 0,20 с шагом 0,01; при 0 приложение показывает „Off".
MCMC-денсификация (T61–T73)
T61densificationStrategy
ПОДРОБНОСТИ
По умолчанию: .classic (инициализатор + классические пресеты), .mcmc (все MCMC-пресеты + Scene-Class) Диапазон: .classic или .mcmc
ТЕХНИЧЕСКИ
Переключает между классической денсификацией (клонирование/разбиение/прунинг, Kerbl et al.~2023) и MCMC-денсификацией (Stochastic Gradient Langevin Dynamics с релокацией, Kheradmand et al.~NeurIPS 2024). При .classic используются T11–T16, при .mcmc — T62–T73. Осторожно при переключении: значения по умолчанию для Classic и MCMC откалиброваны совершенно по-разному — если переключить переключатель в Expert View, не загрузив подходящий пресет, есть риск получить массовое вымирание в стиле бага 1.4.3 (460 K → 5 за одну итерацию, потому что MCMC-OpacityReg со значением 0.01 убивает классические Opacity). Поэтому значения по умолчанию для MCMC-Init намеренно «смягчены» (все значения Reg равны 0.0).
T62mcmcMaxGaussians
ПОДРОБНОСТИ
По умолчанию: 150 000 (инициализатор + .fullMCMC + .mcmcBalanced), 100 000 (.mcmcPreview), 1 500 000 (.fullMCMCMip — вариант Mip-Splatting с 10-кратным бюджетом), 1.19 M (.renderPreset), 1.25 M (.outdoorPreset), 670 K (.indoorPreset) Диапазон: 0 (= «использовать ёмкость буфера») или 10 000 – 5 000 000 Определено в:
ТЕХНИЧЕСКИ
Жёсткий верхний предел количества гауссианов при стратегии MCMC. Число постепенно растёт со скоростью T70 mcmcGrowthRate (обычно 5 %) на каждом шаге релокации до достижения этого предела. 150 K — хорошее начальное значение — заметно больше, и качество сплатов разбавляется (слишком много мелких, избыточных гауссианов), заметно меньше — сцена остаётся недоденсифицированной. При очень крупных сценах (например, при облёте дроном с 1 545 фотографиями и 158 K SfM-init) 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) — слишком много, тогда сплаты «расплываются». Затухает по косинусоидальной кривой в течение обучения до T69 mcmcNoiseDecayEnd — к концу диапазона затухания шум фактически равен 0, и гауссианы сходятся.
T64mcmcOpacityRegWeight
ПОДРОБНОСТИ
По умолчанию: 0.0 (= отключено в значениях по умолчанию RadianceKit, в статье: 0.01) Диапазон: 0 или 0.001 – 0.05
ТЕХНИЧЕСКИ
MCMC-специфичный штраф L1 на Opacity. Значение по умолчанию из статьи — 0.01 (прижимает неиспользуемые гауссианы к нулю, делая их доступными для релокации). В RadianceKit результат заметно лучше без этой регуляризации. Причина: критерия прунинга, определённого через T68 mcmcDeadOpacityThreshold, достаточно самого по себе — дополнительный штраф L1 заставляет умирать и ценные гауссианы с низкой Opacity. Поэтому значение по умолчанию — 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. Отключено во всех MCMC-пресетах RadianceKit. Внимание как в T64: баг 1.4.3.
T66mcmcRelocationInterval
ПОДРОБНОСТИ
По умолчанию: 100 (инициализатор + все MCMC-пресеты, стандарт из статьи), 155 (P9 Outdoor) Диапазон: 50 – 500
ТЕХНИЧЕСКИ
Интервал итераций, с которым MCMC перемещает мёртвые гауссианы (sigmoid(opacity) < T68 mcmcDeadOpacityThreshold) в новые позиции. Более короткие интервалы (около 50) действуют слишком разрушительно, loss колеблется; заметно более длинные (около 200) лишают MCMC способности реагировать. 100 — правильное значение. Для сцен на улице оно немного выше — 155 — более длинные интервалы дают Adam больше времени, чтобы интегрировать вновь размещённые гауссианы, прежде чем следующее событие релокации снова окажет на них давление.
T67mcmcWarmupIterations
ПОДРОБНОСТИ
По умолчанию: 500 Диапазон: 100 – 5 000
ТЕХНИЧЕСКИ
Количество начальных итераций, в течение которых релокация MCMC ещё не происходит. Только после этого прогрева начинает работать логика релокации. Смысл: на первых итерациях значения Opacity ещё не устоялись — если начать релокацию сразу, гауссианы разместились бы в неправильных местах и их пришлось бы сразу перемещать снова, что разрушает момент Adam. Значение по умолчанию из статьи — 500. RadianceKit перенимает это значение, так как оно показало себя надёжным.
T68mcmcDeadOpacityThreshold
ПОДРОБНОСТИ
По умолчанию: 0.005 (инициализатор, стандарт из статьи), 0.01 (.fullMCMC и все MCMC-пресеты) Диапазон: 0.001 – 0.05
ТЕХНИЧЕСКИ
Порог sigmoid(Opacity), ниже которого гауссиан считается «мёртвым» и подлежит релокации. 0.01 — подходящее значение — 0.005 почти ничего не меняет, 0.02 хуже. Выше = более агрессивная релокация (перемещается больше гауссианов), ниже = осторожнее. 0.01 соответствует примерно «0,5 % визуальной видимости». P10 Indoor использует 0.0142.
T69mcmcNoiseDecayEnd
ПОДРОБНОСТИ
По умолчанию: 0 (инициализатор = «без затухания»), 160 000 (.fullMCMC = 80 % от 200K), 96 000 (.mcmcBalanced = 80 % от 120K), 40 000 (.mcmcPreview) Диапазон: 0 или 1 000 –
ТЕХНИЧЕСКИ
Итерация, на которой шум T63 mcmcNoiseScale полностью гасится до нуля (косинусоидальное затухание от итерации 0 до этой точки). 80 % от maxIterations — подходящее значение — это даёт 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. На шаге SGLD шум на каждый гауссиан гасится — сильно непрозрачные гауссианы (с положительным логитом) получают экспоненциально меньше шума, чем слабо непрозрачные. K = 100 — резкое значение, то есть переход от «полного шума» к «отсутствию шума» происходит очень быстро около Opacity 0.5. K = 100 — подходящее значение — меньшие значения (10–50) позволяют и сильно непрозрачным гауссианам «дрожать» (разрушает сошедшиеся гауссианы), большие (> 500) делают переход искусственно резким, и мёртвые гауссианы вообще перестают перемещаться.
T72mcmcCapMultiplier
ПОДРОБНОСТИ
По умолчанию: 3.0 (инициализатор + .fullMCMC), 2.0 (.mcmcPreview), 2.5 (.mcmcBalanced), 2.98 (P8 Render), 5.32 (P9 Outdoor), 1.76 (P10 Indoor) Диапазон: 0 (= отключено) или 1.0 – 10.0
ТЕХНИЧЕСКИ
Функция версии 1.4.5: адаптивное к сцене масштабирование предела. Если T73 mcmcAutoScaleByScene равно true, эффективный предел вычисляется как (ограничен ёмкостью буфера). Фон: при крупных сценах (например, 1 545-фото облёт дроном → 158 K SfM-init) T62 = 150 000 слишком мало — контроль плотности не смог бы вообще расти. С множителем 3.0 предел в этом примере масштабируется до 474 K (158 K × 3.0). Пресеты Scene-Class используют специфичные для сцены значения: экстерьер выигрывает от высокого множителя (5.32 → ~830 K предел при 156 K начальных точек), интерьер обходится 1.76 (стены насыщаются быстрее). Полное разрешение предела см. метод -.
T73mcmcAutoScaleByScene
ПОДРОБНОСТИ
По умолчанию: true (инициализатор + все MCMC-пресеты) Диапазон: boolean
ТЕХНИЧЕСКИ
Функция версии 1.4.5: главный переключатель для логики предела с учётом сцены (см. T72 +). Если false, используется исключительно T62 mcmcMaxGaussians в качестве предела (возврат к поведению версии 1.4.4). По умолчанию включено, потому что проблемы массового вымирания на крупных сценах из версии 1.4.3 иначе бы вернулись. Отключай вручную только если ты явно хочешь задать жёсткий предел — например, чтобы обучить вариант на 150 K, конечный размер которого предсказуем.
Mip-Splatting (T74–T76)
Статус: Mip-Splatting не принёс на практике прироста качества, а на некоторых сценах на открытом воздухе даже навредил. Поля остаются опциональными для экспериментов; во всех поставляемых Preset'ах Mip-Splatting отключён.
T74useMipSplatting
ПОДРОБНОСТИ
По умолчанию: false (все Production-Preset'ы), true (.fullMCMCMip — исследовательский Sibling) Диапазон: boolean
ТЕХНИЧЕСКИ
Активирует Mip-Splatting (Yu et al.~CVPR 2024): 3D-фильтр сглаживания + 2D-фильтр + компенсацию α, которая ограничивает частоту каждого Gaussian границей Найквиста для самой плотной частоты сэмплирования тренировочной камеры. Теоретическая цель: устранение алиасинга при рендеринге в масштабах вне тренировочного (0.5× или 2× от тренировочного разрешения). В шейдерах предобработки и обратной проекции активирован и функционально корректен. На практике же ожидаемый прирост качества не оправдался: при рендеринге в тренировочном разрешении практически ничего не меняется, а на сценах на открытом воздухе изображение даже становится хуже. Одно из объяснений: 3D-сглаживание работает против MCMC-relocation, как только в игру вступает большое число Gaussian. Поле остаётся доступным для собственных Multi-Scale-экспериментов.
T75mipSmoothing3DScale
ПОДРОБНОСТИ
По умолчанию: 0.2 (значение по умолчанию из статьи) Диапазон: 0.05 – 1.0
ТЕХНИЧЕСКИ
Параметр масштаба 3D-сглаживания (Yu et al.~§3.3, значение по умолчанию из статьи 0.2). Больше = больше сглаживания в мировом пространстве на каждый Gaussian (= больше подавления алиасинга, но и больше размытия на стандартном масштабе), меньше = резче, но более подвержено алиасингу. Учитывается только когда T74 useMipSplatting = true. Дальше не оптимизировался — уже со значением по умолчанию из статьи 0.2 Mip-Splatting не даёт прироста.
T76mipFilter2DVariance
ПОДРОБНОСТИ
По умолчанию: 0.3 (= точно прежнее поведение) Диапазон: 0.1 – 1.0
ТЕХНИЧЕСКИ
Дисперсия 2D-Mip-фильтра, которая прибавляется к диагонали Σ_2D (сама дисперсия, не в квадрате). 0.3 — это ровно то значение, что прежде было жёстко задано в ядре. Если T74 useMipSplatting = false, ядро полностью игнорирует это значение и использует жёстко закодированное 0.3 — так что прежнее поведение гарантированно не меняется. Если же оно установлено, то используется значение, заданное здесь. Остаётся в каталоге полей для Mip-Sweeps.
Адаптивная денсификация (T77–T79)
T77adaptiveDensification
ПОДРОБНОСТИ
Default: false Range: boolean
ТЕХНИЧЕСКИ
Rolling-Median-Tracker как альтернатива фиксированному T11 densifyGradThreshold. Если true, в каждом Densify-Step текущий порог перезаписывается значением median(последние N avgGrad-Samples) × T79 adaptiveDensifyMultiplier. N = T78 adaptiveWindow. Строже, чем p98-вариант из T52, который там запускает Mass-Pruning: медиана, умноженная на 2, в установившемся состоянии находится примерно на уровне p70–p80 распределения градиентов. Само по себе включённое поле не даёт прироста качества; вместе с curriculum (см. T80/T81) — да, там прирост даёт curriculum, а это поле скорее обеспечивает стабильность. Элемента управления для этого нет: поле во всех Presets выключено и задаётся только через отредактированный файл Preset.
T78adaptiveWindow
ПОДРОБНОСТИ
Default: 1 000 Range: 100 – 10 000 Defined in:
ТЕХНИЧЕСКИ
Rolling-Median-Window в Densification-Events (НЕ итерациях — каждый шаг T13 densifyInterval даёт один Sample). По умолчанию 1 000 — это означает, что последние 100 000 итераций обучения вносят вклад в медиану, то есть обычно вся история обучения вплоть до этого момента. Ранняя фаза (до T78 Samples): Tracker возвращает nil → откат к фиксированному порогу T11. Актуально только если.
T79adaptiveDensifyMultiplier
ПОДРОБНОСТИ
Default: 2.0 Range: 1.0 – 4.0
ТЕХНИЧЕСКИ
Множитель для Rolling-Median при вычислении адаптивного порога. Значение по умолчанию 2.0 примерно соответствует p70–p80 типичного распределения градиентов. Ниже = более агрессивный рост (больше клонов), выше = строже (меньше клонов). В диапазоне 1.5–3.0 лучшим значением является 2.0. Актуально только если.
Curriculum (T80–T81)
T80curriculumResolutionRamp
ПОДРОБНОСТИ
По умолчанию: false Диапазон: boolean
ТЕХНИЧЕСКИ
Разрешение обучения начинается с 0.5× и переключается при T50 positionLRScheduleEndIteration / 2 (или T1 maxIterations / 2, если T50 не задан) на T22 trainingRenderScale. Перекрывает T23 resolutionWarmupScale, если активировано. Из двух адаптивных дополнений (см. T77) именно этот curriculum приносит настоящий прирост качества — постепенное повышение разрешения даёт приложению время найти грубую геометрию на более низком разрешении, прежде чем оно перейдёт к тонкой детальной работе. В интерфейсе не настраивается — только через отредактированный файл пресета, и тогда разумно вместе с T81.
T81curriculumSHProgression
ПОДРОБНОСТИ
По умолчанию: false Диапазон: boolean
ТЕХНИЧЕСКИ
Перекрывает T21 shDegreeUpgradeIterations значением [maxIter/4, maxIter/2, maxIter*3/4], то есть распределяет повышения степени SH равномерно по времени обучения вместо того, чтобы концентрировать их в начале. Гипотеза: стабильная геометрия устанавливается раньше взрывного роста цветовой детализации, что позволяет точнее позиционировать зависящие от направления обзора эффекты блеска. Вместе с T77 это на некоторых сценах даёт выигрыш; но несёт его именно это поле, одного T77 недостаточно. В интерфейсе не настраивается — только через отредактированный файл пресета.
Статические пресеты (TP1–TP9)
Здесь приведены только структурные отличия от Initializer-Default. Полное маркетинговое описание одиннадцати UI-пресетов P1–P11 ты найдёшь в главе 7.
TP1.preview
ПОДРОБНОСТИ
Диагностический/предпросмотровый пресет для систем ≥ 10 GB RAM. Overrides относительно Initializer:
maxIterations30 000 → 5 000densifyUntilIteration15 000 → 3 500 (70 % от maxIter)positionLearningRateFinal1.6e-6 → 1.6e-5 (в 10× выше, менее агрессивный decay)shDCLearningRate,shRestLearningRate,opacityLearningRate,scaleLearningRate,rotationLearningRateкаждый в 2×opacityResetInterval3 000 → 100 000 (фактически отключено — reset разрушает короткие тренировки)shDegreeUpgradeIterations[1K, 2K, 3K]→[1K, 2K](Degree 3 не сходится за такие короткие прогоны)trainingRenderScale1.0 → 0.5
TP2.full
ПОДРОБНОСТИ
Production-Quality Classic. Overrides:
maxIterations30 000 → 35 000 (выше есть риск перетренировки: больше Gaussians без прироста качества)densifyUntilIteration15 000 → 5 000 (проверенное значение; останавливать позже — хуже)- Все LR в 2×
positionLearningRateFinal1.6e-6 → 1.6e-5 (в 10× выше, чем Paper-Default)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 (уже Initializer-Default для.full)
TP3.fullClassicPaper
ПОДРОБНОСТИ
Верная оригинальной статье Classic-вариация TP2. Overrides относительно TP2:
maxIterations35 000 → 30 000 (стандарт статьи)densifyUntilIteration5 000 → 15 000 (в статье: 50 % от maxIter)positionLearningRateFinal1.6e-5 → 1.6e-6 (Paper-Default)opacityLearningRate,scaleLearningRate,rotationLearningRateвозвращены к Paper-Defaults (0.05, 0.005, 0.001)densifyGradThreshold1.1e-6 → 2e-7 (откалибровано под ~1–2 млн Gs на Bicycle)densifyInterval200 → 100 (Paper)pruneOpacityThreshold0.001 → 0.005 (Paper-Default)opacityResetInterval100 000 → 3 000 (Paper §5.2, рискованно — в настройке RadianceKit стоит качества)opacityDecayFactor0.9995 → 0.0 (в статье нет decay)positionLRScheduleEndIteration20 000 → 30 000 (cosine доходит до 100 % от maxIter)
TP4.fullMCMC
ПОДРОБНОСТИ
Production-Quality MCMC. Overrides относительно Initializer:
maxIterations30 000 → 200 000 (MCMC требует примерно в 5× больше итераций, чем Classic)densifyUntilIteration15 000 → 160 000 (80 % от maxIter)positionLearningRateFinal1.6e-6 → 1.6e-5- LR-Schedule как в TP2 (всё в 2×)
ssimWeight0.2 → 0.05 (MCMC требуется более сильный L1-сигнал)shDegreeUpgradeIterations[1K, 2K, 3K]→[2K, 5K, 8K]densificationStrategy.classic→.mcmcmcmcMaxGaussians150 000 (уже в Initializer, в пресете подтверждено)mcmcNoiseScale5e-5 (значение из статьи, проверено)mcmcDeadOpacityThreshold0.005 → 0.01mcmcNoiseDecayEnd0 → 160 000 (80 % от maxIter)mcmcCapMultiplier3.0 (уже в Initializer)mcmcAutoScaleByScenetrue (уже в Initializer)opacityResetInterval3 000 → 200 000 (фактически отключено, MCMC использует Reloc вместо Reset)
TP5.fullMCMCMip
ПОДРОБНОСТИ
Mip-Splatting-вариант TP4 с Gaussian-бюджетом оригинальной статьи. Overrides относительно TP4:
mcmcMaxGaussians150 000 → 1 500 000 (10×, масштаб статьи)useMipSplattingfalse → true (Mip включён)
TP6.classicBalanced
ПОДРОБНОСТИ
Mid-Tier Classic. Overrides относительно TP2:
maxIterations35 000 → 20 000 (даёт практически тот же результат, что и 30 000, при заметно более коротком ожидании)positionLRScheduleEndIteration20 000 → 0 (cosine доходит до maxIter = 20K, без удлинённой фазы)
TP7.mcmcPreview
ПОДРОБНОСТИ
MCMC-диагностика. Overrides относительно TP4:
maxIterations200 000 → 60 000densifyUntilIteration160 000 → 48 000 (80 %)mcmcMaxGaussians150 000 → 100 000mcmcNoiseDecayEnd160 000 → 40 000mcmcCapMultiplier3.0 → 2.0 (Preview масштабируется сдержаннее)
TP8.mcmcBalanced
ПОДРОБНОСТИ
Mid-Tier MCMC. Overrides относительно TP4:
maxIterations200 000 → 120 000densifyUntilIteration160 000 → 96 000 (80 %)mcmcNoiseDecayEnd160 000 → 96 000 (80 %)mcmcCapMultiplier3.0 → 2.5 (между Preview 2.0 и Full 3.0)
TP9.quickTest
ПОДРОБНОСТИ
Чистый функциональный тест. Overrides относительно Initializer:
maxIterations30 000 → 1 000densifyUntilIteration15 000 → 500densifyGradThreshold2e-6 → 4e-6 (откалибровано под 0.25× разрешение)densifyInterval100 → 50opacityResetInterval3 000 → 100 000 (отключено, так как слишком коротко)trainingRenderScale1.0 → 0.25
Как приложение определяет предел числа Gaussians
Обязательный ответ на вопрос «сколько Gaussians максимум может нарастить MCMC?». В расчёт входят три величины: заданное значение из T62 mcmcMaxGaussians, количество SfM-точек инициализации твоей сцены и заранее зарезервированная ёмкость буфера. Приложение считает в следующем порядке:
+ Исходное значение — T62. Если оно равно 0, приложение подставляет 150 000 — этот защитный минимум предотвращает инцидент массового вымирания из 1.4.3. + Если включён T73 mcmcAutoScaleByScene и T72 mcmcCapMultiplier больше 0, приложение сравнивает исходное значение с «точки инициализации × T72» и берёт большее из двух значений. + Наконец, оно ограничивает результат ёмкостью буфера.
Пример: Bicycle (Mip-NeRF 360, 194 фото-кадра) → SfM-инициализация ~156 тыс. точек, T62 = 150 000, T72 = 5.32, авто-масштабирование включено, ёмкость буфера 8 млн. 156 тыс. × 5,32 даёт 830 тыс., это больше, чем 150 000, и меньше, чем 8 млн — то есть эффективный предел составляет 830 тыс. Именно этой границы придерживается MCMC-relocation.
Вычисляет реальное максимальное число сплатов при MCMC. Приложение берёт твою настройку «Max Gaussians», смотрит, сколько точек у твоей сцены изначально, и масштабирует с помощью множителя, если включено «Auto-scale by scene». Так предел подстраивается под сцену, вместо того чтобы навязывать одно и то же значение и маленькой, и огромной сцене. Тебе для этого ничего не нужно делать — приложение само рассчитывает это при запуске тренировки.
Какое поле для чего? (Шпаргалка)
| Цель | Поля для настройки |
|---|---|
| Больше деталей вдали | T62 mcmcMaxGaussians выше, T72 mcmcCapMultiplier 5+ |
| Больше деталей в целом (Classic) | T1 maxIterations выше (≤ 40K), T2 densifyUntilIteration ≤ 14 % от T1 |
| Уменьшить «плавающие» артефакты при облёте дроном | 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 «Interior» (, 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 и множителем > 5 возникает разрешённый лимит в миллионы Gaussians. На Mac с 36 ГБ ОЗУ возможен OOM. Значение 5.32 для уличных сцен работает только потому, что соответствующая эталонная сцена содержит около 156 K исходных точек → лимит 830 K. - T39 testViewIndices — ручная установка в файле пресета может сделать измерение качества непригодным (все индексы > N → нет holdout-кадров). Оставь список пустым. - T64 mcmcOpacityRegWeight и T65 mcmcScaleRegWeight — В 1.4.3-Beta были установлены на 0.01, что привело к массовому вымиранию (460 K → 5 Gaussians за одну итерацию). Начиная с 1.4.4 зафиксированы на 0.0, но ручное увеличение может воспроизвести проблему. - T15 opacityResetInterval — если значение не 100 000+ (фактически выключено), а обучение короче 10 000 итераций, сброс разрушает конвергенцию. Поэтому в .preview установлено значение 100 000, несмотря на maxIterations = 5 000. - T54/T55 densifyPhase2* — Вторая фаза densification заканчивается каскадом вплоть до нуля Gaussians. Оставь оба значения на 0. - T74 useMipSplatting — не даёт прироста качества и на некоторых уличных сценах может даже ухудшить качество изображения. По умолчанию выключено, включать только для экспериментов.
Если поле находится в этом списке и ты хочешь его изменить, сделай предварительно резервную копию текущего пресета (экспорт в JSON) и подумай, сможешь ли ты воспроизводимо измерить результат — иначе потом ты не будешь знать, привело ли твоё изменение к улучшению или ухудшению.