#pragma multi_compile
가끔 고정된 셰이더 코드를 만들고 거기에 약간 다른 "variant" 셰이더 를 만드는게 편하다.
보통 이는 "mega shaders" 또는 "uber shaders"라고 불리며, 각 상황에 따라
다른 처리기 지시문과 셰이더 코드를 여러번 컴파일 해서 만들어졌다.
유니티에서는 그냥 #pragma multi_compile 또는 #pragma shader_feature 지시문을
shader snippet에 추가하여 만들수 있다.
이는 surface shader에서도 가능하다.
런타임에 적절한 셰이더 variant는 material 키워드
(Material.EnableKeyword / DisableKeyward) 또는
global shader keyword(Shader.enableKeyword / DisableKeyword)를 통해
뽑아서 사용한다.
어떻게 사용하는가?
#pragma multi_compile Test_Off TestOn
위와 같이 하면 TestOff와 TestOn이라는 두개의 shader variants가 만들어진다.
런타임때 material 또는 global shader 키워드를 기반으로 둘중 하나가 사용된다.
만약 두 키워드가 다 활성화 되어 있다면 첫번째 값인 TestOff가 사용된다.
두개 이상의 variant도 가능하다
#pragma multi_compile Test_Off TestOn Test_None
그리고 이름이 만약 전부 밑줄이라면 셰이더 variant는 지시문 없는
매크로로 정의되어 만들어 진다.
이는 일반적으로 두개의 키워드를 사용하는 것을 피하기 위해 사용된다.
#pragma multi_compile __ Test_On
참조 링크
- http://forum.unity3d.com/threads/pragma-multi_compile.187817/
- UNITY - 정점쉐이더와 Fragment 쉐이더의 프로그래밍
- UNITY - Making multiple shader program variants
-
'Unity > Unity Graphics' 카테고리의 다른 글
Unity에서 Depth Texture의 사용 (0) | 2016.04.29 |
---|---|
Depth and Normal Texture (Part 1) (2) | 2016.04.29 |
Performance Tips when Writing Shaders (0) | 2016.04.15 |
TRANSFORM_TEX (0) | 2016.04.15 |
Unity Tags (0) | 2016.04.12 |