반응형

 

쉐이더 작성시 Properties 인터페이스를 다양하게 응용할 수 있습니다.

 

마테리얼 이용자가 보기 편하게 구성하거나 [Enum] & multi_compile구문을 통해 사전 컴파일 기능을 만들 수 있습니다.

(사전 컴파일 : 1개의 쉐이더 파일에서 여러 기능을 사용 할 수 있도록 런타임 전에 설정 할 수 있는 옵션)

 

위 기능을 이용해 블랜드 옵션을 설정하여 Additive나 Alpha Blended설정을 쉐이더 코드 수정없이 조정이 가능하게 만들수 있습니다.

 

 

 

Shader "JH/Sh_Sample"
{
    Properties
    {
		[Header(_______________________)]
		[Header(Texture)]
        _MainTex ("Texture", 2D) = "white" {}

		[Space(20)]
		[Header(__________________________)]
		[Header(Cull)]
		[Enum(UnityEngine.Rendering.CullMode)] 	_Cull("Cull", Float) = 0     

		[Space(20)]
		[Header(________________)]
		[Header(ZTest  ZWrite)]
		[Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4
		[Enum(Off, 0, On, 1)] _ZWrite("ZWrite", Float) = 0

		[Space(20)]
		[Header(_________________________)]
		[Header(Blend)]
		[Enum(UnityEngine.Rendering.BlendMode)] _SrcFactor("Src Factor", Float) = 5
		[Enum(UnityEngine.Rendering.BlendMode)] _DstFactor("Dst Factor", Float) = 10

		[Space(20)]
		[Header(__________________________________)]
		[Header(multicomplie_GrayMask)]
		[Toggle]_USEGRAYMASK("GrayMask(흑백마스크)", float) = 0

		[Space(20)]
		[Header(_______________________________________)]

		[KeywordEnum(None, Add, Multiply)] _Overlay("Overlay mode", Float) = 0
		[Enum(One,1,SrcAlpha,5)] _Blend2("Blend mode subset", Float) = 1

		[IntRange] _Alpha("Alpha", Range(0, 255)) = 100
		[PowerSlider(3.0)] _Shininess("Shininess", Range(0.01, 1)) = 0.08

		[Space(20)]
		[Header(___________________________________________)]
		[Normal] _BumpTex("Normal Map", 2D) = "bump" {}


		[HideInInspector]  _SpecularHighlights("Specular Highlights", Float) = 1.0

    }
    SubShader
    {
		Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"}

		Cull[_Cull]
		ZTest[_ZTest]
		ZWrite[_ZWrite]
		Blend[_SrcFactor][_DstFactor]

        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

			#pragma multi_compile _USEGRAYMASK_OFF _USEGRAYMASK_ON
			#pragma multi_compile _OVERLAY_NONE _OVERLAY_ADD _OVERLAY_MULTIPLY
            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
               
				#if _OVERLAY_ADD
					col.rgb = dot(col.rgb, float3(0.333f, 0.333f, 0.333f));
				#elif _USEGRAYMASK_OFF	
					
				#endif

                return col;
            }
            ENDCG
        }
    }
}

 

 

반응형

WRITTEN BY
CatDarkGame
Technical Artist dhwlgn12@gmail.com

,