各项异性过滤
各项异性过滤(AF)是一种通用的纹理质量增强技术,可影响纹理在非正交视角下的外观。纹理是包含各种数据的图像,比如颜色、透明度、反射率和平滑度(法线)。这些数据映射到物体并经过GPU处理,以便于在屏幕上呈现真实的外观。但就其原始维度来说,大多数纹理都由于计算开销过大而不能在场景中无限制重用,因为物体的纹素(1像素纹理)与照相机之间的相对距离会影响细节的可见程度,这经常会导致浪费大量处理时间来获取3D场景中不成比例的小曲面上应用的 多重纹理样本。为了同时保证性能和图像质量,AF使用了mipmap;mipmap是以较低分辨率呈现的主纹理副本,当相应曲面与照相机之间的距离达到指点值时,图形引擎便可调用它。经过适当过滤之后,在一个场景中使用多种mipmap水平不仅不会对其外观造成的太大的影响,同时还可以极大地优化性能。
由于mipmap的维度通常是2的幂,或者小于原始纹理,因此有时需要为一个纹素采样多个mipmap,而这要求使用过滤方法来避免模糊和其他失真现象。 默认的双线过滤是最简单、计算开销最小的过滤方法:它计算纹理的最终颜色,根据图形引擎对适当点(目标纹理存在于屏幕上时)定义的mipmap执行4次采 样,这些样本的颜色数据将合成为最终结果。虽然这在一定程度上会造成纹理角度扭曲,但双线过滤仅对图形引擎确定的mipmap执行采样,这意味着调用了两 种不同mipmap大小的纹理在出现角度扭曲后会对其清晰度产生显著的影响。作为双线过滤的视觉连续方法,三线过滤可以连续对目标纹素的相邻mipmap 采样和拉平纹理数据,因此在mipmap之间提供了平滑的转换。但这种方法与双线过滤都假定纹理在照相机前显示为方块,从而影响纹理在较小视角下的质量。其原因在于纹素比mipmap样本长或宽会分别造成过度采样或采样不足,从而导致图像模糊。
各项异性过滤的目的是在各种情况下都能提供出色的图像质量,同时将性能开销控制在较低的水平。根据计算机科学的定义,各项异性是处理同一空间中相异坐标的质量,这适用于在显示时未与照相机绝对正交的纹理。如前所述,当采样纹理与照相机斜交时,双线和三线过滤最终都会造成质量丢失,因为两种方法在从 mipmap获取纹理采样时都假定映射纹理在所呈现的空间中为绝对的方形,这很少能产生真实的效果。mipmap的等方性(即使用相同的维度)也是造成质 量丢失的另一个原因,因此当纹素为梯形时就无法在两个方向上充足采样。为了解决此问题,各项异性过滤将根据纹理的角度扭曲程度按比例扩展mipmap的高 度和宽度;该比例取决于所指定的最大采样值,然后将执行适当的采样。AF支持的各项异性水平范围是1(无扩展)到16,这些值定义了mipmap可扩展的最大程度,但AF为用户提供的扩展水平通常为2的幂:即2x、4x、8x和16x。这些设置之间的区别在于AF过滤纹理的最大角度不同。举例来说,4x过 滤纹理的角度比2x陡两倍,但仍然在2x范围内对纹理执行标准2x过滤来优化性能。使用的AF设置越高,能获得的收益也会更小,因为它们所适用的角度会呈 指数形式减少。
可以通过“3D设置”部分中的“NVIDIA控制面板”来控制各项异性过滤,但如果要获得最佳的性能和兼容性,NVIDIA® (英伟达™)则建议用户将它设置为由应用程序控制。
反锯齿
反锯齿(AA)是一种渲染技术,用于最大限度地减少3D场景中各物体的任何非垂直边缘的锯齿,即类似于梯状的视觉失真效果(visual artifact)。锯齿是当代3D渲染管线中的一项基本操作产生的:光栅化,即将近乎全真的图像转换为离散的像素矩阵(显示器)的过程。这一过程往往会让连续的边缘出现不一致问题,因为GPU只会对占据像素空间一半以上的线条着色,从而造成一些本应平滑的线条成为了锯齿状的边缘。
与各项异性过滤相同,实现这种技术的众多方法也各有优劣,而最常用的两种分别是超采样(supersampling)和多重采样(multisampling)。这两种方法最终都能产生相同的效果:通过对某像素的相邻子像素(由GPU渲染但未在屏幕上显示的虚拟像素)采样来为其确 定中间色,从而使物体的边缘更加真实,但两种方法之间的差别在于如何获取最终颜色。
超采样是一种强力的AA方法,它强制GPU对帧过度采样,或者使用分辨率乘以采样率的积(比如说,原始分辨率1680x1050*4次采 样=6720x4200)作为维度来呈现它,并从目标像素附近的样本获取颜色数据,然后将帧下采样(降低)至其原始大小。完成对帧的下采样之后,应用负水平细节线来锐化采样物体的纹理,以消除下采样和像素合并带来的模糊。超采样是一种全屏反锯齿,这意味着帧中的每一个像素都会被采样并纠正,而不是仅仅将它 们排列在物体的外侧边缘,从而以巨大的性能为代价来提高图像的质量,因为GPU需要计算大量额外的信息。不能通过“NVIDIA控制面板”来启用超采样反锯齿模式。
与超采样相同,多重采样也会对帧过度采样(以更高的分辨率呈现它),但是会缩短各子像素从采样像素继承颜色值的时间,并且仅为子像素分配唯一的深度值(而超采样会计算各个单独的颜色/深度值)。由于GPU知道哪些像素会在对帧执行下采样时显示,因此最终颜色将通过深度值来计算:如果子像素深度不一致,则像素会排列在边缘,并且需要通过修改像素的不透明度(方法是计算采样数量以及具有不同深度值的子像素的数量)来对其着色(在4x中,该值可以是100%、 75%、50%、25%和0%)。这种方法可以比超采样更大地降低性能需求,同时仍然提供可以接受的帧率,从而可应用于大多数3D游戏。
通过“3D设置”部分中的“NVIDIA控制面板”,可以使用多种采样率(2x 至16x)来执行超采样。但是,要获得最佳的性能和兼容性,NVIDIA® (英伟达™)建议用户将采样率设置为由应用程序控制。