为OpenGL纹理使用自己的mipmap创建算法是否有意义?

Gha*_*nPL 16 opengl textures mipmaps

我想知道如果我使用自己的算法预生成它们而不是内置的自动算法,纹理mipmap的质量是否会更好.我可能会使用一个缓慢而漂亮的算法,比如Lanczos重新采样.

是否有意义?我会在现代显卡上获得任何质量提升吗?

Nil*_*nck 11

有充分的理由生成自己的mipmap.然而,下采样的质量不是其中之一.

游戏和图形程序员过去已经尝试过各种下采样算法.最后,事实证明,非常简单的"平均四像素"方法可以得到最好的结果.此外,更先进的方法在理论上更正确,它们往往会从mipmap中获得很多锐度.这样看起来很平整(试试吧!).

对于一些(对我来说不可理解)原因,简单的平均方法似乎在抗锯齿和保持mipmaps之间具有最佳权衡.

但是,您可能希望使用伽马校正来计算mipmap.OpenGL不会自己做这件事.这可以产生真正的视觉差异,尤其是对于较暗的纹理.

这样做很简单.而不是像这样平均四个值:

float average (float a, float b, float c, float d)
{
  return (a+b+c+d)/4
}
Run Code Online (Sandbox Code Playgroud)

做这个:

float GammaCorrectedAverage (float a, float b, float c, float d)
{
  // assume a gamma of 2.0 In this case we can just square
  // the components. 
  return sqrt ((a*a+b*b+c*c+d*d)/4)
}
Run Code Online (Sandbox Code Playgroud)

此代码假定您的颜色分量标准化为0到1.

  • 实际上,"平均四个像素"可能不是创建mipmap的最佳方式.http://www.number-none.com/product/Mipmapping,%20Part%201/index.html (12认同)

sim*_*mon 2

是什么促使你去尝试?您当前的 mipmap 生成效果是否不佳?(即,您看过吗?)请记住,无论如何,您的结果通常仍会进行(三)线性插值,因此在运动之间,改进重采样的回报通常会急剧递减。