为什么最终的颜色值是着色器程序中另外两个颜色值的乘积?
Why the final color value is the product of two other color values in shader program?
在diffuse lighting模型或者其他模型中,一个像素点的最终颜色值应该是其他两种光颜色值的乘积,我不太明白。
像这样:
float4 c;
c.rgb = (s.Albedo * _LightColor0.rgb*diff);
因为还要考虑灯光的颜色和周围反射的颜色。
在您提交的代码中,s.Albedo
是对象本身的颜色,_LightColor0.rgb
提供主光源的颜色(即场景中的定向光源)。作为实验,首先尝试将主灯的颜色从白色变为红色再变为蓝色,您会注意到会发生什么。
同样,如果不使用 _LightColor0.rgb * diff
相乘,对象将给出平坦的颜色,看起来更像一个 2D 对象。
在diffuse lighting模型或者其他模型中,一个像素点的最终颜色值应该是其他两种光颜色值的乘积,我不太明白。 像这样:
float4 c;
c.rgb = (s.Albedo * _LightColor0.rgb*diff);
因为还要考虑灯光的颜色和周围反射的颜色。
在您提交的代码中,s.Albedo
是对象本身的颜色,_LightColor0.rgb
提供主光源的颜色(即场景中的定向光源)。作为实验,首先尝试将主灯的颜色从白色变为红色再变为蓝色,您会注意到会发生什么。
同样,如果不使用 _LightColor0.rgb * diff
相乘,对象将给出平坦的颜色,看起来更像一个 2D 对象。