This page has been translated automatically.
Последние новости:
Содержание:

UNIGINE 2.19: Масштабная оптимизация, OpenXR, Потоковая передача видео через WebRTC, Поддержка USD, Доработки анимаций

Ключевые изменения

  • Многопоточный рендеринг, который значительно повышает производительность процессора
  • Оптимизация загрузки движка при запуске
  • Основные оптимизации для снижения использования оперативной памяти
  • Улучшенная система потоковой передачи, включая асинхронную загрузку ноды
  • Поддержка OpenXR
  • Обновленная система анимации персонажей (экспериментально)
  • Поддержка экспорта в формат USD
  • Интеграция с .NET 8
  • Плагин SpiderVision для вывода изображения на несколько мониторов / изогнутый экран
  • Потоковое видео через WebRTC (экспериментально)

Оптимизация загрузки движка при запуске

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

Загрузка текстур также была оптимизирована, за счет большей многопоточности.

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

По умолчанию этот режим включен (async_init=1), но при необходимости его можно отключить.

Потоковая передача пакетов

Мы улучшили производительность потоковой передачи архивированных данных (содержимого архивов UNG и ZIP), сделав ее более быстрой и экономичной с точки зрения использования памяти, с возможностью частичного чтения архивированных файлов (частичное сопоставление), обеспечивая увеличение загрузки при запуске до 1,2 раз за счет более быстрой обработки заголовков и меньшего потребления оперативной памяти. Эта функция поддерживается только для несжатых пакетов без защиты паролем, управление остальными пакетами осуществляется по-прежнему.

Формат файла UNG был изменен для поддержки новой функциональности, а также снято ограничение по размеру в 2 ГБ для файлов внутри архива (ограничение по размеру также было снято и для остальных форматов пакетов, не только UNG). Общая производительность инициализации при запуске увеличилась.

Старые UNG-архивы не поддерживаются в проектах 2.19+, где доступен инструмент автоматической миграции. Однако автоматическая миграция не поддерживает защищенные паролем UNG-архивы, поэтому вам придется вручную распаковать их с помощью инструмента ung_x64 из версии SDK, которая использовалась для упаковки, и перепаковать их обратно в новом формате с помощью инструмента ung_x64 из UNIGINE 2.19 SDK.

Асинхронная загрузка NodeReference

Реализована отложенная асинхронная загрузка для NodeReferences при загрузке мира, обеспечивающая ускорение загрузки мира в 1,3 раза и решающая проблему с повторной генерацией идентификаторов нод.

По умолчанию этот режим включен (world_async_load_node_references=1), но при необходимости его можно отключить.

Оптимизация процессора

Реализован многопоточный рендерер DX12, значительно повышающий производительность процессора за счет эффективного использования мощности всех его ядер, обеспечивающий прирост производительности процессора в 2 раза. Режим многопоточного рендеринга накладывает некоторые ограничения на действия, которые могут выполняться во время выполнения: например, на этапе рендеринга вы не можете изменять настройки, влияющие на рендеринг поверхностей (например, render_distance_scale и т.д.), параметры материалов, назначенных поверхностям, а также параметры объектов, оказывающие влияние на рендеринг.

При необходимости вы можете вернуться в однопоточный режим с помощью консольной команды render_multithreaded = 0.

Оптимизация использования видеопамяти и оперативной памяти

Усовершенствован аллокатор UNIGINE для улучшения управления выделением ОЗУ и видеопамяти для приложения, что приводит к более быстрым и эффективным процессам выделения памяти. Обновленный аллокатор содержит статические и динамические пулы памяти для оптимизации распределения и собирает статистику для выделений небольших объемов, чтобы предотвратить утечки памяти. Количество выделений сократилось в среднем в 15 раз, что экономит до сотен мегабайт оперативной памяти в крупномасштабных проектах.

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

Также было реализовано решение для потоковой передачи mip-текстур, поэтому кэш текстур стал ненужным и будет удален в 2.19. Система потоковой передачи текстур теперь будет управлять всем автоматически, без каких-либо дополнительных действий пользователя.

Также улучшена потоковая передача Skinned Mesh. API изменился: все функции, связанные с анимацией меша, перенесены из класса Mesh в новый класс MeshAnimation. В связи с этим требуется некоторая ручная миграция кода (подробнее см. Руководство по миграции API).

Огромное количество небольших оптимизаций во многих местах обеспечит еще большую экономию оперативной памяти.

Оптимизировано потребление памяти, что замедлило увеличение потребления памяти при длительной работе приложений.

Изменения UGUID

