1

我有一个无缝平铺的纹理。

在片段着色器中,我使用在某个点从 1.0 跳转到 0.0 的函数以程序方式计算纹理坐标 UVproc(此处纹理应该很好地重复)。

问题是在这个接缝处,查找似乎从最小的 mipmap 级别返回像素值。

如果我调试输出

out = vec4(dFdx(UVproc.x), dFdy(UVproc.y),0,1);

然后我可以看到在这些像素上,这些纹理坐标的有限差异非常高,因此访问了一个小的 mipmap 级别(有道理 - 因为在这些像素处从 1 跳到 0,所以有限差异会很大)。

如果我使用 textureLod() 手动访问 mipmaplevel 0,那么我没有这个问题,但我也松散了 mipmap,一切都变得粗糙。

所以问题是:

如果在片段着色器中程序计算纹理坐标(在 0-1 范围内),如何避免可见的 mipmap 相关接缝?

4

1 回答 1

1

您应该使用渐变纹理采样,手动设置导数。这是它的一个功能:

gvec textureGrad(gsampler sampler, vec texCoord, gradvec dTdx, gradvec dTdy);
于 2012-05-12T14:47:02.170 回答