与显示卡的亲密接触 填充率的故事

292 篇文章 14 订阅
80 篇文章 1 订阅

   [填充率的故事]

经常会遇到朋友问我,玩游戏时,为什么别人的显卡比我的好,看看游戏的速度、画质都比我的强?那究竟是什么在决定着一块显卡的好与差呢?

我们平时玩的游戏中的人物、车辆、武器、以至于整个外部世界都是由三维物体构成。我们知道,屏幕中的一个三维物体是由成千上万个三角形或多边形组合而成。当一个屏幕上的三维物体运动时,要显示原来被遮部分,抹去现在被遮部分,还要针对光线角度不同用多种色彩填充多边形。人的眼睛具有“视觉暂留“特性,当一副图像快速被多副连续的只有微小差别的图像代替时,这种感觉就不是多副图像的替换,而成为一个连续的动作。

所以,三维图像进行快速的生成、消失和填充像素时,给人的感觉并不是多副图像的替换,而是一个连续的动作,所以当三维图像也进行快速的生成、消失和填充像素时,给人的感觉就是三维物体的运动了。“填充率“以每秒钟填充的像素点为单位,“三角形(多边形)生成速度“则表示每秒钟三角形(多边形)生成个数。现在的3D显卡的性能也主要看着两项指标,这两项指标的数值越大,显卡三维图像的处理能力就越强,显卡的档次也就越高。

填充率的故事

谈到3D加速卡,最常用的一个词就是填充率。各大厂商在介绍和推广自己的产品时,填充率总是作为一个重要指标而大肆宣扬。甚至一场宣传战的争夺焦点也是填充率。那么,填充率到底意味着什么?为什么有些公司用texels(纹理填充率)而另一些用pixels(像素填充率)来定义呢?

首先让我们来看看厂商们对填充率相关的声明:

“ATi的下一代Rage 128 GL图形芯片将为高端PC市场提供最好的性能和功能,Rage 128 GL具有超标量渲染引擎和单通道多纹理技术,将是第一个突破1 G texel/s大关的3D芯片。”

-引自ATI的多年前的一次产品宣传

“nVIDIA Geforce 2,历史上第一款填充率破G的图形芯片!(1.0 Gigapixels)”

-nVIDIA当年的的新闻声明

以上两则厂商新闻稿,你都会无一例外地发现填充率这个词,而且是作为重要指标来宣扬。今天我就为大家详细介绍填充率,从下文中,你将会逐渐解开填充率之谜。

本文系驱动之家供《电脑报》专稿,请勿随意引用

    [理论峰值填充率]

大多数公司所谓的填充率实际指的是理论峰值填充率,那么那些填充率的数值是怎么得来的呢?要获得一块显卡的填充率的前提条件是必须知道3D芯片的时钟。将芯片时钟、像素渲染管线的数目相乘,即可得到芯片的填充率数值。下面的几个例子有助于理解:

3dfx Banshee处理器通常在100MHz下运行。它只有一条像素渲染管线,(这样每个周期它只能计算出一个双线性过滤像素并在屏幕上显示出来)。根据填充率的定义,Banshee的理论峰值填充率就是100MHzX1=100M pixels/s。

nVIDIA RIVA TNT有两条像素渲染管线,芯片时钟为90MHz,很容易算出TNT的理论填充率为180M pixels/s。

nVIDIA Geforce FX 5800 Ultra处理器通常在500MHz下运行。它有八条像素渲染管线,每条管线一个纹理单元。根据填充率的定义,Geforce FX 5800 Ultra的理论峰值填充率就是

500MHzX8X1=4000M pixels/s。

ATi Radeon 9700 Pro处理器通常在325MHz下运行。它有八条像素渲染管线,每条管线一个纹理单元。根据填充率的定义,Radeon 9700 Pro的理论峰值填充率就是325MHzX8X1=2600M pixels/s。

原来如此,我明白了!先别太得意,事情可不是想的那么简单。上面的填充率都是在极端的条件下得到的。某些图形处理器面临限制,它们的像素渲染管线只能为同一个屏幕像素工作,如果像素为单纹理的话,那么第二个像素渲染管线就只好闲置了,这时填充率实际上很低。这里我要告诉大家的主要问题是:在不同的条件下,填充率可能有所不同。理论峰值填充率是3D芯片时钟与像素渲染管线数目的乘积。但这种填充率是在特定的工作环境下获得的,要求像素渲染管线可以同时工作。