UGUID также были оптимизированы для снижения потребления памяти - теперь UGUID не хранит строку, что делает его более легким в качестве ключа, уменьшая его размер с 72 до 20 байт. Одна только эта оптимизация может сэкономить около 5% потребления оперативной памяти, для крупномасштабного проекта с огромным количеством ресурсов это может составлять от десятков до сотен мегабайт (см. Ниже Скриншот профилировщика памяти для одного из наших крупных проектов).

Потребуется ручная миграция кода, если ваш проект содержит управление UGUID через API (подробнее см. в Руководстве по миграции API).

Качество материалов

Новая функция Materials Quality дает вам больше гибкости в поддержании баланса качества и производительности в ваших проектах. Это позволяет вам использовать текстуры в различных разрешениях и даже реализовывать различные наборы функций в графах материалов для различных значений качества (Low, Medium или High), которые задаются глобально. Просто добавьте ноду Material Quality Switch при построении графа и подключите различные варианты реализации к соответствующим портам. Различные версии материала будут сгенерированы автоматически и использованы для соответствующего выбранного уровня качества.

Уникальные карты освещения и теней для Node Reference

До версии 2.18.1 все экземпляры геометрии из Node Reference использовали единую карту освещения для каждой конкретной поверхности, ограничивая использование карты освещения для экземпляров объектов в сцене. UNIGINE 2.19 предоставляет вам возможность создавать отдельные карты освещения, а также карты теней для геометрии, хранящиеся внутри отдельных экземпляров Node Reference, снимая эти ограничения, чтобы раскрыть возможности рендеринга освещения.

Многократные отражения для динамических Environment Probe

Все динамические отражения теперь поддерживают множественные отражения, поэтому объекты Probe будут видеть и отображать себя в отражениях. Функция множественного отражения доступна для Planar Reflection Probe и динамических Environment Probe.

Расширенное управление цветом неба, облаков и дымки

Мы добавили расширенный контроль над цветом неба, облаков и дымки с помощью LUT.

Другие улучшения рендеринга

Также ожидается пакет различных улучшений рендеринга, включая следующее:

  • Добавлен временной фильтр для материалов постобработки для уменьшения шума от эффекта SSRTGI.
  • Оптимизирован денойзер, устраняющий артефакты при использовании половинного и четвертного разрешения буфера Color Clamping Blur.
  • Пакет улучшений DLSS и FSR для ПК и консолей.
  • Мы значительно улучшили производительность Local Tonemapper до 1,5-3 раз, добавив дополнительные опции для рендеринга в половинном и четвертном разрешении.
  • В Local Tonemapper добавлен новый параметр Effect On Dark Areas Gamma.
  • Исправлена ошибка с SSHGI в отражениях, создаваемых Environment Probe.
  • Исправлены визуальные артефакты на поверхности объекта Global Water, если он является дочерним по отношению к ноде Geodetic Pivot.
  • В буфер indirect interleaved добавлено управление ограничением цвета.
  • Исправлена ошибка с неправильными цветами облаков ночью (рассеяние для Moon, выбранного в качестве источника World Light).
  • Исправлены проблемы со вспышками объектива для источников света Projected и Omni с физической дымкой в зависимости от поворота источника света.

Интеграция с .NET 8

Добавлена интеграция с .NET 8 с гораздо более высокой производительностью, C # 12, улучшенный сборщик мусора, улучшенная сериализация/десериализация и многое другое (см. полный список).

Если вы используете Microsoft Visual Studio для разработки, вам следует обновить ее до версии 2022. Вы можете загрузить необходимые файлы .NET 8 по этой ссылке.

Поддержка OpenXR

Добавлена поддержка OpenXR, открытого стандарта, направленного на унификацию разработки программного обеспечения AR/VR/MR для более широкого охвата аппаратного обеспечения, сокращения затрат на перенос или переписывание кода, обеспечения бесшовной интеграции на различных платформах и устройствах. Изменение не требует от пользователей какой-либо существенной миграции кода, поскольку основные изменения произошли внутри платформы.

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

Базовая реализация в 2.19 обладает базовой функциональностью, такой как поддержка различных HMD, контроллеров и сред выполнения, включая поддержку Stereo Hidden Area.

Работы по добавлению отслеживания глаз, рук, поддержки трекера Vive, а также других типов устройств ввода уже ведутся, и результаты ожидаются в следующих релизах.

Плагин SpiderVision

Мы объединили все основные функции вывода рендеринга, связанные с дисплеями, стенами и проекторами, с искажением границ и другими функциями, ранее реализованными в наборе различных плагинов (Wall, Projections, EasyBlend и т.д.), в единый плагин под названием SpiderVision и заменили их все, начиная с версии 2.19. Это делает использование этого функционала более понятным, намного удобным и снижает накладные расходы (несколько классов, плагинов, аргументы запуска и т.д.).

