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

UNIGINE 2.20: Оптимизации, UI Toolkit, улучшения VR/XR, Gaussian Splatting

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

  • Широкий спектр оптимизаций, повышающих производительность CPU, стабильность, время загрузки и снижающих использование RAM и VRAM
  • Улучшенные апскейлеры теперь поддерживаются и на Vulkan
  • Экспериментальный визуальный редактор пользовательского интерфейса прямо внутри UnigineEditor
  • Усовершенствования VR/XR: отслеживание взгляда, поддержка смешанной реальности, расширенная эмуляция и прочие оптимизации
  • Экспериментальная поддержка технологии Gaussian Splatting
  • Новые октаэдральные импосторы - более производительные и визуально точные
  • Обновлённая Компонентная система C#: поддержка внешних библиотек, интерфейсов и абстрактных классов
  • Различные улучшения, облегчающие работу с UnigineEditor
  • Расширенный API для процедурной модификации мешей: более безопасный и гибкий, теперь с поддержкой стриминга
  • Ускоренная генерация ландшафта в Sandworm при меньшем потреблении памяти
  • Обновлённая библиотека сэмплов: упрощенный поиск, полный охват API и исходный код, размещённый на GitHub

Потребовалось некоторое время, чтобы стабилизировать движок после полного перехода на DirectX 12 и Vulkan, но это уже дало ощутимые результаты - мы реализовали ряд оптимизаций, и это только начало!

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

Улучшенные апскейлеры и поддержка Vulkan

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

  • DLSS теперь поддерживает Vulkan как в Windows, так и в Linux, обеспечивая высококачественное масштабирование на ещё большем количестве конфигураций.
  • FSR (FidelityFX Super Resolution) теперь полностью поддерживается в Windows Vulkan, расширяя своё применение за пределы DirectX.
  • FSR обновлён до версии 3.1.3, обеспечивая улучшенное качество изображения, лучшую временную стабильность и снижение эффекта фантомных артефактов (ghosting).
  • NVIDIA Streamline SDK обновлён до версии 2.7.32 с поддержкой DLSS версии 4, предлагая повышенную визуальную точность, более высокую производительность и улучшенную поддержку новейших видеокарт.

Эти обновления значительно упрощают поиск баланса между производительностью и качеством изображения - будь то целевые высокопроизводительные системы или оптимизация под маломощное оборудование.

Улучшенные импосторы

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

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

Ключевые преимущества октаэдрического режима:

  • Улучшенное угловое покрытие - более равномерная детализация при просмотре с разных направлений
  • Более эффективное использование текстурного пространства - снижает избыточность и количество неиспользуемых пикселей
  • Более плавные переходы между ракурсами - обеспечивает качественное смешивание изображений между различными видами
  • Оптимизирован для GPU сэмплинга - совместим с зависимым от ракурса освещением и нормалями
  • Идеален для высокодетализированных импосторов - особенно эффективен для объектов на среднем расстоянии, где важна точность визуализации

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

Обновления Voxel Probe

Добавлены более гибкие настройки для управления влиянием Voxel Probe на материалы с подповерхностным рассеянием (subsurface scattering).

Улучшенный эффект повышения резкости

Эффект Sharpen используемый для усиления детализации краёв и повышения чёткости изображения, был доработан в этом релизе для более естественного отображения тонких и ярких объектов.

Нормализация косвенных зеркальных отражений

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

Функция особенно полезна в ситуациях, когда, например, под столом задаётся тёмное непрямое освещение (с помощью карты освещения, Voxel Probe или иным способом) — данная настройка обеспечивает, чтобы и непрямое зеркальное отражение в этой области также выглядело тёмным.

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

Интеграция Agility SDK (новейшие возможности DX12 для старых версий Windows 10)

Для упрощения перехода на новые функции DirectX 12 (такие, как аппаратная трассировка лучей, bindless-текстуры и многое другое), без необходимости обновления операционной системы, мы интегрировали Agility SDK. Это позволяет использовать новейшие возможности DX12, реализованные в движке, даже на более старых версиях Windows (или определённых сборках), где они ранее были недоступны без обновления ОС.

Теперь новое минимальное требование к системе - Windows 10 сборки 19041.804. Благодаря этому, появляется возможность задействовать все новые функции DirectX 12 на любой системе с Windows 10 (обновления от февраля 2021 года и новее) или Windows 11.

Улучшения рендеринга облаков

  • Исправлен рендеринг объектов ObjectSky и ObjectCloudLayer в режиме Render Before Transparent. В режиме Sort Transparent объект ObjectCloudLayer теперь всегда отображается перед ObjectSky, тогда как в режиме Render Before Transparent - позади него. Также устранены ошибки цветового смешивания, проявлявшиеся при отрисовке Солнца за объектом ObjectSky.
  • Исправлен порядок рендеринга билборд-звёзд относительно облаков. Для прозрачных материалов добавлена новая опция Rendering Clouds Order, позволяющая принудительно задавать отрисовку перед облаками или позади них.
  • Исправлена некорректная сортировка по глубине для ObjectCloudLayer в сочетании с непрозрачными объектами в режимах рендеринга Downsampling, Interleaved и Panorama.
  • Исправлены ошибки отбрасывания теней планетами и визуальные артефакты на облаках, искривлённых с помощью Geodetic Pivot.
  • Устранены визуальные артефакты (дёргание, мерцание) на горизонте при рендеринге облачных слоёв в режиме Interleaved Rendering.
  • Исправлена отрисовка теней от облаков при низком положении солнца (восход и закат).

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

  • Исправлена отрисовка теней от источников света типа Projected для прозрачных объектов при включённой опции Transparent Shadow.
  • Устранены визуальные артефакты у импосторов на основе травы вызванные некорректной обработкой глубины в вспомогательном буфере (Auxiliary buffer).
  • Исправлена проблема с сортировкой декалей во вспомогательном буфере, из-за которой их порядок сбивался при включении/выключении или перезагрузке мира.
  • Зеркальные отражения, формируемые с помощью Raymarching Probes и SSR теперь корректно отображаются на поверхностях с нулевой шероховатостью.
  • Исправлена ошибка в расчёте Bent Normals, устраняющая избыточный шум.
  • Обеспечена корректная работа масштабирования SSGI для всех уровней разрешения SSRTGI.
  • Добавлена поддержка рендеринга Environment Probe в режиме Additive Blend поверх Voxel Probe для симуляции отражённого глобального освещения (GI) от солнца. Environment Probe с более высоким порядковым номером будет отрисовываться поверх Voxel Probe с меньшим номером. Для включения данной функции, необходимо активировать новую опцию Render Above Voxel Probes в настройках Environment Probe.
  • Исправлена ошибка, из-за которой прозрачные материалы не отрисовывались при включённой SRAA.
  • Исправлена запись во вспомогательный буфер для материалов на графах, назначенных Mesh Clutters.

