This page has been translated automatically.
Видеоуроки
Interface
Essentials
Advanced
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Professional (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Players
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Materials and Shaders
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
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Tutorials
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

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

Потоковая передача данных - это метод оптимизации, предназначенный для уменьшения скачков, вызванных загрузкой графических ресурсов. При использовании этого метода не все данные загружаются в оперативную память (RAM) сразу. Вместо этого загружаются только необходимые данные, а все остальные загружаются постепенно, по запросу.

Загрузка ресурсов выполняется и передается в GPU отдельными асинхронными потоками. После этого ресурсы синхронизируются и добавляются в виртуальную сцену на стороне CPU.

Вывод инструмента Microprofile

В UNIGINE асинхронная потоковая передача данных включена по умолчанию. Чтобы отключить асинхронную потоковую передачу данных , включите режим Forced в Streaming Settings в редакторе или с помощью консольной команды render_streaming_mode 1 . Режим Forced обеспечивает принудительную загрузку всех сеток и / или текстур, необходимых для каждого кадра одновременно (например, захват последовательностей кадров, предварительный просмотр узлов рендеринга, разогрев и т.д.).

Система потоковой передачи обеспечивает асинхронную загрузку следующих данных в RAM:

Общую информацию о потоковых ресурсах можно получить с помощью консольной команды render_streaming_info .

Вывод render_streaming_info

Также можно распечатать список загруженных ресурсов и подробную информацию о них, используя консольную команду render_streaming_list .

Вывод render_streaming_list

Процедурно генерируемые объекты, такие как ObjectMeshClutter и ObjectGrass, генерируются в отдельном потоке, что значительно снижает затраты на производительность.

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

Количество загружаемых / создаваемых графических ресурсов во время кадра ограничено параметром Render Budget. Его можно использовать, чтобы найти баланс между скоростью загрузки и производительностью.

Чтобы воспользоваться преимуществами многопоточности, установите максимальное количество потоков, используемых для потоковой передачи ресурсов, с помощью параметра консоли render_streaming_max_threads. Большее количество потоков приводит к более быстрой потоковой передаче, но может вызвать всплески в случае чрезмерного потребления ресурсов GPU.

Примечание
Для потоковой системы требуется драйвер GPU с поддержкой многопоточности.

По умолчанию элемент управления Memory Limit включен. При превышении указанного объема памяти выгружаются сетки и текстуры, которые на данный момент не требуются для рендеринга. Максимальный объем памяти определяется для сеток и текстур индивидуально с помощью параметров Meshes Memory Limit и Textures Memory Limit, значения указываются в процентах от общей памяти GPU.

Ограничения памяти и VRAM, занятые потоковыми ресурсами, доступны в инструменте Profiler

Графические ресурсы регулярно проверяются на предмет модификации с целью перезагрузки или удаления. Соответствующий интервал определяется параметром Destroy Duration.

Кэш текстур#

Система потоковой передачи использует кеш текстур, состоящий из минимизированных копий, созданных для всех текстур с определяемым пользователем разрешением и хранящихся в папке data/.cache_textures . Эти копии используются вместо оригиналов при загрузке.

Кеш текстур загружается при запуске движка и всегда остается в памяти после загрузки. Для обеспечения плавной загрузки и отрисовки ресурсов потоковые сущности имеют следующие приоритеты загрузки:

  1. Кеш текстур
  2. Геометрия
  3. Некэшированные текстуры (вызывают спайки, поскольку для них на лету создается кеш текстур; материалы с примененными некэшированными и выгруженными текстурами отображаются черным)
  4. Полноразмерные текстуры

Кэш текстур может быть предварительно загружен или загружен после данных геометрии, флаг Texture Cache Preload управляет приоритетом загрузки кеша текстур.

Примечание
Если в проекте нет кеша текстур, он будет сгенерирован для всех текстур при запуске движка, что приведет к резким скачкам и резкому увеличению времени загрузки (до нескольких минут).

По умолчанию файлы кэша текстур генерируются с разрешением 16x16, такое низкое разрешение текстур вызывает визуальные артефакты во время загрузки. Разрешение можно увеличить, установив параметр Texture Cache Resolution. Существующие файлы кеша следует удалить с помощью консольной команды render_streaming_textures_cache_destroy, после чего кеш текстуры будет автоматически сгенерирован с новым указанным разрешением.

Примечание
Имейте в виду, что более высокое разрешение кэша текстур требует больше видеопамяти.

Объем видеопамяти, занимаемый в данный момент кешем текстур, доступен в инструменте Performance Profiler.

Примечание
Поскольку все текстуры в проекте кэшируются независимо от того, используются они или нет, разумно использовать инструмент Cleaner для удаления неиспользуемых ресурсов и, таким образом, уменьшения потребления видеопамяти.

Консольные команды render_streaming_textures_cache_load и render_streaming_textures_cache_unload позволяют управлять загрузкой кеша текстур. Например. после загрузки полноразмерных текстур кеш текстур может быть выгружен из видеопамяти для повышения производительности.

Настройки OpenGL#

Настройки и рабочий процесс для OpenGL API немного отличаются от DirectX API.

В OpenGL система потоковой передачи данных задействует два промежуточных буфера для передачи данных между CPU и новым ресурсом:

  • Async Buffer используется для потоковой передачи сетки и текстур
  • Async Buffer Indices используется для потоковой передачи индексов вершин мешей

размер буфера Async Buffer должен соответствовать размеру самого большого ресурса (сетка / текстура), в противном случае, в случае большего ресурса, размер буфера будет изменен, вызывая скачок.

Примечание
Имейте в виду, что размер этих промежуточных буферов будет добавлен к общему потреблению памяти.

Механизм синхронизации буфера включается, если для параметра Async Buffer Synchronization установлено значение 1 . Таким образом, асинхронные буферы создаются только один раз, а затем синхронизируются, сокращая время на выделение и освобождение памяти. Когда синхронизация отключена, и Async Buffer, и Async Buffer Indices создаются заново для каждого нового ресурса. Это уменьшает количество синхронизаций буфера, но увеличивает количество выделений памяти.

Иногда (в зависимости от используемого оборудования / драйвера, например, когда на основной поток влияют примитивы синхронизации в других потоках) выделение памяти может быть быстрее, чем синхронизация; в таких случаях, когда потоковая передача становится неприемлемо медленной, рекомендуется отключить синхронизацию буфера.

Есть некоторые известные проблемы и обходные пути для некоторых аппаратных средств / программного обеспечения драйверов:

  • The Mesa 3D GL: для повышения производительности необходимо отключить синхронизацию буфера (gl_async_buffer_synchronization 0). Требуются обновленные драйверы открытой графики .
  • Intel: необходимо принять во внимание, что объем VRAM ограничен ОС половиной от RAM.
Последнее обновление: 10.10.2022
Build: ()