Функциональность настройки экранов и проекций, реализованная в Syncker, также перенесена в плагин SpiderVision. Формат конфигурационных файлов изменился, но инструмент миграции преобразует конфигурации старого формата в новый. Потребуется некоторая миграция кода, если ваше приложение управляет проекциями через API (класс Syncker::Projections).

Поддержка Quadro Sync

Добавлена поддержка синхронизации рендеринга кадров на нескольких дисплеях для систем, использующих профессиональные графические карты NVIDIA Quadro Sync, обеспечивающие надежную и точную покадровую синхронизацию на DirectX 12 и Vulkan. Эта функция доступна в версии Sim SDK. Чтобы включить синхронизацию, просто используйте консольную команду render_quadro_sync 1 или вызовите Render::setQuadroSync(1) через API.

Потоковое видео через WebRTC (экспериментальное)

Стала доступна трансляция аудиоданных и видеокадров, отрисованных приложением UNIGINE, на неограниченное количество устройств через WebRTC (Web Real-Time Communication).

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

Новая функциональность доступна в версии UNIGINE 2 Sim SDK через экспериментальный плагин WebStream.

Другие улучшения движка

  • Исправлена ошибка, из-за которой метод World::getNodeByName() возвращал содержимое Node Reference, даже если опция Unpack NodeReferences не включена.
  • Поиск нод по названию стал медленнее из-за ряда оптимизаций памяти, исключивших сопоставление имен нод. Рекомендуется обращаться к нодам через параметры свойств/компонентов вместо того, чтобы пытаться найти их по имени, используя методы класса World (getNodeByName) и класса Node (findNode, FindNodes).
  • Исправлен сбой при загрузке мира с объектом Landscape Terrain на Vulkan, связанный с инициализацией структуры.
  • Исправлен сбой, связанный с параметрами Landscape Terrain, которые иногда появлялись при использовании визуального помощника Visualizer by Mask.
  • Каналы теперь автоматически меняются местами должным образом при копировании данных из цепочки обмена Vulkan (больше не нужно вызывать Image::swapChannels()). Это устраняет проблемы с рендерингом конечного изображения с неправильными цветовыми каналами, которые в некоторых случаях появлялись на Vulkan.
  • Завершение работы плагинов теперь выполняется, даже если включена опция fast_shutdown, поскольку у них может быть важная логика, которую необходимо выполнить при завершении работы (сохранение конфигурации, закрытие/уничтожение сокета и т.д.). В общедоступный API добавлен новый метод Engine::isFastShutdown().
  • Удален устаревший метод StructuredBuffer::getData() из API, вместо него используйте Render::transferStructuredBuffer()/ asyncTransferStructuredBuffer().
  • Исправлена ошибка с копированием структуры C++ в C# в плагине GeodeticTransformer.

UnigineEditor

Экспорт в USD

Универсальное описание сцены (формат *.usd) - это иерархический формат описания сцены с открытым исходным кодом, разработанный как универсальный формат обмена для рабочих процессов создания 3D-контента. Поддержка USD позволяет эффективно и точно обмениваться 3D-данными во многих 3D-приложениях. Формат USD широко используется в киноиндустрии, анимации и VFX для оптимизации производственных процессов и облегчения сотрудничества между художниками и студиями.

В 2.19 мы добавили возможность экспортировать содержимое сцены (модели и т.д.) В файл USD. Эта функция доступна для выпусков SIM и Engineering с помощью плагина для UnigineEditor USD Exporter. Для получения дополнительной информации об использовании плагина, пожалуйста, обратитесь к этой статье.

Несколько окон Asset Browser

Для вашего удобства теперь можно открывать одновременно несколько экземпляров окна Asset Browser, каждый со своими фильтрами, что позволяет вам перетаскивать ваши ресурсы между ними по своему усмотрению, облегчая управление ресурсами при их реорганизации между несколькими папками / точками монтирования.

Упаковка контента для релизной сборки

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

Новое в интеграции с системами контроля версий

Поддержка систем контроля версий теперь включает в себя Subversion (SVN) и Git и объединена в плагин VCSIntegration. Для получения дополнительной информации об использовании плагина, пожалуйста, обратитесь к этой статье.

Обновления редактора материалов

Больше удобства и более быстрая сборка

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

Добавлен набор горячих клавиш для редактора графов материалов для быстрого создания наиболее часто используемых нодовых графов (таких как Add, Multiply, Clamp, Sample Texture и т.д.). Вы можете просто потянуть ребро из любого сокета и нажать горячую клавишу.

