Отладка Water System: как найти, что съедает FPS

Примечание: гайд написан на примере UE 5.6, но подходит и для других версий движка

В Unreal Engine есть мощный инструмент для анализа производительности — Unreal Insights, позволяющий увидеть полную картину того, что происходит на сцене. Однако в системе воды также есть консольные команды для локальной диагностики и визуализации. Они не заменяют Unreal Insights, но отлично дополняют его, позволяя быстро понять, что именно делает система воды в текущем кадре и как она влияет на производительность. Рассмотрим доступные команды.

1. Диагностика производительности

stat water — нагрузка воды на CPU

Вводим в консоль команду stat water и видим вот такую таблицу:

Основные параметры статистики:

  • CallCount — сколько раз функция вызывается за кадр.
  • InclusiveAvg / InclusiveMax — время работы функции вместе со всеми вызовами дочерних функций.
  • ExclusiveAvg / ExclusiveMax — время выполнения самой функции.

Stat water включает следующие тесты:

  • IsUnderwater Test — показывает, сколько ресурсов тратится на проверку, находится ли камера под водой, чтобы включить эффект постобработки.
  • WaterBody_ComputeWaterInfo — общая статистика, включающая:
    • WaterBody_ComputeWaterDepth — затраты CPU на вычисление глубины воды в конкретной точке.
    • WaterBody_ComputeWaveHeight — затраты CPU на расчет высоты волн в конкретной точке.
    • WaterBody_ComputeLandscapeDepth — затраты на вычисление высоты рельефа дна в заданной точке.

Следует отметить, что эти подфункции всегда будут одними из самых дорогих участков WaterBody_ComputeWaterInfo, это нормальная часть работы плагина.

stat watermesh — рендеринг водного меша

Основные параметры статистики:

  • Vertices Drawn — количество вершин всех видимых водных тел. Это отражает детализацию и сложность меша воды.
  • Tiles Drawn — количество плиток, которые отрисовываются в кадре.
  • Draw Calls — количество команд рендеринга. Плитки с одинаковыми материалами обычно объединяются в один draw call, из-за этого число отрендеренных материалов обычно меньше, чем плиток.
  • Number of Drawn Materials — количество материалов, использованных для рендеринга плиток.

2. Визуализация тайлов и структуры меша

r.Water.WaterMesh.ShowTileBounds — включает визуализацию плиток в редакторе
0 — выключено
1 — цвета по типу водоема (красный — река, зеленый — озеро, синий — океан, желтый — переход реки в озеро, фиолетовый — переход реки в океан)
2 — цвета по уровню детализации (LOD)
3 — цвета по индексу плотности (Density Index)

r.Water.WaterMesh.ShowTileGenerationGeometry — показывает геометрию, на основе которой генерируются плитки.

r.Water.WaterMesh.ShowWireframeAtBaseHeight 1 — в режиме wireframe (Alt + 2) показывает сетку воды без волн и деформаций.

r.Water.WaterMesh.ShowWireframe 1 — отображение водного меша в виде каркасной сетки.

3. LOD и детализация водного меша

r.Water.WaterMesh.ShowLODLevels 1 — рисует цветные кольца вокруг камеры, каждое из которых соответствует своему уровню LOD воды.

r.Water.WaterMesh.LODScaleBias — увеличивает или уменьшает радиус этих колец. Положительные значения расширяют радиус, а отрицательные — сужают. Минимальное значение — -0.5.

r.Water.WaterMesh.LODCountBias — сдвигает уровень детализации водного меша. При значении -1 LOD снижется на один уровень (например, с LOD 2 станет LOD 1), упрощая сетку и снижая качество. Это удобно для быстрого тестирования влияния плотности сетки на производительность и внешний вид воды.

r.Water.WaterMesh.TessFactorBias — сдвигает тесселяцию водного меша. При отрицательных значениях тесселяция уменьшается, сетка становится реже и проще; при положительных — плотность сетки возрастает, увеличивая детализацию.

4. Управление рендерингом воды

r.Water.WaterMesh.Enabled 0 — отключает генерацию и рендеринг водного меша.

r.Water.WaterMesh.EnableRendering 0 — выключает только рендеринг водного меша, но сама генерация плиток и логика остаются активными.

r.Water.FreezeWaves 1 — останавливает анимацию волн, делая воду статичной.

5. Отладка постобработки

r.Water.VisualizeActiveUnderwaterPostProcess 1 — показывает, какой водоем используется для подводной постобработки. Полезно, когда несколько водоемов пересекаются. При значении 2 выводится дополнительная информация.

6. Оптимизация

r.Water.UseSplineKeyOptimization 1 — включает кэширование точек сплайна водоема. Это полезно для рек с большим числом точек сплайна, а также для сцен с активным движением камеры, вызывающим постоянное обновление мешей.

Комментарии

Популярные сообщения