본문 바로가기
Unity/Shader

[Material property drawer(1)] Toggle 사용하기

by 호아나트 2022. 3. 25.
반응형

Material property drawer

Unity의 ShaderLab에는 "drawer"라는 속성들이 있다.

이를 통해 인스펙터에서 직접만든 프로퍼티들을 생성할 수 있고 셰이더에서의 조건문들을 처리할 수 있다.


Toggle 사용법에 대해 알아보자.

 

프로퍼티 작성 방법

Unity의 ShaderLab에서는 boolean 타입을 사용할 수가 없다.

대신 Toggle이 그 역할을 한다.

[Toggle] _Enable("Enable",Float) = 0

Toggle을 사용하기 위해서는

  • 타입: Float
  • 기본 값: 0 또는 1

로 해야한다.

기본 값은 왜 0 또는 1이 되어야할까.

  • 0의 의미는 Off
  • 1의 의미는 On

코드에서 실행하는 방법

Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

						//pragma 선언.
            #pragma shader_feature _ENABLE_ON
            
						...

            fixed4 frag (v2f i) : SV_Target
            {
                
                fixed4 col = tex2D(_MainTex, i.uv);

                //조건문 작성
                #if _ENABLE_ON
                    return col;
                #else
                    return col*_Color;
                #endif
            }
            ENDCG
        }

왜 선언할 때 _ENABLE_ON이 되는 걸까.

  • _ENABLE
    • “shader_feature”에 추가되는 배리언트들은 상수이므로, 프로퍼티명을 대문자로 작성한다.
  • _ON
    • Toggle의 기본 상태를 의미한다.

 

_Enable이 1인 경우

 



_Enable이 0 인 경우

 

shader_feature 특징

shader_feature에서 미사용 배리언트는 최종빌드에서는 포함되지 않는다.

즉, 빌드 이후 실행할때는 상태를 변경하지 못한다는 것이다.

“multi_compile” 셰이더 배리언트를 사용하면, 이문제를 해결 할 수 있다.

 

 

반응형

댓글