Пользовательский интерфейс

Встроенный фреймворк для UI с визуальным редактором (экспериментальная функция)

До версии 2.20 создание пользовательского интерфейса не предусматривало работу в формате drag-and-drop - требовались знания API и написание значительного объёма кода. Благодаря вкладу талантливого сообщества теперь доступен мощный инструмент Toolkit, реализованный в виде плагина. Сейчас в его состав входят два основных компонента: UI Designer и Runtime Editor.

UI Designer превращает разработку интерфейса в визуальный процесс, позволяя художникам и дизайнерам создавать UI без необходимости глубоких знаний в программировании.

Основанный на гибком API виджетов, UI Designer заменяет ручное написание кода на интуитивное редактирование с помощью перетасиквания элементов. Вы можете собирать макеты интерфейсов в интерактивном режиме и сразу видеть результат прямо во вьюпорте.

В состав плагина входят все ключевые функции для разработки интерфейсов:

  • Богатая библиотека элементов: готовые к настройке метки, поля ввода, чекбоксы, индикаторы прогресса, таблицы, слайдеры, окна и многое другое
  • Удобные инструменты компоновки: точное выравнивание с привязкой к сетке, настройкой якорей и центра вращения
  • Полная интеграция с редактором: поддержка отмены/повтора, копирования и вставки, множественного выбора и переключения разрешений для комфортной работы
  • Иерархия элементов: удобное управление сложной структурой UI в виде дерева
  • Поддержка материалов и шейдеров: расширенные визуальные эффекты для оформления UI элементов
  • Компонентный подход к разработке: работает вместе с Компонентными системами C++ и C#
  • Готовые примеры: вместе с плагином поставляется набор семплов для быстрого старта:
    • Elements - демонстрация всех доступных типов UI-элементов.
    • Epic Menu - меню с анимацией, переходами и звуковыми эффектами.
    • Glass Material и Custom Materials - демонстрация применения различных материалов к элементам.
    • Radio Buttons и Toggled Buttons - демонстрация различных типов переключаемых кнопок.
    • Rectangle Selection - пример выделения элемента интерфейса с помощью прямоугольной области.
    • Localization - демонстрация смены языка интерфейса.
    • Show/Hide Animation - примеры анимации отображения и скрытия элементов.

Runtime Editor это лёгкий встроенный инструмент для отладки в реальном времени: позволяет просматривать информацию о нодах, изучать компоненты и запускать тестовые скрипты без остановки приложения.

Дополнение Toolkit создано для упрощения рабочего процесса и сокращения времени разработки. Со временем функциональность плагина будет расширяться за счёт новых модулей — всё с одной целью: помогать разработчикам работать быстрее, эффективнее и без лишних сложностей. Вы можете скачать его из нашего Add-On Store бесплатно для всех доступных версий последнего SDK.

Обновления виджетов

  • Добавлена поддержка настройки фоновой текстуры для контейнеров виджетов (WidgetVBox, WidgetHBox, и WidgetGridBox), включая опциональный 9-slicing и различные режимы фильтрации. Это упрощает создание GUI-панелей с пользовательскими текстурами. API был расширен, смотрите подробности в Руководстве по миграции API.
  • Исправлена ошибка применения коррекции масштабирования DPI в полноэкранном режиме.
  • Устранены проблемы масштабирования DPI в утилитах UnigineScript.
  • Исправлена ошибка метода Widget::getTextRenderSize(), в некоторых случаях возвращавшего некорректный размер. Для получения размеров текста в логических единицах (независимых от устройства пикселях) рекомендуется использовать Widget::getTextUnitSize(). Смотрите подробности в статье Масштабирование DPI.
  • Метод Gui::setExposeSpeed() теперь принимает значение 0, что отключает анимации появления/исчезновения виджетов (fade in/out). Это решает проблему, из-за которой виджеты не отображались в первом кадре.
  • Исправлены проблемы, связанные со шрифтами интерфейса: корректировка выравнивания цифр в определённых шрифтах и расчёт масштаба изображений в форматированном тексте.

Импорт Gaussian Splatting (экспериментальная функция)

Gaussian Splatting это современный метод визуализации облака точек, получивший широкое применение в задачах фотореалистичной реконструкции, AR/VR и игровых движках. В этом релизе добавлена экспериментальная поддержка импорта и рендеринга Gaussian Splats в UNIGINE через плагин, доступный в редакциях Engineering и Sim SDK.

Для визуализации данных, создайте Dummy Node, назначьте ему свойство gaussian и укажите путь к файлу в формате *.ply , содержащему точки-сплаты.

Пример реализации Gaussian Splatting можно найти в демо C++ Sim Samples.

Улучшения VR/XR

В этом обновлении мы существенно улучшили общее качество работы с VR и XR, добавив ряд новых функций и оптимизаций. Ниже приведён список основных улучшений:

Поддержка отслеживания взгляда в OpenXR

Мы добавили поддержку отслеживания взгляда в OpenXR (включая расширения XR_EXT_eye_gaze_interaction, XR_FB_eye_tracking_social, и XR_VARJO_foveated_rendering) Это открывает новые возможности для более глубокого погружения и персонализированного взаимодействия. С помощью отслеживания взгляда VR-приложения могут определять, куда смотрит пользователь, что позволяет реализовать более интуитивное управление, новые возможности для интерфейсов, навигацию на основе взгляда и повышенный уровень реализма в виртуальных мирах.

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

