首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助我掌握各向异性滤波(AF)

帮助我掌握各向异性滤波(AF)
EN

Computer Graphics用户
提问于 2017-04-29 21:26:31
回答 2查看 1K关注 0票数 8

最近我读到了关于纹理滤波的文章,如最近邻滤波、双线性滤波、三线性滤波、各向异性滤波、MIP映射、RIP映射等。

从高层次的角度来看,我想我可以理解这些技术,它们是如何工作的,以及它们为什么存在,除了各向异性滤波。各向异性滤波快把我逼疯了。

我看到的问题是,必须对一个相对于相机角度的表面进行纹理化,但我不知道采样梯形脚印如何解决这个问题(尽管我可以看到结果)。这可能是因为我不明白梯形足迹是如何计算的,以及如何加权封闭的端子来采样纹理。

Nvidia的这篇文章更让我感到困惑的是,用句子“当一个纹理是梯形的”或“各向异性的过滤尺度--或者是mipmap的高度或宽度--相对于纹理的透视图失真的比率”。梯形纹理?缩放一个MIPmap?这到底是什么意思?

你能帮我理解AF和AF水平是如何工作的吗?

请注意,我的目标不是拥有一个OpenGL或DirectX AF实现,而是从高级别的角度了解AF是如何工作的。

EN

回答 2

Computer Graphics用户

回答已采纳

发布于 2017-04-30 03:04:03

要理解各向异性滤波的本质,您需要对纹理映射的真正含义有一个坚定的理解。

“纹理映射”一词是指将物体上的位置分配给纹理中的位置。这允许光栅化器/着色器针对对象上的每个位置,从纹理中获取相应的数据。传统的方法是为对象上的每个顶点分配一个纹理坐标,该坐标直接映射到纹理中的某个位置。栅格化器将这个纹理坐标插入到各个三角形的各个面,以产生用于从纹理中提取颜色的纹理坐标。

现在,让我们来考虑一下光栅化的过程。这是如何工作的呢?它需要一个三角形,并将其分解成像素大小的块,我们称之为“片段”。现在,这些像素大小的块相对于屏幕来说是像素大小的。

但相对于纹理而言,这些碎片不是像素大小的。想象一下,如果我们的栅格器为片段的每个角落生成一个纹理坐标。现在想象一下绘制这四个角,不是在屏幕空间,而是在纹理空间。这会是什么形状?

这取决于纹理坐标。也就是说,这取决于纹理如何映射到多边形。对于任何特定的碎片,它可能是一个轴对齐的正方形。可能是一个非轴心对齐的正方形。可能是长方形。可能是梯形的。它可能是任何一个四面图形(或者至少是凸的)。

如果您正在正确地进行纹理访问,那么获取片段纹理颜色的方法就是找出这个矩形是什么。然后从矩形内的纹理中提取每个纹理(使用覆盖范围来缩放边框上的颜色)。然后把他们平均起来。那将是完美的纹理映射。

这也将是极其缓慢的。

为了性能起见,我们试着近似于真正的答案。我们基于一个纹理坐标,而不是覆盖整个片段区域的4纹理空间。

基于Mipmap的滤波使用低分辨率图像。这些图像基本上是完美方法的捷径,通过预计算,当混合在一起时,大块的颜色会是什么样子。因此,当它选择一个较低的mipmap时,它使用的是预先计算的值,其中每个texel表示纹理的一个区域。

各向异性滤波是通过近似完美的方法(它可以,而且应该与mipmapping耦合),通过获取固定数目的额外样本来工作的。但是它如何计算出纹理空间中的区域,因为它仍然只给出一个纹理坐标?

基本上,它是作弊的。由于片段着色器是在2x2相邻块中执行的,因此可以在屏幕空间X和Y中计算片段着色器中任意值的导数,然后使用这些导数,再加上实际的纹理坐标,计算出真实片段纹理足迹的近似值。然后它在这个区域里做了一些样本。

这里有一个图表来帮助解释它:

黑白方格代表我们的纹理。它只是一个2x2白色和黑色纹理的棋盘。

橙色点是该片段的纹理坐标。红色轮廓是片段的足迹,它以纹理坐标为中心。

绿框表示各向异性过滤实现可能访问的纹理(各向异性过滤算法的细节是特定于平台的,因此我只能解释一般的想法)。

这个特殊的图表表明一个实现可以访问4个texels。哦,是的,绿色的盒子覆盖了其中的7个,但是中间的绿色盒子可以从一个较小的mipmap中提取,从而在一次提取中获取相当于4个纹理的信息。当然,实现会相对于单个texel的平均抓取量增加4。

如果各向异性过滤限制为2,而不是4(或更高),那么实现将选择其中的2个样本来表示片段的足迹。

票数 12
EN

Computer Graphics用户

发布于 2017-04-29 23:28:28

有几点你可能已经知道了,但我只想为其他人读到这篇文章。在这种情况下,过滤指的是低通过滤,就像你可能从高斯模糊或方框模糊中得到的那样。我们需要这样做,因为我们正在采取一些具有高频率的媒体,并将其转化为一个更小的空间。如果我们不过滤它,我们就会得到假象,这看起来很糟糕。因此,我们过滤掉的频率太高,无法在缩放版本中精确再现。(我们通过低频,所以我们使用像模糊一样的“低通”滤波器。)

所以,让我们首先从模糊的角度来考虑这个问题。模糊是一种卷积。我们取卷积核,并将其乘以区域内的所有像素,然后将它们相加并除以权重。这给了我们一个像素的输出。然后我们把它移动,然后对下一个像素再做一次,然后再做一次,等等。

这样做真的很昂贵,所以有一种欺骗的方法。一些卷积核(特别是高斯模糊核和盒形模糊核)可以分成水平和垂直两种类型。你可以先用一个水平核过滤所有的东西,然后得到它的结果,然后用一个垂直的内核过滤它,结果和在每一点做更昂贵的计算是一样的。下面是一个例子:

原件:

水平模糊:

水平尾随垂直模糊:

因此,我们可以将过滤分为垂直和水平的通道。那又怎么样?事实上,我们也可以对空间变换做同样的事情。如果您考虑透视图的旋转,如下所示:

它可以被分解成一个X尺度:

其次是每一栏的比例,再加上稍微不同的数额:

现在有两个不同的缩放操作。为了使过滤正确,您将希望在X中过滤比在Y中更重,并且希望为每一列过滤一个不同的数量。第一列没有过滤,因为它与原始列大小相同。第二列只得到一点点,因为它只是略小于第一列,以此类推。最后一列得到的过滤最多的任何列。

“各向异性”一词来自希腊语的"an“意为"not","isos”的意思是平等,"tropos“的意思是”方向“。它的意思是“在所有方面都不平等”。这正是我们所看到的-缩放和过滤是在不同的数量在每个方向。

票数 3
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/5040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档