替代硬件中的各向异性过滤

时间:2017-11-08 21:11:17

标签: opengl-es glsl opengl-es-2.0 mipmaps image-rendering

我在opengl-es-2.0中以相对于观察者(地板平面)的大角度渲染纹理。在支持各向异性过滤的硬件上,一切都很好。但是,我需要支持一些在硬件中没有这个的设备(没有GL_EXT_texture_filter_anisotropic)。

关闭mipmap,纹理在距离上很清晰,但我有莫尔条纹,正如预期的那样。随着mipmap的开启,莫尔图案消失了,但纹理在距离上变得模糊(再次,如预期的那样)。

在没有各向异性过滤的硬件上有没有其他选择?在片段着色器中这样做是否可行(只有我害怕的是opengl-es-2.0)?任何示例代码在哪里?我确实在椭圆加权平均滤波上找到http://www.pmavridis.com/ewa.html,我想这可以实现,但示例代码使用底层的各向异性硬件过滤,无论如何使用opengl-es-2.0上没有的东西。

我的目标不是高帧率,只是良好的图像质量。

1 个答案:

答案 0 :(得分:2)

mipmap的三线性过滤可以改善一些事情:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

Mipmap偏差将提高清晰度。它可能会引入一些Moire,但远不及完全禁用mipmapping。这是通过在片段着色器

中调用texture2D的不同重载来完成的
texture2D(yourSampler, yourTexCoords, yourMipBias);

IIRC,yourMipBias的值为-1将使纹理采样锐化1个mip级别,你必须调整你的场景,但是-0.5到-1.5左右的东西可能已经足够了。

我相信可以在着色器中编写自己的各向异性过滤,但我没有第一手经验。我会首先尝试这些更简单,更有效的方法,看看你是否可以通过这种方式获得良好的视觉质量。

相关问题