Динамический фовеальный рендеринг для OpenXR

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

В этом обновлении мы также доработали глобальное освещение на основе экранного тумана (Screen-Space Haze Global Illumination), специально адаптировав его для фовеального рендеринга. Это улучшение усиливает эффекты освещения и затенения, обеспечивая более реалистичное и визуально приятное восприятие, особенно в тех частях сцены, где применяется фовеальный рендеринг.

Улучшения смешанной реальности

Мы добавили базовую поддержку смешанной реальности для Oculus 3 и Varjo XR-3 через OpenXR. Также были внесены ряд исправлений и обновлений для улучшения стабильности работы смешанной реальности на устройствах Varjo - улучшено отслеживание, отрисовка и общая функциональность MR-приложений с использованием этих устройств. Теперь поддерживаются следующие расширения: XR_FB_passthrough, XR_VARJO_view_offset, XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND, XR_ENVIRONMENT_BLEND_MODE_ADDITIVE. Хромакей и некоторые другие функции Varjo пока недоступны, но будут добавлены в будущих обновлениях.

Настройка камеры для каждого глаза

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

Также теперь можно настраивать поле зрения (FOV) отдельно для каждого глаза, что предоставляет ещё различных возможностей.

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

Улучшения системы ввода OpenXR

Система ввода OpenXR получила ряд обновлений, направленных на улучшение обработки ввода и совместимости с устройствами. Это обеспечивает более плавное взаимодействие с различными контроллерами и методами ввода, делая VR-опыт более отзывчивым и интуитивно понятным.

Отслеживание рук в OpenXR

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

Улучшено подключение OpenVR-устройств

Мы доработали систему подключения устройств через OpenVR — исправили проблемы с распознаванием и сделали процесс настройки более стабильным. Теперь движок корректно определяет все подключённые устройства, совместимые с OpenVR, и не игнорирует их при запуске VR-сессии.

Оптимизация адаптивной экспозиции в VR

Адаптивная экспозиция в VR теперь работает точнее — изображение стало естественнее и стабильнее. Яркость и контраст автоматически подстраиваются под освещение в виртуальной сцене, обеспечивая комфортную и сбалансированную картинку даже при резкой смене условий.

Новые шлемы для VR-эмуляции

Добавлены новые HMD (VR-шлемы) в систему VR-эмуляции, включая самые популярные модели от HTC, Valve, Oculus, Meta, Varjo и Pico. Это даёт разработчикам больше возможностей для тестирования совместимости и производительности на разных устройствах и платформах.

Большой объем оптимизаций

SDK прошёл через серию оптимизаций, направленных на повышение общей производительности и качества графики. Ниже приведены результаты оптимизации в разных сценах по сравнению с версией 2.19.1.2.

Многопоточная отрисовка теней (DirectX 12)

Тени часто являются одной из самых ресурсоёмких частей рендеринга в реальном времени, особенно в насыщенных объектами сценах. Теперь в многопоточном режиме рендеринга (доступен в DirectX 12) полностью поддерживается отрисовка теней. Ранее каскадные тени и тени от нескольких источников света обрабатывались последовательно в отдельном потоке, но теперь они могут рендериться параллельно. Это даёт заметный прирост производительности на стороне CPU и увеличивает FPS.

В наших тестах на сложной сцене (89 источников света, 176 493 поверхности и 168 465 поверхностей с тенями) проведённых на разных конфигурациях ПК, прирост производительности CPU составил до 3 раз (в зависимости от количества ядер).

Оптимизация Omni и Projected-источников света

Мы оптимизировали отрисовку источников света типов Omni и Projected для повышения производительности. Теперь они представлены в виде мешей, что позволяет использовать глубинное тестирование и исключить лишние вычисления. Кроме того, размеры ограничивающих рамок (bounding boxes) у Projected-света были уменьшены — теперь они остаются строго по границам, даже при широком поле зрения, что улучшает отсечение по границам (bound-based culling).

Также была улучшена точность отсечения по окклюзии для этих типов света, что снижает нагрузку на рендеринг и повышает эффективность в оптимизированных сценах с заслоняющими объектами. Прирост производительности зависит от конкретной сцены (источники света, оклюддеры и прочее): в нашем тесте (198 источников света типа Omni и Projected) в версии 2.19.1 окклюдеры отсекали только 145 из них, а в версии 2.20 — уже 182.

В среднем прирост производительности на реальных и насыщенных тестовых сценах составил от 16% до 25%, в зависимости от конфигурации сцены.

Оптимизированные кластеры

В крупных сценах, моделирующих реальные пространства (как в профессиональных симуляторах), используется большое количество Mesh Clusters — оптимизированных объектов для эффективного рендеринга большого объёма геометрии.

В этом обновлении мы значительно улучшили производительность кластеров и сократили использование памяти и места на диске. Теперь данные Mesh Cluster хранятся в компактном бинарном формате, отдельно от XML-файлов (*.world, *.node). Это ускоряет загрузку и сохранение сцен, особенно в проектах с большим числом кластеров.

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

  • Потребление ОЗУ при загрузке мира снижено на 5-10% благодаря пропуску XML-парсинга.
  • Загрузка мира стала быстрее на 15–20% в реальных проектах и до 4 раз быстрее в синтетических тестах.
  • Сохранение ускорилось в 3 раза (реальные сцены) и до 16 раз в тестах.
  • Файлы сцен занимают заметно меньше места - степень уменьшения зависит от количества кластеров.

Бинарные данные кластеров теперь сохраняются в отдельную теневую папку:

mount://.binary_nodes_data/<node_or_world_guid>/clusters

Эти данные игнорируются редактором, что помогает сохранять чистоту в директории проекта — не создаются .meta-файлы и не засоряется рабочее пространство.

Миграция происходит автоматически: при сохранении мира или узла с кластерами создаются новые бинарные данные. Старые данные будут автоматически преобразованы. Однако обратите внимание: переход на бинарный формат хранения не совместим с предыдущими версиями.

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

