上节我们得到的效果咋样,很不错吧,把球搞出了立体的感觉。立体感的小球
球向光面的明亮度依法线方向递减,很不错;但背光面却一片黑,啥也没有。如果现实中只有一个光源,并且周围物体不反光,那这个结果是对的——比如月球,月球
面向太阳的一面明亮无比,背向太阳的一面根本看不到,是个完美的单光源照射受光结果。但我们现实中不是这样的,我们的物体会受到周围物体反射的光,导致它在背向光源的面上也有受光,并不是黑的。
1.环境光
我们叫这种来自周围环境的光为环境光(Ambient Light),假设这种光均匀地照在模型的每个面上(就是说这个光的值在各处是相同的)。
所以,我们在上节实现的shader(不是卡通风格的,上一个)里的片元函数里添加一项环境光(没错,又是片元函数,今后我们的大部分工作都在片元函数里):
fixed3 ambient = (0.1, 0.1, 0.1);环境光
然后把它加到最后的返回颜色上:
return fixed4(diff*_Color.xyz + ambient, 1);加上环境光
加上去后,保存shader,切换到unity界面看效果:只加0.1的结果
嘛,好像没啥变化。那是因为咱们加的太小了,