This page has been translated automatically.
Видеоуроки
Interface
Essentials
Advanced
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Landscape Tool
Sandworm
Использование инструментов редактора для конкретных задач
Extending Editor Functionality
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World Nodes
Звуковые объекты
Объекты поиска пути
Players
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Унифицированный язык шейдеров UUSL
Плагины
File Formats
Rebuilding the Engine Tools
GUI
Двойная точность координат
API
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
Работа с контентом
Оптимизация контента
Материалы
Material Nodes Library
Art Samples
Tutorials

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

Data streaming is an optimization technique intended to reduce spikes caused by loading graphic resources. 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. To disable asynchronous data streaming, enable the Forced mode in the Streaming Settings in the Editor or by using the render_streaming_mode 1 console command. The Forced mode ensures force-loading of all meshes and textures required for each frame at once (e.g., grabbing frame sequences, rendering node previews, warmup, etc.). В UNIGINE асинхронная потоковая передача данных включена по умолчанию. Чтобы отключить асинхронную потоковую передачу данных , включите режим Forced в Streaming Settings в редакторе или с помощью консольной команды render_streaming_mode 1 . Режим Forced обеспечивает принудительную загрузку всех сеток и / или текстур, необходимых для каждого кадра одновременно (например, захват последовательностей кадров, предварительный просмотр узлов рендеринга, разогрев и т.д.).

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

You can obtain general information on streamed resources by using the render_streaming_info console command. Общую информацию о потоковых ресурсах можно получить с помощью консольной команды render_streaming_info .

The render_streaming_info output. Вывод render_streaming_info

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

The render_streaming_list output. Вывод render_streaming_list

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

Common Streaming SettingsОбщие настройки потоковой передачи#

The Render Budget parameter limits the number of loaded/created graphic resources per frame. Use it to find the balance between loading speed and performance. Количество загружаемых / создаваемых графических ресурсов во время кадра ограничено параметром Render Budget. Его можно использовать, чтобы найти баланс между скоростью загрузки и производительностью.

To take advantage of multithreading, set the maximum number of threads used for resource streaming by using the render_streaming_max_threads console parameter. A higher number of threads results in faster streaming but may cause spikes in the case of excessive consumption of GPU resources. Чтобы воспользоваться преимуществами многопоточности, установите максимальное количество потоков, используемых для потоковой передачи ресурсов, с помощью параметра консоли render_streaming_max_threads. Большее количество потоков приводит к более быстрой потоковой передаче, но может вызвать всплески в случае чрезмерного потребления ресурсов GPU.

Примечание
The streaming system requires a GPU driver with multithreading support. Для потоковой системы требуется драйвер GPU с поддержкой многопоточности.

By default, the Memory Limit control is enabled. Resources unnecessary for rendering at the moment are unloaded on exceeding specified memory. Maximum memory amounts are defined for meshes, textures, and particles separately via the Memory Limit values specified in a percentage of the total GPU memory. По умолчанию элемент управления Memory Limit включен. При превышении указанного объема памяти выгружаются сетки и текстуры, которые на данный момент не требуются для рендеринга. Максимальный объем памяти определяется для сеток и текстур индивидуально с помощью параметров Meshes Memory Limit и Textures Memory Limit, значения указываются в процентах от общей памяти GPU.

Memory limits and VRAM occupied by streamed resources are available in the Profiler tool. Ограничения памяти и VRAM, занятые потоковыми ресурсами, доступны в инструменте Profiler

The graphic resources are regularly checked for being modified in order to be reloaded or deleted. The Destroy Duration defines the corresponding resource cleanup interval in number of frames. Графические ресурсы регулярно проверяются на предмет модификации с целью перезагрузки или удаления. Соответствующий интервал определяется параметром Destroy Duration.

Texture CacheКэш текстур#

The streaming system uses the texture cache composed of minimized copies generated for all textures with user-defined resolution stored in the data/.cache_textures folder. These copies are used instead of the originals while they are being loaded. Система потоковой передачи использует кеш текстур, состоящий из минимизированных копий, созданных для всех текстур с определяемым пользователем разрешением и хранящихся в папке data/.cache_textures . Эти копии используются вместо оригиналов при загрузке.

Texture cache is loaded at Engine's startup and always stays in the memory after loading. The following default loading order ensures smooth loading and rendering of resources: Кеш текстур загружается при запуске движка и всегда остается в памяти после загрузки. Для обеспечения плавной загрузки и отрисовки ресурсов потоковые сущности имеют следующие приоритеты загрузки:

  1. Texture cache; Кеш текстур
  2. Geometry; Геометрия
  3. Uncached textures cause spikes as texture cache is generated for them on the fly; materials with uncached and unloaded textures applied are rendered black; Некэшированные текстуры (вызывают спайки, поскольку для них на лету создается кеш текстур; материалы с примененными некэшированными и выгруженными текстурами отображаются черным)
  4. Full-size textures. Полноразмерные текстуры