В рамках нашей работы по повышению эффективности и масштабируемости движка — от мощных ПК до устройств с ограниченными ресурсами — мы оптимизировали потребление ОЗУ для следующих компонентов: частицы (Particles), билборды (Billboards), FFP (Fixed-Function Pipeline) и визуализатор (Visualizer).

Сжатие мешей

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

Это также улучшило оценку объёма памяти, необходимой для загрузки меша. Благодаря наличию рёбер и дерева теперь в заголовок файла записываются точные требования к ОЗУ, которые может использовать система стриминга. Раньше объём памяти оценивался по размеру файла, что часто было неточно.

Оптимизация процедурной модификации мешей

Ранее процесс изменения меша выглядел просто: переключение в процедурный режим -> установка нового меша -> применение. Однако такая схема имела ограничения и потенциально опасные подводные камни. Например, стриминг для мешей в процедурном режиме был недоступен, поэтому они постоянно находились в памяти. В сценариях с масштабной процедурной генерацией это могло привести к чрезмерному потреблению ОЗУ и видеопамяти — вплоть до сбоев и вылетов.

В этом обновлении мы расширили API и добавили несколько процедурных режимов, оптимизированных под разные сценарии и требования к производительности. Это даёт больше гибкости: от сверхбыстрых изменений мелких мешей во время работы (например, стрелки-указателя), до полноценной процедурной генерации в рантайме — со стримингом из ОЗУ или с диска, в асинхронном или принудительном режиме. Подробности доступны в Руководстве по миграции API, мы также добавили семплы Mesh Modification как для C++, так и C# библиотек семплов.

Улучшения управления памятью в DirectX 12

Версия Unigine 2.19.1 стала последней с поддержкой DirectX 11. Переход на DirectX 12 в качестве основного графического API даёт разработчикам больше контроля, позволяя эффективнее оптимизировать производительность. Однако вместе с этой "свободой" приходит и ответственность: в отличие от DX11, DX12 не выполняет автоматических оптимизаций, менее терпим к неэффективному коду и не прощает ошибок. Это выявило ряд проблем — от просадок FPS и деградации производительности до утечек памяти и неправильной конфигурации аллокатора в предыдущей реализации.

В этом релизе мы оптимизировали управление памятью под DirectX 12, устранив критические проблемы и сделав работу более стабильной и "дружелюбной" к разработчику — при этом сохранив (или улучшив) производительность на уровне DX11. Новая реализация аллокатора, основанная на умной системе управления heap-пулами, значительно повышает стабильность, снижает пиковую нагрузку на VRAM, устраняет утечки памяти, лаги и вылеты, и частично компенсирует неоптимизированный код. Это достигается ценой примерно 128 МБ дополнительного потребления памяти, что является разумным компромиссом.

Также реализован динамический пул текстурной памяти, оптимизированный под активное использование текстур — он сглаживает производительность при создании, использовании и удалении текстурных ресурсов. Эта система также использует около 128 МБ памяти.

В среднем, в наших тестовых сценах потребление памяти снизилось примерно на 50%, в зависимости от качества контента и оптимизации кода — особенно заметна разница в проектах с неэффективным управлением памятью.

Умелые разработчики, полностью уверенные в оптимизации своих пайплайнов и кода, могут уменьшить размеры heap-пулов или даже установить их в 0, полностью взяв на себя ответственность за управление памятью. Это позволяет отказаться от «умных» автоматических механизмов и максимально точно контролировать расход ресурсов.

Frame Allocator также был переработан: теперь он выделяет память мелкими блоками и переиспользует её между кадрами, что снижает пиковое потребление ОЗУ и делает процесс более плавным. Для частиц, травы и билбордов теперь используется общий индексный буфер, что уменьшает объём используемой памяти между разными типами объектов. Всё это позволяет устранить внезапные пики потребления памяти и предотвратить вылеты, вызванные её превышением.

Компонентная система C#

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

Быстрое создание пустых файлов C#

Не всю логику приложения имеет смысл размещать внутри компонентов — иногда нужно определить интерфейс, создать вспомогательный класс, разбить код на partial-классы или добавить утилиту для поддержки архитектуры.

Теперь можно создавать пустые файлы C# прямо из Браузера ассетов, не переключаясь в IDE.

Поддержка интерфейсов и абстрактных классов

Система компонентов на C# теперь поддерживает интерфейсы и абстрактные классы, что позволяет создавать более модульную, тестируемую и удобную для сопровождения архитектуру с низкой связностью и поддержкой внедрения зависимостей.

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

Подробнее - в этой статье.

Доступ к компонентам по имени

Управлять компонентами через API стало проще. Теперь вы можете легко добавлять, получать и удалять компоненты по имени с помощью методов AddComponent(), GetComponent(), and RemoveComponent() methods by names.

Source code (C++)
 AddComponent(player, "HealthComponent");
 ...
 if (health < 0)
 {
    RemoveComponent("HealthComponent");
 }

Список других улучшений в C#:

  • Добавлен набор маршаллеров C# для виджетов (Widgets), текстур (Textures) и материалов (Materials).
  • Теперь можно использовать сторонние библиотеки в ваших C# компонентах — просто добавьте ссылку на библиотеку в файл *.csproj вручную или через IDE.

Улучшения многопоточности на CPU

Движок всё активнее использует многопоточность внутри себя — и было бы нечестно не предоставить такие возможности разработчикам. Обновлённый API для работы с потоками теперь позволяет глубже интегрировать пользовательские задачи, обеспечивая точный контроль над их выполнением при детерминированном поведении во всех подсистемах движка.

Класс AsyncQueue теперь позволяет распределять задачи по нескольким потокам, задавать приоритеты и строить чёткие и предсказуемые пайплайны выполнения — будь то тяжёлая CPU-нагрузка или задачи с минимальной задержкой. Вы можете просто и эффективно организовать собственную систему задач и реализовать CPU-шейдеры для обработки данных — с помощью C++ или C# API, с минимальной сложностью и без лишнего кода.

