深入分析“各 向 异 性 过 滤”技术(上)

为什么有这么多过滤技术呢? 因为纹理图和3D物体的大小不一致,而且3D物体的大小和角度会随着位置而变,这就导致进行纹理映射时,总会出现失真现象,一般3D书籍,我们会看到最近点采用和线性采样。最近点采用时最简单的速度最快的,但是在很多情况下会产生失真现象。 

所以会有线性过滤,及其余的技术。 因为要从速度和质量方面考虑,所以有多个技术。

现在我们对于3D渲染的要求是没有止境的,其实已经有各种各样的过滤技术被用来在二维的显示器上展示三维的物体。而今天我们要介绍的“各向异性过滤”(“各向异性过滤”)是一项新兴的技术,努力做到将电影工作站一样的画面呈现在我们的个人电脑上。这项技术包含了双线性过滤三线性过滤。NVIDIA和ATI都已经在自己的最新显卡中为其提供硬件支持,但是两者的方式却不一样,也就造成了两者显卡性能和画面质量上的差异。

目前的3D显卡可以呈现的画面已经接近甚至超过了现在电影中的CG效果。但是由于受到CPU运算和内存带宽的限制,还是需要精打细算,在速度和质量之间找到一个合适的平衡点。实时3D技术实际上很不好做,既要使用尽量少的内存带宽和CPU运算,在游戏中又要提供电影一般的画面。我们下面要研究的“各向异性过滤”就是一项新的纹理过滤技术,但是它对显卡的性能影响极大。NVIDIA和ATI在硬件的支持手段上不一致,就目前而言,NVIDIA的GeForce4 Ti 4600在激活“各向异性过滤”技术后,相对与ATIRadeon 9700而言,性能的损失更大。

在“各向异性过滤”技术使用后,究竟哪家公司的画质好?哪家公司的速度快呢?在游戏的FPS达到60后,两者的差别在哪里呢?下面我们将逐一介绍两家公司的不同实现方式。希望大家可以从中得出自己关于“各向异性过滤”技术的结论和取舍?

● “各向异性过滤” – 究竟是什么?为什么我们需要他?

在此之前先来具体介绍一下Anisotropic Filt技术。它是用来过滤、处理当视角变化造成3D物体表面倾斜时做成的纹理错误。“Anisotropic”字面上的解释是“各向异性”。传统的双线性和三线性过滤技术都是“Isotropy”(各向同性),其各方向上矢量值是一致的,就像正方形和正方体。而Anisotropic Filt技术则是�美创硎噶糠较蛏现挡灰恢碌那榭觥nisotropic Filt技术的过滤单元并不是“四四方方”的,其典型单元是矩形,还可以变形为梯形和平行四边形。

画面上的一个象素,在一个方向上可以包含不同纹理单元的信息。这就需要一个“非正多边形”的过滤单元,来保证准确的透视关系和透明度。不然,如果在某个轴上的纹理部分有大量信息,或是某个方向上的图象和纹理有个倾角,那么得到的最终纹理就会变得很滑稽,比例也会失调。当视角为90度,或是处理物体边缘纹理时,情况会更糟。

为了解决上面提到的问题,Anisotropic Filt技术就引入了非正多边形的矩形、梯形和平行四边形纹理单元,这样就可以根据实际情况成比例的调整单元。这样斜面在“各向异性过滤”技术的处理下,看起来就不会那么滑稽了。

下面我们就举个典型的例子:对文字纹理的处理。记得《星球大战》片头的那种字幕滚动效果吗?文字的逐渐离观众远去。从下面的图片中,大家可以清楚的看出Anisotropic Filt技术的作用。  

