在unity中,光照分为四个方向:自发光、环境光、漫反射、高光反射。
自发光:直接定义一个自发光颜色,等到最终计算颜色的时候,加上就行。
环境光:环境光通过light面板可以设置;在代码中,可以通过unity内置变量UNITY_LIGHTMODEL_AMBIENT得到环境光的颜色和强度信息。
漫反射:漫反射可以逐顶点、逐像素渲染,在逐顶点渲染时,可见明显锯齿,所以一般选用逐像素渲染。在其中可以使用半兰伯特光照模型,也就是对法线点乘光源方向 *0.5 +0.5。
高光反射:高光反射可以逐顶点、逐像素渲染(phong模型),逐像素渲染(blinn-phong模型);逐顶点反射反射点有锯齿,phong模型渲染和blinn-phong模型比,因为需要计算反射角度,所以效率更低,blinn-phong模型添加了H向量,也就是视角方向+光源方向的归一化。
其中主要的是计算漫反射和高光反射的公式,需要记牢:
漫反射公式:
最后实现代码并优化如下 :
高光反射公式:phong模型
最后实现代码如下:(phong模型)
最后实现代码优化如下:(blinn-phong模型)