Rect Mask 2D 라는 컴퍼넌트를 위해 존재한다.
사각형 영역을 클립하기 위해 계산을 하는데
Shader Vector 에서 UNITY_UI_CLIP_RECT 을 추가하면 버텍스에서도 계산을 안할껀데 왜 그냥 두었나 모르겠다.
우선 새로 만드는 UI Shader 에서는 Vector 에서도 "#ifdef UNITY_UI_CLIP_RECT" 를 추가하자
#ifdef UNITY_UI_CLIP_RECT
float2 pixelSize = vPosition.w;
pixelSize /= float2(1, 1) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy));
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
float2 maskUV = (v.vertex.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy);
OUT.mask = half4(v.vertex.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_UIMaskSoftnessX, _UIMaskSoftnessY) + abs(pixelSize.xy)));
#endif
#ifdef UNITY_UI_CLIP_RECT
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw);
color.a *= m.x * m.y;
#endif
'Shader > 이론' 카테고리의 다른 글
"Sprites/Default" (0) | 2022.05.18 |
---|---|
스텐실버퍼 (0) | 2020.05.19 |