让我们来体验一个复杂些的情况:试着计算一下nVIDIA Geforce Ti 4600的填充率,Ti 4600有四条像素渲染管线,每条管线两个纹理单元,芯片时钟为300MHz, Geforce Ti 4600的理论峰值填充率怎么计算?300MHzX4X2=2400M pixels/s?嗯,算来不错,可实际上呢?300MHzX4=1200M pixels/s,这才是正确的计算!那么300MHzX4X2=2400M是什么呢?答案就是:2400M texels /s。这里,texels /s这个英文就是我们下面要讲的——纹理填充率。

    [纹理填充率与像素填充率]

为什么有的厂商广告词中填充率的数字怎么比理论填充率还要高?难道是厂商骗人吗?这里你所看到的填充率很可能就是纹理填充率而不是理论填充率!

纹理填充率是指一秒钟内纹理渲染的数目,计算公式同理论填充率相似:3D芯片时钟x像素渲染管线数目x单个纹理使用的texel数目。

哇,太难受了!不要紧,我们还是举例子:

ATi Rage 128GL原打算设计为125MHz,有两条像素渲染管线。每条管线可以为一个双线性过滤像素上色,而双线性过滤需要4个texles。因此Rage 128GL纹理填充率为:125(时钟)X 2(像素渲染管线条数)x 4(texels)= 1000 Mtexels/s或1G texels/s。

让我们回首上文那段新闻稿:

“ATi Rage 128 GL图形芯片将为PC市场提供最好的性能和功能,Rage 128 GL具有超标量渲染引擎和单通道多纹理技术,将是第一个突破1 G texel/s大关的3D芯片。”

许多人都迷惑不解,因为他们认为上面所说的1G texels是理论峰值填充率,我个人认为不应该使用纹理填充率,那样做的唯一目的就是欺骗和愚弄人们。所以当你看到一个近似天文数字或比同一代其他显卡高的多的填充率,你应当意识到那很可能是纹理填充率而不是理论峰值填充率。

这里,我们要注意的是,纹理填充率从来都是以Mtexels表示,而不用Mpixels!

Pixels Vs Texels

细心的读者会发现,以上我们所引用的填充率数字都是以Mpixels/sec或Mtexels/sec的形式来表示。/sec常常都会被省略,但你要知道显卡指标中的时间单位都是秒。pixels是传统的填充率单位,如今很多显卡公司开始习惯用texels来代替pixels。填充率最初定义为处理完的像素写到帧缓存的数目,其实就是指理论峰值填充率,过去都是用pixels表示。

这几年3D显卡增加了不少新功能。它们允许渲染看不见的屏幕部分(也称为Overdraw),并在下一帧中把这些看不见的像素作为下一帧的纹理,因此写到帧缓存的就不一定都是显示在屏幕上的像素,而是渲染成纹理的像素,这些像素就称为texels。这种处理方法可以获得几个蛮酷的特效,设想渲染一个房间,你可以把房间作为纹理来储存,这样你就不用显示房间的图片而是把图片作为纹理来随意粘帖,镜面反射效果就是这么来的,当然实际过程很复杂,但基本原理就是上面所说的做法。

另一个使用Mtexels的原因是游戏开始使用多层多纹理效果,也就是说屏幕上的一个像素有几个子像素混合组成,显然这种情况用Texels表示填充率比pixels更为准确。

    [等效填充率?]

等效填充率是个特例,它是由Videologic和NEC在比较PowerVR和其他的3D芯片时引入的。你可能知道,PowerVR的设计与众不同。

传统的3D卡的场景都是由非常多的多边形组成。而这些显卡根本无法得知场景最后视觉效果如何,有时3D卡画出的多边形就看不见(或者是有一部分看不见),结果导致白白浪费填充率,因为看不见的物件也要渲染。一个简单的例子:怪物站在墙前面,传统的渲染连被怪物遮挡的墙的部分也要渲染。而这些像素我们是看不见的,根本就没有用。

