CG:使用fmod重复纹理会导致锯齿

时间:2013-02-06 20:13:44

标签: unity3d shader fragment-shader cg aliasing

我正在使用Cg撰写Unity3D着色器。

我正在尝试使用fmod函数沿轴重复纹理(基本上通过在Material中使用TextureWrapMode.Repeat设置纹理比例,我可以实现相同的效果。)< / p>

这是可以重现错误的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;
}

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

enter image description here

上图显示纹理如何正确重复。 这是对条带别名模式的缩放:

enter image description here

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


编辑: 我发现禁用mipmap生成解决了这个问题。顺便说一下,我想使用mipmap来避免距离增加时的缩小混叠问题。任何人都有任何想法?

1 个答案:

答案 0 :(得分:2)

您需要在tex2D()函数中明确设置u和v导数。但是:你为什么要用fmod?如果采样器的重复模式设置为换行,则可以让UV坐标漫游超出0-1范围。它将自行包装。