Using the textures_cache_preload flag in the boot config file, you can choose the texture cache loading priority — preloaded or loaded after geometry data. Кэш текстур может быть предварительно загружен или загружен после данных геометрии, флаг Texture Cache Preload управляет приоритетом загрузки кеша текстур.

Примечание
If there is no texture cache in the project, it will be generated for all textures at Engine's startup, causing spikes and extremely increasing loading time (up to several minutes). Если в проекте нет кеша текстур, он будет сгенерирован для всех текстур при запуске движка, что приведет к резким скачкам и резкому увеличению времени загрузки (до нескольких минут).

By default, texture cache files are generated with a resolution of 16 x 16 px. Such a low resolution of textures may be noticeable during loading. По умолчанию файлы кэша текстур генерируются с разрешением 16x16, такое низкое разрешение текстур вызывает визуальные артефакты во время загрузки. Разрешение можно увеличить, установив параметр Texture Cache Resolution. Существующие файлы кеша следует удалить с помощью консольной команды render_streaming_textures_cache_destroy, после чего кеш текстуры будет автоматически сгенерирован с новым указанным разрешением.

Примечание
Be aware that higher texture cache resolution requires more video memory. Имейте в виду, что более высокое разрешение кэша текстур требует больше видеопамяти.

The video memory amount currently occupied by the texture cache is available in the Performance Profiler tool. Объем видеопамяти, занимаемый в данный момент кешем текстур, доступен в инструменте Performance Profiler.

Примечание
As all textures are cached regardless of their use in the project, it is reasonable to use the Cleaner tool to delete unused assets and thus lighten video memory consumption. Поскольку все текстуры в проекте кэшируются независимо от того, используются они или нет, разумно использовать инструмент Cleaner для удаления неиспользуемых ресурсов и, таким образом, уменьшения потребления видеопамяти.

The render_streaming_textures_cache_load and render_streaming_textures_cache_unload console commands enable you to control loading of texture cache. For example, after loading full-size textures, you can unload the texture cache from video memory for better performance. Консольные команды render_streaming_textures_cache_load и render_streaming_textures_cache_unload позволяют управлять загрузкой кеша текстур. Например. после загрузки полноразмерных текстур кеш текстур может быть выгружен из видеопамяти для повышения производительности.

OpenGL SettingsНастройки OpenGL#

Settings and workflow for OpenGL API are slightly different than for DirectX API. Настройки и рабочий процесс для OpenGL API немного отличаются от DirectX API.

Under OpenGL, the Data Streaming System engages two intermediate buffers to provide data transfer between CPU and new resource: В OpenGL система потоковой передачи данных задействует два промежуточных буфера для передачи данных между CPU и новым ресурсом:

  • Async Buffer used for mesh and texture streaming Async Buffer используется для потоковой передачи сетки и текстур
  • Async Buffer Indices used for streaming of vertex indices of meshes Async Buffer Indices используется для потоковой передачи индексов вершин мешей

The size of the Async Buffer buffer must correspond to the size of the largest resource (mesh/texture); otherwise, in the case of a larger resource, the buffer will be resized, causing a spike. размер буфера Async Buffer должен соответствовать размеру самого большого ресурса (сетка / текстура), в противном случае, в случае большего ресурса, размер буфера будет изменен, вызывая скачок.

Примечание
Be aware that the size of these intermediate buffers contributes to the increased total memory consumption. Имейте в виду, что размер этих промежуточных буферов будет добавлен к общему потреблению памяти.

The Async Buffer Synchronization parameter stands for the mechanism of buffer synchronization. So, async buffers are created only once and then synchronized, reducing the time on allocating and freeing memory. When the synchronization is disabled, both Async Buffer and Async Buffer Indices are created anew for each new resource. This reduces the number of buffer synchronizations but increases the number of memory allocations. Механизм синхронизации буфера включается, если для параметра Async Buffer Synchronization установлено значение 1 . Таким образом, асинхронные буферы создаются только один раз, а затем синхронизируются, сокращая время на выделение и освобождение памяти. Когда синхронизация отключена, и Async Buffer, и Async Buffer Indices создаются заново для каждого нового ресурса. Это уменьшает количество синхронизаций буфера, но увеличивает количество выделений памяти.

Sometimes (depending on the hardware/driver used, e.g., when the main thread is affected by synchronization primitives in other threads), memory allocation may be faster than synchronizations; in such cases, when streaming becomes unacceptably slow, it is recommended to disable buffer synchronization. Иногда (в зависимости от используемого оборудования / драйвера, например, когда на основной поток влияют примитивы синхронизации в других потоках) выделение памяти может быть быстрее, чем синхронизация; в таких случаях, когда потоковая передача становится неприемлемо медленной, рекомендуется отключить синхронизацию буфера.

There are some known issues and workarounds for some hardware/driver software: Есть некоторые известные проблемы и обходные пути для некоторых аппаратных средств / программного обеспечения драйверов:

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