This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Режимы вывода изображения
Физика
Браузер SDK 2
Лицензирование и типы лицензий
Дополнения (Add-Ons)
Демонстрационные проекты
API Samples
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Унифицированный язык шейдеров UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

Асинхронная потоковая передача данных

Data streaming is an optimization technique intended to reduce spikes caused by loading graphic resources and compiling shaders. With this technique, not all the data is loaded into memory at once. Instead, only the required data is loaded, and the rest is loaded progressively on demand. Потоковая передача данных — это метод оптимизации, предназначенный для уменьшения скачков, вызванных загрузкой графических ресурсов и компиляцией шейдеров. При использовании этого метода данные загружаются в оперативную память (RAM) не всем объемом сразу: сначала загружаются только необходимые данные, а остальные — постепенно по запросу.

Resource loading is performed and transferred to the GPU in separate asynchronous threads. After that, resources are synchronized and added to the virtual scene on the CPU side.Ресурсы загружаются и передаются в GPU отдельными асинхронными потоками. После этого ресурсы синхронизируются и добавляются в виртуальную сцену на стороне CPU.

The output of the Microprofile tool. Вывод в инструменте Microprofile

In UNIGINE, asynchronous data streaming is enabled by default. You can disable asynchronous data streaming in UnigineEditor or via the console:В UNIGINE асинхронная потоковая передача данных включена по умолчанию. Вы можете отключить асинхронную потоковую передачу данных в UnigineEditor или через консоль:

  • In UnigineEditor, open the Settings window and go to the Streaming section. Here you can switch the streaming mode for textures and/or meshes.В UnigineEditor откройте окно Settings и перейдите в раздел Streaming. Здесь вы можете переключить режим потоковой передачи текстур и/или мешей.
  • In the console, run the corresponding commands that switch the streaming mode for textures and/or meshes.В консоли запустите соответствующие команды, которые переключают режим потоковой передачи текстур и/или мешей.

There are two main streaming modes — asynchronous (Async) and forced (Force). The Force mode ensures force-loading of all resources required for each frame simultaneously (e.g., grabbing frame sequences, rendering node previews, warmup, etc.).Существует два основных режима потоковой передачи — асинхронный (Async) и принудительный (Force). Режим Force обеспечивает принудительную загрузку всех ресурсов, необходимых для каждого кадра одновременно (например, захват последовательностей кадров, рендеринг предварительного просмотра нод, прогрев и т.д.).

Примечание
The Force mode may cause freezes, so use it only if you are sure that the resources in your world fit into the available memory.Режим Force может привести к зависанию, поэтому используйте его только в том случае, если вы уверены, что ресурсы в вашем мире вмещаются в доступную память.

The streaming system provides asynchronous loading of the following data to RAM: Система потоковой передачи обеспечивает асинхронную загрузку следующих данных в RAM:

Procedurally generated objects such as ObjectMeshClutter are generated in a separate thread, significantly reducing performance costs.Процедурно сгенерированные объекты, такие как ObjectMeshClutter, генерируются в отдельном потоке, что значительно снижает затраты на производительность.

You can obtain general information on streamed resources by using the render_streaming_meshes_info and render_streaming_textures_info console commands.Вы можете получить общую информацию о потоковых ресурсах, используя консольные команды render_streaming_meshes_info и render_streaming_textures_info.

The render_streaming_meshes_info output.Вывод render_streaming_meshes_info

It is also possible to print the list of loaded resources and detailed information on them by using the render_streaming_meshes_list and render_streaming_textures_list console commands.Также можно вывести на экран список загруженных ресурсов и подробную информацию о них с помощью консольных команд render_streaming_meshes_list и render_streaming_textures_list.

The render_streaming_meshes_list output.Вывод render_streaming_meshes_list

Asynchronous Shader Compilation
Асинхронная компиляция шейдеров#

In addition to the asynchronous loading of meshes and textures, the streaming system provides asynchronous shader compilation and loading.Помимо асинхронной загрузки мешей и текстур, система потоковой передачи обеспечивает асинхронную компиляцию и загрузку шейдеров.

