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 Illumation в настройках проекта для создания и настройки объёмов проб.
- Исправление импорта удалённых файлов сцены, вызывающего инстанциирование старых содержаний файла.
- Экспонирование настройки качества сжатия изображений и оптимизации искажения скорости (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 Образ
- Переход от базового образа Ubuntu 20.04 к 22.04.
API Плагина
- Теперь требуется наличие ключа
"wonderlandengine"
вpackage.json
плагина. - Добавление экспериментальной
tools.computeMeshBounds(mesh)
. - Добавление
ui.inputTextMultiline()
.