baobao
12/12/2018 - 5:22 AM

ランバート反射(ピクセルライティング)

Shader "shibuya24/Lambert"
{
    SubShader
    {
        Tags { "RenderType"="Opaque"}
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            
            #include "UnityCG.cginc"
    
            struct appdata
            {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
            };
    
            struct v2f
            {
                float4 vertex : SV_POSITION;
                float3 normal : NORMAL;
            };
    
            // Lighting.cgincをインクルードしない場合、
            // 定義するとUnityが自動でライトカラーを代入してくれる
            fixed4 _LightColor0;
            
            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.normal = v.normal;
                return o;
            }
            
            fixed4 frag (v2f i) : SV_Target
            {
                float4 invLightDir = mul(UNITY_MATRIX_M, -_WorldSpaceLightPos0); 
                // 法線ベクトルとライトベクトルの内積で拡散反射光の輝度を取得
                float luminance = dot(normalize(i.normal), invLightDir.xyz);
                return float4(luminance,luminance,luminance, 1) * _LightColor0;
            }
            ENDCG
        }
    }
}