Shader/이론

UNITY_UI_CLIP_RECT 란 무엇인가?

소나무꼴 2022. 8. 3. 11:03

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