Shader "Shadertest/test1Shader" {
    Properties {

        _Diffuse ("Diffuse", Color) = (1,1,1,1)
    }
    SubShader {
        //Tags { "RenderType"="Opaque" }    

        //顶点/片元着色器代码需要卸载pass
        pass{
            Tags{"LightMode" = "ForwardBase"} //定义光照模式 


            CGPROGRAM
            fixed4 _Diffuse;
            #pragma vertex vert //定义顶点着色器
            #pragma fragment frag // 定义片元着色器
            #include "Lighting.cginc" //unity 内置变量
            //输入结构体
            struct a2v  
            {
                float4 vertex : POSITION; //顶点信息
                float3 normal : NORMAL;   //法线信息
            };
            //输出结构体也是片元着色器的输入结构体
            struct v2f
            {
                float4 pos : SV_POSITION;//保存片元着色器中的顶点在裁剪空间中的坐标
                fixed3 color : COLOR;//接收片元着色器中计算出来的光照颜色
            };

            v2f vert(a2v v)
            {
                v2f o;
                //保存顶点在裁剪空间中的坐标信息
                o.pos = UnityObjectToClipPos(v.vertex);
                //得到环境光部分
                fixed3 ambient =  UNITY_LIGHTMODEL_AMBIENT.xyz;
                //把顶点法线转换到世界空间中
                fixed3 worldnormal = normalize(mul(v.normal,(float3x3)unity_WorldToObject));
                //光源方向归一化
                fixed3 worldlight = normalize(_WorldSpaceLightPos0.xyz);
                //光源颜色和强度、漫反射属性、顶点法线、光源方向,利用公式计算
                fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldnormal,worldlight));
 
                //环境光 + 漫反射光 = 最终光照结果
                o.color = ambient + diffuse;
                return o;
            }
            //片元着色器
            fixed4 frag(v2f i) : SV_Target
            {
                return fixed4(i.color,1.0);    
            }

            ENDCG

        }
        
    }
    FallBack "Diffuse"
}
// shader- 之高光反射

相关文章: