Built in shader variables
유니티에서는 셰이더 프로그래밍을 위해 몇개의 전역 셰이더 변수를 빌트 인 하여 제공하고 있다.
현재 오브젝트의 변환 행렬이나 라이트 파라미터들, 현재시간 등 과 같은 것들이다.
이 변수들을 셰이더 프로그램에서 사용할 때는 다른 변수들 처럼 선언해 줄 피룡가 없다.
이들은 이미 UnityShaderVariables.cginc include 파일에 자동으로 포함되어 있다.
변환
float4x4 행렬 type
Name | Value |
UNITY_MATRIX_MVP | 현재 모델 * 뷰 * 투영 행렬 (model*view*projection) |
UNITY_MATRIX_MV | 현재 모델 * 뷰 행렬. |
UNITY_MATRIX_V | 현재 뷰 행렬. |
UNITY_MATRIX_P | 현재 투영 행렬 |
UNITY_MATRIX_VP | 현재 뷰 행렬 * 투영 행렬 |
UNITY_MATRIX_T_MV | 모델 * 뷰 행렬의 전치 행렬 |
UNITY_MATRIX_IT_MV | 모델 * 뷰 행렬의 역행렬의 전치 행렬 |
_Object2World | 현재 모델 매트릭스 |
_World2Object | 현재 월드 행렬의 역 |
Camera and screen
이 변수들은 렌더링에서 카메라에 부합된다.
예를들어 셰도우맵을 렌더링 할 때, 그림자 프로젝션을 위해 가상 카메라가 아닌
카메라 컴포넌트 변수들을 참조한다.
Name | Type | Value |
_WorldSpaceCameraPos | float3 | 카메라의 월드 공간 위치 |
_ProjectionParams | float4 | x 는 1.0 또는 –1.0, 반전한 투영 행렬에서 현재 렌더링하는 경우는 음의 값. y 는 카메라에 가까운 평면, z 는 카메라에서 먼 평면, w 는 1/FarPlane입니다. |
_ScreenParams | float4 | x는 카메라의 렌더타겟 width, y는 카메라의 렌더타겟 height,z는 1.0 + 1.0/width 그리고 w는 1.0 + 1.0/height. |
_ZBufferParams | float4 | 선형 z 버퍼 값에 사용된다. x 는 (1-far/near), y는 (far/near), z는 (x/far) and w는 (y/far). |
unity_OrthoParams | float4 | x값은 orthographic 카메라의 width, y는 orthographic 카메라의 height, z는 사용되지 않고 w값은 카메라가 orthographic일 때 1.0, perspective일 때 0.0 |
unity_CameraProjection | float4x4 | 카메라의 프로젝션 행렬 |
unity_CameraInvProjection | float4x4 | 카메라의 인버스 프로젝션 행렬 |
unity_CameraWorldClipPlanes[6] | float4 | 카메라 프로스텀 평면 월드 공간 방정식, 순서 : left, right, bottom, top, near, far. |
Time
Name | Type | Value |
_Time | float4 | 레벨이 로드된 시점부터 시간 (t/20, t, t*2, t*3), 셰이더 내부에서 animate를 위해 사용 |
_SinTime | float4 | Sine of time: (t/8, t/4, t/2, t). |
_CosTime | float4 | Cosine of time: (t/8, t/4, t/2, t). |
unity_DeltaTime | float4 | Delta time: (dt, 1/dt, smoothDt, 1/smoothDt). |
Lighting
라이트 파라미터들은 렌더링 패스가 사용되어지는 방법에 따라 다르게 셰이더에 전달되는데,
라이트 모드 Pass Tag는 셰이더 내에서 사용되어진다.
Forward rendering
Name | Type | Value |
LightColor0 (declared in Lighting.cginc) | fixed4 |Light color. | |WorldSpaceLightPos0 | float4 | Directional lights: (world space direction, 0). Other lights: (world space position, 1). |
_LightMatrix0 (declared in AutoLight.cginc) | float4x4 | World-to-light matrix. Used to sample cookie & attenuation textures. |
unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0 | float4 | (ForwardBase pass only) world space positions of first four non-important point lights. |
unity_4LightAtten0 | float4 | (ForwardBase pass only) attenuation factors of first four non-important point lights. |
unity_LightColor | half4[4] | (ForwardBase pass only) colors of of first four non-important point lights. |
Deferred shading과 Deferred lighting은 라이팅 패스 셰이더에서 사용되어진다.
(모두 UnityDeferredLibrary.cginc에 선언되어있다)
Name | Type | Value |
LightColor | float4 | Light color. | |LightMatrix0 | float4x4 | World-to-light matrix. Used to sample cookie & attenuation textures. |
ambient와 라이트 프로브에 사용되어지는 구면조화계수 (spherical harmonics coefficient)는
ForwardBase, PrePassFinal과 Deferred pass type들을 위해 설정한다.
이들은 월드공간 노말에 의해 평가되어지는 세번째 순서 SH을 포함한다.
(UnityCG.cginc에 있는 ShaderSH9을 참조).
변수 타입들은 전부 half4이고 unity_SHAr과 비슷한 비슷한 이름들이다.
8개의 라이트가 정점 패스 타입을 위해 설정되는데, 항상 가장 밝은 순으로 정렬되어진다.
그래서 한번에 두 라이트에 의해 영향을 받는 오브젝트를 그리려 한다면, 배열에서
첫번째와 두번째에 들어있는걸 가져와서 쓰면된다.
만약 8개보다 더 적은 영향을 끼치는 빛이 있다면 나머지는 그냥 검정으로 처리된다.
Name | Type | Value |
unity_LightColor | half4[8] | Light colors. |
unity_LightPosition | float4[8] | View-space light positions. (-direction,0) for directional lights; (position,1) for point/spot lights. |
unity_LightAtten | half4[8] | Light attenuation factors. x is cos(spotAngle/2) or –1 for non-spot lights; y is 1/cos(spotAngle/4) or 1 for non-spot lights; z is quadratic attenuation; w is squared light range. |
unity_SpotDirection | float4[8] | View-space spot light positions; (0,0,1,0) for non-spot lights. |
Fog and Ambient
Name | Type | Value |
UNITY_LIGHTMODEL_AMBIENT | fixed4 | Ambient lighting color (Equator ambient in three-color lighting case). |
unity_AmbientSky | fixed4 | Sky ambient lighting color in three-color lighting case. |
unity_AmbientGround | fixed4 | Ground ambient lighting color in three-color lighting case. |
unity_FogColor | fixed4 | Fog color. |
unity_FogParams | float4 | Parameters for fog calculation: (density / sqrt(ln(2)), density / ln(2), –1/(end-start), end/(end-start)). x is useful for Exp2 fog mode, y for Exp mode, z and w for Linear mode. |
Various
Name | Type | Value |
unity_LODFade | float4 | Level-of-detail fade when using LODGroup. x is fade (0..1), y is fade quantized to 16 levels, z and w unused. |
Reference Links
- http://docs.unity3d.com/kr/current/Manual/SL-UnityShaderVariables.html
- Shader for Game Programmer and Artists Chapter 17.
-
'Unity > Unity Graphics' 카테고리의 다른 글
Depth and Normal Texture (Part 1) (2) | 2016.04.29 |
---|---|
#pragma multi_compile (0) | 2016.04.23 |
Performance Tips when Writing Shaders (0) | 2016.04.15 |
TRANSFORM_TEX (0) | 2016.04.15 |
Unity Tags (0) | 2016.04.12 |