我正在使用需要 mipmap 看起来不错(不可协商)的纹理在 WebGL 中平铺表面。因为 WebGL 不支持用于 mipmap 纹理的 gl.REPEAT 包装模式,所以我在片段着色器中使用“fract(texcoord)”自己钳制纹理坐标。
结果,我在纹理的边缘得到了伪像,因为“fract(texcoord)”环绕,因此使 GPU 认为它只需要一个低细节的 mipmap。
如果这是普通的 OpenGL,我可以使用 textureGrad 告诉 GPU 真正的渐变,但不幸的是,这在 WebGL 中不可用。
有什么建议么?我知道 http://0fps.net/2013/07/09/texture-atlases-wrapping-and-mip-mapping/中描述的 4-tap 技巧,但这似乎有很多额外的开销,只会使影响较轻,不会完全消失。我还在Threejs Custom Shader - Screen Tearing中看到了使用纹理的 'lod' 参数的建议,但这并不能完全解决问题(此外,答案是从 2012 年开始的,所以现在可能有更好的解决方案?)。