Wonderland Engine 1.4.0 - Объемы GI Probe, Reverse-Z, Свойства Массивов
Разреженные объемы проб глобального освещения, reverse-Z, новые типы параметров пользовательских компонентов (массивы и записи). См. полный список изменений ниже.
Разреженные Объемы Probe для Глобального Освещения
Главное новшество этого релиза - наша высококачественная реализация объемов проб. Наш метод размещает сферические гармонические диффузные зондовые источники в сцене путем вокселизации сцены и распределения зондов света возле поверхностей. Это дает легкость работы для как GPU, так и времени загрузки, так как зонды размещаются только там, где это необходимо, эффективно используя данные.
Зонды запекаются напрямую из редактора. Косвенное освещение применяется даже к динамическим и скелетизированным объектам.
На приведенной выше сцене около 52,000 проб, что составляет примерно 2,5 МБ загружаемых данных GI.
Reverse Z
Благодарим Playko за спонсорскую поддержку этой функции.

Поскольку 32-битные числа с плавающей запятой имеют более высокую точность вблизи нуля, обычный диапазон точности для координат NDC (результат проекции) от -1 до 1 является неоптимальным и может вызывать сильные артефакты z-файтинга на близких и дальних расстояниях. Установление очень близких или далеких значений отсечения усиливает этот эффект.
Reverse-Z настраивает пространство NDC и матрицы проекции так, чтобы распределение точности 32-битных чисел с плавающей запятой использовалось оптимально, что позволяет отображать очень близкие и очень удаленные объекты без типичных артефактов z-файтинга.
Посмотрите пример reverse-z здесь.
Всегда SIMD
Благодаря широкому распространению WebAssembly SIMD, мы смогли удалить все варианты без SIMD в рантайме. Это означает, что суффикс -simd
больше не используется и подразумевается в именах рантайма.
Поддержка Проектов старше 1.0.0
Трудно поверить, что Wonderland Engine 1.0.0 был выпущен почти в этот же день два года назад.
С выходом 1.4.0, мы удаляем 38 индивидуальных миграций файлов проекта, которые обновляют файлы проектов, созданные в версиях старше 1.0.0. То, что у нас их было так много, свидетельствует о том, насколько серьезно мы относимся к обратной совместимости.
Если у вас есть файл проекта старше 1.0.0, который вы хотите продолжать использовать с 1.4.0, вы всегда можете открыть его с версией 1.3.4 или более ранней версией Wonderland Engine, чтобы сначала перенести его на версию после 1.0.0.
Список Изменений
Редактор
- Новый раздел Global Illumination в настройках проекта для создания и настройки объемов проб.
- Исправление импорта удаленных файлов сцены, вызывающего инстанцирование старых содержаний файла.
- Экспонирование настройки качества сжатия изображений и оптимизации искажения скорости (RDO) в разделе Ресурсы > Изображения.
- Linux: Включение отчетности о сбоях.
- Улучшенный экран входа в редактор для авторизации через браузер (для доступа к менеджеру паролей).
- Исправления различных сбоев.
Движок
- Используйте reverse-Z, когда доступно
EXT_clip_control
. - Новая запеченная глобальная иллюминация через разреженные объемы GI проб.
- Исправление константы EPSILON_F, некорректной для mediump чисел с плавающей запятой, вызывающей проблемы на менее мощных устройствах Android.
- Обновление до версии meshoptimizer 0.23 (потенциальное улучшение размера файлов ~5-10% для сеток).
- Исправление горячей перезагрузки плагинов, что потенциально вызывает добавление дополнительных записей плагинов в интерфейсе Плагинов.
- Оптимизированная оценка буфера обратной связи плиток на менее мощных устройствах.
- Исправление артефактов на тенях точечных светильников.
Рантайм
- Удаление вариантов рантайма WebAssembly без SIMD.
- Оптимизация загрузки несжатых текстур с использованием ImageBitmap.
- Возможность загрузки текстуры из ImageBitmap.
API Рантайма
- Добавление
Property.array()
иProperty.record()
.
Docker Image
- Переход от базового образа Ubuntu 20.04 к 22.04.
API Плагина
- Теперь требуется наличие ключа
"wonderlandengine"
вpackage.json
плагина. - Добавление экспериментальной функции
tools.computeMeshBounds(mesh)
. - Добавление
ui.inputTextMultiline()
.