Профилировщик производительности
Профилировщик производительности отображает данные о производительности на шкале времени. Он сообщает, сколько времени затрачивается на каждый кадр для обновления всех аспектов вашего проекта: визуализации нод, которые находятся в поле зрения, обновления их состояний, выполнения сценариев с игровой логикой, расчета физики и т.д.
С помощью профилировщика вы можете:
- Обнаружить узкие места в вашем приложении
- Проверить, требуется ли оптимизация художественных активов.
- Проверить, требуется ли оптимизация кода.
- Сравнить результаты профилирования до и после изменений.
Активация профилировщика#
Чтобы включить профилировщик, нажмите Tools -> Performance Profiler и выберите нужный режим профилирования:
Доступны следующие режимы профилирования:
- Generic profiler показывает только блок общей статистики.
- Rendering profiler показывает подробную статистику рендеринга и временную диаграмму.
- Physics profiler показывает подробную статистику по физике (в пределах Physics radius ) и временную диаграмму.
- World Management profiler показывает статистику по всему загруженному миру.
- Thread profiler показывает статистику загрузки потоковых ресурсов.
Чтобы отобразить статистику профилировщика во внутриигровом режиме, введите команду show_profiler 1 в консоли. Чтобы отключить профилировщик в игровом режиме, введите show_profiler 0 в консоли.
Универсальный профилировщик#
Total | Общее время в миллисекундах, затраченное на расчет и визуализацию текущего кадра. Это продолжительность основного цикла в последовательности выполнения приложения.
Total = Total CPU + Waiting GPU |
---|---|
Total CPU | Общее время в миллисекундах, затраченное на подготовку текущего кадра (включая обновление, рендеринг и свопинг ). |
Total GPU | Общее время в миллисекундах, затраченное на рендеринг текущего кадра на графическом процессоре. Этот счетчик может не работать на некоторых графических процессорах. |
Update | Время, затраченное на обновление логики приложения. Это включает выполнение всех шагов функции update() world-скрипта. Он также включает в себя обновление состояний всех нод (например, обновление skinned-анимации со скинами или системы частиц для генерации новых частиц).
|
Render CPU | Время, необходимое для подготовки всех данных к рендерингу в текущем кадре и передачи команд рендеринга из ЦП в ГП. Если процессорное время рендеринга слишком велико, это сигнализирует о необходимости оптимизации художественных ресурсов, например:
|
Waiting GPU | Время между завершением всех вычислений на ЦП до момента, когда графический процессор завершил рендеринг кадра. (См. иллюстрацию ). Этот счетчик полезен для анализа узких мест в производительности вашего приложения.
|
Interface | Время, затраченное на рендеринг всех виджетов GUI. |
Total Physics | Время, затраченное на выполнение всех физических расчетов. |
Waiting Physics | Период времени, в течение которого физический модуль дожидается завершения процесса рендеринга для того, чтобы вернуться в основной поток и выполнить остальные кадры физики. |
CPU ram free | Объем доступной в данный момент памяти. |
CPU ram usage physics | Текущий размер рабочего набора. Рабочий набор - это набор страниц памяти, которые в данный момент отображаются в физической оперативной памяти (см. источник). |
CPU ram usage committed | Общий объем частной памяти, выделенный менеджером памяти для запущенного процесса (см. источник). |
CPU ram malloc | Объем памяти, выделяемый пользовательским аллокатором UNIGINE. |
CPU ram static pool | Объем памяти, выделяемой в статических пулах. |
CPU ram dynamic pool | Объем памяти, выделяемой в динамических пулах. Доступно только в Windows. |
CPU ram instance pool | Объем памяти, выделяемой в пулах экземпляров. |
Frame Allocations | Количество выделений, выполняемых для каждого кадра. Аллокатор UNIGINE распределяет память в пулах, что позволяет распределять память быстрее и эффективнее. |
Live Allocations | Текущее количество выполненных распределений / Максимальное количество распределений, выполненных во время выполнения (пиковое потребление). |
GPU vram free | Объем доступной в данный момент видеопамяти. |
GPU vram usage | Объем видеопамяти, используемый графическим процессором. Это значение задается графическим драйвером. |
GPU ram usage | Объем оперативной памяти, используемый графическим процессором. Это значение задается графическим драйвером. |
GPU alloc | Количество выделений, выполненных движком на графическом процессоре. |
GPU Frame Allocations | Количество выделяемой видеопамяти для каждого кадра. |
GPU Live Allocations | Текущее количество выполненных распределений / Максимальное количество распределений, выполненных во время выполнения (пиковое потребление). |
Профилировщик памяти#
В дополнение к общей статистике отображаются следующие статистические данные:
Однако вы можете включить профилировщик памяти отдельно, используя консольную команду show_profiler_memory 1. В этом случае будет отображаться только статистика по памяти.
GPU Allocator small pool size | Максимальный размер пула видеопамяти для небольших выделений. |
---|---|
GPU Allocator small pool usage | Фактическое использование пула видеопамяти для небольших выделений. |
GPU Allocator skinned | Объем видеопамяти, выделенный для Skinned Mesh. |
GPU Allocator decals | Объем видеопамяти, выделенный для декалей. |
RAM ImagePool | Объем памяти (RAM), используемый в данный момент для пула изображений. |
RAM StringPool | Объем оперативной памяти (RAM), используемый в настоящее время для глобального пула строк, в котором хранятся повторяющиеся строки. Пул строк повышает производительность, поскольку в нем хранится только одна строка вместо нескольких ее дубликатов. Однако этот пул очищается только при завершении работы движка, поэтому важно поддерживать его размер на достаточном уровне во время выполнения. |
RAM Sounds | Объем оперативной памяти (RAM), используемый в настоящее время для обработки звуковых сэмплов, в мегабайтах. |
RAM Terrain | Объем оперативной памяти (RAM), используемый в настоящее время для асинхронной загрузки ландшафта, и максимальный объем оперативной памяти, который может для этого использоваться, в мегабайтах. |
RAM Animations | Объем памяти (RAM), используемый в данный момент для анимации (хранится в файлах .anim). |
RAM Meshes Static All | Общий объем оперативной памяти, используемый в настоящее время для потоковой передачи статических мешей.
Один и тот же статический меш будет использовать больше оперативной памяти, чем VRAM, поскольку в оперативной памяти генерируются дополнительные данные для расчета столкновений, пересечений, пространственных деревьев и так далее. |
RAM Meshes Static Active | Объем оперативной памяти, активно используемый для рендеринга статических мешей. |
RAM Meshes Static Cache | Объем оперативной памяти, используемый для кэширования статических мешей. |
RAM Meshes Skinned All | Общий объем оперативной памяти, используемый в настоящее время для потоковой передачи Skinned Mesh. |
RAM Meshes Skinned Active | Объем оперативной памяти, активно используемый для рендеринга Skinned Mesh. |
RAM Meshes Skinned Cache | Объем оперативной памяти, используемый для кэширования Skinned Mesh. |
VRAM Render Buffers | Объем видеопамяти, используемый в данный момент для рендеринга буферов (Gbuffer, постэффектов и т.д.), в мегабайтах. |
VRAM Particles | Объем видеопамяти, используемой в настоящее время для вершин систем частиц, и максимальный объем видеопамяти, который может быть использован для них, в мегабайтах. |
VRAM Meshes Static All | Общий объем видеопамяти, используемый в настоящее время для потоковой передачи статических мешей. |
VRAM Meshes Static Active | Объем видеопамяти, активно используемый для рендеринга статических мешей. |
VRAM Meshes Static Cache | Объем видеопамяти, используемой для кэширования статических мешей. |
VRAM Meshes Skinned All | Общий объем видеопамяти, используемый в настоящее время для Skinned Mesh. |
VRAM Meshes Skinned Active | Объем видеопамяти, активно используемый для рендеринга Skinned Mesh. |
VRAM Meshes Skinned Cache | Объем видеопамяти, используемый для кэширования Skinned Mesh. |
VRAM Textures All | Общий объем видеопамяти, используемый в данный момент для текстур, и максимальный объем видеопамяти, который может быть использован для них, в мегабайтах. |
VRAM Textures Active | Объем видеопамяти, активно используемый для рендеринга текстур. |
VRAM Textures Cache | Объем видеопамяти, используемой в настоящее время для кэширования текстур, в мегабайтах. |
VRAM Terrain Cache | Объем кэша VRAM, используемого в настоящее время для фрагментов Landscape Terrain, в мегабайтах. |
VRAM Terrain Virtual Texture | Объем видеопамяти, используемый в настоящее время для виртуальной текстуры Landscape Terrain, в мегабайтах. |
VRAM Terrain Detail Textures | Объем видеопамяти, используемый в настоящее время для получения сведений о Landscape Terrain, в мегабайтах. |
RAM Streaming need | Объем оперативной памяти, который в данный момент требуется для потоковой передачи. |
VRAM Streaming need | Объем видеопамяти, который в данный момент требуется для потоковой передачи. |
Профилировщик рендеринга#
В дополнение к общей статистике и статистике по памяти отображаются следующие статистические данные:
Однако, если вы включите его с помощью консольной команды show_profiler_render 1, будут отображаться только приведенные ниже статистические данные.
Terrain Reload Tiles | Количество тайлов Landscape Terrain, ожидающих перезагрузки после модификации. |
---|---|
Terrain Reload Bounds | Количество событий, вызывающих перезагрузку тайлов (одна граница может вызвать перезагрузку нескольких тайлов). |
Dynamic Reflections | Количество динамических отражений, отрисовываемых за кадр. В случае отражений кубической текстуры, если обновлены все шесть граней, в каждом кадре рендерится шесть отражений. |
Lights | Количество проходов света, визуализируемых на кадр. Это означает, что счетчик отображает количество всех источников света, которые в данный момент видны и освещают что-то во вьюпорте. Это значение также включает дополнительные проходы для визуализации источников света на отражающих поверхностях (если используются динамические отражения). Простое 2D-отражение умножит количество проходов рендеринга на два, в то время как отражение на кубической карте с шестью гранями, обновленными в каждом кадре, умножит количество проходов рендеринга на шесть.
Каждый источник света перерисовывает полигоны меша, который он освещает. Вот почему, чем больше количество источников света, тем большее количество полигонов должна визуализировать видеокарта и тем ниже производительность. Например, использование двух всенаправленных источников света вдвое увеличивает количество отрисовываемой геометрии, на которую они светят. |
Shadows | Количество проходов тени, визуализируемых за кадр. Для каждого источника света требуется проход тени для расчета теней. Опять же, если есть отражающие поверхности с нарисованными отраженными тенями, это увеличит количество проходов тени. |
Decals |
Количество декалей, отображаемых за кадр (во всех проходах рендеринга ). Если для декали предусмотрен дополнительный эффект (прозрачность, эмиссия, освещенность или другой эффект), который подразумевает дополнительный проход рендеринга для этой декали, то эта декаль будет дополнительно отрисовываться в каждом соответствующем проходе, таким образом число отрисованных декалей увеличится. |
Surfaces |
Количество поверхностей, визуализируемых за кадр (во всех проходах рендеринга ). Если для поверхности предусмотрен дополнительный эффект (прозрачность, эмиссия, освещенность или другой эффект), который подразумевает дополнительный проход рендеринга для этой поверхности, то эта поверхность будет дополнительно отрисовываться в каждом соответствующем проходе, таким образом число отрисованных поверхностей увеличится. |
Triangles All | Общее количество треугольников, визуализируемых за кадр, включая все полигоны, которые в данный момент видны во вьюпорте, а также те, которые отображаются в процессе визуализации теней. |
Triangles Shadows | Количество треугольников, визуализируемых за кадр в процессе визуализации теней. Каждый источник света должен повторно отрисовывать геометрию, которую он освещает, увеличивая общее количество визуализированных треугольников. Чтобы избежать проблем с графическим процессором, делайте количество динамических источников света и их радиус как можно меньше. |
Triangles Viewport | Количество треугольников, отображаемых за кадр. Сюда входят все полигоны, которые в данный момент видны во вьюпорте (геометрия). |
Primitives | Количество геометрических примитивов, визуализируемых за кадр. Сюда входят точки, линии, треугольники и многоугольники. Визуализатор и сам профилировщик также добавляются к этому счетчику. При использовании тесселяции значение сильно отличается. В этом случае Triangles отображает количество треугольников в грубом меше, а Primitives показывает статистику количества тесселированных примитивов. |
Dips | Количество вызовов отрисовки. Чем больше количество идентичных поверхностей меша с одним и тем же материалом, тем эффективнее создание экземпляров (по умолчанию включено). Это означает, что количество вызовов отрисовки сводится к минимуму, разгружая как ЦП, так и ГП.
Вы можете сравнить количество поверхностей (Surfaces) и количество DIP, используемых для их рендеринга. Например, если имеется 30000 поверхностей и 1000 DIP, это означает, что 30 экземпляров поверхностей мешей визуализируются всего за один вызов отрисовки (Surfaces / Dips). Таким образом, инстансинг обеспечивает повышение производительности. |
Materials | Количество материалов, установленных для каждого кадра. (Материалы задаются в каждом из проходов рендеринга.) |
Shaders | Количество шейдеров, установленных на кадр. (Шейдеры устанавливаются в каждом из проходов рендеринга ; следовательно, если используется только один материал, его шейдер все равно нужно установить несколько раз. Когда ничего не видно и экран черный, даже в этом случае композитный шейдер все еще используется.) |
Compiled PSO | Количество PSO, которые в настоящее время скомпилированы. |
Loaded PSO | Текущее количество загруженных PSO. |
Compiled Shaders | Количество скомпилированных в данный момент шейдеров. |
Loaded Shaders | Количество шейдеров, загруженных в оперативную память. |
Профилировщик физики#
Этот профилировщик показывает статистику в пределах Радиуса физики.
Следующая статистика отображается в дополнение к общей статистике:
PIslands | Число физических островов в пределах радиуса физики, которое можно рассчитать отдельно. Чем меньше это число, тем менее эффективна многопоточность . |
---|---|
PBodies | Количество тел в пределах радиуса физики. |
PJoints | Количество сочленений в пределах радиуса физики. |
PContacts | Общее количество контактов в пределах радиуса физики; это включает контакты между телами (их формы) и контакты тела и геометрии. |
PCollision | Продолжительность фазы обнаружения столкновений физического моделирования при обнаружении столкновений между объектами. |
PSimulation | Продолжительность всех этапов моделирования, суммированных вместе. |
Посмотрите обзор параметров Physics Profiler в нашем видеоуроке по физике .
Профилировщик управления миром#
Этот профилировщик показывает статистику для мира в целом.
Следующая статистика отображается в дополнение к общей статистике:
WNodes | Общее количество нод в мире (как включенных, так и выключенных). |
---|---|
WBodies | Общее количество тел в мире. |
WShapes | Общее количество форм в мире. |
WJoints | Общее количество соединений в мире. |
WSpawn | Время в миллисекундах, затрачиваемое движком на создание контента в процедурных нодах (например, трава, клаттеры, слои мира). |
Профилировщик потоков#
В дополнение к общей статистике , отображаемой, отображается следующая статистика:
AsyncQueue | Время асинхронной загрузки ресурсов (файлов / мешей / изображений / нод), в миллисекундах. |
---|---|
Sound | Время асинхронной загрузки звуков, в миллисекундах. |
PathFind | Время асинхронных вычислений поиска пути в миллисекундах. |
CPUShaders Threads | Количество внутренних потоков движка, используемых для шейдеров центрального процессора. |