所有的过滤操作都有同样的一个问题--没有足够的采用纹理,分辨率显示器大小在实际工作中也有一定的影响。提高分辨率有助于解决采样的问题,因为这样可以给引擎提供更多的采样纹理。使用1600×1200的分辨率(未使用FSAA),有助于提高总体图象质量,在一个较小的显示器(17"以下)上,由于“象素压缩”现象,可以有效的解决纹理错误问题。但是“各向异性过滤”技术却并不是这样解决问题,它可以在象素数量不足的情况下,经过插值运算处理来提高画质。

● 解决方法: “各向异性过滤”

一般情况下,“各向异性过滤”技术是从16个采样纹理中取平均值,其特别的采样单元是双线性过滤的4倍、三线性过滤的2倍。ATI的“各向异性过滤”技术可以做到在它的16X 质量优秀模式下,对128个纹理采样,当然这种情况资源消耗极大,特别对于内存带宽而言。而NVIDIA的在最高的8X模式下,可以对64个纹理采样。

● ATI vs. NVIDIA: 合适的过滤

下面是两家公司产品“各向异性过滤”设置的详细数据(注意:ATI有“速度优先”和“质量优先”两个模式)

“各向异性过滤”设置

ATI Performance ATI Quality nVidia
1X 不支持 8
2X 最大为8 最大为16 16
4X 最大为16 最大为32 32
8X 最大为32 最大为64 64
16X 最大为64 最大为128 不支持

根据“各向异性过滤”技术的标准,对一个象素应该有16个采样。那么ATI的“2X Quality”或是“4X Performance”才符合标准,而NVIDIA则为“2X”。ATI的“最大为”表示,在实际操作中,显示核心会根据某些法则对不同区域的象素进行不同数量的采样处理。这样做的原因当然是为了带宽。想想下面的数字:当使用32位色、1024×768分辨率、60FPS时,在三线性过滤的情况下(8个采样点),就在每帧画面中需要读取1024×768×8=6,291,456象素(未进行纹理压缩)。如果每个象素4字节,就是25,165,824字节,再乘上每秒的60帧,就得到了需要的带宽1.5GB/s。实际情况下,大多数游戏都采用4:1的纹理压缩,那就是360MB/s。

如果使用NVIDIA的8X模式,“各向异性过滤”采样为64个,是三线性过滤的8倍,就需要2.8GB/s的带宽。如果在1600×1200×32的设置下,带宽就需要6.7GB/s。这当然是不现实的。2.8GB/s的带宽已经接近GeForce4 Ti 4600可用带宽的一半了,如果没有纹理压缩,11.2GB/s就达到了显卡的理论最大带宽(实际上能达到吗?)。如果没有较高的纹理缓冲命中率的话,“各向异性过滤”和FSAA技术都只能是纸上谈兵。而实际上带宽还要供景深缓冲、数模转换等操作使用。

3D显卡通常都会自行取消多余的操作,来节省CPU运算和内存带宽的占用。大多数优化操作都是将不可见的物体和象素省略,这样的技术有culling, clipping, depth-buffering, backface culling,或是通过几何算法和距离来减少纹理和物体大小,如MIP-mapping、geometric LOD。但所有的技术都没有在操作时减少物体的棱角,特别是在处理接近场景平面时。

Matrox的Fragment Antialiasing(FAA)技术是个例外,它可以处理物体边缘的情况,可以平滑边缘的锯齿效果。但是该公司承认这项技术还有些兼容性问题。大多数的过滤技术都着眼于减少不可见的物体和象素,因为既然看不到,省略它们也不会降低画面质量。

● ATI的解决方法: 只要应用到是使用“各向异性过滤”

ATI只在Radeon 9700及其之后的产品上支持“各向异性过滤”技术。ATI的实现方式是在框架形成的时候就把斜面的信息保存下来,再根据这些信息决定是否使用“各向异性过滤”技术,并决定使用哪个模式(主要取决于相对视角下斜面的角度)。“各向异性过滤”技术的使用程度可以通过驱动程序设定。用户可以选择速度和质量优先模式,在某个模式中的数字决定了处理场景中扭曲最严重部分的最大采样数。当扭曲程度减小时,ATI的“各向异性过滤”技术将根据其算法减少采样数。在Radeon 9700中,将延长矩形采样单元的长度来获得更多的采样点来纠正更严重扭曲的部分。

“各向异性过滤”设置

ATI Performance ATI Quality
1X 不支持
2X 最大为8 最大为16
4X 最大为16 最大为32
8X 最大为32 最大为64
16X 最大为64 最大为128

ATI的两种模式(速度和质量)的区别在于使用的是双线性“各向异性过滤”还是三线性“各向异性过滤”模式。不过画面上的提高只在某些场景中比较明显。不过当应用程序有特别的要求时,用户的设定将被忽略。据ATI称,速度优先模式在D3D和OpenGl中,都强制使用双线性“各向异性过滤”,而质量有限模式则在D3D中强制使用三线性“各向异性过滤”,而对OpenGl不做强制规定。

ATI的“各向异性过滤”解决方案是在其认为不需要的地方不使用“各向异性过滤”技术,而将精力都用在最需要的地方。ATI相信这种方式有最好的效果。

● NVidia的方法:通过采样共享,实现动态“各向异性过滤”

NVIDIA也使用了某种特殊算法,不过在“各向异性过滤”中一直使用的都是三线性过滤技术(而不是ATI可选的双线性过滤)。除了这点之外,NVIDIA和ATI的解决方式差别很小。

最主要的差别是两者的采样单元不一样。NVIDIA使用了可在X、Y轴变形的可变四边形单元。NVIDIA可以改变采样点数和采样单元,而ATI只能改变采样个数。

nVidia的首席科学家David Kirk这样解释GeForce 4 Ti的“各向异性过滤”实现方式:

...主要目标是准确处理象素所在源纹理处的采样单元,包括方向、透视关系。在这两个方面,“各向异性过滤”技术比其他任何技术都要好。

处理单元并不一定要是矩形,因为不同的方向可能并不在一个轴线上。而且,根据透视关系,实际的物体可能更像一个四边形。实际组合非常复杂,最近的边应该看起来大,细节程度低而又权重。而采样单元的“前半部分”也应该比后半部分权重。

因此,细节程度会变动到超过两倍。

我们的“各向异性过滤”技术是沿着主轴,对8个三角采样单元进行加权平均。所以,我们可能会使用最大的64个点,但将只从两个MIP Map中取样,各点的权重也是不一样的。所有的采样将整体接近最靠近观察点的象素。

因为GeForce 4 Ti可以动态改变采样单元来更好的适应所操作的斜面,nVidia认为这是一种更好的解决方式,可以解决相关的扭曲现象。当物体表面完全垂直于Z轴时,就不会对其进行“各向异性过滤”操作。不得不说,这种解决方式和ATI的差别很小。

两者的方式都可以动态的改变采样率。不同就在于ATI的采样单元一直是矩形的,而nVidia的则可以改变。

下面的问题就简单了,“各向异性过滤”技术带来的质量提高值得吗?目前的答案是否定的。两家公司不约而同的采取了动态“各向异性过滤”技术,期望以最小的性能损失换来最大程度的画面质量提升。

接下来让我们来看看“各向异性过滤”的表现究竟如何?两个公司的不同解决方法究竟有什么不同呢?

(待续未完!)


各向异性过滤就是在特殊方向上对纹理像素进行加权平均,而不是不作加权平均、或作相邻像素加权平均。而这个特殊方向就是依据多边形和相机相对视角决定的。


翻译自:http://www.extremetech.com

转载:http://bak1.beareyes.com.cn/2/lib/200301/20/20030120208.htm

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值