Unity/수업내용

Unity Shader 21.05.10. 수업내용 - Alpha Blending

HappyFrog 2021. 5. 10. 13:21

AlphaBlending

ㄴ오브젝트들을 그리는 순서가 정해져 있지 않다

ㄴ오브젝트들이 그려질 때마다 Z버퍼를 참고해서 앞뒤 판정을 한다.

ㄴ그리고 그려질 픽셀과 그렇지 않을 픽셀을 결정한다.

 

Z buffer

1.불투명을 먼저 그린다. - 불투명오브젝트는 Z buffer때문에 순서 관계없이 먼저 그리게된다.

2.반투명을 나중에 그린다.

3.오브젝트들이 전부 반투명이라면 가까이에 있는 것을 가장 마지막에 그린다.(제일 먼 것 ~~~ 제일 가까운 것)

 

 

위 코드와 같이 알파페이드를 사용하여 필요없는 부분을 투명하게 만들고 CullOff를 사용하여 Quad의 뒷면도 텍스쳐가 출력되게 하였다.

 

Shader "Custom/Test"
{
    Properties
    {      
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Color ("Color", Color) = (1,1,1,1)
        _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
      
    }
    SubShader
    {
        Tags { "RenderType"="TransparentCutout" "Queue" = "AlphaTest"}
        LOD 200

        Cull Off

        CGPROGRAM
       
        #pragma surface surf Standard alphatest:_Cutoff
               
        sampler2D _MainTex;
        

        struct Input
        {
            float2 uv_MainTex;
        };
        void surf (Input IN, inout SurfaceOutputStandard o)
        {

            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;

            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Legacy Shaders/Transparent/Cutout/VertexLit"
}

이해가 안되는 만큼 많이 찾아봤다. 그래도 이해가 안되는게 함정 ㅎ