光照模型
光照模型是一个公式,使用这个公式计算物体某个坐标点上的光照效果
光照模型有很多种,例如:标准光照模型,半兰伯特光照模型,Blinn光照模型,Phong光照模型和Blinn-Phong光照模型
标准光照模型里面,会进入到视野中的的光主要有下面四种光
自发光 emissive(像火把)
高光反射 specular(像镜子的光反射)
漫反射 diffuse(像木头的光反射)
环境光 ambient
光照效果可以放在顶点函数里面处理,即逐顶点关照处理,也可以放在片元函数中处理,叫做逐片元(像素)光照处理
所有的物体光照计算都会与物体的发现相关,法线是指始终垂直于某平面的虚线或者某曲线上一点的切线的直线
法线如图:
漫反射光的计算方式
直射光颜色 * max(0,cos(x))(x代表光和法线的夹角)
max的作用是使得光与物体法线夹角的值始终大于0,0的时候物体表面颜色即为黑色
向量的夹角的cos值也可以通过向量进行点积得到 所以计算方式也可以写成 直射光颜色 * max(0,表面法线方向单位向量*直射光方向单位向量)
SubShader{
Pass{
Tags{
"LightMode" = "ForwardBase"}
CGPROGRAM
#include "Lighting.cginc"
//unity系统定义好的类 可以使用一些内置的变量来简化计算操作
//_LightColor0 该变量表示第一个直射光的颜色
//_WorldSpaceLightPos0 该变量表示第一个直射光的位置(世界坐标下)
//UNITY_LIGHTMODEL_AMBIENT 该变量表示系统的环境光