Также в C++ API теперь доступен расширенный набор атомарных операций и примитивов синхронизации, включая мьютексы, спинлоки и lock-free типы. Можно выбрать автоматическое поведение, учитывающее контекст, или полностью вручную управлять синхронизацией — это позволяет масштабироваться от простого взаимодействия до сложных многопоточных сценариев. Смотрите подробности в Руководстве по миграции API.

Улучшения файловой системы

Поддержка длинных путей в API

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

Поддержка абсолютных путей в FileSystem::addVirtualFile

Теперь движок поддерживает абсолютные пути в методе FileSystem::addVirtualFile()что упрощает работу с файлами, расположенными вне директории проекта. Это позволяет монтировать внешние ассеты напрямую, без необходимости копировать их в папку data. Движок автоматически нормализует путь и преобразует его в виртуальный.

Стриминг из защищённых паролем и сжатых архивов

В финальных сборках приложений на базе UNIGINE контент, как правило, упаковывается в архивы UNG, часто с защитой паролем. Однако продвинутый стриминг пакетов, представленный в версии 2.19, не поддерживал работу с сжатыми и защищёнными архивами. В этом релизе это ограничение было снято. Реализовано быстрое чтение данных из UNG-архивов, при этом zlib-сжатие было отключено — оно слишком медленное для выполнения в рантайме. Теперь содержимое архива сжимается выборочно в зависимости от расширения файла: .json, .xml, .txt, .node, .world, .prop, .track, .mat, and .basemat (эти файлы не требуют стриминга). Бинарные файлы вроде .lmap, .texture,.mesh и другие упаковываются без сжатия, так как уже содержат внутреннее сжатие. Повторное сжатие для них не рекомендуется — оно почти не уменьшает размер, но вредит производительности из-за ограничений стриминга (хотя даже со сжатием такие файлы загружаются быстрее, чем в версии 2.19.1, особенно в Windows-среде).

Инструмент ung_x64 теперь использует флаг -c как список расширений файлов, подлежащих сжатию (например: -с "json xml txt node world prop track mat basemat"). Добавлен новый флаг -s — он показывает статистику сжатия по расширениям, чтобы вы могли оценить, насколько эффективно используется сжатие в вашем контенте.

Прочие улучшения

  • Реализована пакетная обработка пересечений ландшафта с клаттерами и травой что дало прирост скорости загрузки в 10 раз.
  • Опция Fast Shutdown удалена — теперь движок всегда работает так, как будто она включена Fast Shutdown = 1. Обратите внимание: повторная инициализация движка после вызова shutdown() без перезапуска приложения больше невозможна (вызов init() после shutdown()) невозможен без перезапуска приложения!
  • Исправлен сбой, вызванный рекурсивным масштабированием DPI при перетаскивании окна между дисплеями с разными настройками масштаба (Windows 10).
  • Добавлена возможность управления интервалом VSync для DirectX 12 — теперь можно настраивать, как часто выполнять обмен буферов (например, через каждый n-й интервал обновления монитора) с помощью консольной команды d3d12_vsync_interval.
  • Исправлен сбой при удалении текстуры, созданной пользователем через API и привязанной к материалу.
  • Исправлены проблемы с force feedback, теперь основные функции работают стабильно на большинстве популярных устройств. Также расширен API (Смотрите подробности в Руководстве по миграции API).
  • Исправлены ошибки при расчёте изменения положения мыши при получении "cырого" ввода мыши в режиме Absolute. Добавлена эмуляция событий мыши от тачпада в Linux — это обеспечивает одинаковое поведение с Windows, включая управление камерой и взаимодействие с виджетами с помощью тачпада.
  • Удалены форматы текстур, не поддерживаемые оборудованием: RGB8, RGB16, RGB32, RGB16U, RGB32U, RGB16F, RGB32F, R24B8 и D24. Движок всегда автоматически заменял 3-канальные текстуры (например, RGB8, RGB16, RGB32) на их 4-канальные аналоги: RGBA8, RGBA16, RGBA32.
  • Формат D24S8 заменён на D32S8 в Vulkan. Форматы RGB565 и RGB5A1 теперь имеют нативное представление, вместо привязки к RGBA8. Использование RGBA4 в качестве render target запрещено.
  • Исправлен сбой при изменении параметра базового материала, если базовый материал родительского материала отличается от текущего. Теперь в таких случаях автоматически используется базовый материал родителя.
  • Исправлена утечка памяти в ObjectMeshStatic при повторной загрузке мира.
  • Исправлена ошибка, связанная с возможным использованием неинициализированных ресурсов, которая в некоторых случаях вызывала сбой при создании окон во время инициализации плагина.
  • Исправлен сбой при рендеринге предпросмотра после импорта некоторых USD-ассетов с пустыми поверхностями (только для Vulkan).
  • Исправлен сбой при сохранении мира, если при этом были включены отладочные текстурные буферы (render_show_textures = 1).
  • Исправлен сбой при создании объекта Skinned Mesh с безымянной поверхностью.
  • Исправлен сбой при изменении позиции физического объекта с помощью setWorldPosition() внутри обработчика события Contact, вызванного для этого же тела.
  • Исправлена ошибка при запекании освещения от источника, ссылающегося на некорректную или отсутствующую целевую текстуру (некорректный GUID).
  • Исправлен сбой при изменении размеров поверхностей Static Mesh, если были изменены значения параметров Bound Scale.
  • Исправлена ошибка при размещении объектов по маске с использованием Geodetic Pivot — раньше это вызывало смещение между объектами и маской.
  • Исправлено поведение окон в режиме Modal. Теперь модальный режим доступен только для отдельных окон. Такие окна нельзя закреплять к другим или использовать для создания новых групп. Модальность нельзя изменить в полноэкранном режиме — при переходе модального окна в fullscreen все модальные связи автоматически сбрасываются.
  • Исправлены ошибки при очистке данных обрезки по пересечению для травы and клаттеров (World и Mesh), которые в некоторых случаях вызывали сбой.
  • Исправлено некорректное сжатие карт слоёв ландшафта (Landscape Layer Maps) при использовании lossy-алгоритмов на Vulkan.
  • Исправлен сбой при изменении параметров Shadow Cascade у источника света World Light.
  • Исправлен сбой, вызванный наличием подпапки с именем data внутри основной папки data.
  • Исправлена логика копирования нод с включённым флагом Always Update, которая ранее могла приводить к сбою.
  • Исправлена ошибка отсечения водных участков, из-за которой части водной поверхности не рендерились при определённых сочетаниях дальности видимости воды (Water Visibility Distance) дальней плоскости отсечения камеры (Far Clipping Distance).
  • Исправлен сбой в Vulkan при выделении нескольких объектов с большим числом поверхностей, если была включена визуализация Selected Surface TBN.
  • Улучшен порядок рендеринга воды, устранены различные ошибки и визуальные артефакты (включая прямоугольные артефакты при быстром перемещении камеры, чёрные непрозрачные объекты в первом кадре и другие.).
  • Исправлено определение активного GPU в Linux, что решило проблемы при одновременном запуске двух экземпляров движка на отдельных X-серверах с одинаковыми видеокартами.
  • Исправлен сбой при редактировании террейна в режиме Landscape Paint Mode.
  • Добавлена возможность сжатия heightmap-текстур карт слоёв ландшафта (Landscape Layer Maps) как через API, так и через UnigineEditor (см. Руководство по миграции API).
  • Исправлен сбой при загрузке больших 16K EXR-изображений, а также ошибки при создании миниатюр (thumbnails) для 16K-текстур.
  • Исправлена ошибка, при которой параметр Near Attenuation у источника света Omni перезаписывался значением из Near Attenuation Gradient Length.
  • Исправлена ошибка рекурсии при загрузке нод, которая могла приводить к сбою из-за переполнения стека при сохранении слоя нод (Node Layer) содержащего единственный Node Reference.
  • Исправлена проблема с параметром Bound Scale, который не сбрасывался корректно после изменения — последнее значение сохранялось даже после удаления параметра.
  • Добавлена поддержка OpenXR 1.1.47.