There are also 2 modes — asynchronous (Async) and forced (Force). In the Force mode, all shaders required for the current frame are compiled and loaded to RAM simultaneously in the current thread. By default, the asynchronous mode is used.Для этого также предусмотрены 2 режима — асинхронный (Async) и принудительный (Force). В принудительном режиме все шейдеры, необходимые для текущего кадра, компилируются и загружаются в оперативную память одновременно в текущем потоке. По умолчанию используется асинхронный режим.

Примечание
You can switch the compilation mode in UnigineEditor or by using the render_shaders_compile_mode console command.Вы можете переключить режим компиляции в UnigineEditor или с помощью консольной команды render_shaders_compile_mode.

The number of compiled and loaded shaders are available in the Performance Profiler tool.Количество скомпилированных и загруженных шейдеров можно посмотреть в инструменте Performance Profiler.

Memory Usage Limits
Ограничения на использование памяти#

All memory allocations for graphic resources are limited by the committed memory size, which includes both RAM and VRAM.Все аллокации памяти для графических ресурсов ограничены размером выделенной памяти, которая включает в себя как оперативную память, так и видеопамять.

You can limit the memory available to the application to avoid crashes and find the balance between performance and memory consumption. There are two main parameters for this:Вы можете ограничить объем доступной приложению памяти, чтобы избежать сбоев и найти баланс между производительностью и потреблением памяти. Для этого есть два основных параметра:

  • Usage limits for RAM and VRAM that restrict memory consumption to a specified percentage of the committed memory. However, you should remember that if the streaming system exceeds the VRAM usage limit, it will start using RAM for loading graphic resources. If it exceeds the RAM usage limit, the application will crash.Usage Limit VRAM/RAM — лимиты на использование ОЗУ и видеопамяти, которые ограничивают потребление определенным процентом от выделенной памяти. Однако следует помнить, что если система потоковой передачи превысит лимит использования видеопамяти, она начнет использовать ОЗУ для загрузки графических ресурсов. Если это превысит лимит использования оперативной памяти, приложение завершит работу с ошибкой.
  • Free space for RAM and VRAM that defines how much memory is additionally reserved for allocations per frame. These parameters ensure that there is always enough memory for resource loading in the current frame. The values should be determined empirically, depending on the application.Free space VRAM/RAM — свободное пространство на ОЗУ и в видеопамяти, определяющее, сколько памяти дополнительно резервируется для аллокаций на каждый кадр. Эти параметры гарантируют, что в текущем кадре всегда будет достаточно памяти для загрузки ресурсов. Значения должны определяться эмпирически, в зависимости от приложения.
Примечание
You can disable VRAM limits if necessary by toggling on the VRAM overcommit option. It may lead to spikes and freezes of the application but will ensure continuous loading of graphic resources. This option is unavailable for RAM, as exceeding available RAM will result in the application crash.При необходимости вы можете отключить ограничение видеопамяти, включив опцию VRAM overcommit. Это может привести к скачкам и зависаниям приложения, но обеспечит непрерывную загрузку графических ресурсов. Эта опция недоступна для оперативной памяти, так как выход за пределы доступной оперативной памяти приведет к сбою приложения.

You can specify the usage limits and free space via UnigineEditor or the console:Вы можете указать ограничения на использование и свободное пространство с помощью UnigineEditor или консоли:

Примечание
For particle systems, there is a separate memory limit in percentage of the total GPU memory.Для систем с частицами существует отдельное ограничение памяти в процентах от общей памяти графического процессора.

Texture Streaming
Потоковая передача текстур#

The streaming system manages textures automatically. There are two modes of texture streaming:Потоковая система автоматически управляет текстурами. Существует два режима потоковой передачи текстур:

  • Asynchronous mode that provides asynchronous loading of textures.режим Asynchronous, обеспечивающий асинхронную загрузку текстур;
  • Forced mode for force-loading of textures required for the current frame at once.режим Forced для одновременной принудительной загрузки текстур, необходимых для текущего кадра.

