Профилировщик производительности
Профилировщик производительности отображает данные о производительности на шкале времени. Он сообщает, сколько времени затрачивается на каждый кадр для обновления всех аспектов вашего проекта: визуализации узлов, которые находятся в поле зрения, обновления их состояний, выполнения сценариев с игровой логикой, расчета физики и т.д.
С помощью профилировщика вы можете:
- Обнаружить узкие места в вашем приложении
- Проверить, требуется ли оптимизация художественных активов.
- Проверить, требуется ли оптимизация кода.
- Сравнить результаты профилирования до и после изменений.
Активация профилировщика#
Чтобы включить профилировщик, нажмите Tools -> Performance Profiler и выберите нужный режим профилирования:
Доступны следующие режимы профилирования:
- Generic profiler показывает только блок общей статистики.
- Rendering profiler показывает подробную статистику рендеринга и временную диаграмму.
- Physics profiler показывает подробную статистику по физике (в пределах Physics radius ) и временную диаграмму.
- World Management profiler показывает статистику по всему загруженному миру.
- Thread profiler показывает статистику загрузки потоковых ресурсов.
Чтобы показать статистику профилировщика в игровом режиме, введите команду show_profiler и значение от 1 до 5 в консоли. Чтобы отключить профилировщик в игровом режиме, введите в консоли show_profiler 0 .
Универсальный профилировщик#
Total | Общее время в миллисекундах, затраченное на расчет и визуализацию текущего кадра. Это продолжительность основного цикла в последовательности выполнения приложения.
Всего = Всего ЦП + ожидающий графический процессор |
---|---|
Total CPU | Общее время в миллисекундах, затраченное на подготовку текущего кадра (включая обновление, рендеринг и свопинг ). |
Total GPU | Общее время в миллисекундах, затраченное на рендеринг текущего кадра на графическом процессоре. Этот счетчик может не работать на некоторых графических процессорах. |
Update | Время, затраченное на обновление логики приложения. Это включает выполнение всех шагов функции update() world-скрипта. Он также включает в себя обновление состояний всех узлов (например, обновление skinned-анимации со скинами или системы частиц для генерации новых частиц).
|
Render CPU | Время, необходимое для подготовки всех данных к рендерингу в текущем кадре и передачи команд рендеринга из ЦП в ГП. Если процессорное время рендеринга слишком велико, это сигнализирует о необходимости оптимизации художественных ресурсов, например:
|
Waiting GPU | Время между завершением всех вычислений на ЦП до момента, когда графический процессор завершил рендеринг кадра. (См. иллюстрацию ). Этот счетчик полезен для анализа узких мест в производительности вашего приложения.
|
Interface | Время, затраченное на рендеринг всех виджетов GUI. |
Physics | Время, затраченное на выполнение всех физических расчетов. |
Heap | Размер всех пулов памяти, выделенных для приложения. Распределитель Unigine выделяет память в пулах, что позволяет делать выделение быстрее и эффективнее (если по умолчанию используется директива USE_MEMORY ). Поскольку память распределяется по пулам, значение счетчика увеличивается пошагово. |
Memory | Размер всех блоков памяти, выделяемых по запросу. Этот счетчик сообщает, сколько памяти в выделенных пулах действительно использует ресурсы приложения.
|
System | Размер оперативной памяти, используемой приложением. |
Allocations | Количество вызовов распределения во время кадра. (Этот счетчик сообщает о вызове выделения, даже если требуется выделить несколько байтов). |
Sync Threads | Количество потоков синхронного внутреннего движка (по умолчанию значение равно количеству доступных ядер ЦП минус 1 и ограничено 32). |
Async Threads | Количество потоков асинхронного внутреннего движка (по умолчанию значение равно количеству доступных ядер ЦП и ограничено 32). |
Профилировщик рендеринга#
Следующая статистика отображается в дополнение к общей статистике:
Terrain Cache CPU | Объем кеш-памяти ЦП, используемый в настоящее время для листов ландшафта ландшафта, в мегабайтах. |
---|---|
Terrain Cache GPU | Объем кеш-памяти VRAM, используемый в настоящее время для фрагментов ландшафта ландшафта, в мегабайтах. |
Terrain Virtual Texture | Объем памяти, используемый в настоящее время для виртуальной текстуры ландшафта ландшафта, в мегабайтах. |
Terrain Detail Textures | Объем памяти, используемый в настоящее время для деталей ландшафта, в мегабайтах. |
Terrain Reload Tiles | Количество плиток ландшафтного ландшафта, ожидающих перезагрузки после модификации. |
Terrain Reload Bounds | Количество событий, вызывающих перезагрузку тайлов (одна граница может вызвать перезагрузку нескольких тайлов). |
Sounds | Объем памяти, используемый в настоящее время для звуковых образцов, в мегабайтах. |
Meshes Limit | Максимальный объем VRAM, который может использоваться для геометрии сетки, в мегабайтах. |
Meshes | Объем VRAM, используемый в настоящее время для геометрии сетки, в мегабайтах. |
Textures Limit | Максимальный объем VRAM, который можно использовать для текстур, в мегабайтах. |
Textures | Объем VRAM, используемый в настоящее время для текстур, в мегабайтах. |
Textures Cache | Объем VRAM, используемый в настоящее время для кеширования текстур, в мегабайтах. |
Buffers Render | Объем VRAM, который в настоящее время используется для буферов рендеринга (Gbuffer, пост-эффекты и т. д.), в мегабайтах. |
Buffers Shadows | Объем VRAM, используемый в настоящее время для карт теней, в мегабайтах. |
Async Buffer | Объем памяти, используемый в настоящее время для асинхронного буфера, в мегабайтах. Промежуточный буфер, в который асинхронно загружаются ресурсы в процессе потоковой передачи. Доступно только для OpenGL. |
Async Buffer Indices | Объем памяти, используемый в настоящее время для буфера индексов сетки, в мегабайтах. Этот буфер используется для хранения индексов сеток, асинхронно загружаемых в процессе потоковой передачи. Доступно только для OpenGL. |
Grasses | Объем VRAM, используемый в настоящее время для узлов травы, в мегабайтах. |
Terrains | Объем VRAM, используемый в настоящее время для ландшафтов, в мегабайтах. |
Allocations Textures | Количество выделений памяти для текстур во время кадра. |
Compile Shaders | Количество шейдеров, скомпилированных во время кадра. |
Dynamic Reflections | Количество динамических отражений, отрисовываемых за кадр. В случае отражений кубической карты, если обновлены все шесть граней, в каждом кадре рендерится шесть отражений. |
Lights | Количество проходов света, визуализируемых на кадр. Это означает, что счетчик отображает количество всех источников света, которые в данный момент видны, освещая что-то в области просмотра. Это значение также включает дополнительные проходы для визуализации источников света на отражающих поверхностях (если используются динамические отражения). Простое 2D-отражение умножит количество проходов рендеринга на два, в то время как отражение на кубической карте с шестью гранями, обновленными в каждом кадре, умножит количество проходов рендеринга на шесть.
Каждый источник света перерисовывает полигоны сетки, которые он освещает. Вот почему, чем больше количество источников света, тем большее количество полигонов должна визуализировать видеокарта и тем ниже производительность. Например, использование двух всенаправленных источников света вдвое увеличивает визуализированную геометрию, на которую они светят. |
Shadows | Количество проходов тени, визуализируемых за кадр. Для каждого источника света требуется проход тени для расчета теней. Опять же, если есть отражающие поверхности с нарисованными отраженными тенями, это увеличит количество проходов тени. |
Decals | Количество декалей, отображаемых за кадр (во всех проходах отрисовки ). |
Surfaces | Количество поверхностей, визуализируемых за кадр (во всех проходах визуализации ). Каждый источник света удваивает количество поверхностей, если они освещены. |
Triangles All | Общее количество треугольников, визуализируемых за кадр, включая все полигоны, которые в данный момент видны в окне просмотра, а также те, которые отображаются в процессе визуализации теней. |
Triangles Shadows | Количество треугольников, визуализируемых за кадр в процессе визуализации теней. Каждый источник света должен перерисовывать геометрию, которую он освещает, увеличивая общее количество визуализированных треугольников. Чтобы избежать проблем с графическим процессором, сохраняйте как можно меньшее количество динамических источников света и их радиус. |
Triangles Viewport | Количество треугольников, отображаемых за кадр. Сюда входят все полигоны, которые в данный момент видны в области просмотра (геометрия). |
Primitives | Количество геометрических примитивов, визуализируемых за кадр. Сюда входят точки, линии, треугольники и многоугольники. Визуализатор и сам профилировщик также добавляют к этому счетчику. При использовании тесселяции значение сильно отличается. В этом случае Треугольники отображает количество треугольников в грубой сетке, а Примитивы показывает статистику количества примитивов с мозаикой. |
Dips | Количество вызовов отрисовки. Чем больше количество идентичных поверхностей сетки с одним и тем же материалом, тем эффективнее создание экземпляров (по умолчанию включено). Это означает, что количество вызовов отрисовки сводится к минимуму, разгружая как ЦП, так и ГП.
Вы можете сравнить количество поверхностей ( Поверхности ) и количество DIP, используемых для их рендеринга. Например, если имеется 30000 поверхностей и 1000 DIP, это означает, что 30 экземпляров поверхностей сеток визуализируются только за один вызов отрисовки (Surfaces / Dips). Таким образом, инстансинг обеспечивает повышение производительности. |
Shaders | Количество шейдеров, установленных на кадр. (Шейдеры устанавливаются в каждом из проходов рендеринга ; следовательно, если используется только один материал, его шейдер все равно нужно установить несколько раз. Когда ничего не видно и экран черный, даже в этом случае композитный шейдер все еще используется.) |
Materials | Количество материалов, установленных для каждого кадра. (Материалы задаются в каждом из этапов рендеринга .) |
Профилировщик физики#
Этот профилировщик показывает статистику в пределах Физического радиуса .
Следующая статистика отображается в дополнение к общей статистике:
PIslands | Число физических островов в пределах физического радиуса , которое можно рассчитать отдельно. Чем меньше это число, тем менее эффективна многопоточность . |
---|---|
PBodies | Количество тел в пределах физического радиуса . |
PJoints | Количество соединений в пределах физического радиуса . |
PContacts | Общее количество контактов в пределах радиуса физики; это включает контакты между телами (их формы) и контакты тела и сетки. |
PCollision | Продолжительность фазы обнаружения столкновений физического моделирования при обнаружении столкновений между объектами. |
PResponse | Продолжительность фазы ответа , когда рассчитывается реакция на столкновение и устраняются стыки. |
PIntegrate | Продолжительность фазы интеграции , когда результаты физического моделирования применяются к телам. |
PSimulation | Продолжительность всех этапов моделирования, суммированных вместе. |
Посмотрите обзор параметров Physics Profiler в нашем видеоуроке по физике .
Профилировщик управления миром#
Этот профилировщик показывает статистику по всему миру.
Следующая статистика отображается в дополнение к общей статистике:
WNodes | Общее количество узлов в мире (как включенных, так и отключенных). |
---|---|
WBodies | Общее количество тел в мире. |
WJoints | Общее количество соединений в мире. |
WSpawn | Время в миллисекундах, затрачиваемое движком на создание контента в процедурных узлах (например, трава, беспорядок, мир слои). |
Профилировщик потоков#
Следующая статистика отображается в дополнение к общей статистике:
AsyncQueue | Время асинхронной загрузки ресурсов (файлов / сеток / изображений / узлов), в миллисекундах. |
---|---|
Sound | Время асинхронной загрузки звуков в миллисекундах. |
PathFind | Время асинхронных вычислений поиска пути в миллисекундах. |