UnigineEditor

Улучшенный поиск

Представьте себе создание и редактирование цифрового двойника мегаполиса — миллионы объектов, сложные иерархии, бесчисленные параметры. Даже при хорошо организованной структуре поиск объектов в редакторе был бы трудной задачей без поиска по иерархии World Nodes, которым ежедневно пользуются все художники. Но как насчёт поиска в параметрах или длинных меню вроде Render Debug? Быстрая навигация по таким разделам бывает не менее важной.

В UnigineEditor 2.20 значительно улучшен поиск, теперь он работает в контекстных меню, на вкладке Parameters, и в выпадающих списках (таких как Helpers или Rendering Debug). Поле поиска автоматически появляется, если в меню более пяти пунктов.

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

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

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

Ускоренное запекание теней

Запекание освещения в больших и сложных сценах с множеством источников света — процесс довольно трудоёмкий. Особенно утомительно каждый раз запускать его заново после перемещения источников или изменения их параметров, теряя время, которое можно было бы использовать продуктивнее.

В этом обновлении мы значительно ускорили запекание теней, особенно при использовании кэширования теней от большого количества источников. Ускорение касается как первичного запекания, так и повторных обновлений depth-текстур.

В тестах на плотной городской сцене с дневным освещением (более 1000 источников света) время запекания улучшилось в 7,5 раз при первом запуске и в 17 раз при повторном.

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

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

Улучшенный интерфейс для физических форм и сочленений

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

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

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

Теперь можно добавлять параметры прямо через меню Create, что особенно удобно для материалов со сложной иерархией параметров.

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

Одна из самых удобных возможностей заключается в том, что теперь можно клонировать узел графа вместе со всеми его соединениями с помощью комбинации Ctrl+Shift+D. Это существенно экономит время при работе со сложными графами. Если соединения не нужны, используйте Ctrl+D для обычного клонирования..

Список прочих улучшений включает следующее:

  • Теперь можно добавлять существующие порталы через меню Create.
  • Для каждого параметра теперь можно задать условие активности (Activity Condition) , при выполнении которого параметр будет активен. Это даёт гибкость при создании сложных логических структур (можно показывать или скрывать параметры в зависимости от выбранных настроек).
  • При перетаскивании текстуры в граф автоматически добавляется нода Texture вместе с соответствующим семплером (SampleTexture).
  • Для переподключения связей теперь достаточно просто перетащить нужный коннектор на другой вход.
  • Теперь несколько выбранных узлов можно одновременно отсоединять от связей.
  • Исправлен сбой при удалении слов в WidgetEditText через сочетание Ctrl + Backspace, который часто возникал в Material Editor.
  • Исправлен сбой при добавлении сабграфа с некорректной нодой Texture в граф материала.
  • При изменении типа параметра материала теперь сохраняется его значение или автоматически приводится к новому типу, если это возможно.
  • Добавлена новая опция Bound Mode, которая позволяет задавать альтернативный способ расширения границ объектов, использующих этот материал, путём указания точек Min and Max.

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

Параллельно с масштабным обновлением системы анимации мы внесли ряд улучшений в текущую версию инструмента Tracker, устранив проблемы и повысив стабильность инструмента. Вот полный список исправлений:

  • Теперь Tracker корректно отображает все сохранённые параметры. Если узел, материал или свойство отсутствует или удалено, параметр подсвечивается красным, а трек загружается без ошибок.
  • Логирование ошибок стало более лаконичным.
  • Исправлена ошибка обработки удаления узла, из-за которой он оставался видимым во вьюпорте при зацикленном воспроизведении, если для его параметра Enabled был добавлен трек.
  • Исправлен сбой при двойном клике по манипулятору перемещения во время настройки позиции узла.
  • Кнопка Select Node теперь корректно работает для треков.
  • Обновлены иконки нод в Tracker, теперь они совпадают с иконками в редакторе, обеспечивая единообразие интерфейса.
  • Исправлена ошибка, при которой выделение оставалось активным даже после снятия выделения с узла.
  • Улучшения работы с Node Reference:
    • Файлы треков теперь корректно сохраняют параметры, изменяющие содержимое Node Reference.
    • Редактирование и применение изменений к параметрам Node Reference больше не вызывает некорректного поведения.
    • Исправлены ошибки при обработке Node Reference, созданных путём преобразования из других типов узлов (а не изначально как Node Reference).
    • Содержимое Node Reference выбранного в Tracker теперь отображается корректно.

