UnityShader从入门到放弃(四)漫反射—逐顶点光照

来源:互联网 发布:淘宝退货流程图 编辑:程序博客网 时间:2024/06/08 02:16

在UnityShader的标准光照模型中共分为四种 : 自发光

                                                                                    高光反射

                                                                                    漫反射

                                                                                    环境光

下边的代码将实现逐顶点光照的漫反射效果

Shader "Luoxiaoxiao/Shader_4"{    Properties{_DiffuseColor("Diffuse Color",Color)=(1,1,1,1)}SubShader{    Tags{"LightMode"="ForwardBase"}//引入LightMode标签 使系统捕捉光照信息Pass{CGPROGRAM#include "Lighting.cginc"//引入Unity内置的一些光照的变量#pragma vertex vert#pragma fragment frag fixed4 _DiffuseColor;struct a2v{float4 vertex:POSITION;float3 normal:NORMAL;};struct v2f{float4 position:SV_POSITION;float3 color:COLOR0;};v2f vert(a2v v){v2f f;f.position=UnityObjectToClipPos(v.vertex);fixed3 normalDir=normalize(mul(v.normal,(float3x3)unity_WorldToObject));//将模型的发现从模型的坐标转换到世界坐标fixed3 lightDir=normalize(_WorldSpaceLightPos0.xyz);//对于每个顶点来说 光的位置就是光的方向  因为是平行光fixed3 diffuse=_LightColor0.rgb*max(dot(normalDir,lightDir),0)*_DiffuseColor.rgb;//顶点法线的颜色和设置的物体本身的颜色的融合  用相乘  对亮度几乎没有影响 f.color=diffuse;return f;}fixed4 frag(v2f f):SV_TARGET{     return fixed4(f.color,1);}ENDCG} }Fallback "VertexLit"}

效果如下


第四个与之前的相比较,已经有了明暗的变化,对于背光面会较暗。

阅读全文
0 0
原创粉丝点击