[Unity] URP 셰이더 HLSL 추가사항 (#pragma, 변수 Scope)

2023. 6. 12. 17:49Unity

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

 

 


참고자료

 

아티스트를 위한 유니티 URP 셰이더 입문 - YES24

셰이더(Shader)를 HLSL(High Level Shader Language)로 다루고 싶은 아티스트를 위한 입문서다. 아티스트들의 눈높이에 맞추어 기초 그래픽스 이론과 셰이더 개념을 설명하고, 이를 유니티 엔진에서 활용할

www.yes24.com

728x90
반응형