Настройка частоты кадров для сцен 3DGS в UE5
Шаг один: поиск узкого места
Прежде чем менять параметры, убедитесь, что падение частоты кадров вызвано именно 3DGS. Освещение, тени, постобработка, обычные модели и логика Blueprint в сцене тоже могут быть настоящим узким местом, и тогда никакая настройка параметров LCC не даст улучшения.
Убедитесь, что узкое место связано с 3DGS
Скройте или удалите из сцены всё, кроме 3DGS, и сравните частоту кадров:
- Запишите текущую частоту кадров как базовую (
stat fpsилиstat unit). - Скройте LCC Actor, оставьте остальную сцену и запишите частоту кадров.
- Сделайте наоборот: оставьте только LCC Actor, скройте или удалите остальные модели, источники света, Post Process Volume и UI, затем запишите частоту кадров.
Когда в исходной сцене много элементов и скрывать их по одному неудобно, чище создать пустой уровень с одним LCC Actor, который загружает те же данные, и записать частоту кадров с того же угла обзора. Это исключает любые помехи от исходной сцены и даёт базовый показатель производительности самого 3DGS.
Сравните три набора измерений:
| Результат | Вывод |
|---|---|
| Частота кадров остаётся низкой и с одним LCC | Узкое место — 3DGS, продолжайте по шагам ниже |
| После скрытия LCC частота кадров заметно не восстанавливается | Узкое место в другой части сцены, сначала оптимизируйте её |
| Каждое по отдельности в норме и низко только вместе | Сумма превышает бюджет оборудования, снижайте нагрузку с обеих сторон или уменьшите разрешение |
Сначала исключите стандартные элементы сцены движка
Новый уровень поставляется с набором стандартных Actor, и часть из них обходится недёшево, поэтому их легко принять за стоимость 3DGS. Самый характерный — VolumetricCloud: он на каждом кадре выполняет объёмную трассировку и продолжает расходовать GPU, даже когда в кадре видна лишь небольшая полоска неба.
Если проекту не нужны эффекты неба, удалите с уровня следующие Actor:
| Actor | Описание |
|---|---|
| VolumetricCloud | Объёмные облака, заметная стоимость GPU, в чистой сцене 3DGS обычно не нужны |
| ExponentialHeightFog | Высотный туман, который поверх 3DGS ещё и влияет на внешний вид |
| SkyAtmosphere | Атмосферное рассеивание, оставляйте только когда нужно небо |
Данные 3DGS обычно уже содержат информацию об окружении, поэтому в большинстве случаев эти эффекты не нужны. После удаления измерьте частоту кадров заново и уже потом решайте, нужно ли менять параметры LCC.
Держите условия тестирования неизменными, иначе измерения несравнимы: та же карта и точка старта, то же положение или траектория камеры, то же разрешение и Screen Percentage, то же состояние Lumen, виртуальных карт теней, постобработки и SceneCapture. Сначала выполните прогревочный проход и только потом записывайте измерения, чтобы первая компиляция шейдеров и первое чтение с диска не смешивались с установившейся частотой кадров. Меняйте не больше одной категории настроек за раз.
Часто используемые команды наблюдения:
stat fps // Frame rate
stat unit // The four frame times: Frame / Game / Draw / GPU
stat gpu // GPU Pass breakdown
stat rhi // Draw calls, primitives, video memory
ProfileGPU // Per-frame GPU Pass detail
Когда 3DGS подтверждён, работайте со статистикой LCC
Откройте панель статистики через Actions > Stats в панели Actor или введите в консоли stat xgrids.

