Shader "Custom/UVRegionHighlighter" { Properties { _HighlightMin ("Highlight Min (U, V)", Vector) = (0.2, 0.2, 0, 0) _HighlightMax ("Highlight Max (U, V)", Vector) = (0.5, 0.5, 0, 0) _GridCount ("Grid Count", Float) = 10.0 _HighlightColor ("Highlight Color", Color) = (1, 0, 0, 1) } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD1; }; struct v2f { float2 uv : TEXCOORD1; float4 vertex : SV_POSITION; }; float4 _HighlightMin; float4 _HighlightMax; float _GridCount; fixed4 _HighlightColor; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag (v2f i) : SV_Target { float2 uv = i.uv; // Сетка (линии разметки) float2 grid = frac(uv * _GridCount); float lineMask = step(0.92, grid.x) + step(0.92, grid.y); lineMask = saturate(lineMask); // Проверка: находится ли пиксель в выбранных UV-координатах bool inRegion = (uv.x >= _HighlightMin.x && uv.x <= _HighlightMax.x && uv.y >= _HighlightMin.y && uv.y <= _HighlightMax.y); // Базовый цвет UV + черная сетка fixed4 baseColor = lerp(fixed4(uv.x, uv.y, 0.0, 1.0), fixed4(0, 0, 0, 1), lineMask); // Если пиксель внутри выделенного участка UV — подсвечиваем его if (inRegion) { return lerp(_HighlightColor, fixed4(1, 1, 1, 1), lineMask * 0.5); } return baseColor; } ENDCG } } }