1

我正在Cg使用Unity3D.

我正在尝试使用fmod函数沿轴重复纹理(基本上与通过在Materialwith中设置纹理比例可以达到的效果相同TextureWrapMode.Repeat)。

这是fragment shader可以重现错误的代码:

half4 frag (v2f i) : COLOR
{

  float u_sample_coord = fmod(i.uv.x ,period) /period;
  half4 col =tex2D(myTexture,float2(u_sample_coord, i.uv.y));  
  return col;
}

基本上它似乎可以工作,但它会产生某种与 fmod 函数的 0 相对应的混叠(条形图案)。这是一些屏幕截图:

在此处输入图像描述

上图显示了纹理如何正确重复。这是出现的条带混叠模式的放大图:

在此处输入图像描述

我试图调试它,但我无法弄清楚到底发生了什么。任何人都可以告诉我问题是什么以及最终如何解决?


编辑:我发现禁用 mipmap 生成可以解决这个问题。顺便说一句,我想使用 mipmap 来避免在距离增加时出现缩小锯齿问题。有人有什么想法吗?

4

1 回答 1

2

您需要在 tex2D() 函数中显式设置 u 和 v 导数。但是:你为什么要使用 fmod?如果采样器的重复模式设置为环绕,那么您可以让 UV​​ 坐标漫游远超出 0-1 范围。它会自己包装。

于 2013-02-12T01:09:33.883 回答