Просмотр статистики производительности LCC в реальном времени через stat xgrids
Подробности по параметрам см. в Параметрах производительности: статистика
Смотрите прежде всего на Current Render Main Splats и Current Render Nodes: прямая причина большинства проблем с производительностью — слишком много точек, рендерящихся на экране одновременно.
Одновременно включите визуализацию LOD
Читая статистику, включите Actions > Debug Node Bound в панели Actor, чтобы визуализировать Level узлов и сразу увидеть распределение LOD в текущем виде. Чем теплее цвет, тем ниже Level и выше детализация.
Смысл оптимизации — сократить количество точек на экране настолько, насколько это допускает внешний вид, обращая внимание на то, как далеко простирается Level 0:
- Как далеко в кадре уходят области тёплых цветов? Действительно ли на этой дистанции нужны данные максимальной точности?
- Если переход на более грубые Level произойдёт раньше, заметна ли потеря во внешнем виде?
В большинстве сцен Level 0 действует намного дальше, чем реально нужно, и более ранний переход на грубые Level сразу снижает количество точек — это самый заметный по отдаче способ из всех, что обменивают качество изображения на производительность. Убедившись, что запас есть, сначала попробуйте растеризацию Tiled из следующего раздела, а затем переходите к шагу два и настройке Level Factor.
Перед настройкой параметров: попробуйте растеризацию Tiled [экспериментально, редакция Pro, только конвейер LCC2]
Все последующие шаги обменивают качество изображения на производительность. Этот — нет: изменение Rasterizer у Actor с Pipeline на Tiled оставляет визуальный результат неизменным. Несколько минут на пробу стоят того: если это помогает, дальше потребуется меньше компромиссов по качеству.
Меняется одно свойство, никакие другие параметры подстраивать не нужно:
LCC2Component->SetRasterizer(ELCC2Rasterizer::Tiled);
Это экспериментальный путь, и выигрыш не гарантирован: он заметен на изображениях с высокой плотностью splat и сильным экранным перекрытием, а на разреженных изображениях или когда узкое место изначально не в сортировке и заполнении пикселей, изменений может не быть. Поэтому после изменения обязательно измерьте: сравните время кадра GPU до и после через stat unit с одного и того же угла обзора. Если оно не снизилось, узкое место в другом — верните Pipeline и продолжайте по следующим шагам.
В трёх случаях этот шаг бессмысленен: загружены данные .lcc, используется режим облака точек, App Key не зарегистрирован (происходит автоматический откат к Pipeline). Область применения и поведение при откате см. в Растеризации Tiled.
Учтите также, что Tiled снижает стоимость этапа рендеринга, а объём работы по загрузке, обходу и выгрузке в видеопамять не меняется, поэтому при узком месте на стороне загрузки он не поможет.
Шаг два: настройка LOD
Это шаг с самой заметной отдачей. В большинстве сцен Level 0 действует далеко за пределами реально нужного, и более ранний переход на грубые Level сразу снижает количество точек на экране, причём внешний вид чаще всего меняется незаметно. Выполните этот шаг первым и только потом рассматривайте остальные способы.
У LOD три независимых регулятора (Level Factor, Start Level, End Level)

