디퓨즈 셰이딩 003

Unity3D/Shader 2016. 9. 24. 23:00

### 본 내용은 "(3D 게임 최적화와 시작적 효과를 위한) 유니티 Shader와 Effect 제작" 도서를 정리한 것입니다.


램프 디퓨즈 (RampDiffuse)

- 셰이더 작성 도구상자의 또 다른 훌륭한 도구는 디퓨즈 라이팅의 색상을 제어하는 램프 텍스처를 사용하는 것이다.

- 바운스 라이트 이펙트를 더 많이 나타나도록 조작해 표면의 색상을 강조하거나 좀 더 고급 기능의 라이팅을 설정할 수 이게 해준다.

- 이 기법은 만화 같은 게임에 아주 많이 사용된다.

- 물리적으로 정확한 라이팅 모델이 아니라 아티스트의 의도가 반영된 셰이더가 필요한 경우에 사용된다.

- 아티스트는 빛이 물체의 표면에 어떻게 보이게 할지 제어할 수 있다.

Shader "ExampleShaders/Chapter1/RampDiffuse" 
{
	Properties 
	{
		_EmissiveColor ("Emissive Color", Color) = (1,1,1,1)
		_AmbientColor  ("Ambient Color", Color) = (1,1,1,1)
		_MySliderValue ("This is a Slider", Range(0,10)) = 2.5
		_RampTex ("Ramp Texture", 2D) = "white" {}
	}
	
	SubShader 
	{
		Tags { "RenderType"="Opaque" }
		LOD 200
		
		CGPROGRAM
		#pragma surface surf BasicDiffuse
		#pragma target 3.0		

		float4 _EmissiveColor;
		float4 _AmbientColor;
		float _MySliderValue;
		sampler2D _RampTex;
		
		inline float4 LightingBasicDiffuse (SurfaceOutput s, fixed3 lightDir, fixed atten)
		{
			float difLight = dot (s.Normal, lightDir);
			float hLambert = difLight * 0.5 + 0.5;
			float3 ramp = tex2D (_RampTex, float2(hLambert, 0)).rgb;
			
			float4 col;
			col.rgb = s.Albedo * _LightColor0.rgb * (ramp);
			col.a = s.Alpha;
			return col;
		}

		struct Input 
		{
			float2 uv_MainTex;
		};

		void surf (Input IN, inout SurfaceOutput o) 
		{
			float4 c;
			c =  pow((_EmissiveColor + _AmbientColor), _MySliderValue);			
			o.Albedo = c.rgb;
			o.Alpha = c.a;
		}
		
		ENDCG
	} 
	
	FallBack "Diffuse"
}


'Unity3D > Shader' 카테고리의 다른 글

이펙트를 위한 텍스처 사용하기 001  (0) 2016.09.26
디퓨즈 셰이딩 004  (0) 2016.09.24
디퓨즈 셰이딩 002  (0) 2016.09.23
디퓨즈 셰이딩 001  (0) 2016.09.22

설정

트랙백

댓글