大家有否发觉玩游戏时开启了同步刷新(v-sync)后帧速率就下降了?目前LCD的主流刷新率为60Hz,按理这样的刷新率玩游戏应该足够了,遗憾的是一旦刷新率稍稍下降帧速率就立刻降到30fps。先不要咒骂同步刷新,这不只是它的错,根源应该是显卡的双缓冲区设计和开启同步刷新同时造成的。 5 }: N& F0 A* g6 l; }$ i
5 v7 o5 S7 Z9 W# L; y. N- A8 h; ?
一般的显卡都带有两个缓冲区,当前显示的图像来自于第一个缓冲区,而第二个缓冲区则准备下一帧画面的输出。当启用同步刷新后,当前画面需要等到下一个垂直空白周期(对应60Hz就是1/60一秒的时间)出现才能转换到下一帧画面,这样才能实现与显示器的同步刷新。如果你的显卡支持超过60fps的帧速率,保持同步当然不成问题,否则就糟糕了。在1/60一秒的时间内,如果第二个缓冲区还没有准备好第二帧画面,那么就需要等多一个1/60一秒才能够转换,所以帧速率就下降到30fps,这种情况下,画面看起来将会十分拖沓。
! U9 y W+ `% L% N1 T % X7 B" a7 X" @+ ~5 ^4 ^" f R
利用三个缓冲区就可以解决这一问题,目前ATI和NVIDIA的显卡驱动都支持开启三个缓冲区实现同步刷新,但这种功能仅对OpenGL游戏有用,对于更为普遍的D3D游戏则无能为力。: a/ r' x) |! a `* |9 a4 U
; C) ~: n$ l' z) b P
不过,利用DirectX Tweaker这一软件就可以通过DirectX API让D3D游戏也支持三个缓冲区,该软件拥有良好的界面,十分容易使用,不过使用前可能要先安装.NET框架。1 U& z" A: d$ ^) u7 x! S: X9 D
) q0 h$ l1 O3 v5 f: A3 L% @* p
6 P( m9 ?1 ?+ T8 ^' a1 J3 V, c; I用户界面 + U( ]/ P* C% G
4 ]& [+ B* |9 M" q" ^
% R! R) H; u8 i C% O) S0 y 第一步先选择要应用的游戏(上图为F.E.A.R.),输入路径,并勾选“Active”,然后点击"Modules to load"就会看见下面的对话框:+ B7 q+ A( B* e( `! S8 @ k
. u' v4 z$ L/ g
& O* L( b: i) l( O& {- N% h2 ]2 x5 }/ A; @1 u- l
勾选"Present Changer",在 "Count"选项里键入“2”,然后返回刚才的“Project(Activ:F.E.A.R)”,点击"Start"就完成了。* N# T; } Q- g0 T/ L
S: E/ l) x7 S# S 下面是应用该软件前后帧速率的对比:
, V0 U; r9 a4 d2 t& z }4 o
; s: X: _0 N1 Y( K" A4 E* \, A应用前
6 I- a4 A0 a2 g- k; [; f4 a 4 b# @7 ?4 z7 J3 t% t
# L* |" \4 \/ B 5 ^: b" H/ {) @' ^ Z4 r
应用后
7 l& |( }5 I1 G; e ! Z0 m N& c; R/ J$ S
# l9 d% m3 \# v
其它设置为:# f( Q7 R+ W2 P
9 y2 t& {, ?& q: ~9 R 分辨率: 1280x1024 ?8 u4 e9 k, \
O* b; N- }, o# ~7 Z 显卡设置: All max, SoftShadow disabled
+ C; J5 `( Y9 M* \7 } & g9 f C/ @' W; A! H+ v
AA/AF: 0xAA / 8xAF6 q1 j5 Y* ]# h7 ?+ S' i
% r4 w' M' l/ c 上两图中“Maximum”一项没有发生变化,这是由于启用同步刷新的结果(最大也只能跟显示器刷新率一致),但另外两项帧速率则大大提高了,游戏变得更加顺畅。
( i# i. H2 @1 f5 w ) a( ?; `9 [, b7 j9 k I1 q3 v
注意事项:/ l9 _! ^ J/ M. J8 e
7 C! c" Q9 d+ g1 w! Q7 @0 v) l. n 三个缓冲区似乎可以带来更流畅的游戏画面,但这是有代价的,比两个缓冲区需要50%的额外缓冲空间。譬如,在1600x1200的分辨率下,每帧画面需要7.32Mb的空间存储,双缓冲区需要14.64Mb的显存,三缓冲区则需要21.96Mb,对于目前的显卡来说只是小菜一碟。但一旦开启4x FSAA后,则需要多达87.84MB的显存,超过一块256Mb的显卡的1/3显存空间,如果游戏需要200Mb的空间存储条纹、光暗、冲击等细节,开启三个缓冲区后游戏玩起来必定经常滞胀。如果你发现玩游戏时系统需要频繁地访问硬盘,这可能就是开启三个缓冲区的负面后果了。& m7 v0 [3 v, V4 \/ y
3 C- J: E3 w( I, z
总结:如果你实在不能忍受同步刷新后帧速率的下降所带来的画面断裂,DirectX Tweaker是一个不错的选择。 ftp://majorgeeks.mirror.internod ... tools/dxtweaker.zip[free][/free] |