Карты окружения в отложенном рендере

Несколько новых скриншотов отложенного рендера:

В ближайшее время планирую реализовать поддержку кубических карт с полноценным интегрированием Монте-Карло (сейчас используются равнопромежуточные карты с простым box-фильтром, формируемые стандартным mip-генератором OpenGL, что, конечно, дает достаточно далекий от физически корректного результат, хотя и визуально приемлемый). Также обдумываю вариант загрузки кубической карты из файла DDS, что позволяет строить мип-уровни в сторонних утилитах типа CubeMapGen.

Dagon 0.8.0. Deferred Shading на подходе

На днях вышла новая версия Dagon – 0.8.0. Основные нововведения включают собственный формат движка для хранения моделей и сцен, который можно экспортировать из Blender, специализированный материал для частиц, исправленный рендеринг прозрачных объектов. Dagon теперь требует OpenGL 4.0 (из-за необходимости функции glBlendFunci). Полный список изменений см. на странице релиза.

Вскрылись проблемы с работой движка под macOS – поскольку у меня нет возможности тестировать его под этой ОС, поддержка Mac отныне не гарантирована. Но буду благодарен, если кто-то исследует эту проблему и предложит решение.

Одновременно я начал работу над поддержкой отложенного освещения и уже добился результата. Заодно реализовал SSAO, мягкие частицы и улучшил функцию неба, что заметно на высоких значениях шероховатости.

Скорее всего, отложенный рендер полностью заменит кластерный. Для прозрачных объектов я планирую ввести классический прямой метод освещения с отбором ближайших к объекту источников света.

Экспорт в Dagon из Blender

Работаю над экспортером контента для Blender. Для хранения сцен я решил использовать свой контейнер Box, в который пакуются меши в формате OBJ, текстуры и файлы с описаниями объектов и материалов. Формат поддерживает граф сцены – то есть, объектам можно назначать родителей.

Кстати, модель средневекового дома (и еще несколько моих игровых моделей) вы можете купить по более чем скромным ценам на CGTrader, чем поддержите мой проект по созданию современного 3D-движка для D.

dlib 0.13.0 и Dagon 0.7.0

На днях состоялись новые релизы двух основных моих проектов – dlib 0.13.0 и Dagon 0.7.0.

Изменения в dlib:

  • Из основной ветки был удален пакет dlib.async. Решение об удалении было принято из соображений безопасности. К сожалению, у пакета в настоящее время нет активных мейнтейнеров, некому исправлять баги, поэтому я посчитал dlib.async недостаточно стабильным для существования в качестве официальной части dlib – хотелось бы, чтобы все компоненты dlib были в одинаковой степени актуальны и поддерживаемы. dlib.async продолжит существование в рамках ветки async, но пользователям рекомендую обратить внимание на более актуальные и законченные асинхронные движки – такие, как vibe-core
  • Добавлен модуль dlib.image.canvas с реализацией класса Canvas – векторного рендер-движка с интерфейсом, похожим на HTML5 canvas. В настоящее время он поддерживает отрисовку полигонов и фигур Безье с заливкой и контуром. Рендеринг осуществляется в заданное пользователем изображение SuperImage.
  • Улучшен декодер файлов Radiance HDR/RGBE – теперь он читает файлы, начинающиеся со строки “#?RGBE”
  • Добавлены функции tone mapping’а (hdrTonemapReinhard, hdrTonemapHable), новые алгоритмы выделения краев (edgeDetectLaplace, edgeDetectSobel), новые методы для структуры Color4f (toLinear, toGamma)
  • Добавлены новые функции для векторов (reflect, refract, faceforward)
  • Добавлены функции для вычисления касательного вектора кривых Безье (bezierTangentVector2, bezierTangentVector3).
Изменения в Dagon:
  • Полноценный HDR-рендеринг с автоматической экспозицией и tone mapping’ом
  • Поддержка HDR-карт окружения в формате Radiance HDR/RGBE
  • Улучшенные каскадные тени (более эффективное заполнение каскадами пирамиды видимости)
  • Переписан весь код, отвечающий за PBR. Теперь используется модель Кука-Торренса вместо Блинна-Фонга. Добавлена поддержка текстур шероховатости (roughness) и металличности (metallic)
  • Переписана система пост-обработки. Все фильтры теперь являются частью стандартной сцены (BaseScene3D), их остается только включить и настроить. Добавлены фильтры размытия при движении, свечения и цветокоррекции (LUT), улучшен фильтр хроматической аберрации
  • Улучшено встроенное процедурное небо – теперь движок сам генерирует геометрию небесного купола
  • Добавлены слои для сортировки объектов при рендеринге
  • Камера от первого лица облегчает рендеринг оружия в шутерах, предоставляя матрицу оружия
  • Улучшена поддержка джойстиков, добавлена поддержка рулей
  • Dagon теперь использует dlib 0.13.0.
Обновление демонстрационного приложения с использованием Dagon 0.7.0 планируется в ближайшие дни.

Улучшенные glow и lens distortion

Реализовал более качественный многопроходный эффект свечения и адаптировал шейдер хроматической аберрации из Wagner:

Пост-обработка в Dagon теперь стала намного проще – все встроенные фильтры легко включаются/выключаются и настраиваются при помощи специального API, являющегося частью класса BaseScene3D. Есть и возможность добавлять свои фильтры.