다음은 메시의 텍스처 좌표에 기반한 체커보드 패턴을 출력하는 셰이더입니다.
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;
c = floor(c) / 2;
float checker = frac(c.x + c.y) * 2;
return checker;
}
ENDCG
}
}
}
Properties 블록의 밀도 슬라이더로 체커보드의 밀도를 제어할 수 있습니다. 버텍스 셰이더에서 메시 UV에 밀도 값을 곱해 범위를 0–1에서 0-밀도 값으로 바꿉니다. 밀도가 30으로 설정되었다고 가정해 보겠습니다. 이렇게 하면 프래그먼트 셰이더에 입력된 i.uv 가 렌더링되는 메시의 다양한 위치에 0–30의 부동 소수점 값을 포함합니다.
그런 다음 프래그먼트 셰이더 코드는 HLSL의 빌트인 floor 함수를 사용하여 입력 좌표의 정수 부분만 가져와 2로 나눕니다. 입력 좌표는 0에서 30 사이의 숫자였다는 점을 상기하면, 입력 좌표는 모두 0, 0.5, 1, 1.5, 2, 2.5 등의 값으로 ‘양자화’됩니다. 이 작업은 입력 좌표의 x 및 y 컴포넌트 모두에서 수행되었습니다.
다음으로 이 x 좌표와 y 좌표(각 좌표는 0, 0.5, 1, 1.5, …)를 더하고 다른 빌트인 HLSL 함수인 frac 을 사용하여 소수점만 가져옵니다. 결과는 0.0 또는 0.5일 수 있습니다. 그런 다음 값에 2를 곱하여 0.0 또는 1.0으로 만들고 컬러로 출력합니다(각각 검정색 또는 흰색이 표시됨).