Вы можете найти полный список горячих клавиш и настроить их по своему усмотрению в окне Settings.

Ноды для арифметических операций (>Add, Subtract, Divide и т.д.) теперь добавлены в Material Graph с заданными по умолчанию константами на входе, чтобы ускорить процесс сборки графа, удалив часто повторяющиеся операции.

И некоторые другие улучшения:

  • Добавлена возможность сохранения текущего состояния графа с помощью комбинации клавиш Ctrl + S.
  • Чтобы убедиться, что все текстуры, используемые в ваших постэффектах, будут там, где они вам нужны, - теперь вы можете определить, загружать ли каждую текстуру в принудительном режиме или нет, или вы можете установить режим потоковой передачи для каждого эффекта (применяется для всех используемых текстур).

  • Исправлена подсветка выделения текста в редакторе материалов.
  • В случае, если в графе материала используется неправильный/отсутствующий подграф, в сообщении об ошибке теперь будет указано название этого подграфа.

Другие улучшения UnigineEditor

  • Добавлена возможность выбирать только те поверхности, которые в данный момент видны в окне просмотра (с помощью Viewport Mask). Просто установите флажок Use Viewport Mask For Selection в Selection Filter.

  • Исправлена ошибка с операцией Make Parent (Ctrl + P), из-за которой в некоторых случаях в качестве родителя для выделенной группы выбирался неправильный элемент.
  • Операция Make Parent для свойств теперь также доступна с помощью комбинации клавиш (Ctrl + P).
  • Исправлена ошибка с обновлением названия родительского материала (в окне Parameters) после его изменения, если только материал не был изменен и сохранен.
  • Диалоговое окно выбора цвета теперь всегда находится поверх всех других окон и не блокирует ввод.
  • Исправлена ошибка со сбросом настройки Mask Terrain для объекта Grass после перезапуска редактора.
  • Исправлены сбои при перемещении или клонировании Node Reference с потерянным GUID.
  • Для вашего удобства редактируемая Node Reference теперь будет иметь другой значок в иерархии World Nodes.

  • Исправлена ошибка с переименованием ноды при нажатии на любой другой столбец иерархии World Nodes, кроме "Node Name".
  • Исправлена ошибка с размещением нод с помощью инструмента Randomizer, из-за которой Node Reference имели ненулевое смещение.
  • Исправлена неправильная индексация в Batch Rename при переименовании дочерних элементов в иерархиях материалов и свойств, а также ряд других исправлений для Batch Rename.
  • Исправлена ошибка с зависанием редактора при выборе огромного количества Node Reference, вызванная NodeGeoWidget. Источник базы данных теперь отображается только для нод ObjectLandscapeTerrain и ObjectTerrainGlobal и как параметр, доступный только для чтения.
  • Исправлен сбой при одновременном изменении размера редактора материалов и окон просмотра (DX12 + AMD).
  • Исправлен сбой при импорте модели FBX с LOD-ами и выбранным параметром Combined By Postfixes.
  • Исправлены проблемы с различным поведением выбора щелчка и кадра в отношении видимости нод.
  • Исправлена ошибка с захватом текстуры FieldShoreline при отрицательном значении по оси Z объекта Global Water.
  • Сценарии миграции теперь проверяются относительно data_path в случае, если они не были найдены рядом с двоичным файлом проекта.
  • Опция Unchanged для *.dds-ассетов по умолчанию отключена, поскольку формат выполнения текстур в UNIGINE - *.texture.
  • Исправлена ошибка "Error Can't find variable", которая появлялась при переключении между режимами рендеринга Final и Simplified.
  • Расширен AssetManager API.

Улучшения инструмента Sandworm

  • Исправлена ошибка с чрезмерным временем генерации ObjectLandscapeTerrain и размером файла в проекции 32237
  • Добавлена возможность управлять добавлением минимального значения высоты рельефа в тайл. Добавление этих данных в тайл замедляет генерацию рельефа, но может быть полезно в тех редких случаях, когда генерация приводит к появлению резких пиков, поднимающихся из воды.
  • Исправлена ошибка, из-за которой генерация Mask + Vegetation зависала после завершения генерации высот.
  • Исправлена ошибка с нежелательным растягиванием декали вдоль больших сегментов сплайна.
  • Исправлена ошибка с получением неправильного размера Landscape Layer Map при использовании низких значений уровня TMS Zoom.
  • Исправлены несоответствия в размере Landscape Layer Map, если область ограничена значениями Boundaries.
  • Исправлены проблемы с некорректной генерацией ограждений на поворотах и вдоль кривых на основе данных из векторных источников данных.

