Comments 15
У этого же автора и книги есть. Они немного староваты, но последняя все еще полезна.
почему свет от дверей ни и окон(?) ни как не влияет на желтый хотя бы на границе смешения?
Общее освещение только разбавляет цвета.
Но самое большое разочарование — на последних кадрах желтый кубик под синим освещением остался желтым, а зеленый — зеленым. Это не правильно.
Обратите внимание на формулу.
Как вы предлагаете это считать, если будите рендерить шары в буфер цвета? Ну точнее, каким образом нужно рендерить эти шары?
Давайте предположим что можно. И пусть, у нас пока есть только диффузная компонента.
Тогда в результате, если записывать сразу в буфер цвета, будет следующее:
<цвет_пикселя> = <изначальный_цвет> + <цвет_источника_1> + ... + <цвет_источника_n>
А должно быть так:
<цвет_пикселя> = <изначальный_цвет> * (<цвет_источника_1> + ... + <цвет_источника_n>)
Эту проблему можно решить если записывать результат в отдельную текстуру. Тогда шейдер источника света будет брать цвет из буфера, умножать его на свой цвет и добавлять в результирующий буфер, получается то что нужно.
<цвет_пикселя> = <изначальный_цвет> * <цвет_источника_1> + ... + <изначальный_цвет> * <цвет_источника_n>
Проблема в том, что у нас есть еще и зеркальная компонента, для которой нам нужно делать тоже самое, а потом сложить с диффузной компонентой. Тогда нам потребуется еще раз отрисовать все объекты и сохранить в текстуру степень зеркальности. И… как результат мы приходим к общему случаю отложеного освещения, в котором эти тектуры — нормали, альбедо и степень зеркальности создается за один проход.
<цвет_пикселя> = <изначальный_цвет> * (<цвет_источника_1> +… + <цвет_источника_n>)
В википедии как раз указана сумма:
<цвет_пикселя> = <фоновой (ambient)> + (<рассеянной (diffuse) источник 1> + <блики (specular) источник 1> + ... + <рассеянной (diffuse) источник n> + <блики (specular) источник n>)
Ambient мы сохраняем в текстуру и потом постепенно добавляем диффузные и бликовые составляющие для каждого источника. Что-то тут не то.
Нет, посмотрите внимательно, там указано вот так
<цвет_пикселя> = <фоновой (ambient)> * Ka + (<рассеянной (diffuse) источник 1> * Kd + <блики (specular) источник 1> * Ka + ... + <рассеянной (diffuse) источник n> * Kd + <блики (specular) источник n> * Ka)
где Ka, Kd, Ks — это свойства метериала отражать соответствующий свет — т.е. то что у вас в цветовом буфере.
Еще был вопрос в комментариях (я его отклонил, случайно), "почему такие засветы на потолке?"
Это потому что нет тененй пока.
OpenGL ES 2.0. Отложенное освещение