Как я могу реализовать быстрое освещение с несколькими источниками света?
Я не хочу сдерживать игрока, он может размещать неограниченное количество и, возможно, перекрывающихся (точечных) источников света на уровне.
Проблема в том, что шейдеры, которые содержат динамические петли, которые были бы необходимы для расчета освещения, имеют тенденцию быть очень медленными.
У меня была идея, что если бы во время компиляции было возможно компилировать шейдер n раз, где n - количество источников света. Если число n известно во время компиляции, циклы можно развернуть автоматически. Можно ли сгенерировать n версий одного и того же шейдера с разным количеством источников света?
Во время выполнения я мог бы решить, какой шейдер использовать для какой части уровня.
Ответы:
Я считаю, что то, что вы ищете, называется отложенным рендерингом. Это метод рендеринга, который очень хорошо масштабируется при большом количестве источников света, поэтому его можно использовать для динамического непрямого освещения. Это означает тысячи огней на экране.
В основном это техника, в которой вы сначала визуализируете все свои геометрические данные (положение, нормаль, глубина) в промежуточный пиксельный буфер (называемый G-буфер). Затем за второй проход вы визуализируете легкую фигуру вместе с ее параметрами. Шейдер этого второго прохода получает информацию из G-буфера, применяет световой расчет, а затем смешивает его с конечным изображением.
Вы можете найти детали реализации здесь
источник