Отладка Water System: как найти, что съедает FPS
В 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 — включает кэширование точек сплайна водоема. Это полезно для рек с большим числом точек сплайна, а также для сцен с активным движением камеры, вызывающим постоянное обновление мешей.


Комментарии
Отправить комментарий