본문 바로가기

게임 개발/유니티

[유니티/셰이더] 순차적 체커보드 패턴 Procedural checkerboard pattern

728x90

# 순차적 체커보드 패턴

메시의 텍스처 좌표에 기반한 체커보드 패턴을 출력하는 셰이더입니다.

Shader "Unlit/Checkerboard"
{
    Properties
    {
        // 체커보드의 밀도를 결정합니다.
        _Density ("Density", Range(2,50)) = 30
    }
    SubShader
    {
        Pass
        {
            CGPROGRAM
            #pragma vertex vert     
            #pragma fragment frag
            #include "UnityCG.cginc"

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

            float _Density;

            v2f vert (float4 pos : POSITION, float2 uv : TEXCOORD0)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(pos);

                o.uv = uv * _Density;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target 
            {
                float2 c = i.uv;
                
                // 좌표의 정수만 취하고 2로 나눕니다.
                // 좌표들이 0.5, 1, 1,5, 2로 양자화됩니다.
                c = floor(c) / 2;
                
                // x,y 좌표를 더하고 소수부분만 취합니다. 
                // 0.0 혹은 0.5가 됩니다. 여기에 2를 곱하면
                // 0 또는 1이 됩니다. (이 결과는 각각 검정,흰색이 됩니다)
                float checker = frac(c.x + c.y) * 2;
                return checker;
            }
            ENDCG
        }
    }
}

* 양자화(quantized)란?

어떤 연속적으로 보이는 양을 자연수로 셀 수 있는 양으로 재해석하는 것입니다.

 

728x90