Быстрое освещение с несколькими огнями

10

Как я могу реализовать быстрое освещение с несколькими источниками света?

Я не хочу сдерживать игрока, он может размещать неограниченное количество и, возможно, перекрывающихся (точечных) источников света на уровне.

Проблема в том, что шейдеры, которые содержат динамические петли, которые были бы необходимы для расчета освещения, имеют тенденцию быть очень медленными.

У меня была идея, что если бы во время компиляции было возможно компилировать шейдер n раз, где n - количество источников света. Если число n известно во время компиляции, циклы можно развернуть автоматически. Можно ли сгенерировать n версий одного и того же шейдера с разным количеством источников света?

Во время выполнения я мог бы решить, какой шейдер использовать для какой части уровня.

codymanix
источник
Если игрок динамически добавляет источники света, как шейдер "времени компиляции" может быть правильным ответом?
Сет Бэттин
Как я уже писал, компилятор может генерировать шейдеры для 1,2,3, ... источников света, и во время выполнения я мог решить, какой из них использовать для какой части уровня
codymanix
шейдеры времени компиляции должны знать, где будут располагаться источники света, любая динамичность источников света разрушит их
трещотка урод
только количество источников света должно быть динамическим. позиции будут предоставлены в качестве параметра.
codymanix
1
Похоже, у вас есть свой ответ. Вы знаете максимальное количество источников света и диапазон возможных позиций.
ashes999

Ответы:

8

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

В основном это техника, в которой вы сначала визуализируете все свои геометрические данные (положение, нормаль, глубина) в промежуточный пиксельный буфер (называемый G-буфер). Затем за второй проход вы визуализируете легкую фигуру вместе с ее параметрами. Шейдер этого второго прохода получает информацию из G-буфера, применяет световой расчет, а затем смешивает его с конечным изображением.

Вы можете найти детали реализации здесь

akaltar
источник