Я использую c++, opengl 4.0 и язык шейдеров glsh.
Мне интересно, как правильно смешать диффузную текстуру с текстурой карты освещения.
Предположим, что у нас есть комната. Каждый объект имеет диффузную текстуру и карту освещения. На каждом форуме типа gamedev.net или stackoverflow люди говорят, что эти текстуры надо множить. И в большинстве случаев это дает хорошие результаты, но иногда некоторые объекты находятся очень близко к источнику света (например, белая лампочка). Этот источник света для близких объектов генерирует белую карту освещения. Но когда мы умножаем диффузную текстуру на белую карту освещения, мы получаем исходный цвет диффузной текстуры.
Но если источник света находится близко к какому-либо объекту, то цвет света должен быть доминирующим
Это означает, что если белый сильный свет близок к красной стене, то какая-то часть этой стены должна быть белой, а не красной!
Я думаю, мне нужно что-то большее, чем просто карта освещения. Lightmap не имеет информации об интенсивности света. Это значит, что самый блестящий цвет — это как раз максимально рассеянный цвет.
Может быть, у меня должно быть 2 текстуры - карта теней и карта освещения? Тогда уравнения должны выглядеть так:
vec3 color = shadowmapColor * diffuseTextureColor + lightmapColor;
Это хороший подход?