Настройка Level Factor, Start Level и End Level
2.1 Сначала разберитесь, как действует Level Factor
Конвейеры выбирают Level по разным механизмам, поэтому Level Factor действует тоже по-разному, но направление одинаково: чем больше значение, тем раньше узлы переходят на менее детальные Level.
| Конвейер | Основа выбора Level | Что делает Level Factor |
|---|---|---|
| LCC | Глобальная таблица дистанций RangeForLevel | Делит всю таблицу дистанций на это значение |
| LCC2 | Экранная погрешность (SSE) | Делит вычисленную SSE на это значение, и уточнение прекращается, когда погрешность становится достаточно малой |
Конвейер LCC2: экранная погрешность
LCC2 не использует RangeForLevel, а вычисляет для каждого узла экранную погрешность: сколько пикселей занимает геометрическая погрешность самого узла при проекции на экран. Если погрешность превышает порог, происходит уточнение до более детальных дочерних узлов, иначе выбор остаётся на текущем Level.
На эту погрешность одновременно влияют дистанция узла, угол обзора и разрешение экрана, поэтому один и тот же Level Factor при разных разрешениях или FOV даёт разную фактическую дистанцию перехода. Это также значит, что распределение LOD в LCC2 нельзя рассчитать заранее по таблице дистанций и его можно наблюдать только на практике через Debug Node Bound из раздела 2.5.
Настраивается он так же, как в конвейере LCC, поэтому сразу переходите к тестовой лестнице из раздела 2.2.
Конвейер LCC: таблица дистанций
Level Factor делит глобальный массив RangeForLevel на своё значение. Чем больше значение, тем короче дистанция действия каждого Level и тем раньше узлы переходят на менее детальный Level.
Значения RangeForLevel по умолчанию (11 пунктов, ProjectSettings > Plugins > LCC4Unreal > Level):
Level: 0 1 2 3 4 5 6 7 8 9 10
meters: 15 50 80 110 140 170 190 220 250 280 350
Фактические дистанции действия после деления на Level Factor (в метрах, нецелые значения показаны округлённо):
| Level Factor | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.0 (по умолчанию) | 15 | 50 | 80 | 110 | 140 | 170 | 190 | 220 | 250 | 280 | 350 |
| 1.25 | 12 | 40 | 64 | 88 | 112 | 136 | 152 | 176 | 200 | 224 | 280 |
| 1.5 | 10 | 33 | 53 | 73 | 93 | 113 | 127 | 147 | 167 | 187 | 233 |
| 2.0 | 7.5 | 25 | 40 | 55 | 70 | 85 | 95 | 110 | 125 | 140 | 175 |
Как пользоваться таблицей: при Level Factor = 2 максимальная детализация раньше действовала в пределах 15 метров, а теперь только в пределах 7,5 метра. Это гораздо точнее формулировки «вдвое меньше детализации»: меняется дистанция действия каждого Level, а не доля точек.
Точный способ сравнения Level с дистанциями (верхняя или нижняя граница, открытый или закрытый интервал) относится к внутренней реализации; таблица выше нужна для оценки масштаба изменений, а фактическое распределение Level подтверждайте через Debug Node Bound из раздела 2.5. Эта таблица применима только к конвейеру LCC.
За последним пунктом RangeForLevel узел просто использует самый грубый доступный ему Level, поэтому случая, когда Level не найден, не бывает. Увеличение Max Distance свыше 350 метров не требует правки этой таблицы.

Настройка массива дистанций Range For Level в настройках проекта
2.2 Level Factor
Диапазон и значение по умолчанию см. в Параметрах производительности: Level Factor
Это предпочтительный регулятор LOD, потому что он действует постепенно и не срезает целый уровень детализации сразу.
Тестовая лестница:
1.0 → 1.25 → 1.5 → 2.0
Проверяйте в первую очередь: контуры, тонкие линии, мелкие объекты, детали земли и зоны перехода между Level. Именно там раньше всего проявляются нехватка детализации и скачки LOD.

Изменения LOD после настройки Level Factor
2.3 Start Level
Диапазон и значение по умолчанию см. в Параметрах производительности: Start Level
Его увеличение полностью пропускает Level с самыми низкими номерами (самые детальные):
0 → 1 → 2
Это намного агрессивнее небольшой правки Level Factor: здесь отбрасываются целые уровни, а не масштабируются дистанции. Используйте только при выполнении двух условий одновременно: stat xgrids показывает, что Level0 Splats действительно является основной статьёй затрат, и более грубое качество вблизи допустимо. Возвращайте 0, как только передний план заметно размывается.

Пропуск детальных уровней после увеличения Start Level
2.4 End Level (обычно не меняют)
Диапазон и значение по умолчанию см. в Параметрах производительности: End Level
Его уменьшение ограничивает самый грубый доступный Level: более грубые Level из данных не используются, дальнее содержимое может оставаться только на End Level, и точек рендерится больше, чем нужно. Это не кнопка ускорения: держите значение по умолчанию, пока структура Level в данных не изучена.
Должно выполняться Start Level <= End Level, и Setter это за вас не проверяет.

