为什么最终颜色值是着色器程序中两个其他颜色值的乘积?

时间:2015-08-03 15:12:00

标签: unity3d shader cg

在漫反射光照模型或其他模型中,像素的最终颜色值应该是其他两个光色值的乘积,我不太了解。 像这样:

float4 c;
c.rgb = (s.Albedo * _LightColor0.rgb*diff);

1 个答案:

答案 0 :(得分:1)

这是因为你还需要考虑灯光的颜色和周围反射的颜色。

在您提交的代码中s.Albedo是对象本身的颜色,_LightColor0.rgb提供主要灯光的颜色(即场景中的方向性灯光)。作为一项实验,首先尝试将主灯的颜色从白色变为红色再变为蓝色,您会注意到会发生什么。

如果没有_LightColor0.rgb * diff乘以该对象,则会产生平面颜色,看起来更像是2D对象。