[Unity] URP 셰이더 HLSL 추가사항 (#pragma, 변수 Scope)
2023. 6. 12. 17:49ㆍUnity
728x90
반응형
#pragma
- 셰이더 타겟
어떤 셰이더 모델로 컴파일할지를 정한다. 최신 GPU를 사용하려면 높은 버전의 셰이더 타겟을 사용해야 한다. #pragma hull 또는 #pragma domain 명령어로 Tessellation Shader를 사용해야 하는 경우 4.6으로 설정해야 한다. Default는 2.5이다.
#pragma target 4.5
- Shader Feature와 Multi Compile
셰이더의 파생 버전인 Shader Variants를 만들기 위한 기능이다.
#pragma shader _feature_local _RECEIVE_SHADOWS_OFF
#pragma multi_compile _LIGHTMAP_ON
HLSL에서 #ifdef, #else, #endif 등 조건부 컴파일 지시자에 의해 경우의 수만큼 파생 셰이더들이 생성된다.
변수 Scope
변수는 사용하기 전에 미리 선언해야 한다. 그리고 변수가 선언된 중괄호 안에서만 유효하다. 이런 변수의 유효 범위를 Scope라고 한다.
Lexical Scoping이라는 개념이 있는데 하위 레벨에서 동일한 이름의 변수를 선언하면 동명이인이 되는 개념이다. 하위 레벨의 스코프에서 local을 명확하게 명시함으로써 동일한 이름의 변수를 하위 레벨 전용으로 사용할 수 있게 해주는 기능이다.
선언된 변수를 외부에서 값을 변경할 수 있는데 렌더 파이프라인이 제어하는 _ST변수나 글로벌 변수가 이에 해당된다.
CBUFFER_START(UnityPerMaterial)
float4 _BaseMap_ST;
half4 _BaseColor;
CBUFFER_END
참고자료
728x90
반응형
'Unity' 카테고리의 다른 글
[Unity] URP 셰이더 아웃라인 셰이더 (0) | 2023.06.12 |
---|---|
[Unity] 행렬과 MVP 변환 (0) | 2023.06.12 |
[Unity] URP 셰이더 HLSL Pass와 Pass Commands (0) | 2023.06.12 |
[Unity] URP 셰이더 HLSL ShaderLab Properties, SubShader Tags (0) | 2023.06.12 |
[Unity] URP 셰이더 HLSL Lambert 셰이더 (0) | 2023.06.10 |