Ограничение грубых уровней после настройки End Level
2.5 Проверка через Debug Node Bound
Actions > Debug Node Bound в панели Actor визуализирует границы узлов и их Level. Последовательность цветов: красный, оранжевый, жёлтый, зелёный, синий, фиолетовый, где красный — самый низкий Level (максимальная детализация), а белый обозначает самый высокий Level (минимальную детализацию).
После изменения параметров LOD проверьте через него: остаётся ли передний план красным или оранжевым (высокая детализация), плавно ли даль переходит в холодные цвета и нет ли области, которая на одной и той же дистанции постоянно переключается между Level.

Проверка распределения LOD через Debug Node Bound
Что проверять после настройки LOD
- Снижается ли количество узлов и количество splat;
- Не становится ли передний план грубым слишком рано;
- Нет ли заметных скачков LOD при движении камеры;
Шаг три: максимальная дистанция рендеринга
Диапазон и значение по умолчанию см. в Параметрах производительности: Max Distance(m)

Настройка максимальной дистанции рендеринга Max Distance
Чем это отличается от LOD
Max Distance полностью отсекает данные за пределами дистанции и сокращает рендерящуюся область пространства; LOD снижает точность внутри этой области. Они дополняют друг друга: используйте его, чтобы сузить область дальше, если после настройки LOD нагрузка сохраняется.
Он может сократить количество узлов-кандидатов вместе с последующей работой по обходу, загрузке, выгрузке в видеопамять, сортировке и заполнению, но насколько именно сократит, зависит от реализации и данных, поэтому проверяйте по фактической статистике и не рассчитывайте на фиксированную долю выигрыша.
Сначала установите флажок, иначе изменения не подействуют
У каждого параметра в категории Performance слева есть флажок. Пока флажок снят, значение в поле не действует, и во время выполнения используется встроенное значение по умолчанию плагина. Если изменение ничего не даёт, сначала проверьте это.
Порядок настройки дистанции
- Встаньте в том месте сцены, откуда данные модели должны быть видны на наибольшем расстоянии, и измерьте реально нужную дистанцию.
- Установите флажок слева от параметра.
- Задайте «фактическую максимальную дистанцию видимости + необходимый запас».
- Сужайте пошагово, не опускаясь сразу до очень малого значения:
300 m (default) → 225 m → 150 m → fine-tune to the actual project distance
Выше приведена тестовая лестница, а не рекомендуемое значение. Разумные значения сильно различаются для помещений, кварталов, крупных сцен и вида с воздуха, поэтому измеряйте под конкретный проект.

Изменение области рендеринга после настройки Max Distance
Что проверять после настройки дистанции
- Снижаются ли
Current Render NodesиCurrent Render Splats; - Снижаются ли GPU ms или Traversal Time;
- Не исчезает ли содержимое резко при подходе к дальней границе;
- Не становятся ли незагруженные области заметнее при быстром перемещении;
Шаг четыре: жёсткий предел количества точек
Диапазон и значение по умолчанию см. в Параметрах производительности: Max Splat Num
Max Distance управляет областью пространства, но плотность данных внутри одной и той же области может различаться очень сильно. Max Splat Num задаёт верхний предел нагрузки на кадр и не даёт количеству точек резко вырасти при входе в область высокой плотности. Он дополняет LOD и дистанцию и не заменяет ни то, ни другое.
Учтите, что слишком большие значения автоматически ограничиваются объёмом, который GPU способен отрендерить за кадр: вытягивание значения в панели до предела не превышает возможности оборудования и лишь делает этот предел бесполезным. Чтобы он действительно работал, задайте значение ниже фактического количества точек в текущем виде.

Настройка предела количества точек на кадр Max Splat Num
Порядок настройки предела количества точек
- Установите флажок слева от параметра.
- Снижайте значение пропорционально начиная со значения по умолчанию, единица измерения — 10 000:
3000 → 2250 → 1500 → 1000
- После каждого снижения смотрите результат в области высокой плотности, а не только на открытых участках.

