前言:垂直同步與幀數有很大的關係,畫面是否流暢實際上與垂直同步是有關係的。但究竟是什麼關係呢?這個問題其實既簡單又複雜。狗狗了一下,蒐集了一些文章分享如下。並且在我翻譯的文章《遊戲玩家的顯示卡設定指南》中也會對「垂直同步」進行分析。
前言
我們經常忽視了那些人們在遊戲中到底會開啟怎樣效果的討論,而我們只是將注意力都放在了自己的測試中。事實上,我們在基準測試中採用的遊戲設定,也正是我們在玩遊戲時候推薦採用的,但卻有乙個很重要的差別,那就是遊戲中我們會盡可能在開啟垂直同步的同時開始三重緩衝。
儘管這個設定並不是所有遊戲都支援,但它確實是需要的,我們今天就要想辦法讓玩家知道,為什麼玩家需要開啟三重緩衝和遊戲開發者應該讓遊戲支援它。許多遊戲,玩家們開啟時候對待垂直同步的方式往往是一開始就在驅動中或者遊戲中禁用。
垂直同步與三重緩衝
實際上,我們的測試中也關閉了垂直同步,這是因為我們需要看到在無限制情況下的效能情況,但是開啟垂直同步後,對於實際遊戲的視覺效果來說是有明顯提公升的,但是卻無法避免犧牲幀率。我們希望在今天的分析中作一些改變,現在我們就告訴你。
我們要告訴讀者,垂直同步到底意味著什麼,三重緩衝和雙重緩衝的區別。在閱讀完我們今天的分析後,希望讀者自己可以了解到垂直同步的重要性。首先我們先要對雙重緩衝和垂直同步有乙個概念了解,隨後我們才可以帶來三重緩衝,我們還會跟進一些更加深入的資訊。
原理
當電腦在顯示器上顯示東西時,它按照它的想法畫一幅需要顯示的影象,我們稱之為緩衝區buffer,傳輸給顯示器。在過去,只有乙個緩衝區並不斷的被電腦繪製和傳送給顯示器。這種做法有一些優勢,但也有非常大的缺點。
最值得注意的是,當物體在螢幕上進行了更新,他們往往會導致閃爍。為了解決同一緩衝區內繪製的同時又讀取的問題,使用雙重緩衝,就成了最經濟的方式。雙重緩衝背後的原理是:計算機只繪製乙個緩衝區,同時傳送另乙個緩衝到螢幕上。
雙重緩衝
當計算機完成繪製後部緩衝時,影象繪製程式會執行緩衝區「交換」。這種交換不會移動任何東西:唯一的改變是交換兩個緩衝器的名稱,前部緩衝區成為後部緩衝區的同時後部緩衝區成為前部緩衝區。
經過緩衝交換,程式可以開始起在新的後部緩衝區繪製同時電腦傳送新的前部緩衝區給顯示器,直至下一次緩衝區交換發生,大多數情況下如此。這種形式的雙重緩衝,「交換」隨時可能發生。這意味著,在電腦傳送資料給顯示器的同時,就可能發生「交換」。
在這種情況下,同一幀下其餘的畫面根據新的前部緩衝器進行顯示。如果新前部緩衝內容與舊的前部緩衝相差很大,就會觀察到一種視覺上的「撕裂」感。這種型別的問題,常常出現在高幀率的fps遊戲中,特別是轉角處快速運動時看到。
提高速度
由於快速運動,每幀有很大的不同,當「交換」發生在前後差異很大的場景繪製途中,就會被察覺到同時干擾人的視覺感受。最常見的做法是等待顯示器準備充分時「交換」緩衝器。顯示器準備充分意味著在完成繪製完上一幅影象後剛好趕上下個垂直重新整理周期將會開始,同步緩衝區交換與垂直重新整理被稱作垂直同步 。
開啟垂直同步確實能修復影象「撕裂」,它同時會設定遊戲的內部幀率的最大值與顯示器的的重新整理率一致,大多數液晶面板通常是60hz。這可能會犧牲的效能:如果遊戲不能保持在每秒60幀的執行時,影象繪製程式會人為的增加延遲到影象幀輸出之間來達到同步效果。
哪怕是每一幀所需的繪製時間超過16.67毫秒一點點都可能導致效能可減少將近一半 。在這種情況下,幀速率將下降到每秒30幀,儘管遊戲的執行速度極其接近60幀 。消除畫面撕裂和保持幀數一致,確實有助於增加遊戲流暢度,這是單純的雙重緩衝模式無法提供的。
解決延遲
同時開啟垂直同步後的輸入延遲將會成為更加嚴重的問題。這是因為人為加入的延遲增加了實際發生的事情和最終顯示在螢幕上的畫面的區別。輸入延遲始終存在,我們不可能在繪製的瞬間實時的反映變化,但訣竅是,儘量減少它。
我們目前的選擇乙個是只進行雙重緩衝但是會導致解決畫面撕裂問題,二是進行垂直同步的雙重快取但是會影響效能和輸入延遲。但是不要擔心,有一種選擇,結合了兩者的優點,既不犧牲畫面質量也不會影響真實的效能。這種選擇就是三重緩衝。
三重緩衝
光看這個名字就已經很明顯了:三重緩衝使用三個緩衝區。這種額外的緩衝區使計算機有足夠的空間來鎖定乙個正被送往顯示器的緩衝區以避免撕裂,同時也不限制影象的繪製速度,就算是有乙個緩衝區被鎖定,也能來回繪製剩下的兩個緩衝區。
軟體來回繪製兩個後部緩衝器,當每一次重新整理時,前部緩衝區就與最近完成的那個後部緩衝區交換。這確實需要一些額外的圖形卡儲存空間,大約15到25m之間,但與現代的圖形卡動輒512mb視訊記憶體來說這不構成什麼問題。有了三重緩衝我們獲得了不開啟垂直同步時高效的效能和相似的低輸入延遲,同時還實現了開啟垂直同步時的影象質量。
現在,重要的一點是,當你看開啟了三重緩衝遊戲的「幀數」時,你將不會看到實際的「效能」。這是因為幀計數器像fraps這種只能計算前部緩衝換出的次數。在雙重緩衝時,資料顯示在每個幀繪製並被顯示器顯示的時候,也就是說, 如果另一幀在下一次重新整理前繪製好了,它可能不會顯示出來。
三重緩衝,前部緩衝在每個重新整理周期最多隻「交換」一次 。同時也異於沒有開啟垂直同步的雙重緩衝 ,一旦我們開始傳輸乙個完整繪製好的幀給顯示器時,我們不會在中途切換到另乙個幀去。三重緩衝會導致的問題,如果乙個幀只比重新整理完成晚很小一點點就被生成出來,在無垂直同步的雙重緩衝情況下,將在螢幕上方附近產生畫面撕裂,而其餘部分則會比三重緩衝更準確的反應實時變化。
即使在這種情況下,但至少幀的部分的畫面元素雙重緩衝和三重緩衝是一致 的,同時三重緩衝的延遲也非常難以察覺,至少比開啟了垂直同步的雙重緩衝延遲問題好得多。即使你認為這是無垂直同步的雙重緩衝模式的優點,這優點也是建立在不影響視覺的畫面撕裂之上。
1、要知道什麼是垂直同步,必須要先明白顯示器的工作原理。
顯示器上的所有影象都是一線一線的掃瞄上去的,無論是隔行掃瞄還是逐行掃瞄,顯示器,都有2種同步引數——水平同步和垂直同步。
2、啥叫水平同步?啥叫垂直同步?
垂直和水平是crt中兩個基本的同步訊號,水平同步訊號決定了crt畫出一條橫越螢幕線的時間,垂直同步訊號決定了crt從螢幕頂部畫到底部,再返回原始位置的時間,而恰恰是垂直同步代表著crt顯示器的重新整理率水平!
3、關鍵部分
為什麼是否關閉垂直同步訊號會影響我們cs中的fps數值?道理一點都不複雜,首先我們平時執行作業系統一般螢幕重新整理率是多少?大概一般都是在85上下吧,那麼顯示卡就會每按照85的頻率時間來傳送乙個垂直同步訊號,訊號和訊號的時間間隔是85的解析度所寫一屏影象時間。
如果我們選擇「等待垂直同步訊號」(也就是我們平時所說的「垂直同步開啟」),那麼在遊戲中,或許強勁的顯示卡迅速的繪製完一屏的影象,但是沒有垂直同步訊號的到達,顯示卡無法繪製下一屏,只有等85單位的訊號到達,才可以繪製。這樣fps 自然要受到作業系統重新整理率執行值的制約。
而如果我們選擇「不等待垂直同步訊號」(也就是我們平時所說「關閉垂直同步」),那麼遊戲中作完一屏畫面,顯示卡和顯示器無需等待垂直同步訊號,就可以開始下一屏影象的繪製,自然可以完全發揮顯示卡的實力。
但是,不要忘記,正是因為垂直同步的存在,才能使得遊戲程序和顯示器重新整理率同步,使得畫面平滑,使得畫面穩定。取消了垂直同步訊號,固然可以換來更快的速度,但是在影象的連續性上,效能勢必打折扣。這也正是很多朋友抱怨關閉垂直後發現畫面不連續的理論原因!
大家跟我談下對於「垂直同步」的理解吧!
經常看到一些貌似內行的玩家建議配置低的朋友通過關閉垂直同步來提公升遊戲中的流暢度,可我卻總覺得這樣有點不妥,那麼就先說說我的理解:
垂直同步按理說應該是使遊戲中的最高幀數與顯示器的重新整理率保持一致的一種技術。現在有很多遊戲(特別是動作和球類)為了保持原汁原味都採取了限制最高幀數的做法,大多都不得超過30fps或60fps,而目前台式lcd的重新整理率基本都是75hz或85hz的水平,這樣一來如果開啟垂直同步,反而可以提高遊戲幀數(典型例子:pes2008)。但是對於那些沒有幀數限制的遊戲(fps類居多)來說,如果開啟了垂直同步,那樣就將遊戲中的最高幀數限制死了(因為重新整理率是固定的),所以就有玩家提議通過關閉垂直同步來釋放幀數,為此在某些場景中,幀數經常會飆至200以上,讓人玩起來快感十足,雖然意義不大(人眼無法辨別)!
但關鍵是,那些通過關閉垂直同步來釋放幀數的玩家,他們的電腦都有乙個最起碼的共同點:可以達到和lcd重新整理率相同的遊戲幀數。而顯示卡配置低的朋友,比如各位本友的8400mgs,我們在玩一些配置要求不低的遊戲時,如果調高畫質(低畫質那效果。。。不如不玩),經常連一些遊戲的限制幀數都達不到,更別談和顯示器重新整理率保持一致了(雖然本本的重新整理率僅60hz),所以我認為垂直同步關不關對於我們玩這類遊戲根本沒有任何影響,因為我們的8400mgs很難達到60fps,也就不存在限制幀數的說法。當然了,對於那些沒有幀數限制的白菜配置遊戲,關閉垂直同步理應可以突破60fps的!
所以我的觀點就是:配置低的顯示卡想拖高配置的遊戲,垂直同步沒有任何效果!
VSync Count 垂直同步
出處 yesy10的專欄 韓小冬 unity3d中新建乙個場景空的時候,幀速率 fps總是很低 大概在60 70之間。我們可以關閉vsync 垂直同步 來提高幀速率。要知道什麼是垂直同步,必須要先明白顯示器的工作原理。顯示器上的所有影象都是一線一線的掃瞄上去的,無論是隔行掃瞄還是逐行掃瞄,顯示器都有...
VSync Count 垂直同步
unity3d中新建乙個場景空的時候,幀速率 fps總是很低 大概在60 70之間。一直不太明白是怎麼回事,現在基本上明白了。我在這裡解釋一下原因,如有錯誤,歡迎指正。在unity3d中當執行場景開啟profiler的時候,我們會看到vsync 這一項佔了很大的比重。這個是什麼呢,這個就是垂直同步,...
VSync Count 垂直同步
原文 unity3d中新建乙個場景空的時候,幀速率 fps總是很低 大概在60 70之間。一直不太明白是怎麼回事,現在基本上明白了。我在這裡解釋一下原因,如有錯誤,歡迎指正。在unity3d中當執行場景開啟profiler的時候,我們會看到vsync 這一項佔了很大的比重。這個是什麼呢,這個就是垂直...