글
디퓨즈 셰이딩 001
Unity3D/Shader
2016. 9. 22. 17:53
### 본 내용은 "(3D 게임 최적화와 시작적 효과를 위한) 유니티 Shader와 Effect 제작" 도서를 정리한 것입니다.
디퓨즈 (Diffuse)
- Unity5에서 이 쉐이더는 Standard Shader로 대체되었다.
- Diffuse는 간단한 (Lambert(램버트)) 라이팅 모델을 계산한다.
- 표면의 라이팅은 광원과의 각도가 작아질수록 약해진다.
- 라이팅은 이 각도에만 의존하며 카메라의 이동·회전에 의한 영향을 받지 않는다.
Shader "ExampleShaders/BasicDiffuse"
{
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
}
SubShader
{
Tags { "RenderType" = "Opaque" }
LOD 200
CGPROGRAM
// 어떤 라이팅 모델을 계산에 사용할 것인지 셰이더에게 알려준다.
#pragma surface surf BasicDiffuse
// Properties 블록으로부터 프로퍼티의 값에 접근하기 위해
// CGPROGRAM 안에 프로퍼티 변수의 타입을 선언해야 한다.
float4 _EmissiveColor;
float4 _AmbientColor;
float4 _MySliderValue;
// 뷰 방향이 필요하지 않은 포워드 랜더링에 사용
// LightingName(SurfaceOutput s, half3 lightDir, half atten) {}
// 뷰 방향이 필요한 포워드 랜더링에 사용
// LightingName(SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) {}
// 디퍼드 랜더링에 사용
// LightingName_PrePass(SurfaceOutput s, half4 light) {}
inline float4 LightingBasicDiffuse(SurfaceOutput s, fixed3 lightDir, fixed atten)
{
// 내적함수(dot)는 공간에서 두 벡터의 방향(-1 ~ 1)을 비교하는데 사용 할 수 있다.
// -1 = 평행하며 점점 멀어지는 벡터, 1 = 평행하며 점점 가까워지는 벡터, 0 = 수직 벡터
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;
}
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"
}
# 프로퍼티(Properties) 타입 |
|
Range (min, max) |
최소값~최대값의 범위를 갖는 float형의 슬라이더를 만든다. |
Color |
인스펙터 탭에 Color = (float, float, float, float)를 선택할 수 있는 색상 견본을 만든다. |
2D |
셰이더로 드래그 할 수 있는 텍스쳐 견본을 만든다. |
Cube |
2의 승수가 아닌 텍스쳐 견본을 만든다. 2D GUI 요소와 같은 기능을 한다. |
Rect |
인스펙터 탭에서 셰이더로 드래그할 수 있는 규브맵 견본을 만든다. |
Float |
인스펙터 탭에서 슬라이더가 아닌 float 값을 만든다. |
Vector |
방향, 색상을 만들 수 있는 4개의 float 프로퍼티를 만든다. |
'Unity3D > Shader' 카테고리의 다른 글
이펙트를 위한 텍스처 사용하기 001 (0) | 2016.09.26 |
---|---|
디퓨즈 셰이딩 004 (0) | 2016.09.24 |
디퓨즈 셰이딩 003 (0) | 2016.09.24 |
디퓨즈 셰이딩 002 (0) | 2016.09.23 |