Изменение количества точек и изображения после настройки Max Splat Num
Что проверять после настройки предела точек
- Снижаются ли GPU ms и
Current Render Splatsвместе с пределом; - Не появляются ли локальное разрежение, мерцание или разрывы прозрачных структур.
Если после снижения предела ни количество точек, ни GPU ms не изменились, значит текущий вид этого предела не достигает и он не является текущим узким местом — вернитесь к шагу один и найдите его заново.
Шаг пять: снижение стоимости заполнения пикселей
5.1 SplatScale
Подробности по параметру см. в Визуальных настройках: SplatScale
Уменьшение сокращает площадь экрана, покрываемую одним splat, и тем самым уменьшает наложение прозрачных слоёв.
Как делать: снижайте значение небольшими шагами от текущего качественного значения и проверяйте результат на высоком разрешении, вблизи и по контурам объектов. Чрезмерное снижение приводит к дырам в поверхностях или заметному их истончению.

Настройка SplatScale для уменьшения площади экрана, покрываемой гауссовыми точками
5.2 Small Splat Threshold (px) (только конвейер LCC2)
Диапазон и значение по умолчанию см. в Параметрах производительности: Small Splat Threshold (px)
Проверяйте его сразу через CVar, перезапуск не нужен:
r.LCC2.SmallSplatThreshold 0
r.LCC2.SmallSplatThreshold 0.5
r.LCC2.SmallSplatThreshold 1
Чем выше значение, тем больше потенциальный выигрыш и тем заметнее зернистость дальнего плана. Повышайте его дальше только тогда, когда GPU или расчёт SH действительно являются узким местом; если в самих данных SH нет, выигрыш от пропуска расчёта SH ограничен.

Настройка пиксельного порога Small Splat Threshold
5.3 Quad Extent Threshold (только конвейер LCC2)
Диапазон и значение по умолчанию см. в Параметрах производительности: Quad Extent Threshold
Увеличение этого значения даёт более компактные квады и уменьшает overdraw, но может обрезать полупрозрачные края.
r.LCC2.QuadExtentThreshold 0.006 → 0.008 → 0.01
Откатывайте изменение, когда контуры становятся жёстче, края пропадают или форма splat выглядит неправильно.

Настройка Quad Extent Threshold для управления размером квада splat
5.4 Frustum Cull Margin (только конвейер LCC2)
Диапазон и значение по умолчанию см. в Параметрах производительности: Frustum Cull Margin
Он управляет отступом при отсечении, а не пределом количества точек.
Пробуйте снижать его к 1.0 небольшими шагами только при условии, что у края экрана нет эффекта выскакивания:
r.LCC2.FrustumMargin 1.2 → 1.1 → 1.0
Если при быстром вращении камеры содержимое у края мигает и пропадает, значение снижено слишком сильно.

Настройка отступа отсечения по пирамиде видимости Frustum Cull Margin
5.5 Сглаживание
Стоимость сглаживания на GPU не мала, и TSR особенно заметен. Когда в сцене есть только 3DGS, без обычных мешей и UI, установка соответствующей настройки в None обычно почти не теряет качества изображения и даёт существенный выигрыш в частоте кадров.
Метод по умолчанию для каждого конвейера и связанные компромиссы см. в Параметрах производительности: методы сглаживания.

