#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
TAGS.

Comments