- A+
所属分类:UnityShader 原创文章
新建场景1
加入一个球体,把平行光删除掉
新建材质和Shader (LightColor)
打开Shader,把原来的代码删除
编写一个顶点片段型的着色器
编写Shader的目录和名字
编写属性
_color灯光的颜色,_direct灯光的方向,_intensity灯光的强度
编写子Shader
这里定义了一个pass通道
就是让数据经过这个通道进行加工
使用CG语言编写 (CGPROGRAM ...................ENDCG)
声明顶点处理程序 #pragma vertex vert (vert为一个函数)
声明片段处理程序 #pragma fragment frag (frag为一个函数)
包含Unity的库文件,因为等下要使用Unity的变换矩阵
声明属性和保存数据的结构体
在CG程序中,要使用Properties定义的属性
需要再声明一下,名字也要相同
然后定义一下要保存数据的结构体
因为要模拟光照
所以这里需要顶点位置和法向量
顶点处理函数
这里的UNITY_MATRIX_MVP是刚刚引入Unity文件所定义的
它是个世界视图投影于一身的变换矩阵
保存处理过的顶点信息和法线信息并返回
然后传输到下一个处理程序(片段)
片段处理程序
真正的光照模拟在这里计算
先将光照翻转(反正要翻,不然就翻,不知道为啥)
将光照方向和顶点法线单位化
计算它们的点积 (从而对应相应角度)
得到对应的反射光照的强度
<0代表光照在背面
最后计算颜色的强度并返回
结果对比
改变一下颜色
改变一下方向