我正在使用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函数相对应的混叠(条带模式)。 这是一些截图:
上图显示纹理如何正确重复。 这是对条带别名模式的缩放:
我试图调试它,但我无法弄清楚到底发生了什么。 任何人都可以告诉我问题是什么,最终如何解决?
编辑: 我发现禁用mipmap生成解决了这个问题。顺便说一下,我想使用mipmap来避免距离增加时的缩小混叠问题。任何人都有任何想法?
答案 0 :(得分:2)
您需要在tex2D()函数中明确设置u和v导数。但是:你为什么要用fmod?如果采样器的重复模式设置为换行,则可以让UV坐标漫游超出0-1范围。它将自行包装。