Shader "Custom/BasicDiffuse"
{
Properties{
_EmissiveColor("Emissive Color", Color) = (1, 1, 1, 1)
_AmbientColor("AmbientCOlor", Color) = (1, 1, 1, 1)
_MySliderValue("This is a slider", Range(0, 10)) = 2.5
_RampTex("RampTex", 2D) = "white"{}
}
SubShader{
Tags{"RenderType" = "Opaque"}
LOD 200
CGPROGRAM
//#pragma surface surf Lambert
//自定義光照模型
#pragma surface surf BasicDiffuse
float4 _EmissiveColor;
float4 _AmbientColor;
float _MySliderValue;
sampler2D _RampTex;
struct Input
{
float2 uv_RampTex;
};
void surf(Input IN, inout SurfaceOutput o) {
float4 c;
c = pow((_EmissiveColor + _AmbientColor), _MySliderValue);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
inline float4 LightingBasicDiffuse(SurfaceOutput s, fixed3 lightDir,half3 viewDir, fixed atten) {
//蘭伯特光照模型
//float difLight = max(0, dot(s.Normal, lightDir));
//float4 col;
//col.rgb = s.Albedo * _LightColor0.rgb * (difLight * atten * 2);
//col.a = s.Alpha;
//return col;
//半蘭伯特光照模型
//float difLight = max(0, dot(s.Normal, lightDir));
//float hLambert = difLight * 0.5 + 0.5;
//float4 col;
//col.rgb = s.Albedo * _LightColor0.rgb * (hLambert * atten * 2);
//col.a = s.Alpha;
//return col;
//漸變紋理控制漫反射着色
//float difLight = max(0, dot(s.Normal, lightDir));
//float hLambert = difLight * 0.5 + 0.5;
//float3 ramp = tex2D(_RampTex, float2(hLambert, 2)).rgb;
//float4 col;
//col.rgb = s.Albedo * _LightColor0 * ramp;
//col.a = s.Alpha;
//return col;
//通過使用紋理來調整燈光效果,使用觀察方向參數製作透明泡泡、邊緣高光、盾牌等效果
//使用BRDF紋理產生一個衰減渲染效果
float difLight = dot(s.Normal, lightDir);
//viewDir當前攝像機的觀察位置到觀察點的方向向量、
float rimLight = dot(s.Normal, viewDir);//將觀察方向與表面法線進行點積
float halfLambert = difLight * 0.5 + 0.5;
//float3 ramp = tex2D(_RampTex, float2(rimLight, rimLight)).rgb;
float3 ramp = tex2D(_RampTex, float2(rimLight, halfLambert)).rgb;
//float3 ramp = tex2D(_RampTex, float2(rimLight, difLight)).rgb;
float4 col;
col.rgb = s.Albedo * _LightColor0.rgb * ramp;
col.a = s.Alpha;
return col;
}
ENDCG
}
FallBack "Diffuse"
}