Прочие улучшения UnigineEditor

  • Макет окон редактора теперь сохраняется автоматически при любых изменениях. Это избавляет от необходимости вручную восстанавливать расположение окон после сбоя или аварийного завершения. Также решена проблема со сбросом макета.
  • Исправлена ошибка, при которой при создании или загрузке иерархии костей для тела RagDoll создавалась лишняя копия скелета (жёсткие тела и формы коллизии) в координате (0,0,0).
  • Исправлена ошибка перезагрузки property-файлов после изменения C#-скриптов, из-за которой в некоторых случаях не обновлялись компоненты при изменениях в базовых классах.
  • Исправлен сбой при загрузке мира, если в момент загрузки было открыто окно Settings.
  • Исправлен сбой при обновлении Content Profiler через кнопку Refresh.
  • Исправлен сбой при удалении формы коллизии, если она была выбрана в заблокированном окне Parameters.
  • Исправлен сбой при использовании кисти для раскраски Mesh Cluster, открытого для редактирования. Теперь перед началом рисования появляется диалог с предложением сохранить изменения.
  • В предпросмотре анимации теперь доступна визуализация осей.
  • Исправлена ошибка при клонировании Node References, из-за которой сбрасывались параметры свойств, содержащих пути к узлам внутри этих Node References.
  • Исправлена ошибка запекания нормалей и карт просвечивания для растительности в инструменте Impostors Creator.
  • Исправлена проблема с удалением материалов и свойств, привязанных к узлам по абсолютному пути. Обратите внимание: использование абсолютных путей не рекомендуется, поскольку переименование или перемещение файлов приводит к потере связей. Лучше использовать ассеты с привязкой по GUID, что надёжнее.
  • Улучшен процесс генерации миниатюр (thumbnails) — исправлены ошибки и исключены сбои.
  • Исправлено центрирование камеры на выделенных нодах во вьюпорте при включённой опции поворота относительно центра
  • Исправлены ошибки импорта текстур, встроенных в FBX, а также проблемы с распаковкой NPOT-текстур.
  • Инструмент Randomizer больше не меняет порядок узлов в иерархии World Nodes нажатия кнопки Replace.
  • Исправлена ошибка масштабирования DPI, из-за которой редактор не открывался на втором мониторе после запуска, отображая только иконку в трее и фоновый процесс. Также решён ряд проблем, связанных с разными настройками DPI на основном и дополнительных дисплеях.
  • Исправлена ошибка, из-за которой опция Edit становилась недоступной в контекстном меню Node Reference, если одновременно редактировался другой Node Reference.
  • Исправлены ошибки при экспорте иерархии нод сцены в файл формата .mesh, возникавшие в некоторых случаях.
  • Исправлены ошибки применения карт освещения после повторного импорта FBX-моделей.
  • Исправлен сбой при создании Node Reference, если объект с редактируемой кистью перетаскивался в Браузер ассетов во включённом режиме Texture Paint Mode.
  • Исправлен сбой при повторной загрузке мира после перезагрузки файловой системы.
  • Исправлен сбой при импорте сцен USD, если текстуры к ним были добавлены как отдельные файлы через Браузер ассетов.
  • Исправлены кратковременные задержки при генерации превью материалов.
  • Исправлен сбой при обновлении списка схожих ассетов (Similar Assets) в инструменте Cleaner.
  • Кубические карты теперь импортируются с указанием одного размера стороны текстуры (а не ширины и высоты отдельно), что устраняет сбои при неверных размерах.
  • При миграции на версию 2.20 автоматически исправляются некорректные ссылки на рантаймы для нестандартных форматов текстур (.tga, .png, и т.д.), устраняя ошибки, мешавшие использованию mip-карт для текстур высокого разрешения.
  • Отключено автоматическое повторное запекание текстур для Environment Probes в режиме Realtime Update во время запекания освещения.
  • Исправлен сбой при повторном импорте *.upackage файла, если объект из этого пакета был выбран в окне World Nodes.
  • Исправлен сбой при откате изменений параметров типа Curve в свойствах.
  • Исправлена ошибка, из-за которой сбрасывался текущий выбор в окне Parameters при пустом результате поиска или смене фильтра.
  • Названия материалов и свойств, содержащие числа, теперь корректно сортируются в иерархии.
  • Синхронизированы фильтры монтирования и редактора, чтобы исключить чтение файлов, которые должны быть скрыты, и устранить связанные с этим сообщения об ошибках в консоли.
  • Исправлена ошибка, из-за которой настройки прогрева игнорировались в инструменте Video Grabber. Теперь превью мира сохраняется корректно с учётом настроек прогрева.
  • Исправлена ошибка UV-развёртки, появившаяся в версии 2.19.1.2. Добавлена новая опция Unwrap UV Version в настройках импорта FBX, позволяющая выбрать нужную версию алгоритма UV-развёртки при обновлении проекта: выберите Xatlas V1 если вы выполняли развёртку и перезапекание освещения в 2.19.1.2, в ином случае (если запекание происходило до 2.19.1.2) - выберите Xatlas V0.

  • Исправлена ошибка при импорте данных о касательном пространстве.

Sandworm

Инструмент Sandworm продолжает активно развиваться — выполнено множество оптимизаций и исправлений. Оптимизации позволили значительно сократить общее время генерации: до 35% для выводе в LandscapeTerrain, и до 10% для вывода в Global Terrain (результаты получены при работе с крупным исходным набором данных объёмом 90 ГБ на следующей конфигурации: AMD Ryzen 9 7950X, 128 GB RAM, 4070 TI Super, SSD 870 EVO 4TB).