For texture streaming optimization, you can enable texture mipmap loading, which significantly improves performance by reducing the memory consumption of texture streaming. This feature allows for the correct mipmap to be loaded at the current moment. When mipmaps loading is enabled, the textures that are not currently in use are unloaded.Для оптимизации потоковой передачи текстур вы можете включить загрузку mip-карты текстур, что значительно повышает производительность за счет уменьшения потребления памяти при потоковой передаче текстур. Эта функция позволяет загружать правильную mip-карту в текущий момент. Когда включена загрузка mip-карт, текстуры, которые в данный момент не используются, выгружаются.

To enable and configure mipmaps loading via UnigineEditor, do the following:Чтобы включить и настроить загрузку mip-карт через UnigineEditor, выполните следующие действия:

  1. Open the Settings window and go to the Streaming section.Откройте окно Settings и перейдите в раздел Streaming.
  2. Toggle on the Mipmaps flag and specify the required Mipmaps Density.Установите флажок Mipmaps и укажите требуемое значение Mipmaps Density.
Примечание
You can do the same via the console using the render_streaming_textures_mipmaps and render_streaming_textures_mipmaps_density commands.Вы можете сделать то же самое через консоль, используя команды render_streaming_textures_mipmaps и render_streaming_textures_mipmaps_density.

Mipmaps Density sets the density of mipmaps relative to the screen resolution and helps to define which mipmap should be loaded at the current moment. You can specify different values for different quality presets. For example, you can set the density to less than 1 for the low-quality preset. In this case, the engine will load the low-resolution mipmaps, and the textures will look blurry.Mipmaps Density устанавливает плотность отображения mip-карт относительно разрешения экрана и помогает определить, какая mip-карта должна быть загружена в текущий момент. Вы можете задать разные значения для разных настроек качества. Например, вы можете установить плотность менее 1 для пресета низкого качества. В этом случае движок загрузит мип-карты с низким разрешением, и текстуры будут выглядеть размытыми.

Additionally, you may need to configure the Texture Streaming Density Multiplier for each texture in some materials to achieve the desired visual effect.Кроме того, для достижения желаемого визуального эффекта в некоторых материалах может потребоваться настроить значение Texture Streaming Density Multiplier для каждой текстуры.

Forced Streaming for Textures in Post-Effect Materials
Принудительная потоковая передача текстур в материалах с постэффектами#

To ensure all textures for your post-effects are available when needed, the forced streaming mode is set for all post materials by default. You can find this setting in Material Editor.Чтобы обеспечить доступность всех текстур для постэффектов при необходимости, для всех постматериалов по умолчанию установлен режим принудительной потоковой передачи. Вы можете найти эту настройку в разделе Material Editor.

However, if some textures in the post material continuously change (via code, Tracker, etc.), it is recommended to specify the forced streaming mode per texture:Однако, если некоторые текстуры в материале постэффекта постоянно меняются (с помощью кода, трекера и т.д.), рекомендуется указать принудительный режим потоковой передачи для каждой текстуры:

  1. In the Material Editor, set Setting For Each Texture in the Textures Streaming Mode parameter for your post-effect material.В параметре Material Editor установите значение Setting For Each Texture в параметре Textures Streaming Mode для вашего материала для постэффектов.
  2. Toggle the forced streaming on and off for each texture individually in the Parameters panel of the Material Editor.Включите и выключите принудительную потоковую передачу для каждой текстуры в отдельности на панели Parameters редактора материалов.

These settings override the global texture streaming settings specified in the Settings window.Эти настройки переопределяют глобальные настройки потоковой передачи текстур, указанные в окне Settings.

Mesh Streaming
Потоковая передача мешей#

Meshes can be loaded to RAM and VRAM separately for more efficient work with geometry. This allows eliminating memory leaks: meshes participating in collisions and intersections can be loaded to RAM only, if they are not currently rendered.Меши можно загружать в оперативную память и видеопамять отдельно для более эффективной работы с геометрией. Это позволяет устранить утечки памяти: меши, участвующие в коллизиях и пересечениях, можно загружать только в оперативную память в том случае, если они в данный момент не отрисовываются.

