UNIGINE 2.17: DX12 и Vulkan (стабильные версии), динамическое глобальное освещение (PSDGI), оптимизация производительности, усовершенствованные инструменты, Photon (для сетевых приложений)
Ключевые изменения
- Поддержка DirectX 12 и Vulkan API (стабильные версии)
- Оптимизация производительности
- Динамическое глобальное освещение в панорамном пространстве (PSDGI)
- Пространственное темпоральное шумоподавление (денойзер)
- Улучшения стриминга
- Улучшенные разделители и дефлекторы для частиц
- Усовершенствованные инструменты редактора
- Обновления IG (VR, метеорадар, символы CIGI)
- Интеграция с платформой Photon (для сетевых приложений)
- Набор новых примеров C ++
- Обновление Add-On Store
В этом выпуске представлена готовая к работе поддержка DirectX 12 и Vulkan, улучшенный стриминг и другие оптимизации производительности движка и редактора, огромный пакет обновлений для большинства инструментов редактора, огромный шаг к полномасштабному решению GI (новый пространственный денойзер + Panorama Space Dynamic GI) и многие другие обновления.
DirectX 12 и Vulkan (стабильные версии)
Мы приложили много усилий для реализации функций, отсутствующих в DirectX 12 и Vulkan (таких как отрисовка ландшафта, запросы перекрытия и т.д.), а также для стабилизации и связанных с этим модификаций движка. И теперь мы готовы заявить: поддержка DirectX 12 и Vulkan теперь готова к работе и доступна для всех (как в редакторе, так и во время выполнения)!
Непосредственным результатом является увеличение производительности процессора. Пожалуйста, имейте в виду, что этот релиз является последним, поддерживающим OpenGL (начиная с 2.18 основным графическим API для Linux будет Vulkan).
Динамическое глобальное освещение в панорамном пространстве (PSDGI)
Мы добавили новый режим Raymarching для источника освещения Environment Probe. Этот подход к динамическому глобальному освещению намного качественнее и прогрессивнее того, что использовалось в UNIGINE до сих пор.
В режимах проецирования sphere и box проба обеспечивает имитацию отражений, как если бы мы находились внутри сферической или прямоугольного помещения соответственно. Новый режим позволяет Environment Probe отображать отражения с учетом геометрии окружающих поверхностей.
Технологию можно представить себе как глобальное освещение в экранном пространстве, но в диапазоне 360 градусов. Этот подход не заменяет полномасштабное решение для глобального освещения, но обеспечивает аналогичное качество для открытых пространств. Освещение рассчитывается с использованием физически корректных формул, гарантирующих, что отражения, а также рассеянное освещение станут намного более реалистичными по сравнению с традиционными методами на основе кубических карт.
Этот подход очень ресурсоемкий, поэтому мы не рекомендуем использовать его повсеместно. Это экспериментальный подход, и он не будет работать универсально для любого контента, но если у вас локация с открытым миром, все будет работать просто отлично. Кроме того, вы можете дополнительно использовать только рассеянное освещение или только зеркальное. Например, если вы используете карты освещения, обеспечивающие максимальную информацию о рассеянном освещении, Raymarching Environment Probe улучшит качество отражений, приблизив его по качеству к трассировке лучей.
Вы можете поместить пробу в произвольной точке сцены, как обычно, или прикрепить ее как дочерний элемент к камере. В режиме Raymarching проба всегда отрисовывается динамически - у нее нет статического режима с предпросчетом.
Данная технология в сочетании с новым пространственным темпоральным шумоподавлением (денойзером) — это огромный шаг в сторону полномасштабного глобального освещения.
Пространственное темпоральное шумоподавление (денойзер)
Мы заменили нашу старую систему шумоподавления на новую. Старая версия не могла обеспечить требуемый уровень подавления шума при расчете глобального освещения с использованием алгоритмов трассировки лучей.
Новая реализация денойзера намного лучше справляется с шумами в отражениях и рассеянном освещении, и в то же время не теряет информацию об освещении. Теперь мы не применяем шумоподавление для каждого постэффекта отдельно, достаточно включить его один раз в целом для буфера непрямого рассеянного освещения и для буфера отражений. Этот подход позволяет нам эффективно удалять шумы для любой технологии GI, такой как SSRTGI, SSR или даже трассировка лучей.
Шумоподавление отключено:
Шумоподавление включено:
Обновленные водные декали
Water Decals были улучшены и теперь поддерживают черный цвет альбедо, что позволяет создавать нефтяные пятна на поверхности воды.
Water Decals теперь поддерживают auxiliary буфер, позволяющий имитировать локальные изменения температуры воды (охлаждение или нагрев, например, при горении нефтяного пятна) и визуализировать их в термодатчиках.
Другие улучшения рендеринга
- Исправлена проблема с искажением цветов при автоматической коррекции баланса белого в случае слишком ярких объектов во вьюпорте.
- Исправлена проблема с неправильным отображением дымки в отражениях среды.
- Добавлены облака и вода в Texture Buffer Screen Color Opacity, что обеспечивает видимость воды и облаков за прозрачными объектами.
- Объединены постоянные буферы для Environment Probe и исправлен шейдер.
Разделители и дефлекторы для частиц
В этом релизе мы также внесли изменения в системы частиц, чтобы сделать их более гибкими и удобными. Дефлекторы, шум и внешние силы, которые ранее имели привязку к определенной системе частиц, теперь являются отдельными объектами, что упрощает их настройку и делает ее намного удобнее без необходимости многократного повторения одних и тех же настроек для нескольких систем частиц.
На частицы теперь влияют ноды Physical Force или Physical Noise - просто добавьте Physical Force, настройте ее, и она будет взаимодействовать с частицами, испускаемыми всеми системами частиц, имеющими соответствующую Physical маску!
Также была добавлена пара новых нод для замены старых дефлекторов:
Particles Spacer (ParticlesFieldSpacer) - невидимый объем, используемый для вырезания в заданном объеме частиц, генерируемых нодами Particle System, например, чтобы внутри автомобиля или под мостом не рисовался дождь или снег (функционал аналогичен Spacer Field, который используется для вырезания воды или травы). Particles Spacer может иметь форму параллелепипеда, цилиндра, капсулы, сферы или эллипсоида и может иметь произвольное положение и ориентацию, обеспечивающую покрытие нужного объема. Spacer полностью заменяет и расширяет функциональность старого clipper-deflector, который представлял собой лишь плоский прямоугольник. Более того, новый Spacer позволяет вырезать частицы из объема, содержащего сам эмиттер системы частиц, что было невозможно, да и работает он в 10 раз быстрее!
Particles Deflector (ParticlesFieldDeflector) - невидимый прямоугольная или квадратная поверхность, которая физически взаимодействует с системами частиц (не затрагивая другие объекты), преграждая частицам путь и заставляя их отскакивать от его поверхности. Новый дефлектор заменяет функции встроенных дефлекторов, его можно произвольно располагать и поворачивать для получения желаемого результата.
Каждый Spacer и Deflector как отдельную ноду можно использовать для отсечения или отражения частиц, генерируемых несколькими системами частиц (ранее была затрагивалась только одна система "владельца"), причем взаимодействие контролируется с помощью новой маски Particles Field, что дает вам большую гибкость.
Другие изменения:
- Дублирующие флаги PhysicsIntersection/Collision были удалены из группы взаимодействия параметров системы частиц для обеспечения консистентности. Теперь флаги и маски для Collision и PhysicsIntersection собраны в одном месте - параметры поверхности.
- Для нод Deflector и Spacer доступен новый режим взаимодействия, позволяющий учитывать размер частиц при обнаружении столкновений и пересечений, обеспечивая правильное взаимодействие по длине. частицы.
- Вы также можете теперь регулировать минимальный и максимальный размер, который одна частица может занимать на экране в диапазоне от 0 (0% от размера экрана) до 1 (весь экран), чтобы точно настроить эффекты и сделать их еще более реалистичными.
Оптимизация производительности
Улучшена асинхронная потоковая передача геометрии
Мы значительно улучшили асинхронную потоковую передачу геометрии, устранив утечки памяти и повысив контроль над процессом стриминга.
Меши теперь можно загружать отдельно в RAM и видеопамять, чтобы ускорить и повысить эффективность работы с геометрией, позволяя устранить утечки памяти, которые происходили ранее. Регулируемые лимиты памяти и время жизни мешей, загруженных в RAM и VRAM, позволяют избежать ситуаций, когда меш остается загруженным в память даже если он больше никогда не рисуется. Более того, новый подход к потоковой передаче позволяет загружать геометрию, участвующую в обнаружении столкновений и пересеченияй, только в оперативную память, если в данный момент она не отрисовывается.
Доступно 3 режима потоковой передачи в RAM / VRAM:
- Асинхронный режим, обеспечивающий асинхронную загрузку геометрии.
- Принудительный режим для немедленной загрузки геометрии, необходимой для текущего кадра.
- Режим загрузки всей геометрии, доступной в проекте, при запуске приложения. Этот режим хорош для небольших проектов с небольшим количеством мешей.
Асинхронная загрузка в RAM и VRAM отличается:
- Даже если геометрия не была загружена в видеопамять вовремя, это не влияет на поведение приложения (вы можете заметить лишь некоторое отставание).
- Если геометрия не была вовремя загружена в оперативную память, это может привести к неправильному физическому поведению объектов в сцене.
Мы разработали дополнительные методы, которые позволяют получать правильные результаты и устранять скачки производительности, вызванные физическими расчетами:
- Использование системы предварительной выборки для асинхронной предварительной загрузки геометрии, участвующей в столкновениях и пересечениях, в память перед использованием.
- Загрузка одного меша, участвующего в физических взаимодействиях, и сохранение его в памяти.
Чтобы сцена отображалась сразу при запуске приложения, теперь вы можете указать нужное количество кадров для загрузки сразу после первого кадра.
Теперь вы можете установить ограничение по времени удаления ресурсов отдельно для геометрии и текстур.
Все описанные выше параметры потоковой передачи можно настроить в Редакторе, а также задать с помощью консольных команд render_streaming_* или API.
Параметры статистики рендеринга в Профилировщике производительности были сгруппированы по оперативной памяти и видеопамяти.
Мы также улучшили API mesh-бъектов (ObjectMeshStatic, ObjectMeshCluster, ObjectMeshClutter, ObjectGuiMesh и DecalMesh), сделав его понятным и простым в использовании:
- Загрузка базового Static Mesh в RAM и VRAM выполняется отдельно (как в асинхронном, так и в принудительном режимах).
- C помощью новых методов loadAsyncRAM() и loadAsyncVRAM() вы можете реализовать собственную систему предзагрузки для геометрии
- Изменение базового Static Mesh теперь возможно, только если она находится в режиме Procedural. Procedural меш - это меш, созданнаый из кода, такие меши имеют определенный режим стриминга — они всегда остаются в памяти после создания и не выгружаются до тех пор, пока объект не будет уничтожен из кода или меш не вернется в свой обычный режим (потоковая передача из исходного файла).
Мы избавились от неявной принудительной загрузки геометрии в видеопамять. Теперь API MeshStatic предоставляет методы, позволяющие управлять загрузкой, удалением и перезагрузкой геометрии в видеопамять.
Улучшенный стриминг данных ландшафта
В этом релизе также улучшена производительность асинхронной потоковой передачи для Landscape Terrain и снижены скачки производительности:
- Предварительная загрузка данных о высотах в пределах радиуса предварительной выборки кэша процессора для правильного расчета столкновений и пересечений.
- Асинхронная загрузка сжатых Landscape Layer Map, которые нельзя изменить (недоступны в случае использования Layer Map без сжатия).
Флаги Immovable, Collision и Intersection
Мы добавили пакет оптимизаций, касающихся управления нодами с флагами Immovable, Intersection и Collision, чтобы повысить производительность и сделать весь процесс четким и понятным.
Для обеспечения согласованности флаги Collision, Intersection и Immovable могут быть включены только для объектов, которые фактически поддерживают эти функции (по умолчанию флаг Immovable включен для всех созданных объектов).
До версии 2.17 вы могли установить флаг Immovable для любой ноды, в то время как действия с нодами, добавленными в специальное пространственное дерево для неподвижных (Immovable) объектов, были абсолютно неограниченными. Таким образом, можно было столкнуться с падением производительности, не зная причины (такие случаи особенно трудно отследить в крупномасштабных проектах). Мы наложили некоторые ограничения на добавление нод в пространственное дерево. Теперь в случае любого неправильного действия с нодой, помеченной как Immovable (любое действие, влияющее на пространственное дерево), вы получите соответствующее предупреждение (непример, в случае попытки присвоить неподвижному объекту физическое тело).
Движок по умолчанию предупредит вас о любых попытках перемещения объектов, помеченных как неподвижные. Вы можете полностью запретить такие действия или, наоборот, разрешить их и при необходимости отключить эти предупреждения с помощью консольной команды world_moving_immovable_node_mode или через API. Однако, пожалуйста, имейте в виду, что есть два случая, когда вы можете отключить предупреждения и разрешить перемещение Immovable объектов:
- Во время выполнения процедурной генерации уровней. Это может вызвать некоторое зависание, но не сильно повлияет на производительность. По завершении процесса генерации вам следует снова включить предупреждения.
- При инициализации мира. Это изменит время загрузки мира, но не повлияет на общую производительность.
Поддержка HighDPI (движок)
Были улучшены настройки конфигурации поддержки High DPI движком (будут реализованы в редакторе в следующих релизах) с добавлением различных режимов настройки DPI для масштабирования DPI с целью облегчения интеграции с другими фреймворками (без масштабирования вообще, масштабирование устанавливается пользователем, масштабирование основного монитора в системе, настройка DPI для каждого монитора).
Теперь вы можете задавать размер окна и виджета как в пикселях, так и в единицах измерения. В случае, если масштабирование не применяется, 1 пиксель равен 1 единице, в противном случае эти значения будут отличаться, это следует учитывать в логике приложения. Если вы не хотите внедрять эти изменения в свою логику, отключите масштабирование графического интерфейса с помощью консольной команды auto_dpi_scaling 0.
В настоящее время масштабирование подразумевает изменение масштаба текстуры, а не загрузку текстуры с другим разрешением. Это будет реализовано в следующих релизах.
Примеры управления высоким разрешением с помощью API показаны в следующих сэмплах:
- source/samples/Api/WindowManager/WindowSandbox
- source/samples/Api/WindowManager/WindowSize
Асинхронная передача данных с GPU на CPU
Реализация поддержки Vulkan и DirectX 12 сильно изменилась, и старый способ получения данных, сгенерированных GPU, на CPU использовать уже нельзя.
Мы удалили методы Texture::getImage / StructuredBuffer::getData() и добавили вместо них следующие:
- Render::transferTextureToImage() — получение изображения внутри функции обратного вызова в том же кадре (swap). Вызывает синхронизацию CPU-GPU (как это было раньше).
- Render::asyncTransferTextureToImage() — получение изображения внутри функции колбэка без вызова синхронизации CPU-GPU. Цикл работы двигателя должен повторяться снова и снова, чтобы завершить эту асинхронную операцию.
- Рендеринг::transferStructuredBuffer()/asyncTransferStructuredBuffer() — аналогично StructuredBuffer.
Все остальные методы передачи данных, сгенерированных графическим процессором, в CPU (возвращающие результат в виде изображения), были заменены на те, которые возвращают результат в виде текстуры. Для того, чтобы получить эти данные в виде изображения (как это было раньше), вам нужно будет передать полученные данные в CPU, используя метод синхронной или асинхронной передачи класса Render — transferTextureToImage() или asyncTransferTextureToImage() соответственно. Это актуально для таких методов, как Viewport::renderImage *(), Render::renderImage *(), FieldShoreline::createShorelineDistanceField(), WidgetSpriteViewport::RenderTexture() и другие. Render::compressImage() / asyncCompressImage() представляют собой единственное исключение — они не могут выводить результат в текстуру, принимающую обратные вызовы в качестве аргументов.
Сопутствующие изменения в API:
- В класс Image добавлен новый метод createMipmapsCubeGGX(), позволяющий генерировать mip-карты GGX на CPU, конечно, медленнее и с более низким качеством, чем на GPU, но предоставляющий результат синхронно (на самом деле это, пожалуй, единственный случай, когда следует использовать этот метод).
- Класс ImageConverter теперь имеет новый метод run() с обратным вызовом, позволяющий использовать графический процессор, и runCpu(), который использует только центральный процессор и способен возвращать результат синхронно.
- Добавлен новые методы Engine::beginOutsideLoopRender()/endOutsideLoopRender() для случаев, когда требуется вызывать методы класса Render извне цикла движка.
- Колбэки Render::transferTextureToImage()/transferStructuredBuffer() будут вызываться в endOutsideLoopRender(). Рекомендуется по возможности выполнять рендеринг внутри цикла Engine.
- Мы перевели на новый API все подсистемы движка и редактора (кисти, запекание и т.д.), а также все соответствующие примеры, такие как LiDAR, Screenshot и Offscreen.
Для получения более подробной информации и примеров, пожалуйста, ознакомьтесь с Руководством по миграции API.
Плагины UNIGINE и пользовательские плагины (важно)
Структура файлов плагинов была изменена, чтобы обеспечить консистентное управление всеми плагинами, включая те, что разрабатывают пользователи, а также изменился подход к их именованию.
Для получения более подробной информации, пожалуйста, ознакомьтесь с Руководством по миграции API. И не забудьте настроить пути сборки и имена плагинов для всех плагинов в промигрированных на новую версию SDK проектах.
Буферизованный ввод для джойстиков и геймпадов
Мы значительно улучшили обработку ввода для джойстиков и геймпадов, сделав ее более удобной и надежной, добавив буферы событий, так что о потерянных событиях ввода теперь можно забыть. Старые классы ControlsGamePad и ControlsJoystick были полностью заменены на классы InputGamepad и InputJoystick соответственно, все необходимые функции были перенесены, экземпляры этих классов управляются (создаются, удаляются и обновляются) движком автоматически, вам больше не нужно делать это вручную. Количество геймпадов и джойстиков динамически изменяется при подключении или отключении устройств (это количество не ограничено движком, хотя существует ограничение в 16 устройств, накладываемое SDL). В класс Input как для джойстиков, так и для геймпадов добавлен новый набор обратных вызовов, что позволяет отслеживать больше событий.
Для получения более подробной информации об изменениях, а также инструкций по переносу вашего кода, пожалуйста, обратитесь к Руководству по миграции API.
Другие изменения ввода:
- Добавлена поддержка ввода с тачпада для контроллеров DualShock / DualSense.
- Переименован enum Input::DEVICE_TYPE в Input::DEVICE, чтобы избежать конфликтов с enum DEVICE_TYPE, определенным в winioctl.h.
- В UnigineScript API добавлены методы класса Input, связанные с событиями.
Рефакторинг окон
Класс EngineWindow значительно вырос, поэтому мы разделили его на отдельные объекты (EngineWindow, EngineWindowViewport, EngineWindowGroup), чтобы сделать работу более понятной.
Другие важные изменения:
- Добавлены колбэки для каждого действия (изменение размера, фокусировка, сворачивание, события от мыши и т.д.).
- Реализованы режимы автоматического удаления.
- Реализован стиль движка для окон с возможностью кастомизации (положение окна, размер, оформление). Такой подход позволяет создать стандартный набор настроек окна для различных систем и фреймворков.
- Реализована настройка фиксированного размера, минимального и максимального размеров.
- Настройки размера для окон, групп и вкладок теперь унифицированы.
- Размер группы теперь учитывает размеры вкладок.
- Для окон добавлена возможность отрисовки в GUI, как у остальных виджетов, что может быть полезно, когда доступно только одно системное окно или при переключении приложения в полноэкранный режим.
Вы можете попробовать все настройки в действии в новом наборе примеров Window Manager (source/samples/Api/WindowManager). Этот набор был расширен и теперь охватывает почти весь API для управления окнами (WindowBehaviour, WindowIntersection, WindowModal, WindowOrder, WindowPosition, windowSize и WindowVisual). Вы можете создавать любые окна и группы в WindowSandbox и познакомиться с большинством используемых функций API для лучшего понимания.
Другие улучшения движка
- Порядок сериализации данных нод стал стабильным, что позволяет избежать перестановку данных при сохранении мира. Также устранена самопроизвольная перестановка позиций элементов кластера при сохранении мира.
- Добавлены файлы базы данных программы (.pdb) для исполняемых файлов движка, плагинов и библиотек версии release. Теперь пользователи могут отправлять отчеты о сбоях со стеком вызовов и для release версий.
- Добавлен принудительный стриминг текстур окружения для обеспечения корректного освещения при загрузке мира.
- Исправлена проблема с удалением выделенного текста в виджетах EditText и EditLine.
- Добавлены функции прокрутки и изменения размера для виджетов EditText.
- Исправлена ошибка, из-за которой не вызывался метод OnEnable() для компонентов C#, которые были отключены при запуске приложения.
- Исправлена проблема с вызовом колбэков WorldTrigger для объектов с отключенной опцией Trigger Interaction.
- Исправлена проблема с загрузкой NodeLayer, имеющего вложенный NodeLayer с недопустимым GUID.
- Добавлен новый метод String::join(), позволяющий объединять несколько строк.
- В общедоступный API добавлен набор скрытых внутренних методов рисования для WidgetExternBase. Подробности см. в Руководстве по миграции API.
- В плагин FMOD добавлен набор недостающих методов.
- Исправлено поведение Wheel Joint под поверхностью Landscape Terrain (например, когда автомобиль въезжает на подземную парковку или в туннель). При необходимости вы можете установить флаг CanBeUnderTerrain.
- Исправлена проблема с выборкой масок Landscape, которая иногда приводила к исчезновению объектов, размещенных с использованием этих масок.
- Исправлена перезагрузка данных о Landscape Terrain, которые иногда вызывали "мигание" из-за нескольких последующих операций перезагрузки.
- Исправлена проблема с импортом графов материалов из пакета (.upackage).
- Исправлена проблема с неработающим параметром Participate in Post-Effects.
- Ортографический режим для камер и плееров теперь работает корректно, как в редакторе, так и во время выполнения. Также можно переключить режим проекции на ортографический и указать желаемую высоту через API во время выполнения.
- Версия SDL была обновлена до версии v2.0.18.
- Исправлен сбой, связанный с использованием перегрузки String::format("%s", text). В случае, если вам нужно напрямую указать список аргументов переменной, используйте новую перегрузкуString::vformat("%s", text).
- Исправлено некорректное удаление виджетов при завершении работы движка, которое иногда приводило к сбою.
- Добавлена возможность изменять текущий шрифт для WidgetCanvas, обеспечивающее возможность вывода текств на canvas с использованием нескольких разных шрифтов.
- Добавлен визуализатор Vertex Color для выделения геометрии с использованием выбранных цветов вершин (эта функция также доступна в редакторе через меню Rendering Debug).
- Цвет вершин по умолчанию (используемый для мешей, не имеющих данных Vertex Color при импорте) изменен на черный с нулевым значением альфа (0, 0, 0, 0) вместо (1, 1, 1, 1), который использовался ранее.
- Улучшен алгоритм генерации GUID, позволяющий избежать возможных коллизий.
- Исправлены проблемы с выбором элементов в WidgetTreeBox и WidgetListBox, которые иногда приводили к выделению неправильных элементов.
- Параметры переноса текстур теперь корректно сохраняются в файле материала.
- В класс Gui для обеспечения правильного отображения виджетов WidgetSpriteViewport и WidgetSpriteNode во время выполнения метода render(). Этот метод используется для выполнения необходимых приготовлений к рендерингу (например, подготовки текстуры) после update() и вызывается автоматически для WidgetSpriteViewport и WidgetSpriteNode. Если вы реализуете пользовательский графический интерфейс или виджеты с использованием класса WidgetExtern, вам следует перенести все подобные приготовления в preRender() и вызвать preRender() для Gui вручную после update().
- Добавлен новый режим фонового обновления для обеспечения рендеринга окон, свернутых в трей (это может быть полезно для захвата последовательностей кадров в фоновом режиме, когда окно приложения свернуто). Для получения дополнительной информации, пожалуйста, обратитесь к Руководству по миграции API.
- В MathLib добавлен новый метод reversebits(), который изменяет порядок битов (для каждого компонента) на обратный.
UnigineEditor
Ускоренный запуск
Мы оптимизировали процесс генерации пользовательского интерфейса, разделив весь процесс на отдельные части с выполнением по требованию, что обеспечивает заметное ускорение редактора на старте для всех проектов. Стоит учитывать, что для крупномасштабных проектов это ускорение будет менее ощутимым, поскольку создание пользовательского интерфейса занимает значительно меньше времени, чем обработка контента в проекте. Среднее время генерации графического интерфейса при запуске сократилось почти на 50%.
Улучшенные инструменты профилирования
Обновленный профилировщик текстур и визуализаторы
Для повышения производительности и обеспечения приемлемого FPS в больших проектах с огромным количеством ресурсов не обойтись без оптимизации. Performance Profiler дает лишь обзорную информацию, для получения более подробной информации нужно больше инструментов. Один из таких инструментов, Texture Profiler, мы обновили, добавив визуальное представление относительного потребления памяти, где каждая текстура представлена в виде цветного прямоугольника, размер которого пропорционален объему занимаемой текстурой памяти.
В меню Rendering Debug появились два новых визуализатора текстур, упрощающих оптимизацию:
- Texture Max Pixel Count - окрашивает поверхности в зависимости от максимального разрешения текстур, используемых в назначенных им материалах, применяя цвета в соответствии с масштабом.
- Texture Screen Density - позволяет оценить взаимосвязь между максимальным разрешением текстуры материала и размером треугольников на экране, к которым он применяется: синий - указывает на недостаточное разрешение текстуры, в то время как желтый говорит о том, что разрешение превышает необходимый уровень, если же цвет зеленый - все в порядке.
Профилировщик текстур (Texture Profiler) стал частью Профилировщика контента (Content Profiler) наряду с новым Профилировщиком поверхностей (Surface Profiler), который вы также найдете в 2.17.
Новый Профилировщик поверхностей
Куда бы вы ни посмотрели в сцене, скорее всего, вы увидите поверхность - это ключевой элемент рендеринга. Поверхности имеют множество опций и параметров, влияющих на визуализацию и общую производительность вашего приложения (расстояния видимости уровней детализации, количество полигонов, карты освещения, настройки столкновений и теней и т.д.). И снова для эффективной оптимизации вам нужны подробности. Мы добавили новый Профилировщик поверхностей (доступен для Development сборок), чтобы дать вам эти подробности - информацию о количестве поверхностей, мешей, объектов и материалов, видимых во вьюпорте. Схема в правой части аналогична схеме в Профилировщике текстур и дает краткий обзор относительного потребления памяти.
Вы можете выбрать данные поверхности для отображения в таблице (сведения, связанные с полигоном, маски, потребление памяти, все, что вам нужно) и отсортировать элементы по мере необходимости.
Еще больше вспомогательных инструментов
Мы продолжаем расширять арсенал средств визуальной отладки, поэтому мы добавили набор новых вспомогательных визуализаторов в меню Helpers для различных целей, позволяющих выборочно выделять и проверять практически все, что угодно, от эмиссионных объектов до объектов, имеющих определенную маску Intercestion. Список новых инструментов включает в себя:
- Объекты с материалами, имеющими включенное опцию emission.
- Объекты, использующие сложные теневые шейдеры.
- Объекты, у которых отключена опция Immovable.
- Объекты, которым назначена, неиспользуемая или недоступная Surface Custom Texture.
- Для объектов с включенными флагами Physics Intersection или Collision.
- Объекты, использующие материалы на основе графов или неграфовые материалы.
- Ноды, взаимодействующие с триггерами, клаттерами или травой.
- Ноды, имеющие определенные маски (Collision, Viewport, Shadow, Material или любые другие).
- Вы можете настраивать расстояние видимости для визуализаторов, чтобы уменьшить визуальный шум, сохраняя при этом необходимую информацию об объектах поблизости.
Улучшенная система пакетов данных
Для упрощения передачи вашего контента, кода и других созданных вами элементов между проектами и предоставления доступа к ним другим пользователям, мы продолжаем совершенствовать создание пакетов данных и управление ими в редакторе.
Помимо добавления файлов ассетов из каталога data вашего проекта в пакет, вы также можете захотеть упаковать код C++ из каталога source, двоичные файлы вашего плагина из каталога bin и, возможно, что-то еще… Начиная с версии 2.17, вы можете упаковывать каталоги и файлы, находящиеся на одном уровне с каталогами bin и data, с помощью кнопки Add External Files.
Вы можете сохранить текущую иерархию файлов пакета и экспортировать настройки в пресет. Позже вы можете использовать этот пресет для повторного создания того же пакета после внесения в него изменений (например, обновления до новой версии, перехода на новый API или добавления новых функций). Вместо того, чтобы вручную выбирать все файлы и заново настраивать параметры, вы просто открываете свой пресет и вносите в него соответствующие изменения (добавляете новые файлы, удаляете те, которые больше не нужны).
Еще одна вещь, которая стала доступна для пакетов, загруженных с Add-On Store, - это Package History (история пакетов). В окне Add-On Store Package History отображается информация об импортированных пакетах, здесь вы можете удалить пакет со всеми импортированными файлами, чтобы загрузить обновленную версию пакета; также можно отключить выбранные файлы от пакета, чтобы инструмент Package History больше не управлял ими.
Добавлена вкладка меню Packages, предоставляющая быстрый доступ к параметрам экспорта и импорта пакетов.
Усовершенствованная фильтрация в иерархии материалов
Мы добавили расширенную фильтрацию для окна иерархии Materials. Некоторые проекты могут содержать тысячи, десятки тысяч материалов, с этим мы сталкивались в некоторых наших собственных проектах. Чтобы управлять таким огромным количеством и иметь четкое представление о том, что представляет собой каждый материал, нам нужен табличный вид (как для базы данных) с множеством категорий, а также возможностями фильтрации и сортировки.
Вы можете переключать отображение различных типов материалов, показывать или скрывать столбцы в табличном представлении, отвечающие за различные параметры материала. Например, вы можете выбрать только материалы, унаследованные от mesh_base, и проверить, какие из них являются двусторонними, в каких из них используется эмиссия и т.д.
Этот инструмент необходим для рефакторинга большой библиотеки материалов в ваших проектах. Особенно, если ваша задача - перенести материалы на основе mesh_base на графы.
Фильтрация по именам в окнах иерархии Materials и Properties теперь не зависит от регистра.
Замена материалов также стала более удобной, теперь поддерживается глобальный выбор (например, некоторые материалы для этой операции можно выбрать через окно Materials, в то время как другие - через Asset Browser).
Обновление инструмента редактирования кластеров
Мы дополнили инструмент Cluster Paint Tool фильтрами, позволяющими выбирать тип объекта, на котором вы хотите рисовать, а также затрагивать ли все поверхности или только на те, на которых включена опция Intersection, что делает инструмент еще более гибким и удобным. Также были исправлены некоторые мелкие проблемы, в том числе связанные с поведением ластика, что обеспечило корректную и стабильную работу.
Изменение радиуса кисти для этого и всех других подобных инструментов стало нелинейным - стандартное приращение изменяется в зависимости от текущего значения кисти: 0.01 (диапазон от 0.1 до 1.0), 0.1 (диапазон от 1.0 до 10.0), 1.0 (диапазон от 10.0 до 100.0) и т.д. Вы также можете управлять текущим шагом, удерживая горячие клавиши во время прокрутки колесика мыши: клавиша Shift увеличивает шаг в 10 раз, в то время как клавиша Ctrl позволяет уменьшить его в 10 раз.
При выборе нескольких кластеров для каждого из них генерируется случайное начальное значение, чтобы добавить больше вариаций.
Добавлена возможность увеличения Density Multiplier (множителя плотности) выше 1.
Улучшенные фокусировка и выделение
Фокус и большие ограничивающие объемы
Фокусировка на нодах по их границам иногда может быть очень неудобной, особенно если выделение, на котором вы фокусируетесь, содержит камеры, источники света или эффекты с огромными или бесконечными диапазонами. Фокусировка по границам для ноды Static Mesh размером 1 метр с источником света с дальностью 1 км в Редакторе предыдущей версии привела бы к уменьшению масштаба для размещения обеих нод с дистанцией источника в 1 км во вьюпорте, так что Static Mesh вы бы не увидели вообще. Мы изменили режим фокусировки по умолчанию (клавиша F), теперь он учитывает только положения выбранных нод, предыдущий режим фокусировки (по границам) можно использовать через Shift + F.
Фокусировка на Node Reference теперь игнорирует отключенные ноды в их иерархии. То же самое реализовано для предварительного просмотра нод в Asset Browser.
Фильтры выбора
При создании и настройке ваших виртуальных миров в редакторе может быть полезно выбрать ноды определенного типа в некоторой области (например, источники света, чтобы настроить их все сразу, или сфокусировать выбор на физических формах для настройки коллайдеров). Начиная с версии 2.17, в вашем распоряжении фильтр выбора - просто выберите ноды, с которыми хотите работать, и используйте выбор рамкой - больше никаких нежелательных объектов в выделении!
Больше улучшений в инструменте Cleaner
Cleaner - это инструмент, который вы используете для оптимизации вашего проекта и экономии места на диске за счет удаления ненужных ассетов. Иногда может потребоваться выполнить очистку в определенном каталоге. Мы расширили функционал Cleaner, сделав его более быстрым, гибким и удобным. Теперь он позволяет отображать неиспользуемые и потерянные ассеты для выбранного каталога (зависимости, конечно, проверяются для всего проекта).
Для удобства все ресурсы, отображаемые в списках, теперь имеют предварительный просмотр. И выбор между инструментами теперь работает так, как должен для Cleaner, Asset Browser, окон Materials Hierarchy и Properties Hierarchy.
Улучшено определение типа ассетов, а также улучшен поиск зависимостей с более высокой производительностью, правильная проверка зависимостей для неиспользуемых ассетов, возможность проверки ключей в файлах JSON и возможность добавления пользовательских расширений файлов (Settings -> Editor -> Project Settings).
Более подробную информацию вы можете найти в обновленной статье.
Улучшен поиск зависимостей и управление ассетами
Мы оптимизировали производительность поиска зависимостей (используется в Cleaner, Show Assets Using This One, Show Assets Used и многих других подсистемах редактора и операциях), что делает его в 3 раза быстрее, что особенно важно для крупномасштабных проектов, использующих огромное количество ассетов.
Поиск зависимостей для материалов, вызываемый через Show Assets Using This One пункта контекстного меню, теперь будет содержать столбец Is Parent Material For These Assets для отображения списка дочерних материалов.
Другие улучшения включают:
- Множественный выбор теперь доступен в следующих окнах: World Nodes Using This Asset, Assets Using This One, и Assets Used.
- Теперь вы можете найти, какие ноды в текущем мире используют определенный ассет, просто щелкните его правой кнопкой мыши и выберите Show World Nodes Using This Asset, в контекстном меню.
- Функция Replace Asset Links также стала доступна в иерархиях Materials и Properties.
- Теперь вы можете изменить имена нескольких выбранных нод на имена исходного ассета для каждого из них (ноды, имеющие один и тот же исходный ресурс, будут иметь индексные исправления). Это улучшает согласованность и дает понять, что определенные ноды на самом деле похожи. Просто выберите ноды, щелкните правой кнопкой мыши и выберите Rename to Asset Name из контекстного меню.
Плагин системы контроля версий (SVN)
Subversion (или SVN) - одна из наиболее часто используемых систем контроля версий для проектов на основе UNIGINE с большим объемом контента. Мы внедрили интеграцию SVN для UNIGINE в виде SVN плагина, использующего функциональность TortoiseSVN.
Плагин SVN не имеет интерфейса и запускается автоматически после инициализации Ассет-Системы и импорта всех ассетов. Во время работы плагин остается невидимым для вас, поэтому ваша работа практически остается неизменной. Вы также можете удалять, добавлять, переименовывать, изменять, перемещать и создавать файлы и каталоги, но теперь плагин SVN будет отслеживать и обрабатывать все ваши действия, экономя ваше время на подготовку коммита. Как и любой другой плагин, его можно загружать и выгружать через окно Editor Plugins (Help -> Plugins).
Общий процесс прост:
- Перед началом обновите (SVN Update) и очистите репозиторий (SVN Cleanup).
- Затем запустите редактор и работайте как обычно (добавляйте, удаляйте и изменяйте файлы и каталоги, как вы делали всегда).
- По завершении сохраните проект и закройте редактор. Рекомендуется закрыть редактор, так как перед коммитом может потребоваться обновление, в результате которого все может сломаться.
- Внесите ваши изменения в репозиторий (SVN Commit). При возникновении конфликтов разрешайте их тем же способом, что и раньше, но имейте в виду, что все изменения, внесенные вне Редактора (через Проводник), не будут иметь корректного статуса.
Для получения дополнительной информации об использовании плагина SVN, пожалуйста, обратитесь к этой статье.
Обновления Визуального редактора материалов
- Добавлен новый сэмплер Cubic Mip в ноду Sample Texture.
- Для вашего удобства теперь вы можете прокручивать и изменять размер рабочего пространства виджета Code Editor для ноды Function.
- Исправлена проблема, связанная с виджетом ULON Material, который иногда приводил к сбоям при смене материала.
- Исправлена некорректная работа ноды rotateZ.
- Исправлена проблема с обновлением параметров Texture Ramp в дочерних графах материалов при внесении изменений в родительский граф. Также были исправлены проблемы, приводящие к сбоям при попытке редактирования дочерних материалов после изменения типов параметров в графе родительского материала.
- Исправлен сбой при использовании контекстного меню.
- Исправлена проблема со сбросом значения параметра материала после изменения имени параметра.
- Исправлены проблемы с обновлением окон при вставке / отделении.
- Исправлена ошибка утверждения при вводе неправильного имени для ноды подграфа.
- Были добавлены следующие новые подграфы:
Animation Time
Animation Old TimeBlinn Brdf Importance Sampling
Другие улучшения UnigineEditor
- Редактор теперь работает только с файлами *.world, хранящимися в каталоге данных проекта или любой из допустимых точек монтирования с разрешениями на чтение и запись.
- Чтобы добавить новую дочернюю ноду к любой ноде в иерархии World Nodes, щелкните по ней правой кнопкой мыши и выберите желаемый тип дочерней ноды в подменю Create.
- Добавлена новая опция Take from Assets Without Creation для импорта материалов из FBX-ассетов, позволяющая свести к минимуму создание нежелательных материалов при импорте большого количества моделей. При включении этого параметра система импорта попытается найти существующий материал по имени и присвоить его объекту, в случае, если подходящий материал не найден, по умолчанию будет присвоен материал mesh_base.
- Исправлена ошибка при импорте FBX-ассета с возможностью создания материалов на основе графов (Base Materials Mode).
- Мы добавили больше гибкости в инструменты Drop To Ground и Snap To Surface, позволяющие учитывать все поверхности или ограничивать область применения только теми, у которых включена опция Пересечения.
- Исправлено поведение функции Make Parent (Ctrl + P), теперь последняя выбранная нода станет родительской для остальных выбранных нод.
- Добавлена возможность отключения проверок защитником Windows для определенного проекта. Это может быть полезно для огромных проектов с большим количеством ресурсов, где проверки на вредоносное ПО замедляют работу UnigineEditor. Редактор автоматически обнаружит замедление и отобразит предложение по его устранению. Вы можете управлять этим параметром через Settings -> Editor -> User Project Settings -> Suggest to Disable Windows Defender.
- Вьюпорты Редактора и конфигурации камер для каждого мира теперь хранятся в отдельных настройках пользовательского проекта, а не в мета-файлах мира. Вы также можете установить точное положение и ориентацию камеры редактора в окне Camera Settings и сохранить текущие параметры в файл .world.meta (раздел scene_cameras) с помощью кнопки Save Editor Camera Parameters to World Metadata.
- Исправлена трекинг (Crab) для камеры редактора в режиме ортографической проекции после фокусировки на ноде.
- Исправлена проблема с сбросом текущего выбора ноды при перезагрузке мира (например, при остановке физического моделирования).
- Исправлена ошибка с полем FPS в настройках физики ( World -> Physics -> FPS), приводившая к невозможности увеличения значения FPS после его уменьшения.
- Добавлена миграция шаблонов графов материалов, хранящихся в ресурсах редактора.
- В случае несуществующего указанного пути к Migration Directory (например, отключенный сетевой диск) пакеты будут импортированы с использованием пути по умолчанию.
- Исправлена ошибка при удалении костей после их загрузки для тела Ragdoll, назначенного для Skinned Mesh.
- Исправлена проблема с повреждением lightmaps при повторном импорте нескольких выбранных ассетов FBX.
- Исправлена ошибка, из-за которой некоторые горячие клавиши игнорировали переключение предустановок горячих клавиш.
- Исправлена проблема с вычислением размера файла для неархивированных файлов, хранящихся в точках монтирования.
- Исправлена проблема с перезагрузкой материалов на основе графов, из-за которой виджеты управления параметрами иногда перестали отвечать.
- Количество выбранных ассетов теперь отображается отдельно для разных типов ассетов.
- Потребление видеопамяти теперь отображается для текстур на панели Preview.
- Исправлен сбой при генерации предварительного просмотра для вложенной NodeReference.
- Исправлена ошибка при удалении материала .mgraph вместе с его дочерним элементом.
- Исправлена генерация имен для новых материалов, созданных с помощью Create Material Graph.
- Исправлен сбой RuntimesGenerator в случае, если папка данных содержала ресурсы без метаданных-файлов.
- Selected Node Info больше не перекрывает информацию о профилировщике.
- Исправлена проблема с копированием Node Layer в другой мир, приводившая к изменению идентификаторов содержащихся в нем нод.
- Исправлена проблема с нарушением иерархии нод, содержащихся в нескольких ссылках на узлы, редактируемых одновременно при сохранении мира.
- Исправлена проблема с недопустимыми метаданными для ресурсов текстур, которые иногда приводили к неправильной обработке таких ресурсов различными подсистемами редактора. Теперь недопустимые метаданные текстуры будут восстановлены.
- Исправлена проблема с переключением в режим переименования при повторном выборе одной из нескольких нод, выбранных в иерархии World Nodes.
- Обновлена версия OpenCascade до 7.7.1, исправлены проблемы с импортом .IGES файлов.
- Исправлена проблема со сбросом параметров узла перед сохранением мира, которая иногда приводила к сбою (например, при сохранении мира NodeReference, содержащей редактируемый источник Sound Source).
- Исправлена проблема с экспортом графов материалов, назначенных нодам, экспортированным в FBX.
- Исправлена проблема с сбросом текущего выделения в процессе выбора нескольких элементов в окнах иерархии Materials и World Nodes.
- Исправлена проблема с дублированием дочерних объектов при создании Mesh Cluster из выбранной иерархии нод (Create Mesh Clusters From Hierarchy).
- Исправлена проблема с отображением неверной информации на панели Preview для текстурных ассетов .EXR при включенной опции Unchanged.
- Исправлена проблема с включением отключенной ноды после отключения ее от другой отключенной ноды.
- Исправлена проблема с включением поверхностей, которые были отключены в исходных mesh-объектах после создания mesh-кластеров с помощью Create Mesh Clusters from Hierarchy.
- Исправлена проблема с обнаружением пересечений с осями манипулятора Translation, которые иногда приводили к ошибочным щелчкам.
- Исправлена проблема с неправильным применением параметра Opacity для декалей с использованием графических материалов.
- Исправлены элементы управления во вьюпорте Редактора на Linux с помощью оконной системы Wayland.
- Ссылки на узлы привязки будут переназначены при клонировании / загрузке объектов со Skinned Mesh, чтобы избежать потери ссылок на ноды, используемые для управления костями.
- Цветные векторные виджеты теперь используются в Редакторе повсюду.
Улучшения в инструменте Sandworm
- Тип ландшафта теперь выбирается при создании проекта и не может быть изменен.
- Теперь вы можете создать новый проект Sandworm и скопировать содержимое существующего (эта функция позволяет, например, быстро изменять тип объекта представления ландшафта).
- Теперь также можно настроить маски и высоты для дорог на Landscape Terrain (подробности см. в документации).
- Теперь доступно копирование масок и объектов с помощью правой кнопки мыши.
- Мелкие улучшения пользовательского интерфейса и исправления ошибок.
Эволюция: Asset Store теперь Add-On Store
Продолжается дальнейшее развитие площадки, где вы можете делиться своими творениями. Мы переименовали его в Add-On Store и добавили возможность публиковать бесплатные ресурсы для всех пользователей. Мы также вносим последние штрихи в функциональность монетизации (возможность получать деньги за свои активы): скоро она будет доступна для всех авторов.
Изменения коснулись не только процесса публикации. Мы улучшили и упростили процедуру работы с дополнениями для пользователей:
- Дополнения, доступные бесплатно, автоматически добавляются в список приобретенных дополнений после нажатия кнопки Free.
- Ожидается, что покупка платных дополнений также будет доступна в ближайшее время.
- Приобретенные дополнения (бесплатные и платные) теперь загружаются в виде пакетов (.upackage) из Add-On Store и могут быть открыты и распакованы прямо в редакторе, минуя UNIGINE SDK Browser. SDK Browser больше не предоставляет доступ к дополнениям проектов UNIGINE.
Мы также улучшили таргетирование поиска, чтобы помочь пользователям упорядочивать и находить нужные им дополнения.
Новый процесс работы с дополнениями будет доступен начиная с UNIGINE 2.17. Для предыдущих версий он остается таким же, как и раньше.
Для упрощения процесса работы как для авторов, так и для пользователей, мы подготовили обновленную версию документации Add-On Store.
Обновления шаблона IG
Поддержка виртуальной реальности
Исследования подтверждают высокую эффективность обучения в виртуальной реальности для многих отраслей промышленности, и авиация не исключение. VR-решения обладают высокой масштабируемостью по сравнению с классическими тренажерами. Все внутреннее оборудование представлено в виртуальной среде; стажерам нужны только гарнитуры виртуальной реальности и средства управления полетом. Чтобы предоставить вам возможность использовать функции, предлагаемые шаблоном приложения IG, для создания симуляторов на основе виртуальной реальности, мы добавили новый шаблон IG + VR, позволяющий автоматически создавать проект как с функциями виртуальной реальности, так и с функциями IG. Работа над этим шаблоном только началась, и на данный момент он содержит только базовую логику VR и IG, но мы продолжим его развитие в следующих релизах.
Метеорадар
Метеорологический радар (он же WSR), используемый для мониторинга погоды перед самолетом (облаков и осадков), является неотъемлемой частью профессионального авиасимулятора, позволяющего пилотам тренироваться в стратегическом и тактическом планировании безопасной траектории полета. Теперь он доступен в готовом виде, реализованный как компонент MeteoRadar, являющийся частью дополнения IG Aviation, включенного в SIM SDK edition. Как и в случае с любым другим инструментом, для его эффективного использования требуются соответствующие навыки экипажа: точная настройка этой системы и правильная интерпретация отображения метеорологического радара. Все ключевые параметры радара доступны для настройки, включая дальность отображения (для мониторинга погоды как на ближних, так и на дальних расстояниях), усиление (для оценки суровости погоды), а также углы наклона, FOV и другие. Радар работает с объемными 3D-облаками, генерируемыми усовершенствованной системой Clouds от UNIGINE, обеспечивая согласованность показаний радара с видом из кабины самолета. Добавление радара для ваших самолетов сейчас - всего лишь вопрос пары кликов.
GPU-частицы (экспериментальная версия)
Мы добавили GPU-частицы в шаблон приложения IG в качестве экспериментальной опции для визуализации дождя и снега, обеспечивая более реалистичную плотность осадков и более высокую производительность. Могут остаться некоторые нерешенные проблемы, поскольку система еще недостаточно отшлифована, но вы уже можете протестировать новые частицы, почувствовать разницу и поделиться своими отзывами, чтобы мы могли отполировать их production-версию в будущем.
Чтобы проверить новые GPU-частицы, выберите типы осадков 3 и 4, указанные в ig_config.xml файле (precipitation_type).
Улучшена поддержка символов CIGI
Поддержка символов CIGI была расширена за счет возможности добавлять пользовательские шрифты через конфигурацию IG (теперь поддерживается Text Font ID), использовать выравнивание текста слева направо и ориентацию сверху вниз. Размер шрифта теперь задается в единицах измерения по вертикали, определяемых 2D системой координат поверхности символа. Теперь учитывается "Скрытое" состояние элемента управления. Все эти улучшения позволяют создавать широкий спектр необходимых вам головных дисплеев (HUD) и управлять ими.
Другие улучшения IG
Добавлены колбэки при изменении типа объекта, а также при добавлении сочлененных деталей или компонентов (см. методы Entity::addOnBeforeChangeTypeCallback() и addOnAfterChangeTypeCallback()).
Демонстрационные проекты и сэмплы
Новые примеры API
В набор C++ Samples добавлен пакет новых примеров, включая следующие:
- Базовые примеры Basics, демонстрирующие типичные варианты использования.
- Curve Animation. Все объекты в этом примере анимированы с использованием Curve2D: движущиеся платформы, вращающиеся монеты и т.д.
- Node Spawner Grid. Простая программа для создания узлов, создающая узлы и размещающая их по сетке.
- Node Spawner Timer. Простое средство создания узлов, создающее узлы с заданной частотой создания.
- Physical Movement. Простая логика перемещения объекта с использованием силы или импульса с помощью физических методов.
- Trajectory Movement. Три типа перемещения по заранее определенному пути: линейная интерполяция, сплайновая интерполяция, путь из файла. Пример содержит компонент PathTrajectorySaver, который иллюстрирует, как создать свой собственный файл path, который открывается через ноду WorldTransformPath.
- Transform Movement. Используя разные методы для выполнения одних и тех же действий — движения вперед и назад, повороты вправо и влево.
- Trigger. Три типа триггеров: триггер пересечения, математический триггер и мировой триггер.
- Trigger Buttons. Различные типы взаимодействующих кнопок и рычагов.
- Примеры Tracked Vehicle (гусеничные машины).
- Non-Physical Tracks. Имитация автомобильных трасс с использованием элементов без присвоенных физических тел и форм. Показано, как нефизические трассы взаимодействуют с различными препятствиями.
- Physical Tracks. Имитация следов автомобиля с использованием элементов с заданными физическими телами, формами и шарнирными соединениями. Это иллюстрирует, как ведут себя физические трассы при взаимодействии с различными препятствиями и при повороте в зависимости от скорости транспортного средства.
- Input Samples. C++ версия базовых примеров Input из набора C# Component Samples
- Physical Buoyancy. Новый образец в наборе примеров Water Global, обеспечивающий физическим телам плавучесть в глобальной воде.
Мы также добавили следующие новые примеры API импорта:
- DirectMemoryImport (samples/Api/Import/DirectMemoryImport) - демонстрация процесса импорта файлов непосредственно в память без сохранения файлов на диск.
- ImportPlugin (samples/Api/Import/ImportPlugin) - создание пользовательского плагина, реализующего функциональность импорта для пользовательского формата файла.
Интеграция с Photon Engine (сеть)
Photon - популярный сетевой движок и многопользовательская платформа, которая может обрабатывать все запросы на своих собственных серверах. Вы можете сосредоточиться на реализации логики и функций вашего приложения (игрового процесса) в вашем проекте UNIGINE, оставив сетевую часть Photon, и создать сложное сетевое решение для многопользовательской игры. Мы добавили небольшой пример, демонстрирующий, как интегрировать движок Photon в ваш проект UNIGINE.
На самом деле пример интеграции с Photon демонстрирует интеграцию двух продуктов Photon:
- Photon Realtime - организует взаимодействие нескольких игроков по сети. Его можно использовать для создания многопользовательских шутеров, гоночных игр и других приложений реального времени.
- Photon Chat - позволяет пользователям обмениваться письменными сообщениями как публично, так и конфиденциально.
Пример включает:
- Упрощенное окно авторизации. В примере требуется ввести только псевдоним пользователя, хотя это окно может быть использовано в качестве основы для более сложного окна авторизации с паролем и другими учетными данными.
- Окно лобби для создания комнат или присоединения к созданным комнатам для многопользовательского взаимодействия.
- Мир, содержащий объекты, которыми можно управлять через сеть (примитивная многопользовательская игра) и окно чата для обмена сообщениями.
Пожалуйста, примите во внимание, что вам потребуется отдельная учетная запись и лицензия от Photon.
Документация
Добавлена новая серия обучающих видеороликов по созданию ландшафта с географической привязкой с использованием Sandworm:
Добавлен набор новых ультракоротких видеороликов с краткими инструкциями на английском, китайском и русском языках:
Рекомендуемый пользовательский контент
На канале канадского энтузиаста - @LazyUnigineDude появляется все больше отличных и полезных видеороликов по различным аспектам использования UNIGINE: "Этот канал создан, чтобы показать потенциал движка UNIGINE и то, как его использовать. Бесплатные учебные пособия и небольшие советы и хитрости, которые помогут вам создавать лучшие проекты ..."(c).
Другие изменения в документации
- Обновлена статья об асинхронной потоковой передаче данных и связанные статьи.
- Обновлена статья об инструменте Cleaner.
- Обновлена статья о размещении сеток на основе кисти.
- Добавлена новая статья об SVN-плагине.
- Добавлены новые статьи о Particles Spacer и Particles Deflector.
- Добавлено больше описаний в справочник по нодам графа материалов.
- Добавлены примеры кода для следующих классов API (Xml, Json, WorldTrigger, File, WindowManager EngineWindow, Displays, UserInterface, Widget, WidgetDragArea, WidgetWindow)
- Исправлен ряд проблем в документаwbb на основе ваших отзывов.
- Полный список изменений API доступен в Руководстве по миграции API.
- Полный список изменений консольных команд доступен в Руководстве по миграции консольных команд.
- Полный список инструкций по обновлению вашего контента до UNIGINE 2.17 доступен в Руководстве по миграции контента.
Спасибо за чтение и не пропустите обновления, поскольку мы продолжаем работать над тем, чтобы сделать UNIGINE еще лучше!
- Ваша команда UNIGINE