surface shader自定義光照模型

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"
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章