글
디퓨즈 셰이딩 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 |