使用UV切片纹理

时间:2018-09-29 20:43:22

标签: unity3d shader fragment-shader

我正在编写一个着色器,在其中需要能够确定我离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?

或者,有没有其他方法可以确定我不依赖纹理坐标而接近绘制对象的边缘?

0 个答案:

没有答案