//获取Unity引擎源代码:加群580392083Shader "Unity Shaders Book/Chapter 6/DiffuseVertexLevel"{PRoperties{_Diffuse("Diffuse",Color)=(1,1,1,1)}SubShader{Pass{Tags{"LightMode"= "ForwardBase"} //LightMode:用于定义该pass在Unity光照流水线中的角色,只有定义了正确的LightMode,我们才能够得到一些Uniytn内置的光照CGPROGRAM#pragma vertex vert//vert:顶点着色器的名字#pragma fragment frag//frag:片元着色器的名字#include "Lighting.cginc"//为了使用Properties中定义的_Diffuse变量 需要定义一个和该属性类型相匹配的变量fixed4 _Diffuse;//顶点着色器的输出或者说是片元着色器的输入struct a2v{float4 vertex:POSITION;float3 normal:NORMAL;//NORMAL:告诉Unity要把模型顶点的法线信息存储到normal变量中};//定义一个片元着色器的输入struct v2f{float4 pos:SV_POSITION;fixed3 color:Color;};//顶点着色器v2f vert(a2v v){v2f o;o.pos = mul(UNITY_MATRIX_MVP,v.vertex); //顶点模型坐标转换为裁剪坐标fixed3 ambients = UNITY_LIGHTMODEL_AMBIENT.xyz; //获取环境光 fixed3 wroldNormal = normalize(mul(v.normal,(float3x3)_World2Object));//Page129 把模型的法线转换为世界坐标的法线 最后进行归一化fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz); //获取世界坐标中光的方向fixed3 diffuses = _LightColor0.rgb*_Diffuse.rgb*saturate(dot(wroldNormal,worldLight));//计算漫反射光o.color = ambients + diffuses;return o;}//片元着色器fixed4 frag(v2f i):SV_TARGET{return fixed4(i.color,1.0);}ENDCG}}FallBack "DIFFUSE"}
新闻热点
疑难解答