Я реализую освещение в 3D-движке и обнаружил недостаток в способе расчета освещения. В комбинированном шейдере я получаю диффузный цвет и расчеты освещения.
return diffuseColor * (diffuseLight + ambient);
Насколько я могу судить, это стандартный способ ведения дел. А вот, например, что если цвет 0,1,0, а свет 1,0,0. (Игнорируйте окружающий мир в этом примере) Результатом будет 0,0,0. Но в реальной жизни, если я возьму чистый зеленый лист бумаги и направлю на него окрашенный красный свет, он должен стать желтым. Или хотя бы не черный.
Как другие игры решают эту проблему?