最近在看《UnityShader入门精要》来进行Shader的入门学习。看完第六章的”Unity中的基础光照“后,对前面所讲的顶点着色器和片元着色器有了更透彻的理解,于是做了个小实验,一方面验证自己对着色器渲染原理的理解是否正确,另一方面想亲眼看看渲染的整个流程,加深记忆。
为了计算方便,实验场景尽量简单化
1.场景模型只要一个平行光,一个带漫反射Shader材质的胶囊和一个用于参照地平线的terrain;
2.平行光设置为沿x轴旋转正45度。这样一来,其向量可以表示为(0,-1,1),方便计算;
3.平行光强度设置为1,颜色为纯白,即(1,1,1,1),减少干扰;
4.环境光强度设置为0.2,可以明显看到效果。另外环境光强度在这里的范围是0~8,其实实际范围是0~3.445,由于这个问题导致先前计算一直出错,我也是醉了;
5.在胶囊上挂个脚本,只声明了”public color a;“,为了方面使用Unity自带取色器。
实验Shader代码:
shader "Caddress Unity Shader/Diffuse Vertex-Level"
{
Properties{
_Diffuse("Diffuse",color) = (1,1,1,1)
}
SubShader{
Pass{
Tags{
"LightMode" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
fixed4 _Diffuse;
struct a2v {
float4 vertex : POSITION;
float3