Version: 2017.4
빌트인 셰이더 헬퍼 함수
여러 셰이더 프로그램 배리언트 만들기

빌트인 셰이더 변수

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 패스 태그가 사용되는지에 따라 다른 방법으로 셰이더에 전달됩니다.

포워드 렌더링(ForwardBaseForwardAdd 패스 타입):

이름 타입
\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.cgincShadeSH9을 참조하십시오). 이 변수는 모두 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 모드, zw 는 선형 모드에 유용합니다.

그 외

이름 타입
unity_LODFade float4 LODGroup을 사용할 때의 정밀도 수준(LOD) 페이드. x 는 (01) 사이 페이드, y 는 16단계로 양자화한 페이드, zw 는 사용되지 않습니다.
_TextureSampleAdd float4 텍스처가 Alpha8 포맷으로 사용되는지 여부(사용되면 값이 (1,1,1,0)으로, 사용되지 않으면 값이 (0,0,0,0)으로 설정됨)에 따라 Unity가 UI 전용으로 자동 설정합니다.
빌트인 셰이더 헬퍼 함수
여러 셰이더 프로그램 배리언트 만들기