Обновления IG

  • Поддержка KDIS обновлена до версии 2.10.
  • Исправлена неправильная ориентация текста для CIGI SymbolTextDefinition.
  • Ряд изменений для поддержки работы обновленного Syncker вместе с новым плагином SpiderVision.

Экспериментальные обновления системы анимации

Наша система анимации продолжает развиваться, на данный момент добавлены следующие улучшения:

  • Реализованы цепочки поиска для ObjectMeshSkinned.
  • Ограничения вращения костей для ObjectMeshSkinned.
  • Изменено управление целями морфинга для ObjectMeshSkinned.
  • Добавлено несколько режимов интерполяции для поворота костей ObjectMeshSkinned.
  • ObjectMeshSkinned больше не поддерживает модификацию геометрии меша, поскольку существует специальный процедурный режим, в котором может быть установлен пользовательский меш.
  • Ретаргетинг анимации для ObjectMeshSkinned теперь можно зарегистрировать с помощью пар (anim_path, mesh_path).

В этом релизе представлен пакет обновлений API (подробнее см. в Руководстве по миграции API) и набор новых примеров C ++, демонстрирующих новые функции.

В настоящее время ведется активная разработка нового универсального инструмента секвенсора, который заменит старую систему трекера, и добавляются новые функции в систему анимации, так что в следующих релизах будет еще много нового. Следите за обновлениями!

Новые примеры анимации

В набор примеров C++ API Samples был добавлен раздел Animation, демонстрирующий новые функциональные возможности, содержащий следующие примеры:

  • Bones Constraints Sample - демонстрирует, как использовать ограничения на вращение костей.
  • Bones IK Sample - демонстрирует, как использовать инверсную кинематику для управления костями. Вектор инверсной кинематики используется в качестве ограничения, которое определяет плоскость изгиба суставов.
  • Bones Look At Sample - демонстрирует, как вы можете использовать цепочки look-at для ориентации в пространстве.
  • Bones Masks Sample - демонстрирует, как использовать маски костей.
  • Bones Retargeting Sample - демонстрирует, как использовать одну и ту же анимацию для скелетов, имеющих разные пропорции.
  • Bones Root Motion - демонстрирует, как извлечь движение корневой кости и применить его к объекту.
  • Bones Sandbox Sample - песочница, позволяющая проверить все доступные настройки для цепочек ИК, цепочек look-at и ограничений вращения костей.
  • Bones Simple Foot Placement Sample - простой вариант размещения ступней на поверхности с использованием IK-цепочек.
  • Bones State Machine Sample - демонстрирует, как создать анимированый конечный автомат на основе ObjectMeshSkinned для динамического переключения между состояниями персонажа (анимациями), реализация поддерживает движение корневой кости, плавные переходы и согласование движения ног.

Обновлены минимальные спецификации

По мере развития технологий системные требования также имеют тенденцию к повышению. Мы скорректировали наши минимальные спецификации в UNIGINE 2.19, чтобы сделать их более актуальными и иметь возможность добавлять новые функции и возможности.

Срок поддержки Debian 10 (Buster) истек 30 июня 2024 года, поэтому мы указываем его в качестве минимального требования с соответствующими версиями ядра и GCC.

Наши внутренние сборки были переведены на набор инструментов v143, для которого требуется как минимум CMake 3.21. В целом, в 2.19 произошли следующие обновления:

  • CMake 3.21+
  • gcc 8.3.0
  • Python 3.7+
  • Linux (ядро 4.19+) x64

Демо-проекты и сэмплы

Новые примеры API

В набор примеров C++ Samples был добавлен новый пример GUI To Texture (C++ Samples -> Render to Texture -> Gui to Texture), который демонстрирует, как отрисовать графический интерфейс в текстуре, используя метод Gui::render(), и использовать эту текстуру (как текстуру альбедо, эмиссии и т. д.) в материале, наложенном на меш (например, чтобы реализовать в игре монитор с элементами пользовательского интерфейса на экране).

CUDA в Engineering SDK

Примеры интеграции с CUDA, добавленные в 2.18.1 только для версии Sim SDK и демонстрирующие взаимодействие с внешними графическими API, также стали доступны и в версии Engineering. Вы также можете использовать их в качестве основы для интеграции графического API движка (Vulkan, DX11, DX12) с другими GAPI (OpenGL, DX, CUDA и др.).

Документация

Добавлен набор новых ультракоротких практических советов на русском языке:

Благодарим вас за чтение и не пропустите обновления, поскольку мы продолжаем работать над тем, чтобы сделать UNIGINE еще лучше!

- Ваша команда UNIGINE

Build: ()