Я начинаю с GLSL и реализовал простое отложенное затенение, которое выводит G-буфер с позициями, нормалями и альбедо.
Я также написал простой точечный световой шейдер.
Теперь я рисую сферу для точечного источника света, и вывод идет в буфер освещения.
Проблема в том, как объединить результаты буфера освещения при рисовании нескольких источников света?
Например, когда я рисую второй источник света в буферном освещении, используя шейдер точечного источника света, как мне добавить первый источник света ко второму источнику света в буфере освещения. Я имею в виду, вы не можете читать и писать в один и тот же буфер вывода?
opengl
shaders
glsl
deferred-rendering
JBeurer
источник
источник
Для моего отложенного рендеринга я объединяю все источники света в одну цель рендеринга источников света, используя информацию из g-буфера, а затем выполняю выборку, которая отображает цель для интенсивности света при создании моего окончательного изображения заднего буфера.
В общем, я запускаю всю свою игровую геометрию через проход геометрии, чтобы построить g-буферы. Оттуда я подаю g-буферы в свой световой проход. Каждый свет проходит через проход, используя полноэкранный квад. Таким образом, мой пиксельный шейдер может рассчитать интенсивность света для всех видимых поверхностей из g-буфера и затем добавить их к цели рендеринга света. Вы просто добавляете интенсивность света для каждого источника света в буфер света, но убедитесь, что вы ограничиваете интенсивность от 0 до 1.
Все, что вам нужно сделать для управления различными типами источников света (точечные, прожекторные, параллельные), - это сделать световой поток более устойчивым, возможно, используя постоянный буфер для определения того, какие процедуры освещения следует выполнить.
источник
Вероятно, есть лучший ответ, чем этот, но я знаю, что если в своем шейдере вы повторяете код, необходимый для второго источника света, вы можете обработать два источника света на одном объекте вместо одного. Это требует накапливания большого количества кода для второго источника света и выглядит немного избыточно, но я знаю, что это работает. Тем не менее, я верю, что, как мы надеемся, кто-то за вас укажет, может быть более элегантное решение.
источник