среда, 30 августа 2017 г.

Кластерный рендеринг - демка

Доступна демка кластерного рендеринга на основе Dagon:

Скачать для Windows



Clustered Forward Shading

Уже давно пытаюсь решить проблему множества источников света в классическом прямом рендере (честно говоря, очень не хочется переходить на deferred). И недавно я открыл для себя отличную технику, которую теперь хочу попробовать применить в Dagon - clustered forward shading. Суть ее заключается в индексировании пространства при помощи 3D-текстуры, ячейки которой (кластеры) ссылаются на источники света в буфере, влияющие на пространство внутри данной ячейки (фактически, в ячейке можно хранить срез индексов - смещение и количество источников света - в виде двух 16-битных значений). Пиксельный шейдер, зная позицию точки в world space, сэмплирует ячейку из 3D-текстуры, получает срез и проходит по нему циклом, считывая атрибуты источников света - позицию в eye space, цвет и радиус.


Метод очень перспективный - минимальная нагрузка на GPU, всего две дополнительные служебные текстуры (кластер и буфер источников света), хорошая масштабируемость и почти полная независимость от сложности сцены (есть лишь зависимость от ее размера - чем больше сцена, тем выше разрешение кластера).
Есть, впрочем, и недостатки - во-первых, небольшая дополнительная нагрузка на CPU при обновлении 3D-текстуры и буфера. Но обновлять их нужно только при движении источников света - если у вас статичный свет, то оверхед будет нулевой. Другое узкое место - передача буфера источников света в видеопамять. У меня это текстура GL_RGB32F шириной N * 8, где N - количество ячеек кластера, и высотой 4 - по одной строке на атрибут. N может достигать 1024 и выше - передавать такой буфер из системной памяти каждый кадр может показаться малоэффективным, но можно обновлять не весь буфер, а только те его части, где меняется список источников света (маловероятно, что в обычной игровой ситуации будут сотни движущихся ламп).


Надеюсь вскоре доделать и выложить демку с реализацией данного метода.

воскресенье, 13 августа 2017 г.

Шейдерные эффекты в Dagon

Работаю над убер-шейдером и тенями, а также сделал постобработку, добавил FXAA, SSAO и хроматическую аберрацию:



суббота, 12 августа 2017 г.

Dagon 0.2.0

Выпустил новую версию Dagon - 0.2.0. Релиз включает изменения, сделанные в рамках демы с автомобильной физикой и различных других примеров, а именно:
  • Система частиц с поддержкой векторных полей
  • Шейдерный бэкенд для материалов
  • Экспериментальная поддержка теневых карт
  • Демонстрационный пример Dagon также обновлен - в сцену с механикой от первого лица добавлены тени.
Также скоро в основную ветку будет внесена система постобработки и поддержка сглаживания FXAA. Следующим шагом будет реализация PBR-бэкенда и поддержки формата DGL3, а затем на Dagon можно будет портировать Atrium.

Скачать демку Dagon 0.2.0 для Windows и Linux можно тут.

вторник, 8 августа 2017 г.

Новая книга по D на русском

Когда уже казалось, что dlang.ru окончательно сгинул, сайт неожиданно вернулся к жизни с новым проектом - русскоязычной книгой по языку D для начинающих: http://dlang.ru/book. Доступны первые две главы, посвященные основным синтаксическим конструкциям, системе типов, ООП, стандартному вводу/выводу и т.д.