Профилировщик производительности
Профилировщик производительности отображает данные о производительности на шкале времени. Он сообщает, сколько времени затрачивается на каждый кадр для обновления всех аспектов вашего проекта: визуализации узлов, которые находятся в поле зрения, обновления их состояний, выполнения сценариев с игровой логикой, расчета физики и т.д.
С помощью профилировщика вы можете:
- Обнаружить узкие места в вашем приложении
- Проверить, требуется ли оптимизация художественных активов.
- Проверить, требуется ли оптимизация кода.
- Сравнить результаты профилирования до и после изменений.
Активация профилировщика#
Чтобы включить профилировщик, нажмите 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. |
Total Physics | Время, затраченное на выполнение всех физических расчетов. |
Waiting Physics | Период времени, в течение которого физический модуль дожидается завершения процесса рендеринга для того, чтобы вернуться в основной поток и выполнить остальные кадры физики. |
Heap | Размер всех пулов памяти, выделенных для приложения. Распределитель Unigine выделяет память в пулах, что позволяет делать выделение быстрее и эффективнее (если по умолчанию используется директива USE_MEMORY ). Поскольку память распределяется по пулам, значение счетчика увеличивается пошагово. |
Memory | Размер всех блоков памяти, выделяемых по запросу. Этот счетчик сообщает, сколько памяти в выделенных пулах действительно использует ресурсы приложения.
|
System | Размер оперативной памяти, используемой приложением. |
Allocations | Количество вызовов распределения во время кадра. (Этот счетчик сообщает о вызове выделения, даже если требуется выделить несколько байтов). |
CPUShaders Threads | Количество внутренних потоков в движке, которые используются для CPU шейдеров. |
Compiled Shaders | Количество шейдеров, которые компилируются в данный момент. |
Loaded Shaders | Количество шейдеров, загруженных в оперативную память. |
Профилировщик рендеринга#
Следующая статистика отображается в дополнение к общей статистике:
RAM Sounds | Объем оперативной памяти (RAM), используемый в настоящее время для звуков, в мегабайтах. |
---|---|
RAM Terrain | Объем оперативной памяти (RAM), используемый в настоящее время для асинхронной загрузки ландшафта, и максимальный объем оперативной памяти, который может для этого использоваться, в мегабайтах. |
RAM Meshes Static | Объем оперативной памяти (RAM), используемый в настоящее время для потоковой передачи статических мешей, и максимальный объем оперативной памяти, который может для этого использоваться, в мегабайтах.
Один и тот же статический меш будет потреблять больше оперативной памяти, чем видеопамяти, так как в ОП дополнительно генерируются данные для расчета коллизий, пересечений, простраственных деревьев и т.д. |
VRAM Terrain Cache | Объем кеш-памяти VRAM, используемый в настоящее время для тайлов Landscape Terrain, в мегабайтах. |
VRAM Terrain Virtual Texture | Объем видеопамяти, используемый в настоящее время для виртуальной текстуры Landscape Terrain, в мегабайтах. |
VRAM Terrain Detail Textures | Объем видеопамяти, используемый в настоящее время для деталей Landscape Terrain, в мегабайтах. |
VRAM Meshes Static | Объем видеопамяти, используемый в настоящее время для потоковой передачи статических мешей, и максимальный объем видеопамяти, который может для этого использоваться, в мегабайтах. |
VRAM Meshes Skinned | Объем видеопамяти, используемый в настоящее время для потоковой передачи skinned мешей, и максимальный объем видеопамяти, который может для этого использоваться, в мегабайтах. |
VRAM Textures | Объем видеопамяти, используемый в настоящее время для текстур, и максимальный объем видеопамяти, который может для этого использоваться, в мегабайтах. |
VRAM Textures Cache | Объем VRAM, используемый в настоящее время для кеширования текстур, в мегабайтах. |
VRAM Render Buffers | Объем VRAM, который в настоящее время используется для буферов рендеринга (Gbuffer, пост-эффекты и т. д.), в мегабайтах. |
VRAM Particles | Объем VRAM, который в настоящее время используется для вершин системы частиц, и максимальный объем видеопамяти, который может для этого использоваться, в мегабайтах. |
Async Buffer | Объем памяти, используемый в настоящее время для асинхронного буфера, в мегабайтах. Промежуточный буфер, в который асинхронно загружаются ресурсы в процессе потоковой передачи. Доступно только для OpenGL. |
Async Buffer Indices | Объем памяти, используемый в настоящее время для буфера индексов сетки, в мегабайтах. Этот буфер используется для хранения индексов сеток, асинхронно загружаемых в процессе потоковой передачи. Доступно только для OpenGL. |
VRAM Total | Общий объем видеопамяти, используемый в настоящее время. |
Terrain Reload Tiles | Количество плиток ландшафтного ландшафта, ожидающих перезагрузки после модификации. |
Terrain Reload Bounds | Количество событий, вызывающих перезагрузку тайлов (одна граница может вызвать перезагрузку нескольких тайлов). |
Dynamic Reflections | Количество динамических отражений, отрисовываемых за кадр. В случае отражений кубической карты, если обновлены все шесть граней, в каждом кадре рендерится шесть отражений. |
Lights | Количество проходов света, визуализируемых на кадр. Это означает, что счетчик отображает количество всех источников света, которые в данный момент видны, освещая что-то в области просмотра. Это значение также включает дополнительные проходы для визуализации источников света на отражающих поверхностях (если используются динамические отражения). Простое 2D-отражение умножит количество проходов рендеринга на два, в то время как отражение на кубической карте с шестью гранями, обновленными в каждом кадре, умножит количество проходов рендеринга на шесть.
Каждый источник света перерисовывает полигоны сетки, которые он освещает. Вот почему, чем больше количество источников света, тем большее количество полигонов должна визуализировать видеокарта и тем ниже производительность. Например, использование двух всенаправленных источников света вдвое увеличивает визуализированную геометрию, на которую они светят. |
Shadows | Количество проходов тени, визуализируемых за кадр. Для каждого источника света требуется проход тени для расчета теней. Опять же, если есть отражающие поверхности с нарисованными отраженными тенями, это увеличит количество проходов тени. |
Decals |
Количество декалей, отображаемых за кадр (во всех проходах отрисовки ). Если для декали предусмотрен дополнительный эффект (прозрачность, эмиссия, освещенность или другой эффект), который подразумевает дополнительный проход отрисовки для этой декали, то эта декаль будет дополнительно отрисовываться в каждом соответствующем проходе, таким образом число отрисованных декалей увеличится. |
Surfaces |
Количество поверхностей, визуализируемых за кадр (во всех проходах визуализации ). Если для поверхности предусмотрен дополнительный эффект (прозрачность, эмиссия, освещенность или другой эффект), который подразумевает дополнительный проход отрисовки для этой поверхности, то эта поверхность будет дополнительно отрисовываться в каждом соответствующем проходе, таким образом число отрисованных поверхностей увеличится. |
Triangles All | Общее количество треугольников, визуализируемых за кадр, включая все полигоны, которые в данный момент видны в окне просмотра, а также те, которые отображаются в процессе визуализации теней. |
Triangles Shadows | Количество треугольников, визуализируемых за кадр в процессе визуализации теней. Каждый источник света должен перерисовывать геометрию, которую он освещает, увеличивая общее количество визуализированных треугольников. Чтобы избежать проблем с графическим процессором, сохраняйте как можно меньшее количество динамических источников света и их радиус. |
Triangles Viewport | Количество треугольников, отображаемых за кадр. Сюда входят все полигоны, которые в данный момент видны в области просмотра (геометрия). |
Primitives | Количество геометрических примитивов, визуализируемых за кадр. Сюда входят точки, линии, треугольники и многоугольники. Визуализатор и сам профилировщик также добавляют к этому счетчику. При использовании тесселяции значение сильно отличается. В этом случае Треугольники отображает количество треугольников в грубой сетке, а Примитивы показывает статистику количества примитивов с мозаикой. |
Dips | Количество вызовов отрисовки. Чем больше количество идентичных поверхностей сетки с одним и тем же материалом, тем эффективнее создание экземпляров (по умолчанию включено). Это означает, что количество вызовов отрисовки сводится к минимуму, разгружая как ЦП, так и ГП.
Вы можете сравнить количество поверхностей ( Поверхности ) и количество DIP, используемых для их рендеринга. Например, если имеется 30000 поверхностей и 1000 DIP, это означает, что 30 экземпляров поверхностей сеток визуализируются только за один вызов отрисовки (Surfaces / Dips). Таким образом, инстансинг обеспечивает повышение производительности. |
Materials | Количество материалов, установленных для каждого кадра. (Материалы задаются в каждом из этапов рендеринга .) |
Shaders | Количество шейдеров, установленных на кадр. (Шейдеры устанавливаются в каждом из проходов рендеринга ; следовательно, если используется только один материал, его шейдер все равно нужно установить несколько раз. Когда ничего не видно и экран черный, даже в этом случае композитный шейдер все еще используется.) |
Compile Shaders | Количество шейдеров, скомпилированных во время кадра. |
Профилировщик физики#
Этот профилировщик показывает статистику в пределах Физического радиуса .
Следующая статистика отображается в дополнение к общей статистике:
PIslands | Число физических островов в пределах физического радиуса , которое можно рассчитать отдельно. Чем меньше это число, тем менее эффективна многопоточность . |
---|---|
PBodies | Количество тел в пределах физического радиуса . |
PJoints | Количество соединений в пределах физического радиуса . |
PContacts | Общее количество контактов в пределах радиуса физики; это включает контакты между телами (их формы) и контакты тела и сетки. |
PCollision | Продолжительность фазы обнаружения столкновений физического моделирования при обнаружении столкновений между объектами. |
PSimulation | Продолжительность всех этапов моделирования, суммированных вместе. |
Посмотрите обзор параметров Physics Profiler в нашем видеоуроке по физике .
Профилировщик управления миром#
Этот профилировщик показывает статистику по всему миру.
Следующая статистика отображается в дополнение к общей статистике:
WNodes | Общее количество узлов в мире (как включенных, так и отключенных). |
---|---|
WBodies | Общее количество тел в мире. |
WShapes | Общее количество форм в мире. |
WJoints | Общее количество соединений в мире. |
WSpawn | Время в миллисекундах, затрачиваемое движком на создание контента в процедурных узлах (например, трава, беспорядок, мир слои). |
Профилировщик потоков#
Следующая статистика отображается в дополнение к общей статистике:
AsyncQueue | Время асинхронной загрузки ресурсов (файлов / сеток / изображений / узлов), в миллисекундах. |
---|---|
Sound | Время асинхронной загрузки звуков в миллисекундах. |
PathFind | Время асинхронных вычислений поиска пути в миллисекундах. |