三重緩衝 為什麼我們愛它

2021-08-26 07:12:59 字數 2991 閱讀 4272

我們往往不願過多討論哪些選項在遊戲中應該開啟。相反,我們往往把重點放在我們的評測內容上。老實說,我們對玩遊戲的建議設定與我們的評測設定非常相似,除了乙個非常重要的選項:三重緩衝(這同時意味著開啟垂直同步v-sync )。雖然這不是乙個所有的遊戲都有的選項——但它真的很必要要。我們現在來說為什麼要開啟三重緩衝以及為什麼開發商應該支援它。

對大多數遊戲玩家來說,當涉及到任何關於垂直同步(v-sync)的時候 ,都會在驅動程式或遊戲中關閉它。事實上,我們做評測時也會這樣做,因為它使我們更清楚地看到遊戲的真實性能。而那些喜歡開啟垂直同步的玩家,則是為了避免在某些情況下發生視覺「撕裂」效果。

我們想嘗試一些不同的寫作方式。下文中將包括兩個投票調查,首頁以及文章的末尾。第乙個調查報告的目的反饋我們的讀者對垂直同步、雙重與三重緩衝的了解程度。

這個投票結果取之於2023年6月27日下午5點

看完正文後後,我們的讀者可以參與另乙個投票,其目的是本文對讀者的影響是否會左右將來的遊戲設定。

首先將是審視一下雙重緩衝和垂直同步的概念,然後我們會談論三重緩衝。對於那些執著於細節的讀者(需要更多的有說服力的證據),我們將提供豐富的插圖更深入的剖析每種方法。

什麼是雙重緩衝,垂直同步和三重緩衝?

當電腦需要在顯示器上顯示東西時,它按照它的想法畫一幅需要顯示的影象(我們稱之為緩衝區buffer)並傳輸給顯示器。在過去,只有乙個緩衝區並不斷的被電腦繪製和傳送給顯示器。這種做法有一些優勢,但也有非常大的缺點。最值得注意的是,當物體在螢幕上進行了更新,他們往往會導致閃爍。

計算機在繪製的同時傳送內容。

所有插圖感謝蘿拉.威爾遜提供。

為了解決同一緩衝區內繪製的同時又讀取的問題,使用雙重緩衝,就成了最經濟的方式。雙重緩衝背後的原理是:計算機只繪製乙個緩衝區(所謂的「後部」緩衝),同時傳送另乙個緩衝(所謂的「前部」緩衝)到螢幕上。當計算機完成繪製後部緩衝時,影象繪製程式會執行緩衝區「交換」。這種交換不會移動任何東西:唯一的改變是交換兩個緩衝器的名稱,前部緩衝區成為後部緩衝區的同時後部緩衝區成為前部緩衝區。

計算機繪製後部緩衝,前部緩衝傳送給顯示器。

經過緩衝交換,程式可以開始起在新的後部緩衝區繪製同時電腦傳送新的前部緩衝區給顯示器,直至下一次緩衝區交換發生。從此一切都和諧了,恩,大多數情況下如此。

這種形式的雙重緩衝,「交換」隨時可能發生。這意味著,在電腦傳送資料給顯示器的同時,就可能發生「交換」。在這種情況下,(同一幀下)其餘的畫面根據新的前部緩衝器進行顯示。如果新前部緩衝內容與舊的前部緩衝相差很大,就會觀察到一種視覺上的「撕裂」感。這種型別的問題,常常出現在高幀率的fps遊戲中,特別是轉角處快速運動時看到。由於快速運動,每幀有很大的不同,當「交換」發生在前後差異很大的場景繪製途中,就會被察覺到同時干擾人的視覺感受。

最常見的做法是等待顯示器準備充分時「交換」緩衝器。顯示器準備充分意味著在完成繪製完上一幅影象後剛好趕上下個垂直重新整理周期將會開始。所以同步緩衝區交換與垂直重新整理被稱作垂直同步 。

開啟垂直同步確實能修復影象「撕裂」,它同時會設定遊戲的內部幀率的最大值與顯示器的的重新整理率一致(大多數液晶面板通常是60hz)。這可能會犧牲的效能:如果遊戲不能保持在每秒60幀的執行時,(影象繪製程式)會人為的增加延遲到影象幀輸出之間來達到同步效果。哪怕是每一幀所需的繪製時間超過16.67毫秒一點點(1/60秒)都可能導致效能可減少將近一半。在這種情況下,幀速率將下降到每秒30幀,儘管遊戲的執行速度極其接近60幀 。消除畫面撕裂和保持幀數一致,確實有助於增加遊戲流暢度,這是單純的雙重緩衝模式無法提供的。

同時開啟垂直同步後的輸入延遲將會成為更加嚴重的問題。這是因為人為加入的延遲增加了實際發生的事情(當幀被繪製時)和最終顯示在螢幕上的畫面的區別。輸入延遲始終存在(我們不可能在繪製的瞬間實時的反映變化),但訣竅是,儘量減少它。