Power VR则不同,它以一个场景为单位工作,Power VR首先会检查所有场景并通过一些有趣的运算法则来计算出每个像素的可视性,结果是怪物身后墙的像素不会渲染。

可是问题也随之而来,Power VR的填充率和一般的显卡无法比较。他们是两种不同的技术。传统渲染会有所浪费,而Power VR却从少做无用功。

为了对比,Videologic提出了等效填充率这个概念。根据Power VR的工作原理,他们试图加上传统渲染方法的额外工作,这样也可以使Power VR 获得一个与其他显卡相参照的填充率数值。

等效填充率定义如下:将overdrwaw的数值加1再与理论填充率相乘的数值就是等效填充率。所谓Overdraw是传统选反方法所画出的隐藏的像素部分占总屏幕像素的百分比。还是拿怪物和墙打个比方吧,假设怪兽占了屏幕的一半,那么一般的3D卡将渲染墙(屏幕100%)和怪兽(屏幕50%)。显然,怪兽后面的墙属重复渲染,也就是总共要画1.5个屏幕的像素,而每一个像素的渲染可都是要耗费填充率的。而Power VR会观察整个场景,并计算出怪物或墙的可见像素,所以Power VR仅画整个屏幕一次。

在上面这个例子中overdraw是50%,等效填充率就等于(1+0.5)*100 Mtexels(填充率)= 150 Mtexles。

这只是随便举个例子,那么在游戏中overdraw有多少呢?Videologic表示一般在2-5之间,这时等效填充率将为200-500Mtexels。但这个过与夸大,我认为Overdraw应在20%-300%的范围之内,随游戏不同而变化,这使得等效填充率成了一个不可预知的数字。就以前所发布的Power VR 250而言,Overdraw的平均值接近2(这说明传统渲染方法等于白白多画了一个屏幕)。

    [真实的填充率!]

我们知道,理论和现实之间总是存在巨大的差距,那么还是让我们回到真实世界中来吧。

怎样得到真实的填充率呢?很简单,测试!我这里介绍用3D Mark 03来测试3D卡填充率。

如果你用过3D Mark 03,你应该见过上面这个场景。没错,这就是填充率测试。

我们来谈正题——填充率。前面我们不止一次说过,过去定义填充率就是一秒钟内写入帧缓存的已渲染完毕的像素的数目。假设屏幕分辨率是800x600,那么每个平板都包含有800x600即480,000个像素。将这个值与帧速率相乘(每秒画面显示的帧数),就可以得出填充率数值。

因为这是一个真实的场景,所以所有可能损失的时钟已包括在内,这就是真实的填充率,我们看看真实的填充率和理论峰值填充率之间的定量差距,我们的测试平台为P4 3.06,MSI GNB Max主板:

以上这些数据都证明真实填充率确实比理论峰值填充率要小,我们用填充率效率表示实际值与理论值的偏差。以上数据还揭示了时钟和填充率之间的关系:时钟越高,填充率越高,这是符合逻辑的。

没有一个显卡的填充率效率能达到理论值100%,这很正常,一般来说越是新的显卡核心其执行效率就越高。我们在这里就可以注意到,Geforce4 Ti的填充率效率比Geforce 3要出色的多。而ATi Radeon 9700 Pro的8渲染流水线使它在单纹理填充率的测试表现杰出。

    [关于填充率的总结]

填充率是3D厂商争夺用户的主要武器,每个公司都会以惊人的数字来吸引用户。遗憾的是,填充率有很多种定义,容易使人们误解。我总结了三种类型的填充率:理论峰值填充率(最常使用),纹理填充率(为了广而告之,使数字更高)和等效填充率(Power VR用)。所有这些都是理论上的数据,在程序工作时缺乏实际意义。

为了搞清楚真正有效的填充率,我们方才需要引入真实填充率的概念,3D Mark可能不是最好的,但是它比那些理论的数据可靠得多!理论不等于实际——厂商极力吹嘘,只不过是让你认为他们的产品是最好的。此间我们的目标也很简单,那就是做一个懂技术,并理智对待消费行为的好用户!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值