大家有否发觉玩游戏时开启了同步刷新(v-sync)后帧速率就下降了?目前LCD的主流刷新率为60Hz,按理这样的刷新率玩游戏应该足够了,遗憾的是一旦刷新率稍稍下降帧速率就立刻降到30fps。先不要咒骂同步刷新,这不只是它的错,根源应该是显卡的双缓冲区设计和开启同步刷新同时造成的。 0 @+ o$ m- y( N6 y% M' o
, D# }7 ]" g0 O, P' ~& o! \1 N 一般的显卡都带有两个缓冲区,当前显示的图像来自于第一个缓冲区,而第二个缓冲区则准备下一帧画面的输出。当启用同步刷新后,当前画面需要等到下一个垂直空白周期(对应60Hz就是1/60一秒的时间)出现才能转换到下一帧画面,这样才能实现与显示器的同步刷新。如果你的显卡支持超过60fps的帧速率,保持同步当然不成问题,否则就糟糕了。在1/60一秒的时间内,如果第二个缓冲区还没有准备好第二帧画面,那么就需要等多一个1/60一秒才能够转换,所以帧速率就下降到30fps,这种情况下,画面看起来将会十分拖沓。
/ W1 a: V# t( d/ ^/ I
' W- N% x1 _6 Y. P* P0 H9 q 利用三个缓冲区就可以解决这一问题,目前ATI和NVIDIA的显卡驱动都支持开启三个缓冲区实现同步刷新,但这种功能仅对OpenGL游戏有用,对于更为普遍的D3D游戏则无能为力。
, O5 ?2 J* ^) g. f 7 n0 }6 Z. r# [: e4 I
不过,利用DirectX Tweaker这一软件就可以通过DirectX API让D3D游戏也支持三个缓冲区,该软件拥有良好的界面,十分容易使用,不过使用前可能要先安装.NET框架。
: Z, g0 T0 ]( A. z 3 F+ k& C& w0 L; d
]; U: W" o1 J% [用户界面 ) U9 n$ B. b9 ?) {9 X$ ^2 R
( [. C& i$ }# e" @
* C) ?2 L+ E6 F+ G3 u- ]+ I9 c" b 第一步先选择要应用的游戏(上图为F.E.A.R.),输入路径,并勾选“Active”,然后点击"Modules to load"就会看见下面的对话框:1 a6 M9 t& L4 t) e _; `
: t8 H8 G0 I5 T$ V M
2 S0 a& X0 Y, c! I7 | f, Z: S7 h4 f# }) T; F$ ^* T1 V
勾选"Present Changer",在 "Count"选项里键入“2”,然后返回刚才的“Project(Activ:F.E.A.R)”,点击"Start"就完成了。
/ e. O7 k8 ?/ c( T- n' U ! Q+ p7 j. {3 i/ v0 {
下面是应用该软件前后帧速率的对比:
5 B# t) F% Y8 h9 u, x / n1 H, J, j2 i& q- y9 F/ g
应用前 " Z% {7 H: Y7 A* }
# N2 w- \. t! D. R/ F4 Z4 P" N
. h- N% F" Z3 U5 D % k8 @' O1 C# {0 H9 e' K6 x
应用后 $ @" ^& b, e! i8 C1 |( a5 i" P
6 `" h: S* D" ?
7 O7 ^: b- Y: t" m" ]1 Y8 [
其它设置为:6 e% w; g4 B- B, ]
8 D: Z- d3 ?: H) K) _. r1 M 分辨率: 1280x1024
, s! o2 B8 H8 b- j @2 q ' m- h1 \( k; d6 K
显卡设置: All max, SoftShadow disabled
, t9 r0 L0 U4 g* I/ D/ O
8 @3 A- {4 J& O2 a: V AA/AF: 0xAA / 8xAF: ~/ ]- s8 t( O8 k% ^0 ~
$ R/ _7 z$ |0 n- u1 x9 B% g: E 上两图中“Maximum”一项没有发生变化,这是由于启用同步刷新的结果(最大也只能跟显示器刷新率一致),但另外两项帧速率则大大提高了,游戏变得更加顺畅。
/ n2 R0 c* W' H ( E6 W5 ^' J( g/ b: U
注意事项:; ~7 E# w E' W$ X0 a2 Y0 v* k
7 t- y1 l' a7 J! c3 H1 V9 {+ N8 w4 O
三个缓冲区似乎可以带来更流畅的游戏画面,但这是有代价的,比两个缓冲区需要50%的额外缓冲空间。譬如,在1600x1200的分辨率下,每帧画面需要7.32Mb的空间存储,双缓冲区需要14.64Mb的显存,三缓冲区则需要21.96Mb,对于目前的显卡来说只是小菜一碟。但一旦开启4x FSAA后,则需要多达87.84MB的显存,超过一块256Mb的显卡的1/3显存空间,如果游戏需要200Mb的空间存储条纹、光暗、冲击等细节,开启三个缓冲区后游戏玩起来必定经常滞胀。如果你发现玩游戏时系统需要频繁地访问硬盘,这可能就是开启三个缓冲区的负面后果了。
& ~+ z; D* _' k2 { , N8 v- {/ V* ]0 V K1 A% g, r
总结:如果你实在不能忍受同步刷新后帧速率的下降所带来的画面断裂,DirectX Tweaker是一个不错的选择。 ftp://majorgeeks.mirror.internod ... tools/dxtweaker.zip[free][/free] |