Настройка метода сглаживания для каждого конвейера LCC
Шаг шесть: отключение ненужных возможностей
Отдача на этом шаге понятна, но у каждого пункта есть функциональная цена: проверяйте по пунктам, действительно ли проекту это не нужно, вместо того чтобы отключать всё подряд.
| Возможность | Конвейер | Когда можно отключить | Побочный эффект |
|---|---|---|---|
ReceiveShadows | Только LCC | Приём теней не нужен | Приём теней теряется |
LightMode = Lit | Общий | Цвета самих данных уже дают нужный вид либо освещение сцены не требуется | Освещение сцены больше не влияет на LCC |
UseShcoef | Общий | Достаточно базового цвета и внешний вид приемлем | Теряется зависящее от вида изменение цвета |
SingleLayerWater Support | Только LCC2 | Однослойная вода не используется | 3DGS не может корректно участвовать в перекрытии и преломлении воды |
EnableCollision | Общий | Сцене не нужны коллизии | Коллизий нет, и области навигации создать нельзя |
Подробное описание каждой возможности см. в Визуальных настройках и Параметрах производительности.
Шаг семь: сортировка и видеопамять
Сортировка прозрачности и управление видеопамятью рассматриваются по конвейерам: Sort Factor и дополнительная предзагрузка есть только в LCC1, а бюджет видеопамяти GPU — только в LCC2.
7.1 Sort Factor (только конвейер LCC)
Диапазон и значение по умолчанию см. в Параметрах производительности: Sort Factor
Он применяется к глобальной таблице SortFrequencyForLevel и управляет тем, как часто пересортируются узлы каждого Level. Чем больше значение, тем меньше сортировок и выше производительность, но порядок прозрачности обновляется медленнее после изменения камеры или узлов, из-за чего возможны кратковременные ошибки взаимного проникновения.

Настройка Sort Factor для изменения частоты сортировки LCCActor

Настройка Sort Frequency для каждого уровня LOD
7.2 Дополнительные предзагружаемые узлы (только конвейер LCC)
Диапазон и значение по умолчанию см. в Параметрах производительности: Add Extra Preload Nodes
Их задача — уменьшить дыры у края экрана при быстром вращении, ценой увеличения работы с узлами.
У этого пункта два уровня состояния, и его легко понять неверно:
- Пока флажок слева снят, происходит откат к внутреннему значению по умолчанию, поэтому фактический результат — всё равно включено;
- Чтобы действительно отключить, сначала установите флажок, а затем задайте значение «выключено».
Отключайте его только тогда, когда статистика показывает, что количество узлов и предзагрузка действительно создают заметную нагрузку, и проект допускает дыры у края при быстрых поворотах. Как только появляются дыры, восстанавливайте настройку — не маскируйте неготовность данных увеличением числа потоков.

Настройка дополнительных предзагружаемых узлов для уменьшения дыр при быстрых поворотах
7.3 LCC2 GPU Memory Budget (только конвейер LCC2)
Диапазон и значение по умолчанию см. в Параметрах производительности: LCC2 GPU Memory Budget (MB)