Список наиболее заметных улучшений:

  • Более информативные индикаторы прогресса (теперь отображается процент загрузки данных TMS)
  • Улучшена система кэширования:
    • Значительно снижено потребление памяти (до 14 GB вместо 100+ GB).
    • Оптимизирована вычислительная нагрузка при расчёте идентификатора для каждого элемента кэша.
    • Повышена устойчивость к внезапному завершению работы.
    • Снижено количество загружаемых тайлов в отдельных случаях.
  • Исправлено несовпадение Vegetation Layer и Vegetation Mask возникавшее при размещении далеко от начала координат.
  • Исправлена ошибка, из-за которой слои с недоступными данными не отображались в списке Sources.
  • Исправлены баги, связанные с регенерацией вручную удалённых нод.

SpiderVision

  • Улучшена отрисовка изогнутых линий: прямые линии, которые становятся кривыми при рендеринге через SpiderVision, теперь выглядят гладко и без артефактов.
  • Улучшена интерпретация данных EasyBlend.
  • Повышена общая стабильность, включая мелкие исправления интерфейса.

Обновления IG

Мы продолжаем развивать наш высокоуровневый генератор изображений (IG). Ниже перечислены основные улучшения:

  • Добавлена поддержка CIGI-пакетов RateCtrl и TrajectoryDefinition.
  • Для компонентов CIGI теперь можно задавать тип маски.
  • Добавлена возможность переопределять управление временем суток.
  • Буфер интерполяции теперь можно масштабировать вручную.
  • Исправлены проблемы при удалении сущностей через состояние Destroyed в CIGI.
  • Исправлена ошибка, при которой вращение ArticulatedPart сбрасывалось, если позиция имела смещение.
  • Исправлен неправильный расчёт направления ветра для ParticlesWind и флюгера (windsock).

Сэмплы и шаблоны

Понять, как работает 3D-движок, — это не только про чтение документации, но и про практику. Именно поэтому, помимо большого набора демонстрационных сцен, показывающих рабочие процессы, эффекты и системы в действии, мы расширили SDK большим количеством новых примеров API на C++, C# и UnigineScript, охватывающих ключевые возможности движка.

Но мы пошли дальше, чем просто добавление новых сэмплов. Библиотека сэмплов была полностью переработана: стала более структурированной и интуитивной, ко всем примерам добавлены развернутые описания как в SDK бразуере, так и в обновленном браузере сэмплов, который теперь поддерживает поиск прямо внутри интерфейса. Теперь найти нужный сэмпл — будь то рендеринг, физика, звук или оптимизации — быстрее и проще, чем когда-либо.

Для вашего удобства мы также выложили все примеры компонентов на C++ и C#, а также примеры интеграции с Photon и Dear ImGui в открытый доступ на GitHub. Вы можете ознакомиться с ними в следующих репозиториях:

В набор C++ Сэмплов добавлены следующие сцены:

  • Fire Hose - базовая симуляция тушения пожара с интерактивным управлением струёй воды через шланг.
  • Dynamic Field Height - создание динамического Height Field с анимированной текстурой синусоиды с использованием C++ API.
  • Player Persecutor - реализация пользовательской камеры слежения за целью на основе PlayerDummy, повторяющая логику PlayerPersecutor с настройкой смещения, обработкой коллизий и несколькими режимами следования.
  • Visualizer - демонстрация всех возможностей класса Visualizer для визуальной отладки.
  • Update Physics - демонстрация различий между реализацией физического движения в методах update() и updatePhysics().
  • Day-Night Switching - автоматизированная смена дня и ночи с переключением освещения и материалов.

  • Camera Zoom - реализация интерактивной камеры с регулируемым зумом и фокусировкой на выбранных объектах сцены.
  • IFps Usage - использование Game::getIFps() для создания логики движения, независимой от частоты кадров.
  • Spectator Controller - настраиваемая камера от первого лица с возможностью управления движением и обработкой физических коллизий.
  • Observer Controller - реализация свободной камеры, аналогичной той, что используется в UnigineEditor (поддерживает масштабирование, панорамирование, фокусировку и регулировку скорости).
  • Mount Points - создание и использование точек монтирования для доступа к внешним папкам и пакетам (например, *.zip, *.ung).
  • Ray Intersection - использование лучей для выборочного обнаружения пересечений на основе масок.
  • Bound Intersection - поиск пересечений между объёмами (фрустум, сфера, коробка) и ограничивающими рамками (bounding boxes) узлов.
  • BodyFracture Explosion - симуляция радиального взрыва и разрушение объектов класса BodyFracture с разлетом осколков.
  • BodyFracture Falling Spheres - непрерывно падающие и разрушающиеся при столкновении объекты, с использованием класса BodyFracture.
  • BodyFracture Shooting Gallery - реализация стрельбища на основе физики с использованием объектов BodyFracture.
  • Microprofiler - использование Microprofile, продвинутого CPU/GPU профайлера, для анализа производительности и оценки времени выполнения различных участков кода.
  • Boids - симуляция и управление поведением стайных объектов по алгоритму Boids для различных типов сущностей.

  • Events - демонстрация четырёх различных подходов к подписке на события UNIGINE через C++ API, с акцентом на различие в управлении временем жизни обработчиков и их организацией.
  • Events Advanced - продвинутые способы работы с событиями: использование дополнительных аргументов, игнорирование ненужных параметров и хранение дескрипторов подписок для последующего отключения.
  • JSON - генерация структурированного JSON-документа с объектами, массивами и различными типами данных (строки, числа, булевы значения, null), с последующим обходом и форматированным выводом.
  • UDP Sockets - использование API сокетов для отправки и приёма UDP-сообщений между двумя участниками сети.
  • TCP Sockets - установка и управление TCP-соединениями между сервером и несколькими клиентами, каждый из которых представлен отдельным приложением на базе UNIGINE.

В набор C# Сэмплов были добавлены следующие примеры:

  • Visualizer
  • IFps Usage
  • Update Physics
  • Day-Night Switching
  • Camera Zoom
  • Spectator Controller
  • Observer Controller
  • Body Fracture Explosion
  • Body Fracture Falling Spheres
  • Body Fracture Shooting Gallery
  • Microprofiler
  • Events Advanced
  • GUI to Texture
  • Abstract Components

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

Добавлен набор ультракоротких обучающих видео HowTo Quick Tips на английском, китайском и русском языках:

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

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

Build: ()