В данный момент я изучаю шейдеры для отображения теней, и возникает один вопрос: почему мы сначала закрашиваем поверхности (ламберт / фонг), а затем наносим на них тени, а не просто подсвечиваемые пиксели?Это выглядит как противоположность тому, как должен работать свет.
Если мы используем отображение теней, это означает, что мы создали текстуру, которая сообщает нам, какие пиксели пространства экрана подвергаются воздействию источника света.Зачем нам тогда делать весь расчет Ламберта \ Фонга?Почему бы не получить освещение непосредственно из объединения теневых карт?
Вот псевдоалгоритм, который я вижу:
- Все пиксели выходного изображения по умолчанию полностью черные.
- Создание неосвещенной текстуры экрана альбедо
- Создание карты теней для источника света
- Изменение выходного изображения.Мы модифицируем только те пиксели, которые подвергаются воздействию светового потока (в соответствии с глубиной карты теней + - смещение, что угодно), делаем светлые пиксели более яркими в зависимости от интенсивности света, затухания и т. Д.
- Выбор следующего источника света
- Перейти к шагу 3
Результат, если это будет изображение с правильной интенсивностью света.Теперь мы умножаем текстуру интенсивности на текстуру альбедо и получаем окончательное изображение.Насколько я могу судить, для этого требуется только 3 текстуры за один раз, это слишком много emory?
Я предполагаю, что должна быть причина, почему люди этого еще не делают, я думаю, что мне просто нужен кто-тоуказать, почему.