0510 Alpha Blending

2021. 5. 10. 13:19unity/쉐이더

Z버퍼 렌더링 : 중첩된 물체까지의 거리를 비교해서 보이는 점에서 가장 거리가 짧은 값이 z버퍼에 저장된다.
카메라의 깊이 버퍼를 만들어낸다.

오버드로우: 뒷쪽에 있는 것을 먼저 그리고 그 위에 있는 것을 나중에 그리는 것.

알파 블렌딩: 오브젝트들을 그리는 순서가 정해져 있지 않다.
오브젝트들이 그려질 때마다 z버퍼를 참고해서 앞뒤를 판정한다.
그리고 그려질 픽셀과 안 그려질 픽셀을 결정한다.

1. 불투명을 먼저 그린다.
2. 반투명을 나중에 그린다.
3. 반투명인 물체들은 멀리있는 것부터 차례로 그려진다.

Shader "Custom/Grass"
{
    Properties
    {
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Transparent" "Queue"="Transparent"}
        LOD 200

        Cull Off

        CGPROGRAM
        #pragma surface surf Standard alpha:fade

        #pragma target 3.0

        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 "Diffuse"
}

알파 채널을 투명화 했지만 그림자는 그대로 남았다.

 

그림자를 아예 없애는 폴백