Профилировщик производительности
A performance profiler displays performance data in a timeline. It reports how much time is spent per each frame for updating all aspects of your project: rendering nodes that are in view, updating their states, executing scripts with game logic, calculating physics, etc. Профилировщик производительности отображает данные о производительности на шкале времени. Он сообщает, сколько времени затрачивается на каждый кадр для обновления всех аспектов вашего проекта: визуализации узлов, которые находятся в поле зрения, обновления их состояний, выполнения сценариев с игровой логикой, расчета физики и т.д.
With the profiler, you can: С помощью профилировщика вы можете:
- Detect the bottlenecks of your application Обнаружить узкие места в вашем приложении
- Check if art assets optimization is required Проверить, требуется ли оптимизация художественных активов.
- Check if code optimization is required Проверить, требуется ли оптимизация кода.
- Compare the profiling results before and after the changes Сравнить результаты профилирования до и после изменений.
Activate ProfilersАктивация профилировщика#
To turn the profiler on, click Tools -> Performance Profiler and choose the required profiling mode: Чтобы включить профилировщик, нажмите Tools -> Performance Profiler и выберите нужный режим профилирования:
The following profiling modes are available: Доступны следующие режимы профилирования:
- Generic profiler shows only the general statistics block. Generic profiler показывает только блок общей статистики.
- Rendering profiler shows the detailed rendering statistics and the timeline chart. Rendering profiler показывает подробную статистику рендеринга и временную диаграмму.
- Physics profiler shows the detailed physics-related statistics (within the Physics radius) and the timeline chart. Physics profiler показывает подробную статистику по физике (в пределах Physics radius ) и временную диаграмму.
- World Management profiler shows the statistics on the whole loaded world. World Management profiler показывает статистику по всему загруженному миру.
- Thread profiler shows the statistics on loading threaded resources. Thread profiler показывает статистику загрузки потоковых ресурсов.
To show profiler statistics in the in-game mode type show_profiler command and a value from 1 to 5 in the console. To disable the profiler in the in-game mode, type show_profiler 0 in the console. Чтобы показать статистику профилировщика в игровом режиме, введите команду show_profiler и значение от 1 до 5 в консоли. Чтобы отключить профилировщик в игровом режиме, введите в консоли show_profiler 0 .
Generic ProfilerУниверсальный профилировщик#
Total | Total time in milliseconds taken to both calculate and render the current frame. This is the duration of the main loop in the application execution sequence.
Total = Total CPU + Waiting GPU Общее время в миллисекундах, затраченное на расчет и визуализацию текущего кадра. Это продолжительность основного цикла в последовательности выполнения приложения. Всего = Всего ЦП + ожидающий графический процессор |
---|---|
Total CPU | Total time in milliseconds taken to prepare the current frame (including update, render, and swap). Общее время в миллисекундах, затраченное на подготовку текущего кадра (включая обновление, рендеринг и свопинг ). |
Total GPU | Total time in milliseconds taken to render the current frame on the GPU. This counter may not work on some GPUs.This counter may not work on some GPUs. This counter may not work on some GPUs. Этот счетчик может не работать на некоторых графических процессорах. |
Update | Time taken to update application logic. This includes executing all steps in the update() function of the world script. It also includes the update of states of all nodes (for example, update of the skinned animation or of a particle system to spawn new particles).
|
Render CPU | Time taken to prepare all data to be rendered in the current frame and feed rendering commands from the CPU to the GPU. If Render CPU time is too high, it signals that art assets may need to be optimized, for example:
|
Waiting GPU | Time between completing all calculations on the CPU up to the moment when the GPU has finished rendering the frame. (See the illustration). This counter is useful to analyze the bottleneck in your application's performance.
|
Interface | Time taken to render all GUI widgets. Время, затраченное на рендеринг всех виджетов GUI. |
Physics | Time taken to perform all physics calculations. Время, затраченное на выполнение всех физических расчетов. |
Heap | Size of all memory pools allocated for the application. Unigine allocator allocates memory in pools which allows the allocation to be faster and more efficient (if USE_MEMORY directive is used, by default). As the memory is allocated in pools, the counter value increases stepwise. Размер всех пулов памяти, выделенных для приложения. Распределитель Unigine выделяет память в пулах, что позволяет делать выделение быстрее и эффективнее (если по умолчанию используется директива USE_MEMORY ). Поскольку память распределяется по пулам, значение счетчика увеличивается пошагово. |
Memory | Size of all memory blocks allocated on demand. This counter reports how much memory in allocated pools application's resources really use.
|
System | Size of RAM memory used for the application. Размер оперативной памяти, используемой приложением. |
Allocations | Number of allocation calls during the frame. (This counter reports an allocation call even if several bytes are requested to be allocated). Количество вызовов распределения во время кадра. (Этот счетчик сообщает о вызове выделения, даже если требуется выделить несколько байтов). |
Sync Threads | Number of synchronous internal engine threads (by default, the value equals to the number of available CPU cores minus 1 and is limited by 32). Количество потоков синхронного внутреннего движка (по умолчанию значение равно количеству доступных ядер ЦП минус 1 и ограничено 32). |
Async Threads | Number of asynchronous internal engine threads (by default, the value equals to the number of available CPU cores and is limited by 32). Количество потоков асинхронного внутреннего движка (по умолчанию значение равно количеству доступных ядер ЦП и ограничено 32). |
Rendering ProfilerПрофилировщик рендеринга#
The following statistics is displayed in addition to the generic one: Следующая статистика отображается в дополнение к общей статистике:
Terrain Cache CPU | Amount of CPU memory cache, currently used for Landscape Terrain tiles, in megabytes. Объем кеш-памяти ЦП, используемый в настоящее время для листов ландшафта ландшафта, в мегабайтах. |
---|---|
Terrain Cache GPU | Amount of VRAM cache, currently used for Landscape Terrain tiles, in megabytes. Объем кеш-памяти VRAM, используемый в настоящее время для фрагментов ландшафта ландшафта, в мегабайтах. |
Terrain Virtual Texture | Memory amount, currently used for the Landscape Terrain virtual texture, in megabytes. Объем памяти, используемый в настоящее время для виртуальной текстуры ландшафта ландшафта, в мегабайтах. |
Terrain Detail Textures | Memory amount, currently used for Landscape Terrain details, in megabytes. Объем памяти, используемый в настоящее время для деталей ландшафта, в мегабайтах. |
Terrain Reload Tiles | Number of Landscape Terrain tiles that are currently awaiting reloading after being modified. Количество плиток ландшафтного ландшафта, ожидающих перезагрузки после модификации. |
Terrain Reload Bounds | Number of events causing reloading of tiles (one bound may cause reloading of multiple tiles). Количество событий, вызывающих перезагрузку тайлов (одна граница может вызвать перезагрузку нескольких тайлов). |
Sounds | Memory amount, currently used for sound samples, in megabytes. Объем памяти, используемый в настоящее время для звуковых образцов, в мегабайтах. |
Meshes Limit | Maximum amount of VRAM that can be used for mesh geometry, in megabytes. Максимальный объем VRAM, который может использоваться для геометрии сетки, в мегабайтах. |
Meshes | Amount of VRAM currently used for mesh geometry, in megabytes. Объем VRAM, используемый в настоящее время для геометрии сетки, в мегабайтах. |
Textures Limit | Maximum amount of VRAM that can be used for textures, in megabytes. Максимальный объем VRAM, который можно использовать для текстур, в мегабайтах. |
Textures | VRAM amount currently used for textures, in megabytes. Объем VRAM, используемый в настоящее время для текстур, в мегабайтах. |
Textures Cache | VRAM amount currently used for textures cache, in megabytes. Объем VRAM, используемый в настоящее время для кеширования текстур, в мегабайтах. |
Buffers Render | VRAM amount currently used for rendering buffers (Gbuffer, post-effects, etc.), in megabytes. Объем VRAM, который в настоящее время используется для буферов рендеринга (Gbuffer, пост-эффекты и т. д.), в мегабайтах. |
Buffers Shadows | VRAM amount currently used for shadows maps, in megabytes. Объем VRAM, используемый в настоящее время для карт теней, в мегабайтах. |
Async Buffer | Memory amount currently used for the async buffer, in megabytes. Intermediate buffer to which resources are asynchronously loaded during the streaming process. Available for OpenGL only.Available for OpenGL only. Available for OpenGL only. Доступно только для OpenGL. |
Async Buffer Indices | Memory amount currently used for mesh indices buffer, in megabytes. This buffer is used to store indices of meshes asynchronously loaded during the streaming process. Available for OpenGL only.Available for OpenGL only. Available for OpenGL only. Доступно только для OpenGL. |
Grasses | VRAM amount currently used for grass nodes, in megabytes. Объем VRAM, используемый в настоящее время для узлов травы, в мегабайтах. |
Terrains | VRAM amount currently used for terrains, in megabytes. Объем VRAM, используемый в настоящее время для ландшафтов, в мегабайтах. |
Allocations Textures | Number of memory allocations for textures during the frame. Количество выделений памяти для текстур во время кадра. |
Compile Shaders | Number of shaders compiled during the frame. Количество шейдеров, скомпилированных во время кадра. |
Dynamic Reflections | The number of dynamic reflections drawn per frame. In case of cubemap reflections, if all six faces are updated, six reflections are rendered each frame. Количество динамических отражений, отрисовываемых за кадр. В случае отражений кубической карты, если обновлены все шесть граней, в каждом кадре рендерится шесть отражений. |
Lights | Number of light passes rendered per frame. This means that the counter displays the number of all light sources that are currently seen illuminating something in the viewport. This value also includes additional passes for rendering lights in the reflecting surfaces (if dynamical reflections are used). Plain 2D reflection will multiply the number of rendering passes by two, while cubemap-based reflection with six faces updated each frame will multiply the number of rendering passes by six.
Each light redraws mesh polygons it illuminates. That is why the higher the number of light sources, the higher the number of polygons the graphics card has to render, and the lower the performance. For example, using two omni lights will as much as double the rendered geometry they shine on.Each light redraws mesh polygons it illuminates. That is why the higher the number of light sources, the higher the number of polygons the graphics card has to render, and the lower the performance. For example, using two omni lights will as much as double the rendered geometry they shine on. Each light redraws mesh polygons it illuminates. That is why the higher the number of light sources, the higher the number of polygons the graphics card has to render, and the lower the performance. For example, using two omni lights will as much as double the rendered geometry they shine on. Каждый источник света перерисовывает полигоны сетки, которые он освещает. Вот почему, чем больше количество источников света, тем большее количество полигонов должна визуализировать видеокарта и тем ниже производительность. Например, использование двух всенаправленных источников света вдвое увеличивает визуализированную геометрию, на которую они светят. |
Shadows | Number of shadow passes rendered per frame. Each light requires a shadow pass to calculate the shadows. Again, if there are reflecting surfaces with shadows drawn reflected, this will increase the number of shadow passes. Количество проходов тени, визуализируемых за кадр. Для каждого источника света требуется проход тени для расчета теней. Опять же, если есть отражающие поверхности с нарисованными отраженными тенями, это увеличит количество проходов тени. |
Decals | Number of decals rendered per frame (in all rendering passes). Количество декалей, отображаемых за кадр (во всех проходах отрисовки ). |
Surfaces | Number of surfaces rendered per frame (in all rendering passes). Each light source doubles the number of surfaces if they are lit. Количество поверхностей, визуализируемых за кадр (во всех проходах визуализации ). Каждый источник света удваивает количество поверхностей, если они освещены. |
Triangles All | Total number of triangles rendered per frameincluding all polygons that are currently visible in the viewport as well as the ones rendered in the process of shadows rendering. Общее количество треугольников, визуализируемых за кадр, включая все полигоны, которые в данный момент видны в окне просмотра, а также те, которые отображаются в процессе визуализации теней. |
Triangles Shadows | Number of triangles rendered per frame in the process of shadows rendering. Each light source has to redraw the geometry it illuminates, increasing the overall count of rendered triangles. In order to avoid GPU bottleneck, keep the number of dynamic light sources and their radius as low, as possible. Количество треугольников, визуализируемых за кадр в процессе визуализации теней. Каждый источник света должен перерисовывать геометрию, которую он освещает, увеличивая общее количество визуализированных треугольников. Чтобы избежать проблем с графическим процессором, сохраняйте как можно меньшее количество динамических источников света и их радиус. |
Triangles Viewport | Number of triangles rendered per frame. This includes all polygons that are currently visible in the viewport (geometry). Количество треугольников, отображаемых за кадр. Сюда входят все полигоны, которые в данный момент видны в области просмотра (геометрия). |
Primitives | Number of geometric primitives rendered per frame. This includes points, lines, triangles, and polygons. The visualizer and the profiler itself also add to this counter. The value differs dramatically if tessellation is used. In this case, Triangles reports the number of triangles in the coarse mesh, while Primitives shows statistics on the number of tessellated primitives. Количество геометрических примитивов, визуализируемых за кадр. Сюда входят точки, линии, треугольники и многоугольники. Визуализатор и сам профилировщик также добавляют к этому счетчику. При использовании тесселяции значение сильно отличается. В этом случае Треугольники отображает количество треугольников в грубой сетке, а Примитивы показывает статистику количества примитивов с мозаикой. |
Dips | The number of draw calls. The higher the number of identical mesh surfaces with the same material, the more effective the instancing is (enabled by default). This means, the number of draw calls is minimized offloading both the CPU and the GPU.
You can compare the number of surfaces ( Surfaces) and the number of DIPs used to render them. For example, if there are 30000 surfaces and 1000 DIPs, it means that 30 instanced surfaces of meshes are rendered per only one draw call (Surfaces/Dips). Thus the instancing provides performance boost. Количество вызовов отрисовки. Чем больше количество идентичных поверхностей сетки с одним и тем же материалом, тем эффективнее создание экземпляров (по умолчанию включено). Это означает, что количество вызовов отрисовки сводится к минимуму, разгружая как ЦП, так и ГП. Вы можете сравнить количество поверхностей ( Поверхности ) и количество DIP, используемых для их рендеринга. Например, если имеется 30000 поверхностей и 1000 DIP, это означает, что 30 экземпляров поверхностей сеток визуализируются только за один вызов отрисовки (Surfaces / Dips). Таким образом, инстансинг обеспечивает повышение производительности. |
Shaders | Number of shaders set per frame. (Shaders are set in each of the rendering passes; hence if only one material used, its shader still needs to be set several times. When nothing is visible and the screen is black, even in this case the composite shader is still used.) Количество шейдеров, установленных на кадр. (Шейдеры устанавливаются в каждом из проходов рендеринга ; следовательно, если используется только один материал, его шейдер все равно нужно установить несколько раз. Когда ничего не видно и экран черный, даже в этом случае композитный шейдер все еще используется.) |
Materials | Number of materials set per frame. (Materials are set in each of the rendering passes.) Количество материалов, установленных для каждого кадра. (Материалы задаются в каждом из этапов рендеринга .) |
Physics ProfilerПрофилировщик физики#
This profiler shows statistics within the Physics radius. Этот профилировщик показывает статистику в пределах Физического радиуса .
The following statistics is displayed in addition to the generic one: Следующая статистика отображается в дополнение к общей статистике:
PIslands | Number of physical islands within the physics radius that could be calculated separately. The lower this number, the less efficient multi-threading is. Число физических островов в пределах физического радиуса , которое можно рассчитать отдельно. Чем меньше это число, тем менее эффективна многопоточность . |
---|---|
PBodies | Number of bodies within the physics radius. Количество тел в пределах физического радиуса . |
PJoints | Number of joints within the physics radius. Количество соединений в пределах физического радиуса . |
PContacts | Total number of contacts within the physics radius; this includes contacts between the bodies (their shapes) and body-mesh contacts. Общее количество контактов в пределах радиуса физики; это включает контакты между телами (их формы) и контакты тела и сетки. |
PCollision | Duration of the collision detection phase of physic simulation when collisions between objects are found. Продолжительность фазы обнаружения столкновений физического моделирования при обнаружении столкновений между объектами. |
PResponse | Duration of the response phase when collision response is calculated and joints are solved. Продолжительность фазы ответа , когда рассчитывается реакция на столкновение и устраняются стыки. |
PIntegrate | Duration of the integrate phase when physics simulation results are applied to bodies. Продолжительность фазы интеграции , когда результаты физического моделирования применяются к телам. |
PSimulation | Duration of all simulation phases added together. Продолжительность всех этапов моделирования, суммированных вместе. |
Watch an overview of the Physics Profiler options in our video tutorial on physics. Посмотрите обзор параметров Physics Profiler в нашем видеоуроке по физике .
World Management ProfilerПрофилировщик управления миром#
This profiler shows statistics on the whole world. Этот профилировщик показывает статистику по всему миру.
The following statistics is displayed in addition to the generic one: Следующая статистика отображается в дополнение к общей статистике:
WNodes | Total number of nodes in the world (both enabled and disabled). Общее количество узлов в мире (как включенных, так и отключенных). |
---|---|
WBodies | Total number of bodies in the world. Общее количество тел в мире. |
WJoints | Total number of joints in the world. Общее количество соединений в мире. |
WSpawn | Time in milliseconds that the engine spends on generating content in procedural nodes (such as grass, clutters, world layers). Время в миллисекундах, затрачиваемое движком на создание контента в процедурных узлах (например, трава, беспорядок, мир слои). |
Thread ProfilerПрофилировщик потоков#
The following statistics is displayed in addition to the generic one: Следующая статистика отображается в дополнение к общей статистике:
AsyncQueue | Time of asynchronous loading of resources (files/meshes/images/nodes), in milliseconds. Время асинхронной загрузки ресурсов (файлов / сеток / изображений / узлов), в миллисекундах. |
---|---|
Sound | Time of asynchronous loading of sounds, in milliseconds. Время асинхронной загрузки звуков в миллисекундах. |
PathFind | Time of asynchronous pathfinding calculations, in milliseconds. Время асинхронных вычислений поиска пути в миллисекундах. |