Dagon 0.38.0

Очередной релиз. Главное нововведение — это модуль dagon.core.dxt, быстрый компрессор текстур в DXT1/DXT5 (D-порт библиотеки RygsDXTc, о котором писал ранее). Текстуру теперь можно сжать после загрузки при помощи свойства TextureAsset.compress. Также реализована функция dagon.resource.dds.saveDDS для сохранения сжатых текстур в DDS. Добавлено новое свойство TextureAsset.assetManager. Добавлена поддержка дополнительных форматов SDL_Image в структуре ImageFileFormat, а именно GIF, QOI, PNM, XCF, XPM, PCX, LBM.

Добавлены новые опции settings.conf для глобального управления анизотропной фильтрацией текстур: gl.anisotropicFiltering и gl.defaultTextureAnisotropy. По умолчанию анизотропная фильтрация отключена.

Добавлен новый оператор тональной компрессии Uchimura.

Реализована обработка SEH-исключений под Windows с трассировкой стека в отладочных сборках (dagon.core.crashhandler).

Добавлена поддержка API вибрации (Haptic API) SDL (GameInputDevice.haptic), который, впрочем, на практике является экзотикой — далеко не все устройства с ним работают. Для большинства контроллеров в SDL поддерживается только Rumble API.

Добавлена функция dagon.core.dialogs.showMessage для графического вывода сообщений.

Если в системе не найдена библиотека Wintab, движок теперь логирует предупреждение вместо ошибки.

В расширении dagon:audio исправлены сигнатуры некоторых функций SoLoud, добавлена перегрузка метода AudioManager.createSound для создания звуков из буферов в памяти.

Исправлены некоторые важные баги в различных компонентах движка, а также ошибки компиляции под x86.

window.hiDPI теперь включен в дефолтном settings.conf.

AgX в Dagon

Добавил в Dagon поддержку AgX — это новая функция tonemapping’а, намного превосходящая ACES и Filmic по качеству результата. В частности, AgX более адекватно отображает засвеченные области — например, поверхности, освещенные яркими цветными источниками света или самостоятельно светящиеся поверхности, как показано на скриншотах ниже. При этом картинка в целом становится менее контрастной и насыщенной — для решения этой проблемы есть режим Punchy, который дает эффектный кинематографичный контраст.

Для сохранения обратной совместимости функцией по умолчанию пока останется ACES.

Обратил внимание, что многие в сообществе компьютерной графики не совсем понимают суть AgX и вообще тональной компрессии. Иногда AgX неверно называют «цветовым пространством» — пространство там BT.2020 RGB, предложенное для стандартизации изображения в устройствах UHDTV, а AgX — это цветовое преобразование (color transform) в этом пространстве. Перед тем, как применять AgX, нужно перевести цвет из линейного RGB в линейный BT.2020 RGB (а после применения — обратно). Тональная компрессия — это не какой-то волшебный фильтр, который «делает красиво», а просто функция, которая нелинейно сжимает яркость в ограниченный диапазон значений, сохраняя как можно больше информации с учетом особенностей человеческого зрения: в идеале должна сохраняться детализация и в темных, и в светлых участках картинки (не должно быть засветов и черных теней), а все цвета должны выглядеть правдоподобно на всем диапазоне яркости. Тема, опять-таки, довольно сложная, очень интересная и заслуживающая отдельной подробной статьи.

Dagon vs Eevee

В грядущем Dagon 0.11 будет поддерживаться дополнительный метод тональной компрессии схожий по результату с тем, что используется в Blender 2.8 (Filmic View Transform). Ниже — сравнение рендеров Eevee в Blender 2.82 и Dagon на примере сцены со шлемом из коллекции примеров glTF. Моя картинка чуть более контрастна, но зато нет «передержаных» бликов.