我們目前的選擇乙個是只進行雙重緩衝但是會導致解決畫面撕裂問題,二是進行垂直同步的雙重快取但是會影響效能和輸入延遲。但是不要擔心,有一種選擇,結合了兩者的優點,既不犧牲畫面質量也不會影響真實的效能。這種選擇就是三重緩衝。

計算機在傳送前部緩衝時可以有兩個後部緩衝區供使用。

光看這個名字就已經很明顯了:三重緩衝使用三個緩衝區。這種額外的緩衝區使計算機有足夠的空間來鎖定乙個正被送往顯示器的緩衝區(以避免撕裂),同時也不限制影象的繪製速度(就算是有乙個緩衝區被鎖定,也能來回繪製剩下的兩個緩衝區)。軟體來回繪製兩個後部緩衝器,當每一次重新整理時,前部緩衝區就與最近完成的那個後部緩衝區交換。這確實需要一些額外的圖形卡儲存空間(大約15到25m之間),但與現代的圖形卡動輒512mb視訊記憶體來說這不構成什麼問題。

換言之,有了三重緩衝我們獲得了不開啟垂直同步時高效的效能和相似的低輸入延遲,同時還實現了開啟垂直同步時的影象質量。

現在,重要的一點是,當你看開啟了三重緩衝遊戲的「幀數」時,你將不會看到實際的「效能」。這是因為幀計數器像fraps這種只能計算前部緩衝(就是目前正在被顯示器繪製的那個緩衝)換出的次數(即是我們通常所說的廣義上的「幀數」)。在雙重緩衝時,資料顯示在每個幀繪製並被顯示器顯示的時候(也就是說,如果另一幀在下一次重新整理前繪製好了,它可能不會顯示出來)。而三重緩衝,前部緩衝在每個重新整理周期最多隻「交換」一次 。

fraps軟體仍在幕後的兩個後部緩衝區上繪製時間。這意味著一旦發生前部緩衝區交換,與開啟垂直同步的雙重緩衝不同,我們並沒有加入人為的延遲。同時也異於沒有開啟垂直同步的雙重緩衝 ,一旦我們開始傳輸乙個完整繪製好的幀給顯示器時,我們不會在中途切換到另乙個幀去。

最後講乙個三重緩衝會導致的問題。如果乙個幀只比重新整理完成晚很小一點點就被生成出來,在無垂直同步的雙重緩衝情況下 ,將在螢幕上方附近產生畫面撕裂,而其餘部分則會比三重緩衝更準確的反應實時變化。即使在這種情況下,但至少幀的部分的畫面元素雙重緩衝和三重緩衝是一致的,同時三重緩衝的延遲也非常難以察覺,至少比開啟了垂直同步的雙重緩衝延遲問題好得多。即使你認為這是無垂直同步的雙重緩衝模式的優點,這優點也是建立在很小幾率(不影響視覺的畫面撕裂)之上。

讓我們帶著這些理論通過例子來比較這三種繪製方式。

深度挖掘:疾馳的駿馬為例

比起一堆數學計算和傳統的時間圖示,我們決定採用乙個更加直觀的表現形式。在圖表中,我們會給大家演示隨著時間電腦實際的生成的影象以及最終被顯示器顯示出來的影象。希望這會有助於說明這些方法數量和質量之間的差別。

我們使用的是乙個已有的(來自維基百科上面的動畫)的「遊戲」例

觀點以及我們為什麼愛他們

今天,我想談談mysql 5中引入的一項新功能 檢視。檢視就像查詢快照。您可以將任何查詢儲存為檢視,甚至可以將帶有聯接和子查詢的複雜查詢儲存為檢視,並且mysql會將查詢結果儲存為一種可以像表一樣搜尋 在某些情況下可以修改 的格式。但是與表不同,您不必擔心更新檢視中的資料。mysql為您處理所有細節...

進擊的WebRTC 我們為什麼需要它?

有人說 2017 年是 webrtc 的轉折之年,2018 年將是 webrtc 的爆發之年。去年,webrtc 1.0 標準草案出爐,並將於今年正式發布。與此同時,越來越多的瀏覽器和廠商都開始對它進行廣泛的支援,webrtc 即將成為網際網路的基礎設施了。越來越多的創業者都在思考如何將線下互動的場...

我們為什麼要學習大資料分析?(三)

我們為什麼要學習大資料分析呢?因為大資料分析代表完美的自由職業機會。相信在不久的將來,絕大多數的勞動力不會被束縛在乙個雇主身上。人們正在穩步尋找各種各樣的收入 和方法,通過這些渠道找到完美的工作與生活平衡。資料分析,這是乙個研究數字 趨勢和資料的一般問題 為您提供了乙個完美的機會,成為世界上一些最大...