发新话题
打印

[分享] 解开垂直同步之谜

解开垂直同步之谜

垂直同步,到底什么是垂直同步?* F, }9 `  w3 K8 j0 P
: B' l% Y! c+ ~: E. \" O
  几乎所有试图研究cs的fps的朋友都将不可避免的面对这样一个名词----垂直同步
% |; z/ ?. n; q# j+ Y# n6 N1 Z+ h4 t8 X7 b) b" s
  到所有的cs专业论坛去问如何提高fps得到的绝大多数回答也基本都是----关闭垂直同步1 e% I9 O  c5 c- u2 y; N
0 G4 Y$ I0 H6 q6 x
  当大家关闭了垂直同步得到了较高一些的fps后你知道为什么么?3 v3 n: `1 B6 w# q

7 z' M$ g9 |1 z0 U% b) v4 _1 L  今天飞扬和大家一起探讨这个看似简单的名词垂直同步. Y+ S& c9 j% D4 V0 F

8 T" i2 p, a! t) P* w: ]4 ]% e  本文与cs关系不是非常紧密请朋友们选择阅读/ w# I2 B" u* k; E3 i; @

! C6 ]  s; V$ k+ u1 D7 w- s  1。要知道什么是垂直同步必须要先明白显示器的工作原理
+ I+ T" l' l, N  R8 A2 y' N6 B; [( L( D# e, a
  显示器上的所有图像都是一线一线的扫描上去的,无论是隔行扫描还是逐行扫描,显示器都有2种同步参数-----水平同步和垂直同步
1 I1 J& ]" b9 q$ O" ]: E
. m' h- D9 ^( U1 h) S: H0 K  2。啥叫水平同步?啥叫垂直同步?2 V: }4 l2 J& A$ Y% C% l

* `, E# v- T& \# ]' a7 t  垂直和水平是CRT中两个基本的同步信号,水平同步信号决定了CRT画出一条横越屏幕线的时间,垂直同步信号决定了CRT从屏幕顶部画到底部,再返回原始位置的时间,而恰恰是垂直同步代表着CRT显示器的刷新率水平!4 L& A7 d: l; J, F  v- w

2 @0 m# S0 H+ S  v  P  3。关键部分
* u7 p! `& ~8 |! H1 n$ G0 {" q+ S# h9 a' p9 w* E/ Q5 u
  为什么是否关闭垂直同步信号会影响我们cs中的fps数值?' P1 a+ k/ J, P
! s% j+ Y' A( D+ L
  道理一点都不复杂,首先我们平时运行**作系统一般屏幕刷新率是多少?大概一般都是在85上下吧,那么显卡就会每按照85的频率时间来发送一个垂直同步信号,信号和信号的时间间隔是85的分辨率所写一屏图像时间。! H! L: f# |% [. E) u  o/ K
- p2 N) w+ r' C* {$ K, z, [2 V: s
  如果我们选择等待垂直同步信号(也就是我们平时所说的垂直同步打开)& U6 F4 |+ ]3 }; L
& s" a' p! O. t4 t/ C) J) L
  那么在游戏中或许强劲的显卡迅速的绘制完一屏的图像,但是没有垂直同步信号的到达,显卡无法绘制下一屏,只有等85单位的信号到达才可以绘制。这样fps自然要受到**作系统刷新率运行值的制约。
