大家有否发觉玩游戏时开启了同步刷新(v-sync)后帧速率就下降了?目前LCD的主流刷新率为60Hz,按理这样的刷新率玩游戏应该足够了,遗憾的是一旦刷新率稍稍下降帧速率就立刻降到30fps。先不要咒骂同步刷新,这不只是它的错,根源应该是显卡的双缓冲区设计和开启同步刷新同时造成的。
# ]0 W! R$ h7 }3 L 9 D; F& n, }, c1 B5 j! C
一般的显卡都带有两个缓冲区,当前显示的图像来自于第一个缓冲区,而第二个缓冲区则准备下一帧画面的输出。当启用同步刷新后,当前画面需要等到下一个垂直空白周期(对应60Hz就是1/60一秒的时间)出现才能转换到下一帧画面,这样才能实现与显示器的同步刷新。如果你的显卡支持超过60fps的帧速率,保持同步当然不成问题,否则就糟糕了。在1/60一秒的时间内,如果第二个缓冲区还没有准备好第二帧画面,那么就需要等多一个1/60一秒才能够转换,所以帧速率就下降到30fps,这种情况下,画面看起来将会十分拖沓。- w7 y! l- w3 g+ W5 \+ a
/ F" o# g8 u' u2 V# p1 ]- ~, b 利用三个缓冲区就可以解决这一问题,目前ATI和NVIDIA的显卡驱动都支持开启三个缓冲区实现同步刷新,但这种功能仅对OpenGL游戏有用,对于更为普遍的D3D游戏则无能为力。/ b0 O5 L" K0 _, q1 U
6 Y6 K: |. y- }0 ~7 {
不过,利用DirectX Tweaker这一软件就可以通过DirectX API让D3D游戏也支持三个缓冲区,该软件拥有良好的界面,十分容易使用,不过使用前可能要先安装.NET框架。3 w+ @5 ~% C+ F' G* ?6 {* x x
3 W& L9 C$ O7 q( `! m- t! V% m
, K( f; x# R L0 d用户界面 ) E. H+ K. Q w0 l9 _
! y* S% r) n; O7 [& F/ @0 o
+ X8 V7 m. f r/ l/ }3 z 第一步先选择要应用的游戏(上图为F.E.A.R.),输入路径,并勾选“Active”,然后点击"Modules to load"就会看见下面的对话框:
; _5 B% O8 M3 A8 F( c
$ Z0 {9 Y2 Z( ?5 U2 {3 w3 c; `
0 @- ^4 h2 g9 Y7 ~
, L: M" ^4 p5 J' i' V2 i; g/ k 勾选"Present Changer",在 "Count"选项里键入“2”,然后返回刚才的“Project(Activ:F.E.A.R)”,点击"Start"就完成了。2 }2 G9 R" A2 [5 u7 y5 i
2 ~9 ]; G4 Q9 d: }/ H t- E# B7 l 下面是应用该软件前后帧速率的对比:
: J1 {4 |( y- T% W0 V0 P8 z 9 J: e" w8 U$ N: _+ x
应用前
2 Y3 o! Q8 @8 V6 R
9 B; Y7 P1 m# I t5 r# J! F0 g' f: e1 x! z. d% g
6 j5 S6 {5 D$ j8 B, u应用后
* u! k3 n7 n* ?% x$ K0 g8 C! r
; t7 A+ j0 R i3 c; t% o1 v+ w' W6 H" [, J5 o+ n4 b
其它设置为:/ @3 ]- h. V; g7 }; D
' ^/ E6 L) A( ]7 k4 e" h+ y 分辨率: 1280x1024
4 t. R9 H. v; g, b9 v( z; V7 M x d
$ s0 `9 R" s- Z% D 显卡设置: All max, SoftShadow disabled
! n$ M# k& {3 p. g
4 D% E* E6 M7 R/ A; h! ?9 C AA/AF: 0xAA / 8xAF
' b7 p Z5 \4 b$ b4 @1 ]9 y" m" x9 ` . Y2 q" Z+ w N. g7 l4 s
上两图中“Maximum”一项没有发生变化,这是由于启用同步刷新的结果(最大也只能跟显示器刷新率一致),但另外两项帧速率则大大提高了,游戏变得更加顺畅。( K, a( ]+ w* ~ S0 k/ i
8 ~) M% V+ U; T; F9 q 注意事项:- G, l; C ~2 H2 B' g( q3 H9 |
e8 l- D2 N, e ]9 X& a 三个缓冲区似乎可以带来更流畅的游戏画面,但这是有代价的,比两个缓冲区需要50%的额外缓冲空间。譬如,在1600x1200的分辨率下,每帧画面需要7.32Mb的空间存储,双缓冲区需要14.64Mb的显存,三缓冲区则需要21.96Mb,对于目前的显卡来说只是小菜一碟。但一旦开启4x FSAA后,则需要多达87.84MB的显存,超过一块256Mb的显卡的1/3显存空间,如果游戏需要200Mb的空间存储条纹、光暗、冲击等细节,开启三个缓冲区后游戏玩起来必定经常滞胀。如果你发现玩游戏时系统需要频繁地访问硬盘,这可能就是开启三个缓冲区的负面后果了。" Y2 J1 o8 z* p+ N
7 H9 x0 y; u( `+ H+ g1 Q# T
总结:如果你实在不能忍受同步刷新后帧速率的下降所带来的画面断裂,DirectX Tweaker是一个不错的选择。 ftp://majorgeeks.mirror.internod ... tools/dxtweaker.zip[free][/free] |