大家有否发觉玩游戏时开启了同步刷新(v-sync)后帧速率就下降了?目前LCD的主流刷新率为60Hz,按理这样的刷新率玩游戏应该足够了,遗憾的是一旦刷新率稍稍下降帧速率就立刻降到30fps。先不要咒骂同步刷新,这不只是它的错,根源应该是显卡的双缓冲区设计和开启同步刷新同时造成的。 5 X& ?, V2 U: X- I9 F( V
Y7 n; a9 M- Q) `* ^
一般的显卡都带有两个缓冲区,当前显示的图像来自于第一个缓冲区,而第二个缓冲区则准备下一帧画面的输出。当启用同步刷新后,当前画面需要等到下一个垂直空白周期(对应60Hz就是1/60一秒的时间)出现才能转换到下一帧画面,这样才能实现与显示器的同步刷新。如果你的显卡支持超过60fps的帧速率,保持同步当然不成问题,否则就糟糕了。在1/60一秒的时间内,如果第二个缓冲区还没有准备好第二帧画面,那么就需要等多一个1/60一秒才能够转换,所以帧速率就下降到30fps,这种情况下,画面看起来将会十分拖沓。
3 D( C5 N7 G& }* O. m) b& v8 @4 V+ x7 w % g& r& U* p; k# b. P" b z% \# b
利用三个缓冲区就可以解决这一问题,目前ATI和NVIDIA的显卡驱动都支持开启三个缓冲区实现同步刷新,但这种功能仅对OpenGL游戏有用,对于更为普遍的D3D游戏则无能为力。
1 o5 `3 ^) ^+ \4 ]% z
1 N) u. f8 B, p Y 不过,利用DirectX Tweaker这一软件就可以通过DirectX API让D3D游戏也支持三个缓冲区,该软件拥有良好的界面,十分容易使用,不过使用前可能要先安装.NET框架。$ v- w1 g* q* E3 w. s
$ N; r/ L" C! A7 s- U4 i; f
# X, D* ]$ G& g8 }' D8 f' }用户界面
; x5 T' a" K3 E7 H% [7 X9 I7 u; ~5 b. r3 i
6 W6 M f2 X5 K! t9 F
第一步先选择要应用的游戏(上图为F.E.A.R.),输入路径,并勾选“Active”,然后点击"Modules to load"就会看见下面的对话框:. K, \& ?; K1 p. w6 X
. t# q0 D! E b1 z
- I; k2 M0 m8 \- A# z$ @, W8 Q
i4 _ i7 p5 x' U; X( y
勾选"Present Changer",在 "Count"选项里键入“2”,然后返回刚才的“Project(Activ:F.E.A.R)”,点击"Start"就完成了。
@5 f4 u: S: Z. _) f9 ^% E9 U
9 N) B" L' k% ]+ {( Q, q" e 下面是应用该软件前后帧速率的对比:- M, }; o4 u* @. V: t- P
) N# m1 d- m+ T$ d* _1 e, T! a- j) U应用前
" F! v+ M8 l, o* V: I2 v& D, ]
/ ^% ~# S- H" L. t6 M, r+ k' E0 z# o. Q" a W) ]
; D8 ^1 p5 m" |: @2 d应用后
% t& M& `+ I. Z4 C4 `
" m% {) o/ j7 ?. N4 u0 t! e+ q9 b' W# a6 f& M
其它设置为:
+ ^7 {- A' f+ k' ?" ? m 7 X4 J: o( S+ S2 B. I
分辨率: 1280x1024
o4 n* n6 a" C9 P+ \1 ]" ~ % H0 C: ^7 A* Y
显卡设置: All max, SoftShadow disabled# d5 s% B' |* ]' p( I
1 \% a4 ~/ k3 P% r
AA/AF: 0xAA / 8xAF+ k9 L1 F: i- K% C3 ~+ s
J6 H# x& Y- C% g 上两图中“Maximum”一项没有发生变化,这是由于启用同步刷新的结果(最大也只能跟显示器刷新率一致),但另外两项帧速率则大大提高了,游戏变得更加顺畅。
& h0 ^, U/ e1 W; E
n. Z/ q/ T% a/ K 注意事项:+ Q6 G( Q3 Z& F7 M
- y+ {0 k" o7 k7 u" W; Z _" j 三个缓冲区似乎可以带来更流畅的游戏画面,但这是有代价的,比两个缓冲区需要50%的额外缓冲空间。譬如,在1600x1200的分辨率下,每帧画面需要7.32Mb的空间存储,双缓冲区需要14.64Mb的显存,三缓冲区则需要21.96Mb,对于目前的显卡来说只是小菜一碟。但一旦开启4x FSAA后,则需要多达87.84MB的显存,超过一块256Mb的显卡的1/3显存空间,如果游戏需要200Mb的空间存储条纹、光暗、冲击等细节,开启三个缓冲区后游戏玩起来必定经常滞胀。如果你发现玩游戏时系统需要频繁地访问硬盘,这可能就是开启三个缓冲区的负面后果了。
) h; c; C1 E* b$ g0 y * u+ y0 e3 c& a8 d( ?
总结:如果你实在不能忍受同步刷新后帧速率的下降所带来的画面断裂,DirectX Tweaker是一个不错的选择。 ftp://majorgeeks.mirror.internod ... tools/dxtweaker.zip[free][/free] |