Настройка бюджета видеопамяти LCC2 GPU Memory Budget
Он учитывает только данные положения, цвета и сферических гармоник одной модели LCC2 и действует только для .lcc2, где узлы можно подкачивать и выгружать. Одиночные форматы (.sog / .spz / .ply) должны находиться в памяти целиком, и их ёмкость определяется предельным размером Buffer платформы и фактически доступной видеопамятью; изменение этого значения на них не влияет.
Увеличение бюджета может помочь только в следующих случаях:
- У GPU ещё достаточно свободной видеопамяти;
- Рывки происходят в основном при переходе в новую область или при работе с несколькими вьюпортами.
Он не уменьшает количество splat, объём сортировки или покрытие пикселей. Если проблем с выгрузкой и фрагментацией нет, увеличение бюджета только увеличит постоянно занятую видеопамять и не повысит частоту кадров.
Порядок настройки:
- Сначала зафиксируйте пиковый расход видеопамяти всей машины, а не только бюджет LCC.
- Начните со значения по умолчанию и увеличивайте шагами по 1024 МБ.
- После каждого изменения перезапускайте движок.
- Перепроверяйте самые тяжёлые ракурсы, все виды SceneCapture / nDisplay и длительную работу.
- Оставляйте видеопамять для текстур сцены UE, Render Target, Nanite, Lumen, VSM, буферов сортировки и операционной системы.
Не задавайте сразу 8192 МБ без полноценного контроля видеопамяти.
В журнале также печатается разбивка расхода видеопамяти, по которой можно сверить обоснованность бюджета:
GPU footprint: %u slots (%s), %.2f MB total - gaussian %.2f, SH %.2f, sort %.2f (1 view), other %.2f MB
Пункт sort — это буфер сортировки. Журнал рассчитан для 1 view, поэтому при нескольких вьюпортах пересчитывайте по числу видов.
Шаг восемь: загрузка, потоки, память
8.1 Не начинайте с добавления потоков (только конвейер LCC)
Диапазон и значение по умолчанию см. в Параметрах производительности: настройки пулов потоков
Добавление потоков может повысить параллелизм на CPU, а может и усилить конкуренцию потоков, переключения контекста, кратковременную нагрузку на диск и пики выгрузки в видеопамять. Потоки Exporter напрямую не связаны с рендерингом во время выполнения, поэтому их изменение частоту кадров не улучшит.
Критерий: добавляйте по 2~4 потока и перепроверяйте результат только тогда, когда статистика показывает накопление соответствующей очереди при наличии свободных ядер CPU. Если CPU уже загружен полностью, сокращайте объём работы, а не продолжайте добавлять потоки.
Если пункт Create Thread постоянно показывает затраты времени, значит пул потоков многократно расширяется, и настраивать нужно количество предварительно создаваемых потоков, а не верхний предел.
8.2 Splat Number For Discard Per Node (только конвейер LCC)
Диапазон и значение по умолчанию см. в Параметрах производительности: Splat Number For Discard Per Node

Настройка порога отбрасывания разреженных splat для каждого узла
Смысл в том, чтобы игнорировать крайне разреженные узлы: в части данных много узлов, содержащих всего одну-две точки, и управление такими узлами стоит дороже их вклада в изображение.
Увеличение может снизить стоимость управления узлами низкой плотности, а может и удалить изолированные детали. Проверяйте на тонких линиях, ветках деревьев, ограждениях и мелких дальних объектах, не ограничиваясь общей частотой кадров. После изменения перезагрузите данные, иначе на экране останется старый результат.
8.3 Пороги освобождения памяти и видеопамяти

Настройка порогов занятости и освобождения памяти CPU и GPU
Диапазон и значения по умолчанию четырёх порогов см. в Параметрах производительности: категория Usage
Это стратегия освобождения при нехватке памяти, а не обычный регулятор частоты кадров:
- Слишком низкий порог или слишком большая доля освобождения → возможны колебания «освободить — загрузить снова — освободить»;
- Слишком высокий порог → освобождение может задерживаться и увеличивать нагрузку на системную память и видеопамять;
- Меняйте настройки только после того, как длительное тестирование подтвердит нехватку памяти или повторяющиеся выгрузки.
Судите по соотношению CPU Occupy Percentage / GPU Occupy Percentage с соответствующими порогами и по тому, растут ли непрерывно Released CPU Node Num / Released GPU Node Num. На снимке занятость видеопамяти 86 % уже превышает порог 80 %, а число освобождений со стороны видеопамяти достигло 1943 — это типичный признак нехватки видеопамяти.
Шаг девять: несколько вьюпортов, коллизии, вода
9.1 Несколько камер и SceneCapture
Каждый дополнительный вид, который фактически участвует в рендеринге, может добавить работу по обходу, рендерингу или сортировке; LCC2 к тому же добавляет буфер сортировки на каждый вид.
Проверяйте по пунктам:
- Нет ли SceneCapture, который не используется, но по-прежнему обновляется каждый кадр;
- Не слишком ли высокое разрешение Render Target;
- Действительно ли обновление должно происходить каждый кадр;
- Содержит ли
ShowOnlyActorsтолько нужное содержимое; - Можно ли перевести мини-карту на
PointCloudили более низкое разрешение; - Не создали ли nDisplay, разделённый экран или MRQ дополнительные виды одновременно.
Проверьте через Camera Num(Render) в stat xgrids, совпадает ли число фактически рендерящихся видов с ожидаемым; Camera Num — это число камер, участвующих в обновлении, и они могут различаться. Значение выше ожидаемого означает, что часть видов рендерится незаметно для вас.
Если SceneCapture не используется вообще, SceneCaptureComponent Support можно отключить, см. Параметры производительности.

