我正在编写一个着色器,在其中需要能够确定我离2D对象的边缘有多近。我想弄清楚这一点的想法是使用纹理的UV来确定我与纹理边缘的距离。例如,我想做这样的事情:
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 uv : TEXCOORD0;
};
...
fixed4 frag(v2f in) : SV_Target
{
// This is what I want to be able to do
if (in.uv.x < 0.1)
{
// do something
}
}
问题是我的纹理是切片图像的一个单元格(子画面模式=多个)。这意味着我的UV不会从0变到1。例如,如果我的切片图像是128x256并将其分成64x64的切片,则该切片的UV可能从(0.5,0)变为(1,0.25)我使用的是我的对象的纹理。因此,当我尝试确定当前片段的边缘距离时,我不能使用0和1作为纹理的左/右/下/上边缘。
是否可以在着色器中处理此问题,例如将当前的UV转换为[0,1]范围内的UV?
或者,有没有其他方法可以确定我不依赖纹理坐标而接近绘制对象的边缘?