BlinnPhong高光原理
Shaer实现:
Shader "Custom/BlinnPhong" {
Properties {
_Color ("Diffuse Color", Color) = (1,1,1,1)
_MainTex ("Base(RGB)", 2D) = "white" {}
_SpecularColor ("Specular Color", Color) = (1,1,1,1)
_SpecularPower ("Specular Power", Range(0,1)) = 1
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf CustomBlinnPhong
#pragma target 3.0
sampler2D _MainTex;
fixed4 _Color;
float4 _SpecularColor;
float _SpecularPower;
struct Input {
float2 uv_MainTex;
};
inline float4 LightingCustomBlinnPhong(SurfaceOutput s,fixed3 lightDir,half3 viewDir,fixed atten ){
float3 halfVector=normalize(lightDir+viewDir);
float diff=max(0,dot(s.Normal,lightDir));
float nh=max(0,dot(s.Normal,halfVector));
float4 spec=pow(nh,_SpecularPower)*_SpecularColor;
fixed4 c;
c.rgb=(s.Albedo*_LightColor0.rgb*diff)+(_LightColor0.rgb*_SpecularColor.rgb*spec)*(atten*2);
c.a=s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = tex2D (_MainTex, IN.uv_MainTex)*_Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}