Настройка SceneCaptureComponent Support для нескольких вьюпортов
9.2 Режим обхода
Диапазон и значение по умолчанию см. в Параметрах производительности: Default Traversal Type

Выбор режима обхода по умолчанию: Frustum или Circle
Circle подходит для круговых экранов, nDisplay и панорам 360, которым нужны данные во всех окружающих направлениях; Frustum — базовый режим по умолчанию для одного вьюпорта.
В обычном проекте с одной камерой не переключайтесь на Circle только ради того, чтобы «не было пропусков в любом направлении»: этот режим включает в обход весь круг вокруг камеры, тогда как режим пирамиды видимости обрабатывает только видимую часть. Если рабочий процесс требует Circle, соответственно сузьте Max Distance, предел количества точек и разрешение при нескольких вьюпортах.
Конвейеру LCC2 менять этот пункт не нужно, оставьте Frustum.
9.3 Коллизии и навигация
Описание возможностей см. в Коллизиях и Поддержке системы навигации; этот раздел касается только компромиссов по производительности.
При отключённых коллизиях настраивать дистанцию коллизий не нужно. После включения чтение коллизий, асинхронная физическая запечка и обновление NavMesh могут увеличить расход CPU, памяти и вызвать рывки. Учтите, что такие затраты не обязательно видны в FPS и требуют отдельного просмотра статистики, связанной с коллизиями.
Диапазон и значение по умолчанию дистанции коллизий см. в Параметрах производительности: Max Load Collision Distance(m)
- В чисто демонстрационных проектах отключите коллизии полностью.
- Когда коллизии нужны, установите флажок слева от параметра и задайте
Max Load Collision Distance(m)равным фактическому диапазону взаимодействия.

Настройка дистанции загрузки коллизий Max Load Collision Distance

Изменение динамического диапазона коллизий после настройки дистанции загрузки
- Не задавайте дистанцию рендеринга и дистанцию коллизий механически одинаковыми. Видимость вдали не означает, что там нужны физические коллизии.
- Уменьшение дистанции коллизий напрямую ограничивает область, доступную для взаимодействия игрока и AI, поэтому после изменения проведите функциональное регрессионное тестирование, а не смотрите только на частоту кадров.
При работе с навигацией стратегия обратная: дистанция коллизий должна по возможности покрывать всю область, доступную игроку, чтобы коллизии этих областей загрузились за один проход. Коллизии загружаются динамически по блокам, и подкачка нового блока коллизий во время выполнения запускает перестроение навигационных данных, что вызывает заметные рывки.
Сопутствующие моменты:
- Пусть
NavMeshBoundsVolumeпокрывает область активности игрока, и убедитесь, что коллизии внутри этой области полностью загружены - Предпочитайте запечку Static и избегайте Dynamic: последняя непрерывно перестраивается при каждом изменении коллизий
9.4 Однослойная вода (только конвейер LCC2)
Описание возможности и полную настройку см. в Поддержке однослойной воды; этот раздел касается только компромиссов по производительности.
SingleLayerWater Support — глобальный пункт настроек проекта, но его реализация опирается на медианную глубину LCC2, поэтому на Actor конвейера LCC он не действует.
- Если однослойная вода не используется, оставьте его выключенным;
- После включения требуется перезапуск;
- Цена в том, что пиксели воды теряют качество теней виртуальной карты теней, и это функциональный, а не чисто производительный компромисс;
- Включайте его только тогда, когда 3DGS ошибочно перекрывается материалом однослойной воды.