Built in shader variables

반응형

유니티에서는 셰이더 프로그래밍을 위해 몇개의 전역 셰이더 변수를 빌트 인 하여 제공하고 있다.

현재 오브젝트의 변환 행렬이나 라이트 파라미터들, 현재시간 등 과 같은 것들이다.

이 변수들을 셰이더 프로그램에서 사용할 때는 다른 변수들 처럼 선언해 줄 피룡가 없다.

이들은 이미 UnityShaderVariables.cginc include 파일에 자동으로 포함되어 있다.


변환

float4x4 행렬 type

NameValue
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

이 변수들은 렌더링에서 카메라에 부합된다.

예를들어 셰도우맵을 렌더링 할 때, 그림자 프로젝션을 위해 가상 카메라가 아닌 

카메라 컴포넌트 변수들을 참조한다.

NameTypeValue
_WorldSpaceCameraPosfloat3카메라의 월드 공간 위치
_ProjectionParamsfloat4x는 1.0 또는 –1.0, 반전한 투영 행렬에서 현재 렌더링하는 경우는 음의 값. y는 카메라에 가까운 평면, z는 카메라에서 먼 평면, w는 1/FarPlane입니다.
_ScreenParamsfloat4x는 카메라의 렌더타겟 width,
y는 카메라의 렌더타겟 height,
z는 1.0 + 1.0/width 그리고
w는 1.0 + 1.0/height.
_ZBufferParamsfloat4선형 z 버퍼 값에 사용된다. 
x는 (1-far/near), 
y는 (far/near), 
z는 (x/far) and 
w는 (y/far).
unity_OrthoParamsfloat4

x값은 orthographic 카메라의 width, y는 orthographic 카메라의 height, z는 사용되지 않고 w값은 카메라가 orthographic일 때 1.0, perspective일 때 0.0

unity_CameraProjectionfloat4x4

카메라의 프로젝션 행렬

unity_CameraInvProjectionfloat4x4

카메라의 인버스 프로젝션 행렬

unity_CameraWorldClipPlanes[6]float4카메라 프로스텀 평면 월드 공간 방정식, 순서 : left, right, bottom, top, near, far.

Time

NameTypeValue
_Timefloat4

레벨이 로드된 시점부터 시간 (t/20, t, t*2, t*3), 

셰이더 내부에서 animate를 위해 사용

_SinTimefloat4Sine of time: (t/8, t/4, t/2, t).
_CosTimefloat4Cosine of time: (t/8, t/4, t/2, t).
unity_DeltaTimefloat4Delta time: (dt, 1/dt, smoothDt, 1/smoothDt).

Lighting

라이트 파라미터들은 렌더링 패스가 사용되어지는 방법에 따라 다르게 셰이더에 전달되는데,

라이트 모드 Pass Tag는 셰이더 내에서 사용되어진다.

Forward rendering

NameTypeValue
LightColor0 (declared in Lighting.cginc) | fixed4 |Light color. | |WorldSpaceLightPos0float4Directional lights: (world space direction, 0). Other lights: (world space position, 1).
_LightMatrix0 (declared in AutoLight.cginc)float4x4World-to-light matrix. Used to sample cookie & attenuation textures.
unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0float4(ForwardBase pass only) world space positions of first four non-important point lights.
unity_4LightAtten0float4(ForwardBase pass only) attenuation factors of first four non-important point lights.
unity_LightColorhalf4[4](ForwardBase pass only) colors of of first four non-important point lights.

Deferred shading과 Deferred lighting은 라이팅 패스 셰이더에서 사용되어진다.

(모두 UnityDeferredLibrary.cginc에 선언되어있다)

NameTypeValue
LightColor | float4 | Light color. | |LightMatrix0float4x4World-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개보다 더 적은 영향을 끼치는 빛이 있다면 나머지는 그냥 검정으로 처리된다.

NameTypeValue
unity_LightColorhalf4[8]Light colors.
unity_LightPositionfloat4[8]View-space light positions. (-direction,0) for directional lights; (position,1) for point/spot lights.
unity_LightAttenhalf4[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_SpotDirectionfloat4[8]View-space spot light positions; (0,0,1,0) for non-spot lights.

Fog and Ambient

NameTypeValue
UNITY_LIGHTMODEL_AMBIENTfixed4Ambient lighting color (Equator ambient in three-color lighting case).
unity_AmbientSkyfixed4Sky ambient lighting color in three-color lighting case.
unity_AmbientGroundfixed4Ground ambient lighting color in three-color lighting case.
unity_FogColorfixed4Fog color.
unity_FogParamsfloat4Parameters 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

NameTypeValue
unity_LODFadefloat4Level-of-detail fade when using LODGroupx 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
TAGS.

Comments