블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (667)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (105)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (218)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total345,595
Today85
Yesterday123

가끔 고정된 셰이더 코드를 만들고 거기에 약간 다른 "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
#pragma multi_compile  (0) 2016.04.23
Performance Tips when Writing Shaders  (0) 2016.04.15
TRANSFORM_TEX  (0) 2016.04.15
Unity Tags  (0) 2016.04.12
Posted by 붕대마음

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함