참고 -http://book.naver.com/bookdb/book_detail.nhn?bid=7525807
Properties 개념 익히기
- 셰이더 프로그래머가 직접 규격에 맞춰 GUI 요소를 셰이더 코드에 빠르게 추가할 수 있다. Properties 블록에서 선언한 프로퍼티는 셰이더 코드에서 값, 색상, 그리고 텍스쳐를 변경하는 데 사용할 수 있다.
Properties
{
_EmissiveColor ("Emissive Color", Color) = (1,1,1,1)
_AmbientColor ("Ambient Color" , Range(0,10)) = 2
_MySliderValue ("This is a Slider", Range(0,10)) = 2.5
// 변수 이름 인스펙터GUI이름 타입 기본값
}
프로퍼티 타입 정리
Range(min, max) |
최솟값부터 최댓값까지의 범위를 float프로퍼티의 슬라이더를 만든다. |
Color |
Inspector탭에 Color =(float , float, float, float)를 선택할 수 있는 색상 견본을 만든다. |
2D |
셰이더로 드래그할 수 있는 텍스쳐 견본을 만든다. |
Rect |
2의 승수가 아닌 텍스쳐 견본을 만든다. 2D GUI 요소와 같은 기능을 한다. |
Cube |
Inspector 탭에서 셰이더로 드래그할 수 있는 큐브맵(cube map) 견본을 만든다. |
Float |
Inspector 탭에 슬라이더가 아닌 float 값을 만든다. |
Vector |
방향, 색상을 만들 수 있는 4개의 float 프로퍼티를 만든다. |
|
|
http://docs.unity3d.com/Manual/SL-Properties.html
SubShader 개념 익히기
_EmissiveColor , _AmbientColor, _MySliderValue 값을 SubShader{}에서 사용하기 위해서는 프로퍼티의 변수 이름과 똑 같은 이름으로 새로운 변수 3개를 만들어야 한다. 이렇게 하면 동일한 데이터로 작업할 수 있도록, 기존 변수와 새 변수 사이에 자동으로 링크를 설정한다.
float4 _EmissiveColor;
float4 _AmbientColor;
float _MySliderValue;
Surf 개념 익히기
SubShader 에서 변수를 만들면, surf{} 함수에서 값을 사용할 수 있다.
c = pow((_EmissiveColor + _AmbientColor), _MySliderValue);
Properties , SubShader , Surf에 대한 세 가지 개념만 확립하면 디퓨즈 컴퍼넌트를 요구하는 셰이더를 만들기 위한 기반이 확립된다.
세 가지의 기본적인 사항을 파악하고 아래의 코드를 작성하면 기본적인 셰이더를 만들 수 있다.
Shader "Custom/BasicShader" {
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 Lambert
float4 _EmissiveColor;
float4 _AmbientColor;
float _MySliderValue;
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"
}
'SHADER' 카테고리의 다른 글
유니티 셰이더 - 서피스 셰이더에서 빛 연산을 안하기 위해서는 Albedo가 아닌 Emission을 사용하자. (0) | 2016.07.15 |
---|---|
유니티 셰이더 - Surface 셰이더에서 알파가 안빠지는 현상 (0) | 2016.07.14 |
유니티 서피스 셰이더를 UnLit으로 사용할 때 캐릭터가 하얗게 타는 현상. (0) | 2016.07.14 |
ShaderForge(쉐이더포지) (0) | 2015.12.10 |
물리 기반 렌더러의 이론 이해(physically-based-rendering) (0) | 2015.12.10 |