Z는 공간에서 Z축 위치를 뜻하며,Buffer는 카메라와 물체의 거리를 저장하는 메모리 공간을 의미합니다.

 

처음엔 초록색을 그리고, 그다음엔 빨간색을 그리고, 그다음은 파란색순으로 색위를 덫칠한다고 생각해야합니다.

위 과정으로 화면에  컬러들이 표시된다고 상상하면 됩니다.

 

Unity는 Cull , Zwrite, Ztest의 세가지 옵션을 제공합니다.

 

ZTest는 7가지 값이 있습니다.

ZTest Less | Greater | LEqual | GEqual | Equal | NotEqual | Always

기본값은 LEqual  (이미 그려진 오브젝트와 거리가 같거나 더 가까운 경우에 그립니다. 그보다 먼 경우에는 오브젝트로 숨깁니다)입니다.

 

Ztest와 Cull 를 이용하면 재미있는 형태를 만들어 낼수 있다.

 


태그는 위와 같은 구문을 사용합니다. 위 Tag는 전체 셰이더에 영향을 주지만, pass 안에 있으면 선택한 pass에만 영향을 미칩니다.

 

장면에 물체를 그릴때 마다 객체 정보를 GPU에 전달하고 이 그리는 과정을 "Draw Call"이라고 합니다. 셰이더에 pass가 많을수록 드로우콜이 늘어납니다.(카메라는 가장 먼거리에서부터 가까운 물체를 그립니다.)

 

Unity에 처리 대기열을 Render Queue라고 합니다.

Render Queue를 수정하는 방법은 두가지 방법이 있습니다.

위처럼 material inspector의 숫자를 변경하여 순서를 정하거나, 

아래 셰이더 Tag를 이용하는 방법입니다.

 

 

Queue의 순서는 다음과 같습니다.

"Queue"= "배경" 범위는 0 ~ 1499입니다. 기본값은 1000입니다.
"Queue"= "지오메트리" 1500 ~ 2399 범위 기본값은 2000입니다.
"Queue"= "AlphaTest" 2400 ~ 2699 범위 기본값은 2450입니다.
"Queue"= "투명"  2700 ~ 3599 범위 기본값은 3000입니다.
"대기열"= "오버레이" 범위는 3600에서 5000까지입니다. 기본값은 4000입니다.


블랜딩 종류
각종 블랜딩 옵션 설정 방법

 SubShader
    {
        Tags 
        { 
            "RenderType"="Opaque"
            "Queue" = "Transparent"
        }
        
            ZWrite Off
            Blend SrcAlpha OneMinusSrcAlpha //전통적인 투명
            //Blend One OneMinusSrcAlpha // 미리 곱해진 투명
            //Blend One One //ADD
            //Blend OneMinusDstColor One // SOFT ADD
            //Blend DstColor Zero // MULTIPLY
            //Blend DstColor SrcColor // 2X MULTIPLY
            //Blend SrcColor One //OVERLAY
            //Blend OneMinusSrcColor One //SOFT LIGHT
            //Blend Zero OneMinusSrcColor //SUBTRACT


            BlendOp Add  //Default Value
            //BlendOP Sub
            //BlendOP Max
            //BlendOP Min
            //BlendOP RevSub

        Pass

코드는 위처럼 만들어지게 되고, 그 결과는 아래와 같은 순서로 됩니다.

Blend SrcAlpha OneMinusSrcAlpha
Blend One OneMinusSrcAlpha
Blend One One
Blend OneMinusDstColor One
Blend DstColor Zero
Blend DstColor SrcColor
Blend SrcColor One
Blend OneMinusSrcColor One
Blend Zero OneMinusSrcColor
Blend One OneMinusSrcAlpha + BlendOP Sub

유니티 도움말 참고: docs.unity3d.com/Manual/SL-Blend.html

'Unity > Code base Shader' 카테고리의 다른 글

Microsoft HLSL  (0) 2021.02.09
인위적 유리 셰이더  (0) 2021.02.09
Unity Shader에 대한 이해  (0) 2021.01.01
Specular 다 광원지원  (0) 2020.12.21
SpecularShader  (0) 2020.12.19