逐像素光照模型

Shader "Custom/Diffuse Fragment" {
    SubShader{
        Pass{
            Tags { "LightMode" = "ForwardBase" }

            CGPROGRAM
            #include "Lighting.cginc"
            #pragma vertex vert
            #pragma fragment frag

            struct a2v{
                float4 vertex:POSITION;
                float3 normal:NORMAL;
            };

            struct v2f {
                float4 position:SV_POSITION;
                float3 worldNormal:TEXCOORD0;
            };

            v2f vert(a2v v) {
                v2f o;
                o.position = mul(UNITY_MATRIX_MVP, v.vertex);//坐标转换
                o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject);//将法线传给顶点函数用
                return o;
            }

            fixed4 frag(v2f f) :SV_Target{

                //获取法线的方向
                fixed3 worldNormal = normalize(f.worldNormal);

                //获取光的方向
                fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);

                fixed3 diffuse = _LightColor0.rgb  * saturate(dot(worldNormal, worldLightDir) *0.5 + 0.5);//使用半兰伯特光照模型

                //环境光
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;

                fixed3 color = diffuse + ambient;
                return fixed4(color, 1);
            }

            ENDCG
        } 
    }
    FallBack "Diffuse"
}

你可能感兴趣的:(逐像素光照模型)