There are two modes of mesh streaming to RAM/VRAM:Существует два режима потоковой передачи мешей в RAM/VRAM:

  • Asynchronous mode that provides asynchronous loading of meshes.Асинхронный режим, обеспечивающий асинхронную загрузку мешей.
  • Forced mode for force-loading of meshes required for the current frame at once.Принудительный режим для одновременной принудительной загрузки мешей, необходимых для текущего кадра.

The asynchronous loading to RAM and VRAM differs. Even if a mesh hasn't been loaded to video memory in time, it doesn't affect the application behavior (you may only notice some lag). However, if a mesh hasn't been loaded to memory in time, it may lead to incorrect physical behavior of objects in the scene.Асинхронная загрузка в RAM и VRAM отличается. Даже если меш не был загружен в видеопамять вовремя, это не влияет на поведение приложения (вы можете заметить только некоторую задержку). Однако, если меш не был загружен в память вовремя, это может привести к неправильному физическому поведению объектов в сцене.

First of all, we highly recommend you to use shapes for collision and intersection detection as it is faster. If, for some reason, it doesn't suit you, use the following methods:Прежде всего, мы настоятельно рекомендуем вам использовать физические формы (shape) для обнаружения столкновений и пересечений, поскольку это быстрее. Если по какой-то причине это вам не подходит, воспользуйтесь следующими методами:

  • Load meshes and hold them in memory while they exist. API of some mesh-based objects provides this functionality out of the box. It may partially solve the problem with incorrect behavior, however, only a few meshes can remain loaded.Загружайте меши и сохраняйте их в памяти, пока они существуют. В API некоторых объектов на основе меша эта функциональность предусмотрена. Это может частично решить проблему с некорректным поведением, однако загруженными могут оставаться только несколько мешей.
  • Use the prefetch system that allows asynchronous pre-loading of meshes participating in collisions and intersections to memory before they are used:Используйте систему предварительной выборки, которая позволяет асинхронно предварительно загружать меши, участвующие в коллизиях и пересечениях, в память перед их использованием:

    1. Set the Radius prefetch mode.Установите режим предварительной выборки Radius.
    2. Specify the physics radius (for collisions) and/or the radius within which intersections are calculated.Укажите физический радиус (для столкновений) и/или радиус, в пределах которого рассчитываются пересечения.
    3. Specify the prefetch radius that should exceed the collison and intersection radius values.Укажите радиус предварительной выборки, который должен превышать значения радиуса столкновения и пересечения.

    You can also preload all meshes for which collisions and intersections are calculated (the Full prefetch mode), however it will significantly increase RAM usage.Вы также можете предварительно загрузить все меши, для которых вычисляются коллизии и пересечения (режим предварительной выборки Full), однако это значительно увеличит использование оперативной памяти.

  • API of some mesh-based objects, as well as the MeshRender class API provides also methods which allow implementing a custom prefetch logic for pre-loading meshes.В API некоторых mesh-объектов, а также API класса MeshRender также есть методы, которые позволяют реализовать пользовательскую логику предварительной выборки для предварительной загрузки мешей.
Примечание
It is highly recommended to use shapes for collision and intersection detection.Настоятельно рекомендуется использовать формы (shape) для обнаружения столкновений и пересечений.

Asynchronously streamed meshes shouldn't be modified. The only way to change such mesh is to make it procedural. A procedural mesh is a mesh created via code, such meshes have a specific streaming mode — they are always kept in memory after creation and never unloaded until the object is destroyed via code or the mesh returns to its normal mode (streaming from a source file). The mesh-based objects API allows switching a mesh to the procedural mode and apply changes.Асинхронно передаваемые меши не должны изменяться. Единственный способ изменить такой меш — сделать его процедурным. Процедурный меш — это меш, созданный с помощью кода, такие меши имеют определенный режим потоковой передачи — они всегда сохраняются в памяти после создания и никогда не выгружаются, пока объект не будет уничтожен через код или меш не вернется в свой обычный режим (потоковая передача из исходного файла). API объектов на основе меша позволяет переключать меш в процедурный режим и применять изменения.

Последнее обновление: 16.09.2024
Build: ()