На днях вышли новые версии Dagon и dlib – 0.9.0 и 0.15.0 соответственно. Релиз Dagon – самый крупный со времени портирования движка на современный OpenGL: он содержит 190 коммитов, практически весь рендерер был переписан заново. Вот краткий список изменений:
- Состоялся переход с прямого рендеринга (forward) на отложенный (deferred). Это должно было рано или поздно произойти, все современные движки в той или иной мере используют отложенные эффекты. В Dagon этот рефакторинг серьезно улучшил производительность и позволил полноценно реализовать SSAO. Количество динамических источников света теперь ограничено только fillrate’ом видеокарты. Ценой стало повышенное потребление видеопамяти, также при отложенном рендеринге невозможно эффективно реализовать прозрачность, поэтому все прозрачные объекты рендерятся в прямом fallback-режиме, и для них не учитываются точечные источники света.
- Система шейдеров была переписана с нуля. Старая система с бэкендами материалов была заменена на шейдеры, все избыточные классы материалов были объединены в один, создавать новые материалы и передавать шейдерам параметры стало значительно проще. Все шейдеры используют GLSL 4.0 Core, ветвление в шейдерах было заменено на uniform-подпрограммы, что повысило производительность и сделало код более читаемым. Материалы с пользовательскими шейдерами также рендерятся в прямом режиме.
- Была серьезно улучшена система частиц: появилась поддержка мягких частиц, освещения, отбрасывания теней. Также теперь можно создавать несколько эмиттеров в каждой системе. Опционально в качестве частиц можно рендерить любые объекты вместо биллбордов.
- Добавлена поддержка Screen space ambient occlusion (SSAO).
- Добавлены шейдер воды по методу Себастьяна Лагарда и модель неба по Рэлею (экспериментально).
- Dagon теперь использует BindBC вместо Derelict.
- Добавлена поддержка автоматического деплоя: при каждой сборке Dub копирует в проект все необходимые файлы для запуска, включая DLL’ки под Windows.
Полный список изменений смотрите на странице релиза. Также было обновлено и демонстрационное приложение.
Изменения в dlib по большей части носят исправляющий и косметический характер: я решил постепенно избавиться от устаревших компонентов, в связи с чем следующие модули пометил как deprecated:
- dlib.image.parallel
- dlib.math.fixed
- dlib.functional.quantifiers
- функции map, filter, reduce в dlib.functional.range.
Следующие модули были удалены:
- dlib.container.aarray
- dlib.math.affine
- dlib.core.fiber (временно перенесен в отдельную ветку до завершения windows-порта)
Нововведения включают:
- dlib.text.unmanagedstring – альтернативная реализация строк, не использующая сборщик мусора
- Улучшенные декодеры текстовых кодировок, модуль dlib.text.encodings.
- Также dlib теперь может быть собран компилятором GDC (за исключением модуля dlib.math.sse, который в этом случае не будет доступен).
Полный список изменений – на странице релиза.