º 개발 이야기/개발

유니티 스파인 마스크 쉐이더

_리리리 2025. 3. 12. 16:14
반응형

회사 작업을 하다 필요해서 찾게 된 쉐이더 코드 입니다.

구글 에서 서칭해서 찾았고, 수정을 좀 했습니다.

 

두개의 쉐이더 로 되어 있습니다.

- SpineShader - 스파인 데이타에 적용하는 코드.

- SpineSpriteMask - 마스킹 영역 코드.

 

코드와 파일은 하단에 있습니다.

 

SpineShader - 스파인 데이타에 적용하는 코드.

SpineSpriteMask - 마스킹 영역 코드.

유니티에서 마스킹이 된 스파인 데이타.

텍스쳐의 이미지에 따라 마스킹을 영역을 정할수 있습니다.

 

 

● SpineShader - 스파인 데이타의 메테리얼

Shader "Custom/SpineShader"{
Properties
{
        _MainTex ("Base (RGB)", 2D) = "white" {}
}

SubShader
{
        Tags {"Queue"="Transparent+2" "IgnoreProjector"="True" "RenderType"="Transparent"}
        ZWrite Off
        Cull Off // 두 면 모두 렌더링
        Blend SrcAlpha OneMinusSrcAlpha

        Stencil {
                Ref 1
                Comp Equal
        }

        Pass
        {
                CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag

                        #include "UnityCG.cginc"

                        struct appdata_t
                        {
                                float4 vertex : POSITION;
                                float2 texcoord : TEXCOORD0;
                        };

                        struct v2f
                        {
                                float4 vertex : SV_POSITION;
                                half2 texcoord : TEXCOORD0;
                        };

                        sampler2D _MainTex;
                        float4 _MainTex_ST;

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

                        fixed4 frag (v2f i) : COLOR
                        {
                                fixed4 col = tex2D(_MainTex, i.texcoord);
                                return col;
                        }
                ENDCG
        }
}

}

 

● SpineSpriteMask - 마스킹 하는 텍스쳐 메테리얼

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/SpineSpriteMask"{
Properties
{
        _MainTex ("Base (RGB)", 2D) = "white" {}
}

SubShader
{
        Tags {"Queue"="Transparent+1" "IgnoreProjector"="True"}
        ZWrite Off
        AlphaTest Greater 0.5
        ColorMask 0
        ZTest Always


        Stencil {
                                Ref 1
                                Comp always
                                Pass replace
                        }


        Pass
        {
                CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag

                        #include "UnityCG.cginc"

                        struct appdata_t
                        {
                                float4 vertex : POSITION;
                                float2 texcoord : TEXCOORD0;
                        };

                        struct v2f
                        {
                                float4 vertex : SV_POSITION;
                                half2 texcoord : TEXCOORD0;
                        };

                        sampler2D _MainTex;
                        float4 _MainTex_ST;

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

                        fixed4 frag (v2f i) : COLOR
                        {
                                fixed4 col = tex2D(_MainTex, i.texcoord);
                                if(col.a<0.1)discard;
                                return col;
                        }
                ENDCG
        }
}

}

SpineShader.shader
0.00MB
SpineSpriteMask.shader
0.00MB

 


 

반응형