Unity는 셰이더에 사용할 수 있는 여러 빌트인 전역 변수를 제공합니다. 예를 들어 현재 오브젝트의 변환 매트릭스, 광원 파라미터, 현재 시간 등이 있습니다. 이 변수는 다른 변수와 마찬가지로 셰이더 프로그램에서 사용하며 유일한 차이는 변수를 선언할 필요가 없다는 점입니다. 이 변수는 자동으로 포함되는 UnityShaderVariables.cginc
인클루드 파일에 모두 선언되어 있습니다.
다음의 모든 매트릭스는 float4x4
타입입니다.
이름 | 값 |
UNITY\MATRIX\MVP | 현재 모델 \* 뷰 \* 투사 매트릭스 |
UNITY\MATRIX\MV | 현재 모델 \* 뷰 매트릭스 |
UNITY\MATRIX\V | 현재 뷰 매트릭스 |
UNITY\MATRIX\P | 현재 투사 매트릭스 |
UNITY\MATRIX\VP | 현재 뷰 \* 투사 매트릭스 |
UNITY\MATRIX\T\MV | 모델의 전치 \* 뷰 매트릭스 | | UNITY\MATRIX\IT\MV | 모델의 역 전치 \* 뷰 매트릭스 |
unity_ObjectToWorld | 현재 모델 매트릭스 |
unity_WorldToObject | 현재 월드 매트릭스의 역 |
이 변수는 렌더링 중인 카메라에 해당됩니다. 예를 들어 섀도우맵 렌더링 중에도 이 변수는 여전히 Camera 컴포넌트 값을 참조하며 섀도우맵 투사를 위해 사용되는 “가상 카메라”를 참조하지 않습니다.
이름 | 타입 | 값 |
\WorldSpaceCameraPos |float3 | 카메라의 월드 공간 포지션 | |\ProjectionParams | float4 |
x 는 1.0(또는 현재 상하반전 투사 매트릭스로 렌더링 중일 경우 –1.0), y 는 카메라의 근접 평면, z 는 카메라의 원거리 평면, w 는 1/FarPlane입니다. |
\ScreenParams |float4 | x 는 카메라 타겟 텍스처의 폭(픽셀 단위), y 는 카메라 타겟 텍스처의 높이(픽셀 단위), z 는 1.0 + 1.0/폭, w 는 1.0 + 1.0/높이입니다. |
|\ZBufferParams |
float4 | Z 버퍼 값을 선형화하기 위해 사용합니다. x 는 (1-far/near), y 는 (far/near), z 는 (x/far), w 는 (y/far)입니다. |
unity_OrthoParams | float4 |
x 는 직교 카메라의 폭, y 는 직교 카메라의 높이, z 는 사용되지 않으며 w 는 직교 카메라일 때는 1.0, 원근 카메라일 때는 0.0입니다. |
unity_CameraProjection | float4x4 | 카메라의 투사 매트릭스 |
unity_CameraInvProjection | float4x4 | 카메라의 투사 매트릭스의 역행렬 |
unity_CameraWorldClipPlanes[6] | float4 | 카메라 프러스텀 평면 월드 공간 방정식으로, 다음 순서입니다. 좌, 우, 하, 상, 근접, 원거리 |
이름 | 타입 | 값 |
Time |float4 | 레벨 로딩 시점부터의 시간(t/20, t, t\\2, t\\3)으로 셰이더 내에서 애니메이션을 위해 사용합니다. | |\SinTime | float4 | 시간의 사인(Sin): (t/8, t/4, t/2, t) |
\CosTime |float4 | 시간의 코사인(Cos): (t/8, t/4, t/2, t) | |unity\DeltaTime | float4 | 델타 타임: (dt, 1/dt, smoothDt, 1/smoothDt) |
광원 파라미터는 셰이더에서 어떤 렌더링 경로가 사용되는지, 어떤 LightMode 패스 태그가 사용되는지에 따라 다른 방법으로 셰이더에 전달됩니다.
포워드 렌더링(ForwardBase
및 ForwardAdd
패스 타입):
이름 | 타입 | 값 |
\LightColor0 (Lighting.cginc에 선언됨) | fixed4 |광원 컬러 | |\WorldSpaceLightPos0 | float4 | 방향 광원: (월드 공간 방향, 0). 기타 라이트: (월드 공간 포지션, 1) |
\_LightMatrix0 (AutoLight.cginc에 선언됨) | float4x4 | World-to-light 매트릭스. 쿠키 및 감쇠 텍스처를 샘플링하기 위해 사용합니다. |
unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0 | float4 | (ForwardBase 패스 한정) 중요하지 않은 첫 네 개 점 광원의 월드 공간 포지션입니다. |
unity_4LightAtten0 | float4 | (ForwardBase 패스 한정) 중요하지 않은 첫 네 개 점 광원의 감쇠 팩터입니다. |
unity_LightColor | half4[4] | (ForwardBase 패스 한정) 중요하지 않은 첫 네 개 점 광원의 컬러입니다. |
unity_WorldToShadow | float4x4[4] | 월드-그림자 매트릭스입니다. 스폿 광원에 한 개의 매트릭스, 방향 광원 캐스케이드에 최대 네 개의 매트릭스를 지원합니다. |
조명 패스 셰이더에서 사용되는 디퍼드 섀이딩 및 디퍼드 라이팅(모두 UnityDeferredLibrary.cginc에 선언됨)
이름 | 타입 | 값 |
\LightColor | float4 | 광원 컬러 | |\LightMatrix0 | float4x4 | World-to-light 매트릭스. 쿠키 및 감쇠 텍스처를 샘플링하기 위해 사용합니다. |
unity_WorldToShadow | float4x4[4] | 월드-그림자 매트릭스입니다. 스폿 광원에 한 개의 매트릭스, 방향 광원 캐스케이드에 최대 네 개의 매트릭스를 지원합니다. |
스피리컬 하모닉스 계수(앰비언트 및 라이트 프로브에서 사용됨)는 ForwardBase
, PrePassFinal
, Deferred
패스 타입용으로 설정됩니다.
이 계수는 월드 공간 노멀에 의해 계산되기 위해 3차 SH를 포함합니다(UnityCG.cginc의 ShadeSH9
을 참조하십시오).
이 변수는 모두 half4 타입이며 unity_SHAr
및 이와 비슷한 이름을 가집니다.
버텍스 릿(Vertex-lit) 렌더링(Vertex
패스 타입):
최대 8개의 광원이 Vertex
패스 타입용으로 설정됩니다. 항상 가장 밝은 것부터 어두운 것 순서로 정렬됩니다.
따라서 두 개의 광원에 동시에 영향을 받는 오브젝트를 렌더링하려면 배열의 처음 두 항목을 가져오면 됩니다.
오브젝트에 영향을 미치는 광원이 8개보다 적으면, 나머지는 검은색으로 설정됩니다.
이름 | 타입 | 값 |
unity_LightColor | half4[8] | 광원 컬러 |
unity_LightPosition | float4[8] | 뷰 공간 광원 포지션. 방향 광원: (-방향,0). 포인트/스폿 광원: (포지션,1). |
unity_LightAtten | half4[8] | 광원 감쇠 팩터. x 는 cos(spotAngle/2) 또는 스폿 광원 아닌 경우 –1입니다. y 는 1/cos(spotAngle/4) 또는 스폿 광원이 아닌 경우 1입니다. z 는 2차 감쇠입니다. w 는 광원 범위 제곱입니다. |
unity_SpotDirection | float4[8] | 뷰 공간 스폿 광원 포지션. 비스폿 광원(0,0,1,0)입니다. |
이름 | 타입 | 값 |
unity_AmbientSky | fixed4 | 그레디언트 주변 조명 케이스의 스카이 주변 조명 컬러 |
unity_AmbientEquator | fixed4 | 그레디언트 주변 조명 케이스의 이퀘이터 주변 조명 컬러 |
unity_AmbientGround | fixed4 | 그레디언트 주변 조명 케이스의 그라운드 주변 조명 컬러 |
UNITY_LIGHTMODEL_AMBIENT | fixed4 | 주변 조명 컬러(그레디언트 주변 케이스의 스카이 컬러). 레거시 변수. |
unity_FogColor | fixed4 | 안개 컬러 |
unity_FogParams | float4 | 안개 계산을 위한 파라미터: (density / sqrt(ln(2)), density / ln(2), –1/(end-start), end/(end-start)). x 는 Exp2 안개 모드, y 는 Exp 모드, z 및 w 는 선형 모드에 유용합니다. |
이름 | 타입 | 값 |
unity_LODFade | float4 | LODGroup을 사용할 때의 정밀도 수준(LOD) 페이드. x 는 (01) 사이 페이드, y 는 16단계로 양자화한 페이드, z 및 w 는 사용되지 않습니다. |