打开显卡三级缓冲 使游戏运行得更顺畅 | ||||||
---|---|---|---|---|---|---|
http://www.sina.com.cn 2006年08月16日 10:33 IT168.com | ||||||
作者:精工 你是否曾经试过,有时为了解决画面撕裂现象,而打开垂直同步(v-sync)之后,不但问题没有解决,反而帧速降低了。打开垂直同步(v-sync),可以把帧速限制在屏幕刷新率以下——对于通常的液晶显示器来说,也就是每秒60帧。玩游戏有60fps的帧速不错了,而且它能够使游戏显得更加顺畅。然而,有时会发现帧速一旦低于60fps的时候,就会被限定在30fps。这时你或许会忍不住嚎叫“拷!画面撕裂真TM难看,垂直同步也不见得好到哪里去!!!”。这并非全是垂直同步的错,通常是图像渲染同时 为什么双重缓冲会导致如此恶果呢?显卡硬件基本上都有两个缓冲区,显示器上见到的图像在前缓冲区,接下来将要显示的一个图像在后缓冲区中。当我们打开垂直同步的时候,在显卡替换前后缓冲区的数据之前,需要等候下一个垂直空白周期(以60Hz刷新率的显示器为例,每一个1/60秒发生一次)以维持画面与显示器的刷新率同步。当显卡的渲染速度高于60fps的时候,不会有什么问题。如果理解这其中的道理,就不难想像,当显卡达不到60帧每秒时会发生什么事了。在那种情形下,由于后缓冲区里的下一帧还没有准备好,显卡要等到下一个垂直空白周期才能进行缓冲区数据交换。结果就是,本来应该每秒60次缓的冲交换,变成了每秒30次,这就是帧速被限制在30fps的原因。 这时就需要使用三级缓冲。有了三级缓冲,就有3个缓冲区,显卡无需等待前缓冲区清空进而腾出后缓冲区,随时可以把渲染结果放入第3个缓冲区。这就是说,可以在打开垂直同步的同时保持应有的帧速了。ATi和nVidia的驱动中都有打开三级缓冲(triple buffering)的选项。可惜这只能起到一半的作用,因为驱动中的3级缓冲选项只对OpenGL游戏起作用。加上OpenGL游戏远少于D3D游戏,所以事实上驱动的3倍缓冲选项在超过一半情况都不起作用。 如何才能打开D3D游戏的3级缓冲? 解决办法就是:使用DirectX Tweaker(http://www.nonatainment.de/web/DirectXTweaker/Download/tabid/58/Default.aspx)。有了这个工具,就可以通过DirectX API强制使用三级缓冲。它的用户界面非常友好,安装也很简单:下载后解压缩就可以用了——只要你的电脑能上网就可以下载使用:)运行DXTweaker,会见到如下界面:
使用DirectX Tweaker 键入一个项目名,选择游戏的运行目录,注意要勾选“Active”选项。一切准备就绪,点击“Modules to load(模组载入)”,将会见到如下界面:
设置 找到“Present Changer”那一行,打勾。然后在“Count”方格中填数字“2”。就这么简单,接下来点击上面的“Project”,按下“Start”按钮,就可以开始游戏了。 为了给大家看看三级缓冲对帧速的实际影响,特此为大家进行了F.E.A.R.测试。图片胜于雄辩:
三级缓冲关
三级缓冲开 测试平台 显存占用率与三级缓冲 看来,三级缓冲就是低帧速的完美解决办法,不过,这并不是免费的午餐。打开三级缓冲也意味着需要多50%的缓存空间。在某此条件之下,它也可能会对游戏效果产生负面影响。举个简单的例子来说明这个潜在的问题:譬如当我们在1600x1200分辨率下运行游戏的时候,每个像素需要32bit空间储存信息,1600x1200x32=61,440,000 bit,将它转换成MB为单位,相当于7.32MB。使用二级缓冲,需要 14.64MB显存;为了使用三级缓冲,则需要21.96MB显存。呵,不就是21.96MB吗,有什么大不了的?当今显卡都板载256MB显存。 没错,由上文看来看来显存占用率不成问题。不过,一旦打开4x FSAA,这个数字就会飞速膨胀。在打开4x FSAA的时候,有多出4倍的像素进行取样,如此21.96MB乘4,变成可观的87.84MB!这就大于显存总容量的1/3了。如果这个游戏需要用200MB的空间储存材质、光影、各种贴图……等等,游戏效果就会非常变得非常糟糕,会由于不时存取硬盘产生大量停滞现象。这里只是提醒大家注意,如果发现游戏过程中存取硬盘过于频繁,则可能说明3级缓冲占用了太多显存,此时你就应该考虑降低游戏的画面设置或者购买更高档的显存容量更大的显卡了:P。 结论 如果你特别讨厌游戏中的画面撕裂现象,而打开垂直同步又会降低帧速带来一顿一顿的副作用,试试看,或许用上面介绍的方法打开3倍缓冲,能够得到满意的效果。 |