UNIGINE 2.18: Оптимизация производительности, встроенный VR, новая экспозиция и коррекция тонов, новая система событий, экспериментальные улучшения анимации
Ключевые изменения
- DirectX 12 и Vulkan в качестве основных графических API
- VR в движке: без плагинов, унифицированный API, расширенный спектр VR-устройств
- Многочисленные оптимизации производительности
- Оптимизировано потребление оперативной памяти
- Новая система событий вместо функций обратного вызова
- Асинхронная компиляция шейдеров
- Улучшена поддержка целей морфинга
- (Экспериментальные) улучшения системы анимации (новый API, базовая IK, ретаргетинг, маски кадров)
- Улучшена коррекция экспозиции и баланса белого
- Локальная коррекция тонов
- Многочисленные визуальные улучшения: настройки резкости и размытия мип-карт, более быстрое подповерхностное рассеивание, улучшенная светопроницаемость и многое другое
- Поддержка OpenSSL
- Редактор: пакетное переименование, больше визуальных помощников, улучшенное окно иерархии нод, обновленный Cleaner, множество улучшений, повышающих удобство использования.
- Новый демо-проект Drone
- Бесплатный учебный курс
Этот выпуск обеспечивает большую стабилизацию и надежность для DirectX 12 и Vulkan, включая встроенную поддержку VR в ядре движка, многочисленные оптимизации производительности и улучшения, повышающие удобство использования, как в движке, так и в редакторе, а также огромный пакет обновлений для большинства инструментов редактора, набор важных обновлений для анимаций, а также новая система анимации (в этом релизе всё еще экспериментальная, но уже на финальной прямой), новая система событий для замены устаревших функций обратного вызова, новая демо-версия Drone и многое другое.
DirectX 12 и Vulkan как основной графический API
Мы продолжаем совершенствовать интеграцию DirectX 12 и Vulkan, включая дальнейшую стабилизацию, оптимизацию и новые функциональные возможности. Было сделано следующее:
- Интегрирован D3D12 Memory Allocator, который устраняет пиковые нагрузки при создании статических мешей и текстур, доступных только для чтения.
- Исправлены сбои при запекании источников света с большим количеством сэмплов в больших сценах.
- Исправлен внеэкранный рендеринг для Vulkan в Linux.
- Проекты, использующие плагин Projection, теперь работают должным образом на Vulkan и DX12.
- Исправлены проблемы с неправильным отображением частоты кадров на DX12 в зависимости от настроек вертикальной синхронизации в панели управления NVIDIA.
- Исправлена проблема с обновлением матрицы проекции на DX12.
- Счетчики примитивов (Primitives) и общего времени рендеринга на графическом процессоре (Total GPU) в профилировщике производительности (Performance Profiler) теперь отображают правильные значения для Vulkan (за исключением графических процессоров AMD).
- Исправлен сбой при сворачивании окна (Vulkan + AMD).
- Исправлена проблема с рендерингом линейной и изогнутой 360-градусных панорам в Vulkan.
- Кроме того, исправлен ряд сбоев и мелких проблем для обеспечения стабильной и надежной работы.
Был произведен ряд оптимизаций, улучшающих производительность процессора.
Общая оптимизация производительности
Снижение потребления оперативной памяти
Мы продолжаем повышать общую эффективность ресурсов двигателя. На этот раз мы сделали комплекс многочисленных улучшений для нод (декалей, меш-кластеров, меш-клатеров), эффективно снизив потребление оперативной памяти.
Также значительно сократилось потребление материалами оперативной памяти (около 20%).
Более быстрое подповерхностное рассеяние
Мы улучшили производительность эффекта подповерхностного рассеяния (SSS), что позволило создавать то же изображение в два раза быстрее.
Чересстрочное непрямое освещение
В целях оптимизации производительности мы добавили чересстрочный рендеринг для непрямого освещения — вместо рендеринга 4 соседних пикселей за один кадр, они рендерятся в течение 4 последующих кадров, что дает 4-кратный прирост производительности непрямого освещения. До версии 2.18 можно было использовать только режим Interleaved для освещения в целом, но иногда достаточно оптимизировать только непрямое освещение, оставив прямое как есть. Старый параметр Indirect Lighting был переименован в Direct Lighting Interleaved Rendering.
Чересстрочный денойзер
Шумоподавление (Denoise) — классный, но довольно тяжелый эффект для графического процессора, поскольку он использует очень сложный алгоритм размытия. Для повышения производительности вы можете включить режим Interleaved, и его расчет в полном разрешении будет разделен на 4 кадра. Таким образом эффект станет в 4 раза быстрее.
Оптимизация освещения
Мы оптимизировали рендеринг источника World Light, чтобы сделать его менее требовательным к производительности — добавили режим One Cascade Per Frame (один каскад на кадр). В этом режиме обновление каскадов теней распределяется по нескольким кадрам рендеринга: тени статической геометрии рендерятся только в один каскад на кадр.
Разница в производительности рендеринга теней с этой оптимизацией и без нее (проверено на нашем демо-проекте Oil Refinery) для DirectX12 и Vulkan показана в таблице ниже (значения могут отличаться в зависимости от содержимого и настроек конкретного проекта).
Переиспользование теней
Еще один вариант экономии производительности вашего приложения связан с рендерингом теней, который требует больших затрат.
Если сцена отрисовывается при помощи нескольких вьюпортов, то карты теней обычно отрисовываются отдельно для каждого из них. Это важно, поскольку каждая камера, которая отрисовывает изображение во вьюпорт, имеет свою уникальную трансформацию. Однако в случаях, когда камеры расположены близко друг к другу, тени выглядят очень похожими, поэтому для определенных конфигураций области просмотра и камеры можно сэкономить ресурсы, включив режим Reuse Shadows (консольная команда render_shadows_reuse). В этом режиме карты теней отрисовываются только для основного вьюпорта, а затем используются для остальных.
Разница в производительности рендеринга при использовании опции
Хотя этот метод обеспечивает повышение производительности, он не является панацеей и может стать причиной артефактов.
Асинхронная компиляция шейдеров
Система стриминга UNIGINE теперь обеспечивает асинхронную компиляцию и загрузку шейдеров. Это позволило значительно повысить производительность, решив проблему зависания движка во время компиляции шейдеров.
Кроме того, это привело к некоторым изменениям API. Раньше все необходимые подшейдеры (вершинные, фрагментные и т.д.) требовалось загружать перед компиляцией шейдерной программы. Также нужно было учитывать порядок загрузки подшейдеров, так как это влияло на результат. Теперь UNIGINE компилирует шейдерные программы сразу со всеми необходимыми подшейдерами.
Доступны два режима компиляции: асинхронный и принудительный . В принудительном режиме все шейдеры, необходимые для текущего кадра, компилируются и загружаются в оперативную память одновременно в текущем потоке. По умолчанию используется асинхронный режим.
Переключаться между режимами можно одним из следующих способов - в UnigineEditor (Settings-> Rendering -> Streaming -> Shaders -> Compile Mode), через консоль (render_shaders_compile_mode) или через API.
Профилировщик производительности теперь предоставляет информацию о количестве скомпилированных и загруженных шейдеров.
Обновлен счетчик FPS
Измерения производительности приложения только лишь в кадрах в секунду (FPS) недостаточно для обеспечения консистентности с фактическими ощущениями пользователей при работе с ним. Предположим, во время выполнения ваше приложение отрисовывает 59 кадров за 0,7 секунды, но 60-й кадр занимает 0,3 секунды. Средняя частота кадров 60 кадров в секунду — это хорошо, но по факту пользователи получат эффект подвисания, поскольку на последний кадр потрачено 0,3 секунды.
Поэтому важно стремиться к определенному бюджету времени на кадр, в который входит время CPU + время GPU. Это дает вам четкую цель, к которой нужно стремиться при профилировании и оптимизации приложения, а также дает более плавный и приемлемый результат для пользователей. Каждый кадр будет иметь временной бюджет, основанный на вашем целевом FPS. Приложение, у которого целевая планка 60 кадров в секунду, всегда должно расходовать менее 16,66 мс на кадр (1000 мс / 60 кадров в секунду).
Мы обновили счетчик Engine FPS, чтобы сделать его более полезным и информативным — помимо традиционного счетчика частоты кадров добавлены еще два (в миллисекундах):
- CPU — показывает время, необходимое для подготовки текущего кадра на CPU
- GPU — показывает время, необходимое для рендеринга текущего кадра на GPU
В случае возникновения узкого места на процессоре вы увидите сообщение «CPU bound» для счетчика GPU и наоборот. Если у вас включена синхронизация VSync – счетчик тоже это покажет.
- GPU bound говорит о том, что рендеринг кадра на стороне графического процессора занимает больше времени, чем обработка на процессоре, и превышает бюджет кадра, в этом случае требуется оптимизация на стороне GPU.
- CPU bound говорит о том, что обработка кадра на стороне процессора занимает больше времени, чем его рендеринг, и превышает бюджет кадра. Оптимизация производительности графического процессора здесь совершенно не поможет.
Коррекция экспозиции и баланса белого
Коррекция на основе кривой
Мы добавили возможность более гибкой и удобной настройки автоматической экспозиции, позволяя вам контролировать общую насыщенность сцены с помощью кривой в соответствии с вашими потребностями.
Маска замера экспозиции
Мы добавили текстуру Metering Mask в настройки Camera Effects для управления влиянием автоэкспозиции и коррекции баланса белого на весь экран, где каждому пикселю присваивается вес в соответствии с заданной текстурной маской. Если уделять внимание пикселям, расположенным в центре экрана, а не по краям, это помогает стабилизировать автоматическую экспозицию.
Улучшенный шумоподавитель (Denoiser)
Мы приложили много усилий для уменьшения артефактов, появившихся после внедрения нового шумоподавителя, в результате чего значительно уменьшились ореолы и шум. Все настройки встроенных пресетов были обновлены, поэтому нет необходимости использовать пользовательские пресеты и настраивать их самостоятельно, если у вас нет четкого понимания всего процесса.
Локальная коррекция тонов
У изображений с высоким динамическим диапазоном высокое соотношение яркости между самым ярким и самым темным объектом в сцене. Методы глобального тонального отображения предоставляют простые в вычислительном отношении решения, но они применяют одну и ту же функцию отображения ко всем пикселям изображения, что приводит к потере контраста и детализации. Например, если на экране одновременно есть яркое небо и темные области, в конечном итоге мы получим либо области теней, близкие к абсолютно черному, либо переосвещенное («пережжённое») небо. Методы локального тонального отображения используют пространственно изменяющуюся функцию отображения, определяемую соседними пикселями, что позволяет увеличить локальный контраст и видимость некоторых деталей изображения.
Представляем новый локальный корректор тонов с маской, генерируемой на основе всего изображения, обеспечивающий более приятный глазу результат, поскольку человеческое зрение более чувствительно к локальному контрасту.
Local Tonemapper можно настроить на вкладке Color Correction в окне Rendering Settings, его также можно настроить с помощью консольных команд и API.
Улучшенная светопроницаемость
Влияние нормалей поверхности на эффект светопроницаемости стало более отчетливым, благодаря чему все изображение выглядят еще более убедительно.
Облака в отражениях
В случае использования нескольких вьюпортов и динамических отражений в сцене, содержащей объемные 3D-облака и множество отражающих поверхностей, рендеринг облаков в отражениях может существенно снизить производительность. Для таких случаев мы добавили новый режим рендеринга облаков (Render To Panorama), позволяющий отрисовывать их в кубическую текстуру панорамы один раз для каждого кадра. Это автоматически делает облака видимыми в простых стандартных отражениях окружающей среды, делая их более естественными при меньших затратах. Однако у этого режима есть ограничения: он подходит только в том случае, если вам не нужно отрисовывать вид изнутри облаков (режим Volumetric).
Чтобы активировать этот режим, выберите Render To Panorama в раскрывающемся списке Mode раздела Clouds (Settings -> Render -> Clouds -> Mode).
Мультипликативное смешивание Voxel Probe
Добавлен новый режим смешивания Multiplicative для Voxel Probe. Его можно использовать для смешивания Voxel Probe, имитирующего фоновое затенение, с непрямым освещением, под самим Voxel Probe. Чтобы запечь фоновое затенение в Voxel Probe, вы можете включить опцию Multiply By Sky Color, запечь освещение с одним отскоком и отключить эту опцию. В результате Voxel Probe будет содержать белый цвет неба, который можно использовать в качестве фонового затенения.
Повышение резкости и размытие для MIP-карт
Использование MIP-карт может уменьшить детализацию текстуры. С другой стороны, в некоторых случаях слишком резкие MIP-карты могут вызвать визуальные артефакты, делающие изображение шумным. Чтобы противодействовать этому, мы добавили еще две опции в переключатель Mipmap Type: Sharpen и Blur. Как следует из их названий, они позволяют сделать MIP-карты более резкими при уменьшении изображения (чтобы восстановить часть потерь информации) или размытыми (чтобы уменьшить артефакты) с возможностью управления радиусом применяемого эффекта. Для повышения резкости вы также можете контролировать интенсивность эффекта и при необходимости применять его только к значению светлоты HSL.
Другие улучшения рендеринга:
- Мы улучшили затенение отражений для поверхностей с диэлектрическими материалами, чтобы обеспечить соответствие закону сохранения энергии и устранить чрезмерные зеркальные блики.
- Environment Probe в режиме Raymarching теперь учитывает полупрозрачность
- Обновлен рендеринг полупрозрачности: теперь используется наш Diffuse BRDF вместо Burley BRDF.
Улучшения анимации (экспериментальные)
Мы продолжаем разработку новой системы анимации — прочного фундамента для нового универсального инструмента Sequencer, который заменит старый инструмент Tracker со всеми его ограничениями и сделает работу с анимацией простой и эффективной, раскрывая ваш творческий потенциал и позволяя достичь любой поставленной цели. Проделана огромная работа, и хотя еще многое предстоит сделать, а Sequencer находится в стадии активной разработки, мы хотели бы поделиться с вами достигнутым прогрессом в виде экспериментального функционала.
Система анимации позволяет создавать и воспроизводить внутриигровые видеоролики в многодорожечном режиме. Последовательности анимации определяются путем создания воспроизведений, добавления к ним слоев и добавления треков к этим слоям с возможностью управления последовательностью треков и смешиванием между разными слоями. Пользователи могут определить состав каждого трека, добавляя абстрактные объекты и модификаторы для определения изменений объектов и их параметров с течением времени на основе ключевых кадров. Для каждой пары ключей может быть назначен индивидуальный режим интерполяции (постоянный, линейный, различные кривые Безье). Поддерживаются все доступные на данный момент параметры (от int до dvec4) с отдельной поддержкой скелетных трансформаций ObjectMeshSkinned.
В настоящее время это анимационная платформа с API для всех поддерживаемых языков (C++, C# и UnigineScript), с которой уже можно работать через код в логике приложения (так что на данный момент это более удобно для программистов). Но на следующем этапе вам будет доступна часть графического интерфейса для управления всем этим через виджеты и окна (удобные для всех) — по сути это новый мощный инструмент Sequencer, который в настоящее время разрабатывается на основе этой платформы. Ниже вы найдете подробную информацию о текущем состоянии платформы.
Нода Animation Playback
Для вашего удобства мы добавили новую ноду Animation Playback (NodeAnimationPlayback), чтобы продемонстрировать функциональность новой системы анимации. Эта нода позволяет конвертировать старые файлы анимационных треков (формат *.track) в новые форматы *.utrack и *.uplay , а также воспроизводить новые анимационные треки с возможностью изменения скорости воспроизведения и установки определенного времени для просмотра соответствующего кадра анимации, примененного к сцене.
В SDK был добавлен набор сэмплов Animation (<SDK_folder>/source/samples/api/animation ) для демонстрации различных аспектов использования.
Для получения более подробной информации о системе анимации смотрите статью Анимация.
Базовый ретаргетинг анимации (экспериментально)
Мы добавили ретаргетинг анимации (экспериментальный в этом релизе), который позволяет использовать одну анимацию для нескольких моделей с разными пропорциями, но использующими схожие скелеты или имеющими схожую иерархию костей и немного отличающиеся Т-позы.
У четырех персонажей ниже скелеты с разными пропорциями, но для них используется одна и та же анимация (переиспользуется): высокий стройный парень (фактически используется его скелетная анимация), еще один мужчина пониже ростом и полнее и две женщины с разными фигурами. Все они двигаются согласно анимации, сохраняя свои пропорции. Без ретаргетинга скелеты меньшего размера (женщины), а также более широкий и низкий скелет мужчины были бы искажены после применения анимации высокого парня.
Ограничения модели можно игнорировать, если вам нужно переиспользовать только некоторое подмножество костей (например: переиспользовать кости с разными именами, а затем использовать только маски).
Маски кадров анимации (экспериментально)
Маски — это самый простой способ переиспользования анимации, пару слов о том, как они работают. Каждому слою ObjectMeshSkinned можно назначить некоторую анимацию, и на основе своих кадров она будет изменять трансформации костей на этом слое. С помощью масок можно выбрать, какие компоненты кадра анимации (положение, поворот, масштаб, их комбинации или всё вместе) будут использоваться для каждого конкретного слоя. Если в маске отсутствует какой-либо компонент, соответствующее значение будет взято из T-позы.
Базовая ИК (экспериментально)
ObjectMeshSkinned теперь поддерживает базовую инверсную кинематику (IK) для цепочек костей (IK chains), обеспечивая способ обработки поворота суставов от положения конечного эффектора. Решатель IK пытается найти такую комбинацию поворотов элементов цепочки, чтобы конечный сустав как можно точнее совпадал с заданным положением эффектора. Это может быть использовано для правильного расположения ног персонажа на неровной поверхности и обеспечения правдоподобного взаимодействия с миром.
Каждая цепочка IK может иметь произвольную длину (содержать произвольное количество костей), также у нее есть вспомогательный вектор, который позволяет контролировать направление изгиба. Также можно задать вращение для последнего звена цепи. Каждая цепочка ИК имеет значение веса, с помощью которого можно контролировать воздействие цели на последнее звено цепочки. Это позволяет делать плавные переходы от исходной анимации к требуемому целевому положению конечности.
Для удобства есть визуализатор выбранных цепочек IK.
Улучшенная поддержка целей морфинга
Мы добавили возможность увеличения максимального количества активных целей морфинга на поверхность для DirectX12 и Vulkan — теперь по умолчанию оно равно 100, но может быть и больше (однако для DX11 и OpenGL это значение по-прежнему равно 7).
Мы также расширили настройки импорта FBX-моделей — теперь при импорте целей морфинга вы можете выбрать способ импорта нормалей:
- использование нормалей базового меша;
- использование нормалей импортированного ассета;
- пересчет нормалей целей морфинга с учетом указанного значения угла, чтобы сделать края более гладкими или резкими.
В окно Parameters был добавлен предварительный просмотр целей морфинга для объектов Skinned Mesh.
Имейте в виду, что кэш шейдеров должен быть скомпилирован для любого ObjectMeshSkinned с определенным количеством активных целей морфинга (активная цель морфинга — это та, которая включена (через setTargetEnabled) и имеет ненулевой вес).
Улучшения VR
Разработка VR-приложений теперь стала проще! Поддержка VR перенесена из плагинов в ядро платформы UNIGINE Engine, что делает ее использование намного удобнее (единый API, упрощенная инициализация, меньше файлов в проекте). Это также открыло возможности для более глубокой оптимизации производительности.
Плагины VR (OpenVR, Varjo, Oculus), реализующие аналогичные функции, считаются устаревшими и будут удалены в следующем релизе SDK.
Система UNIGINE VR обеспечивает интеграцию OpenVR и Varjo с поддержкой современных графических API — DirectX 11, DirectX 12 и Vulkan — прямо из коробки. Теперь у вас есть возможность создавать приложения VR и XR для различных VR—платформ с поддержкой широкого спектра VR—устройств.
Встроенная поддержка VR для API OpenGL будет недоступна начиная с версии 2.18.1, поэтому при необходимости вам придется использовать устаревшие плагины VR.
Интеграция OpenVR позволяет разрабатывать проекты как для SteamVR, так и для Oculus VR. Благодаря интеграции Varjo вы также сможете создавать приложения смешанной реальности, предназначенные для запуска на шлемах Varjo HMD.
Унифицированная система ввода VR
Система ввода UNIGINE теперь обеспечивает доступ к широкому спектру устройств виртуальной реальности. Вы можете прямо из коробки управлять входными данными от VR-контроллеров, головных дисплеев (HMD), базовых станций и трекеров, получать информацию о модели устройства и уровне заряда батареи, а также получать доступ к другим свойствам и настройкам вашего устройства.
Мы также реализовали независимую от модели унифицированную обработку кнопок и осей для контроллеров и шлемов виртуальной реальности.
VR-шаблон
Мы обновили VR-шаблон с учетом встроенного функционала VR:
- Реализация классов и компонентов теперь использует новый API.
- Модели VR-контроллеров теперь автоматически загружаются из OpenVR, поэтому не нужно добавлять их в проект вручную.
Новая система событий
Мы улучшили основной механизм отслеживания различных событий повсюду в движке. Старая система с функциями обратного вызова имела ряд проблем и слабых мест:
- Пользователям приходилось сохранять и отслеживать все сигналы и обработчики, чтобы правильно отписаться вручную.
- Сигнатура сигнала была неочевидна из API и не проходила проверку типа, вы могли подписаться практически с любой сигнатурой, затем успешно скомпилировать код (даже с некоторыми ошибками) и получить неверные данные во время выполнения. Никаких уведомлений компилятора в случае каких-либо изменений API не приходило, что опять же приводило к получению неверных данных во время выполнения.
- Сбой при подписке с помощью функции-члена класса в случае удаления подписанного объекта (обычный случай, поскольку пользователи часто забывают отписаться).
- Для использования функций addCallback() требовались вызовы MakeCallback() и приведение типов для лямбда-выражений.
Представляем новую систему событий, которая заменяет старые обратные вызовы, обеспечивая высокую надежность и гораздо большую гибкость, предоставляя вам следующие функции:
- Новые события имеют строгую проверку типов сигнатур функций. Теперь наглядно видно, сколько аргументов и какие именно требуются для функции обратного вызова (обработчика событий).
- Проверка во время компиляции определяет, соответствуют ли типы аргументов типам событий.
- Упрощенная подписка на события с помощью лямбда-функций. Нет необходимости выполнять внутренние преобразования типов.
- Новый обработчик EventConnection не требует отписываться вручную. Он автоматически разрывает любое соединение в деструкторе.
- Более гибкий функционал: можно временно отключить определенные события для выполнения определенных действий, не вызывая их, а также включать и выключать только определенное соединение (EventConnection).
- Пакетное управление: набор различных подписок может быть связан с одним экземпляром EventConnections, что позволяет отказаться от подписки на все из них одним вызовом функции.
Новая система событий потребует миграции вручную. Но беспокоиться не о чем, поскольку весь процесс представляет собой поиск всех экземпляров «addCallback» в вашем коде и замену их в соответствии с новым подходом по инструкциям, приведенным в Руководстве по миграции API. Для проекта среднего размера один разработчик может выполнить это за пару дней.
Поддержка OpenSSL
Мы перешли с библиотеки axTLS на OpenSSL, значительно более надежный, полнофункциональный и хорошо документированный набор инструментов с открытым исходным кодом коммерческого уровня для TLS (ранее SSL). Для вашего удобства в пакет сэмплов Sim C++ Samples, доступный для версии Sim SDK, были добавлены новые примеры SSL Socket.
Улучшения Landscape Terrain
Landscape Terrain оперирует огромными объемами данных. В этом релизе мы улучшили сжатие/распаковку данных ландшафта как для режимов сжатия без потерь, так и для режимов сжатия с потерями.
Распаковка стала на ~65% быстрее, а сжатие ускорилось на 7—74% в зависимости от выбранного алгоритма (без потерь или с потерями).
Другие улучшения
- Добавлен режим Fast Shutdown для движка с очисткой памяти, выполняемой операционной системой (управляется через параметр -fast_shutdown командной строки запуска). По умолчанию эта опция включена, чтобы обеспечить быстрое завершение работы вашего приложения и освобождение всех ресурсов. Если вам нужна возможность повторно инициализировать движок после завершения работы (вызвать init() после shutdown()) без перезапуска приложения, вы можете отключить эту опцию, но в этом случае процесс завершения работы может занять значительно больше времени.
- Улучшен импорт файлов STEP/STP/IGES/IGS с корректной обработкой нелатинских символов.
- Исправлено резкое переключение уровней детализации теней объектов Mesh Cluster с назначенными непрозрачными материалами, когда включена опция LOD Smooth Fading.
- Для компонента Scale в трансформациях источников света заблокировано значение 1, любые изменения игнорируются во избежание визуальных артефактов.
- Информация о месте хранения каждого параметра консоли теперь отображается в описании консольной команды.
- Отключена отрисовка буфера Transparent Blur, когда в сцене нет объектов с таким состоянием.
- Исправлен сбой в работе некоторых подсистем движка (профилировщик, экранные сообщения, ввод), если движок запускается не в фокусе и фоновое обновление включено.
- Исправлены проблемы с импортом моделей, созданных в программном обеспечении Daz3D, приводившие к нарушению иерархии скелета импортированных моделей.
Редактор Unigine
Полноэкранный просмотр
Теперь вы можете увеличить область просмотра в редакторе одной кнопкой. Просто нажмите F11 на клавиатуре, и окно просмотра станет полноэкранным. Повторное нажатие F11 выведет вас из полноэкранного режима и вернет исходный размер и положение окна просмотра.
Больше визуальных помощников
Визуальная отладка помогает довести до совершенства контент и настройки ваших сцен, поэтому чем больше здесь инструментов, тем лучше! В этом релизе мы добавили следующие вспомогательные визуализаторы в меню Helpers:
- Визуализатор касательного и бикасательного векторов и векторов нормалей (TBN) для выбранной поверхности объекта.
- Визуализатор режимов освещения, позволяющий проверить, какие объекты используют статический, динамический или расширенный режим освещения.
И визуализаторы отладки в меню Rendering Debug:
- Визуализатор буфера, в котором хранится попиксельное расстояние до ближайшей поверхности (для Raymarching Environment Probes).
- Визуализатор текстуры Metering Mask, используемой для управления влиянием автоматической экспозиции и коррекции баланса белого на весь экран, где вес каждого пикселя определяется в соответствии с указанной маской текстуры.
Улучшенное окно иерархии нод
Когда вы работаете с крупномасштабными мирами, содержащими тысячи нод, важна каждая мельчайшая деталь, благодаря которой работа с часто выполняемыми операциями становится быстрее и проще, а также важна гибкость. Чтобы упростить управление миром и сделать его более удобным, мы обновили окно World Nodes, разделив его на следующие столбцы (с возможностью выбора, какие из них отображать):
- Имя ноды со значком типа ноды.
- Показывает, есть ли логические компоненты/свойства, назначенные ноде.
- Переключатель выбора ноды, позволяющий выбирать определенные типы нод, чтобы отфильтровать те, с которыми не нужно взаимодействовать (например, если вы хотите, чтобы с помощью рамки выбора в лесу можно было выбрать только персонажей).
- Блокировка трансформаций нод, позволяющая предотвратить нежелательные изменения положения отдельных нод.
- Переключатель включения/выключения ноды.
Пакетное переименование
Теперь доступен новый мощный инструмент Batch Rename, позволяющий переименовывать сразу несколько объектов (нод, свойств, материалов или ассетов) в Редакторе, что экономит массу времени, особенно при работе с масштабными проектами. Вы можете использовать этот инструмент, чтобы:
- задать префикс для имен выбранных объектов,
- задать суффикс для имен выбранных объектов,
- изменить регистр в именах выбранных объектов,
- найти указанную комбинацию символов и заменить ее заданной вами комбинацией.
Этот инструмент находится в главном меню в разделе Tools -> Batch Rename, или можно открыть его по щелчу правой кнопкой мыши на файле в Asset Browser или элементе любого окна иерархии. Для получения дополнительной информации смотрите соответствующую статью.
Обновленный Cleaner с поиском похожих ассетов
Cleaner – это инструмент, который вы используете для оптимизации проекта и экономии дискового пространства за счет удаления ненужных ресурсов.
Теперь он позволяет вам находить похожие ассеты, чтобы вы могли решить, действительно ли они нужны или вы просто забыли их удалить. Ассеты предварительно проверяются путем сравнения их превью, созданных с выбранным разрешением (более высоким разрешением). Вы можете отфильтровать типы проверяемых ассетов (например, ограничиться только текстурами), указать порог сходства, чтобы определить степень, при которой ассеты считаются похожими. Инструмент будет отображать ассеты, сгруппированные по сходству, поэтому вы сможете решить, какие из них можно удалить.
Все функции инструмента Cleaner, которые ранее располагались в одном окне и раскрывались в виде аккордеона, теперь разделены на вкладки для удобства фокусировки на конкретной задаче.
Более подробную информацию можно найти в обновленной статье.
Улучшенная поддержка GLTF/GLB.
Теперь вы можете импортировать объекты Mesh Skinned, их анимацию и цели морфинга. Эта функция также доступна во время выполнения.
Также был улучшен импорт текстур PBR.
Обновления визуального редактора материалов
Материалы могут фактически изменять геометрию объекта (карты смещения, тесселяция и т.д.) в случае, если несоответствие между исходной геометрией и геометрией, измененной материалом, становится значительным; это может привести к визуальной несогласованности (неправильное обнаружение контактов между границами объекта, окклюзия и т.д.). Чтобы компенсировать такое отклонение, мы добавили возможность изменять границы объекта с помощью графического материала, который изменяет геометрию объекта. Подключение параметра или некоторого значения к входу Vertex Offset ноды Material в Визуальном редакторе материалов автоматически добавляет параметр Bound Scale в основные настройки материала. В случае, если смещенные вершины выходят за границы объекта, установленные по умолчанию, можно использовать этот параметр для ручной настройки коэффициента компенсации (значение, которое необходимо добавить для расширения границ объекта, чтобы покрыть максимальное отклонение).
Были добавлены следующие новые ноды:
- Texture Buffer Direct Lights
- Texture Buffer Indirect Lights
- Texture Buffer Indirect Diffuse
- Texture Buffer Indirect Specular
Другие улучшения UnigineEditor
- Редактирование кривых стало более удобным благодаря возможности увеличивать и уменьшать масштаб изображения кривой по обеим осям.
- Длинные списки логических компонентов/свойств и их полей в окне Parameters теперь можно свернуть и развернуть одним щелчком мыши по соответствующему элементу, как в окне иерархии World Nodes.
- Добавлена опция Invert G-Channel для пакетного импорта карт нормалей OpenGL из импортированных моделей.
- Исправлена проблема с кнопкой Revert в Curve Editor, что приводит к очистке стека Undo/Redo.
- Удерживание клавиши Shift во время операции преобразования теперь будет трансформировать объект со скоростью 1/4 от нормальной скорости, что обеспечивает более точный контроль.
- Кисти в режиме кластерного рисования теперь будут игнорировать (проходить сквозь) выключенные объекты из списка Filter, поэтому можно рисовать кластер, расположенный ниже, когда кластер, расположенный выше, выключен.
- Кнопка Restore Defaults теперь сбрасывает значения до настроек по умолчанию, выбранных пользователем.
- Наборы горячих клавиш (QWERTY, QWERTZ, AZERTY) теперь автоматически обновляются при переключении региональных настроек.
- Параметры типа маски теперь можно редактировать при выборе нескольких нод.
- Теперь можно сфокусироваться на нескольких выбранных нодах в окне иерархии World Nodes с помощью соответствующей кнопки.
- Исправлены проблемы с некорректной работой ползунков для целочисленных параметров.
- Исправлена проблема с недоступным выбором уровня MIP при предварительном просмотре для изображений 2D-массива.
- Состояния (развернутые/свернутые) подкатегорий параметров (аккордеонов) в окне Parameters теперь сохраняются, поэтому при переключении между нодами, свойствами/компонентами или материалами, вам не придется снова их переупорядочивать (повторно разворачивать/сворачивать).
- Добавлена возможность сделать базовые материалы в проекте редактируемыми (User Project Settings -> Editable Base Materials).
- Оптимизировано рисование в режиме Cluster Paint Mode с огромным количеством элементов кластера (более 50 тысяч).
- Исправлена проблема с переполнением буферов событий ОС в случае повторного импорта больших Landscape Layer Map, иногда приводившая к случайному удалению соответствующих ассетов *.lmap.
- Добавлена возможность устанавливать значения по умолчанию для ряда настроек, которые будут использоваться при создании новых нод: Immovable, Lightmaps, Intersection, Collision и Physics Intersection. Соответствующие настройки доступны через окно Настроек (Settings -> Editor -> Project Settings -> Default Settings For Node Creation).
- Исправлена проблема с множественным редактированием поверхностей, из-за которой не удавалось применить значение, уже установленное для одной из них.
- Исправлена проблема с удалением материалов на основе графов после удаления графа родительского базового материала.
- Исправлена привязка объектов с измененным масштабом.
- Горячие клавиши для окон в единственном экземпляре теперь и открывают, и закрывают их.
- Фокусировка на камере Player теперь подразумевает фокусировку на ее значке, игнорируя размер усеченной пирамиды, а Shift + F позволяет сфокусироваться на границах камеры.
- Исправлена проблема с выбором клонированных нод после завершения операции 'Clone And Move' (ЛКМ + Shift), выбор не будет сбрасываться.
- Исправлен выбор оси Forward/Up в настройках импорта модели.
- Исправлена проблема с копированием и вставкой параметров поверхности, текстура Custom Surface также копируется.
- Исправлена проблема с неработающим значком 'directory', который открывает список анимированных элементов в инструменте Tracker.
- Оптимизировано отображение параметров для множественного выбора в случае огромного количества выбранных нод (десятки тысяч) для устранения зависаний редактора. Также была оптимизирована смена родительского материала для нескольких материалов.
- Исправлены проблемы с наследованием при использовании комбинации Ctrl + P.
- Исправлен выбор уровней детализации поверхности в окне просмотра.
- Исправлена проблема с заменой ноды с помощью инструмента Randomizer.
- Исправлена проблема с неправильной ориентацией вдоль нормалей поверхности (Orient By Normal) при использовании Snap to Surface. Также исправлена привязка объектов с измененным масштабом.
- Исправлена проблема с некоторыми окнами редактора, которые не отображались в Linux (Ubuntu 23.04, GNOME 44.3).
- Исправлен ряд проблем с масштабированием DPI в Windows.
Улучшения инструмента Sandworm
- Добавлена поддержка графических материалов (*.mgraph) при генерации зданий.
- Исправлены проблемы со швами на ObjectTerrainGlobal.
- Исправлена проблема с генерацией деревьев в местах, где есть дороги и здания.
- Исправлены проблемы, приводившие к артефактам и потере данных при генерации данных ландшафта с использованием алгоритмов сжатия.
- Исправлена проблема, приводившая к невозможности создания ObjectTerrainGlobal с использованием проекции GeodeticPivot, если размер границ участка превышает 30 градусов с каждой стороны).
- Исправлено смешивание масок растительности.
- Исправлена проблема с промежутками между текстурами, которые применяются вдоль линейных векторных объектов.
- Исправлена проблема, влияющая на генерацию зданий.
Add-On Store
- Теперь вы можете оценивать дополнения и оставлять комментарии, чтобы поделиться своими мыслями, предложениями или опытом относительно их использования.
- Добавлена возможность прикреплять несколько пакетов к одному дополнению для различных редакций SDK и операционных систем, поэтому теперь нет необходимости создавать для этой цели несколько версий дополнения.
- Улучшена релевантность результатов поиска, теперь учитываются заданные параметры фильтрации.
- Добавлена возможность отправить вопрос напрямую издателю через специальную форму обратной связи.
Для получения дополнительной информации о новых функциях смотрите обновленную версию документации Asset Store.
Обновления шаблона IG
- Добавлены границы для частиц, генерируемых на стороне графического процессора, благодаря которым они работают так же, как частицы генерируемые на стороне процессора, в части рендеринга источников света (с учетом ограничений по количеству источников света, отрисовываемых для прозрачности). Это сделало освещение частиц графического процессора более последовательным и стабильным без случайного переключения всех источников света в мире (без границ невозможно было определить, какие источники света следует отрисовывать).
- Исправлена проблема с вырезанием с помощью Particles Spacer частиц типа Length с высокими значениями параметров размера и длины.
- Исправлены проблемы с интерполяцией, связанные с использованием CIGIConnector, приводившие к дрожанию изображения, особенно заметному на больших экранах.
Демо и сэмплы
Новый демо-проект БПЛА
Представляем новый демо-проект Drone Simulator, демонстрирующий возможность рендеринга изображений БПЛА в UNIGINE в десктоп и VR режимах, а также управление дроном с помощью геймпада. В проекте используется базовая физическая модель динамики полета, которая обеспечивает захватывающий опыт пилотирования. Кроме того, предусмотрено несколько режимов камеры для имитации различных точек обзора, типов подключения и датчиков.
Демо-проект можно использовать в качестве шаблона для типичных случаев использования БПЛА:
- Аэрофотосъемка
- Инспекция и обслуживание инфраструктуры
- Поисково-спасательные операции
- Реагирование на чрезвычайные ситуации и ликвидация последствий стихийных бедствий
Новые C++ SIM сэмплы
Представляем новый набор сэмплов C++, демонстрирующий различные задачи моделирования (доступен только для версии Sim SDK), который будет расширен в следующих обновлениях SDK. Демо-проект High-Level Car Physics System теперь является частью этого набора и включает ряд новых сэмплов:
- Примеры моделирования веревок:
- Crane демонстрирует, как имитировать кран со стропами с перемещением груза.
- Wires показывает, как создавать реалистично выглядящие провода с имитацией физических свойств.
- SSL Socket — демонстрация реализации обмена сообщениями с сервером через SSL-соединение.
Новые примеры использования API
В раздел «C++ API Samples» добавлен ряд новых сэмплов Animation, демонстрирующих новый секвенсор анимации, включая следующие:
- MaterialAnimation — анимация шкалы эмиссии и параметров цвета материала по имени и по индексу.
- NodeAnimation — анимация положения, вращения и масштаба ноды.
- PlaybackLayers — два воспроизведения анимации с тремя дорожками (положение, вращение и масштаб): в первом каждая дорожка находится на отдельном слое и все они воспроизводятся одновременно, а во втором треки воспроизводятся последовательно в одном слое.
- PropertyAnimation – анимация параметра свойства.
- SingletonAnimation — анимация глобальной гравитации вместе с параметром рендеринга Fade Color.
- WidgetAnimation — анимация цвета шрифта и размера виджетов, а также их положения.
В набор C++ Samples были добавлены следующие сэмплы:
- Примеры потоковой передачи текстовых данных и изображений из Интернета, демонстрирующие реализацию асинхронных http-запросов к серверу и отображение результатов: изображение PNG или JPEG в первом примере и метеоданные по введенному названию локации - во втором.
- Пример Mask Paint, демонстрирующий, как рисовать маску ландшафта во время выполнения, с автоматической генерацией элементов ObjectMeshClutter по этой маске.
В набор C# Component Samples добавились следующие сэмплы:
- Пример плавучести Boat показывает, как моделировать плавучесть физических тел в воде, чтобы позволить им плавать в Global Water
Бесплатный учебный курс
Представляем наш бесплатный учебный курс по UNIGINE! Это вводный курс, специально разработанный для людей с базовыми навыками программирования на C# и базовым пониманием 3D-приложений, который поможет им быстро приступить к работе. Если вы уже какое-то время работали с UNIGINE, не спешите проходить мимо — загляните, возможно, вы еще найдете что-то интересное, какие-то решения или части кода могут пригодиться в ваших проектах.
В этом комплексном курсе вы углубитесь в широкий круг тем, в том числе:
- Анимация и физика
- Освещая мир: Освещение
- Освоение процесса создания материалов
- Звуковой фон: добавление звуков и музыки
- Создание привлекательных элементов графического интерфейса
- Основы оптимизации для достижения максимальной производительности
- Видеосъемка ваших творений
- И еще много интересного!
Успешно пройдя курс, вы не только получите практический опыт, но и пополните свое портфолио четырьмя интересными проектами. Эти проекты построены на основе предоставленных шаблонов и включают в себя:
- ArchViz: Создание иммерсивной интерьерной сцены с интерактивными объектами.
- FPS: Погружение в мир шутеров от первого лица через простой, но увлекательный проект.
- Гонка: Проверка своих творческих способностей при создании аркадной гоночной игры по пересеченной местности.
- VR: Визит в мир виртуальной реальности с проектом, разработанным для VR-гарнитур.
Этот курс предполагает использование бесплатной версии UNIGINE Community SDK и доступен для всех — регистрация не требуется! Не пропустите эту невероятную возможность прокачать навыки и расширить кругозор.
Готовы начать? Зарегистрируйтесь, чтобы получить бесплатный Community SDK, перейдите на https://learn.unigine.com/ прямо сейчас и отправляйтесь в увлекательное приключение по изучению UNIGINE!
Обратите внимание, что код и контент, используемые в курсе, в настоящее время оптимизированы для версии SDK 2.17, но мы скоро обновим их для свежей версии SDK 2.18.
Документация
- Добавлена новая статья о Анимации.
- Обновлена статья Инструмент Cleaner.
- Обновлена статья Асинхронная потоковая передача данных и связанные с ней статьи.
- Добавлены дополнительные описания в Справочник нод графа материалов.
- Исправлен ряд проблем в документации на основе ваших рекомендаций.
- Полный список изменений API доступен в Руководстве по миграции API.
- Полный список изменений консольных команд доступен в Руководстве по миграции консоли.
Спасибо, что прочитали, и не пропустите обновления, поскольку мы продолжаем работать над тем, чтобы сделать UNIGINE еще лучше!
- Ваша команда UNIGINE