7 u5 V0 `& ]) r+ M; g+ G) ^" \: f% |$ c, b3 A0 L( W0 q
  而如果我们选择不等待垂直同步信号(也就是我们平时所说关闭垂直同步)# J9 Z; f: p. x5 Z9 u
+ Z6 @! J. H9 W' g7 o; x! z. m# r
  那么游戏中作完一屏画面显卡和显示器无需等待垂直同步信号就可以开始下一屏图像的绘制自然可以完全发挥显卡的实力。9 [( u3 o( x- [3 C6 q$ M9 ^& g, n
9 ^% a& Y6 ?+ u5 D. b" m' n( q
  但是但是但是不要忘记正是因为垂直同步的存在才能使得游戏进程和显示器刷新率同步使得画面平滑使得画面稳定。取消了垂直同步信号固然可以换来更快的速度但是在图像的连续性上性能势必打折扣。% ^: o% n7 @# ~% V* d6 v
+ w* q% P; B( B& p
  这也正是很多朋友抱怨关闭垂直后发现画面不连续的理论原因!' A; V  r2 v1 A( E! ]/ S2 r: i
$ B' ?6 P5 G, W  m$ \. y
  在Window2000或XP下,打开垂直同步并使FPS超过60的方法, B) I: h  W& i+ v
. H  V# Z# _+ _; R
  以前,对于在Windows2000或WindowsXP上玩CS的人来说,是否开显卡的垂直同步是个两难的选择。不开垂直同步可以得到更高的FPS,但画面老是抖动,打时间长了眼睛很累;开了垂直同步,FPS就肯定超不过60。我自己为这事苦恼过很长时间,一直没找到好的解决办法。后来苦心钻研了一些资料后才找到问题所在。可能有人已经知道怎么解决了,但我相信还有很多朋友不知道该怎么办,因此把解决办法公布,希望能对大家有所帮助。
& I& |, N0 d2 [( Y
) W) l8 R: p$ _% Y+ `4 N! Y9 g  在Window2000或XP下,开垂直同步后FPS超不过60的原因是:Window2000或XP在这种情况下会把游戏中的FPS设定为Windows的缺省值60,再好的配置也没用。( z- q( h3 ]) [! ^* w
7 U  e% t9 `6 n2 p7 {4 O* j
  解决这个问题的办法很多,可以用第三方程序如PowerStrip等,但这种办法需要外挂程序,可能不安全。最近,我终于找到最根本的解决办法,就是在直接在注册表里把Windows的缺省值改成100(或更高,只要你的显示器支持就可以)。请千万注意:在修改注册表前,一定要确认你的显示器在不同的分辨率下所支持的最高刷新频率。比如,我的电脑在1024*768的分辨率下能达到100Hz的刷新频率,我玩CS也是在这个分辨率下玩,所以,我才敢把Windows的缺省值设为100。另外也请注意,这样修改完注册表后,你电脑桌面的分辨率和刷新频率也会被限定为这个数值。1 S* M; b8 A4 @/ j' s! a
4 @3 @# u& P: }. R8 H7 f- Z& J
  修改注册表的方法如下:
. j) `# f9 [( D1 p0 h) _( f- R5 _' r; g  p# g9 ^1 T
  Openregeditandfindthiskey:% L2 \  p( ?( Y6 ~

( B8 T' i) N# Z4 ?$ n1 i  运行regedit命令进入注册表修改界面;
2 P( N/ G1 e2 m4 b; \1 u/ m/ n! A1 o3 J8 Q
  进入[HKEY_LOCAL_MACHINE\system\CurentControlSet\Control\Class],打开"Class"键,你将看到一大排的键,类似于, X# y: n5 |( d/ |8 `9 Q# |

% w4 M( i( s$ I& Y2 }- l! N  {4D36E96E-E325-11CE....}
7 H9 K+ y4 H# n$ O: \- e" w, P" j( M9 Q2 N' G
  如果你选中其中一个键你将可以看到一些键值,如"Default"、"Class"等,并指明设备的种类,如"Modem","Keyboards"等,逐个打开这些{4D36E96E-E325-11CE....}键,直到看到"Class"的键值是"Monitor"。好的,我们已经找到控制显示器的注册信息了,接下来就是在这里面该缺省值了。
/ @+ p2 j$ R- z, C5 d7 u9 ]3 B6 f( W: l
  打开你刚找到的那个键,里面至少应该有1个键,叫做"0000",这里也可能有其他的键,如"0001"、"0002"等。如果里面只有个"0000",那就简单了,你直接在"0000"里按下面的方法修改就可以了。如果有多个键,你就必须逐个找出来哪个键是控制你的显示器的,方法是逐个键地按照下面说的“修改缺省值的**作”进行修改,修改后立即用下面说的“检查缺省值是否修改”的方法检查,如果相符就说明这个键是控制你显示器的,否则就不是。
8 A, u) {/ l/ L' H8 S, T( p3 g- e1 ?3 z# E2 Q) K" i
  “修改缺省值的**作”方法:- ^& s. J4 ?3 J

$ M: U: @# {+ k  打开"0000"或你找到的其他的键,你可以看到里面有个"MODES"键,打开它你将看到一个键显示的是你的显示器的最大分辨率,如"1600,1200",现在假设你要在1024*768的分辨率下达到100Hz的刷新率,那么**作如下:在"MODES"下增加一个键叫做"1024,768",在"1024,768"键里增加一个键叫做"Mode1",键值设为"100-100,100-100"。修改缺省值得**作完毕。0 d% }! u/ r1 q* u. T  N6 W
3 n$ ^3 P: ?. m1 {7 C  q7 k
  “检查缺省值是否修改”的方法:3 {3 W3 B3 }+ \  e' s2 z

3 U9 d5 T0 t# h) H  进入"Displayproperties->Setting",看分辨率是否为你设定的值,如果不是那么说明你修改的那个类似于"0000"的键不是现在控制你显示器的键,,如果分辨率是你设定的值(如1024*768),那么再进"Advanced->Monitor"里面看显示器的刷新频率是不是也是你设定的值,如果是,选中"Hideallunsupportedmodes"后你的刷新频率应该只有一个值可以选择,就是你设定的值(如100Hz)。这说明你修改得正确。
+ t7 F6 j) H+ z: o% i* O) m; T, u1 i5 G: ?- `+ v
  总结:4 t0 L, k* c2 D) ^8 k* q, T
+ o$ x7 K: \0 H0 W
  修改后,你进入游戏后无论游戏是用Direct3D还是OpenGL,你的FPS都可以超过60了。这个修改方法对Windows2000和WindowsXP都有效
赠人玫瑰,手有余香。

TOP

发新话题