游戲跑分新視角:細看一秒內幀數變化
編者按:從游戲評測出現至今,FPS(Frames per Second,每秒幀數)一直都是我們衡量硬件表現好壞的標準。毫無疑問,在絕大多數情況下,FPS的確可以作為游戲性能的標桿。但是,經歷了長久的測試歷程以及數以萬計的幀數統計之后,部分玩家已經開始注意到,實際獲得的游戲體驗和表面得出的FPS數據并不完全相符。
是測試數據有誤,還是我們的評定標準本身就存在缺陷?FPS真的能代表一切嗎?近日,國外同行TechReport撰文,詳細解答了我們以上的疑問,深入探究了FPS的一些弊端,并且提出了全新的游戲測試理念。當然,還有更多的問題得以爆料。(以下為全文翻譯,部分內容進行了調整。注意,本的主要側重于新游戲測試理念的闡述,而并非顯卡跑分PK。)
本文的初衷其實來自一個簡短的談話。去年秋天,我和曜越科技(Thermaltake)公關Ramsom Koay一起共進晚餐的時候,被問及了一個看似簡單但又不太好回答的問題:既然一款主流顯卡就能在多數游戲中提供基本的流暢度(30 FPS以上),為什么還有那么多人還要買更快的顯卡?更高的FPS究竟能代表什么?誰需要它呢?
表面上,我在這方面是專家。但打心底來說,問題到來那一刻我并沒有做好準備去如何回答。雖然有些突然,我還是簡單思索了一下然后給出了我自認為的非常好的答案,也無非是一些關于避免卡頓以及保持一個穩定的游戲畫面等等。不過說完這話之后我就意識到了不太妥當,因為在我們以往的顯卡評測中,關于這些我們并沒有給讀者一個合理的闡釋。
實話說,這個問題一直讓我很糾結。雖然接下來的評測任務量一直不小,但是我還是抽出一些時間改變了一下測試流程,將Fraps的FrameTimes功能啟用,以此來記錄每個獨立幀渲染需要耗費的時間。在此之后的的每一個顯卡評測,我都會仔細的收集這些數據。(雖然這樣很耗時,但對于這篇文章卻是至關重要的。)
到上周這一工作算是告一段落。接下來我抽了一部分時間,將這些數據進行細化整理。最終的結果是這些數據相當有啟發性,甚至讓人有些擔心(對于我來說),因為它直接顛覆了我們以往評測的一些結論。但是,我認為這些結果非常值得分享。實際上,它甚至可能會改變你對于游戲測試的固有理念。
毋庸置疑,幾乎所有的游戲硬件測試都采用同一種評估方法,那就是大家公認的FPS(Frames per Second,每秒幀數)。毫無疑問的是,FPS是一個出色的即時性能匯總,表達準確而且簡單易懂。不只是游戲,FPS的概念還常見于我們所熟知電影及電視,比如電影/電視分別以每秒24/30張畫面的速度播放,也就是一秒鐘內在屏幕上連續投射出24/30張靜止畫面,所以播放速率就是24/30FPS,游戲畫面也與之同理。(通常每秒播放24張畫面以上,根據“視覺惰性”,即視覺暫留現象,人眼就認為是連續的。)
當然,關于利用FPS進行測試的爭論一直存在,尤其是我們常見的平均FPS更是受到很多質疑,因為其衡量的太廣泛了。事實上我們也從這些討論中汲取了一些有用的東西并付諸實施,比如在游戲測試的時候同時獲取平均FPS和最低FPS,甚至可能的時候還提供了單位時間內的FPS變化圖表。相比干巴巴的平均FPS,我相信這些信息更能夠幫助讀者更好的理解游戲性能表現。
即便如此,這種方法仍舊有一些明顯的缺點。因為經歷多次的測試之后,我們發現有些時候這些結果和我們的直覺體驗并不完全一致。最根本的問題在于,無論對于電腦時間還是人類視覺感知來說,一秒都太長了。一秒內的平均結果可能會掩蓋一些系統性能突發變化,而這對于游戲體驗來說非常重要。
為了說明,我們先來看兩個例子。雖然經過加工,但這些結果卻是基于我們多年來的游戲測試真實數據。下面的圖表縱軸以毫秒(ms)為單位表示所需要的時間,而橫軸則表示一秒內兩款不同顯卡所提供的一系列幀數。
顯而易見,GPU1在大多數情況下跑得更快,每幀所用的時間較短(絕大多數都在25ms以下),而CPU2要慢一些,因為每幀時間一直穩定在30ms左右。
但是,我們可以看到GPU1在運行這個游戲的時候有一個明顯的問題(假定說是由于驅動里糟糕的顯存管理引起的紋理載入毛病造成的,也可能是硬件方面的原因),那就是其中一幀所耗費的時間出奇的長,幾乎達到了將近500ms,像是被卡在那兒了。如果你是這個游戲的玩家而碰巧遇到這個問題,一瞬間肯定會卡的要死。而如果這個問題經常出現,游戲也就基本不能玩了。
而這方面GPU2就要好了不少,雖然平均FPS可能要比GPU1少,每幀耗費的時間都差不多,并且能夠提供一個持續穩定的游戲畫面輸出。那兩款顯卡的平均FPS到底是多少呢?
可以看到,在我們統計的時間內,兩款GPU的平均FPS幾乎相同。如果就此而言,那么兩款顯卡的性能表現本質上沒有區別。而正是我們使用了平均FPS,才使得GPU1中的一個致命缺陷被掩蓋了起來。
以上只是一小段時間內的反映,如果說GPU1在整個測試中的其它場景也時不時遇到類似的延遲,但耗費時間可能沒有這么大,那整體幀數可能會達到50FPS的樣子,最低幀數也有35FPS。而根據我們傳統的思維,這是一個看起來相當不錯的成績,但是實際游戲體驗的糟糕程度就可想而知了。
回歸到主題,FPS對于性能評估的意義雖然重大,但短板也是明顯的。而解決以上問題最簡單有效的方法就是將單位時間放大細化,就像我們剛才做的那樣,把每幀所耗費的時間獨立呈現。事實上這么做并沒有什么難度,想必那些游戲開發商們已經研習多年。
所以,對于我們自己來說,也是時候轉化一下認知理念了。下面表格里的數據可能會有一些幫助,詳細列舉了部分以毫秒為單位的幀時間(越低越好)所對應的FPS速率,這里的條件是假定完整的統計時間為1秒。這個表已經包含了許多閾值,比如其中16.7ms相當于穩定的60FPS。打個比方來說,目前大多數LCD的的刷新率就是每秒60次(60Hz),所以每次刷新的時間高于16.7ms的閾值就不能提供穩定的畫面輸出。
|
Frame time in milliseconds |
FPS rate |
|
8.3 |
120 |
|
10 |
100 |
|
16.7 |
60 |
|
20 |
50 |
|
25 |
40 |
|
33 |
30 |
|
42 |
24 |
|
50 |
20 |
|
60 |
17 |
|
70 |
14 |
經過以上幾點介紹,下面我們就來看一下實際游戲測試中的一些數據,看看我們能夠從中獲得什么。
第一個實例來自我們之前的GeForce GTX 560 Ti評測。雖然測試發布較早,測試驅動也有些老,但并不影響驗證我們下面采用的新方法。測試游戲使用的是《戰地:叛逆連隊2》,畫質設定如下圖所示。
雖然一大推數據看起來相當繁雜,但在準確的繪制每款顯卡幀數時間的時候卻并不十分困難,這個時候我們之前工作的效果就體現出來了。
正如你所見,即便各項數據糾結到一塊兒,但異常值(耗時較高的幀數)還是能一眼就看出來。另外可以看到,高端卡能夠在單位時間內輸出更多的幀數,而且每幀耗時交少,所以數據線也要更長更低。
另外,競爭對手之間的數據比拼可以在圖中非常直接的體現出來。總的來說,這種方法相當直觀而且簡單易懂。比如上圖中的GTX 560 Ti在2150-2250幀數范圍之間明顯更快,在500幀左右HD 6870有一個明顯的異常值等等。接下來我們將這些數據放大,進一步深入觀察。
這些放大數據和我們之前的數據基本對應,盡管HD 6870那個異常值看起來并沒有那么長。很明顯,兩款顯卡的差別如果采用FPS是無論如何也無法體現出來的。
另外,我們看到在58ms異常值之后的那兩幀出現了突然的回落,延時非常低。之所以會出現這種情況,是因為顯卡采用了三重緩沖技術,也就是每三幀可以同時渲染,所以后兩幀并不需要等待前一幀的延時。雖然可以把這三幀看做一個整體,而且平均耗時也只有23ms,但是只要那個58ms延時存在,就會對實際游戲的流暢度造成一定影響。
實際上,我們并不想夸大類似一個單獨的突發幀延時的影響,但是借助已經在錄的眾多數據,可以看看還有沒有類似的情況發生。
我們將以上八款顯卡60秒內超過50ms延時的幀數列舉出來。可以看到,四款A卡中除了HD 6970之外,都出現了4個以上的異常值。而與之相反的是四款N卡類似的情況則沒有出現一次,即便是老邁的GTX 260也是如此。
比如對反應時間要求極高的聯機游戲玩家,穩定的幀數時間就顯得尤為重要。那么參考我們上文提供的數據圖表,將幀數時間降低到20ms以下(對應50FPS),可以輕而易舉的選擇出合適的顯卡。
結果相當明了,只有GTX 570和HD 6970(稍有一些)兩款顯卡幾乎沒有20ms以上的延時幀。或許看完這些對比之后還是沒有一個清晰的概念,這些數字到底有什么意義呢?
回到文章開頭我們提到的問題,之所以許多人熱衷于高端顯卡,就是為了獲得更好的游戲體驗。而更好的游戲體驗,就是建立在顯卡在單位時間內提供穩定的幀數輸出的基礎上,每幀占用更少的延時時間。而這遠比單純的一個FPS數據更有意義,也更加客觀。
下面我們就將篩選條件進一步提高,統計出每款顯卡99%的幀數中的最低耗時時間(以下圖二為例,GTX 570的99%幀數耗時都在18ms以下),并據此對比一下各款顯卡的FPS排名。
兩種測試方法下,各款顯卡的排名基本一致,差別程度也比較相仿。從某種意義上來說,這些顯卡在平衡FPS和每幀耗時之間做的不錯。如果這樣來看,傳統的FPS并沒有什么問題,高FPS顯卡能夠獲得更低的幀耗時,反之亦然。那么這種新的測試方法又有什么意義呢,難道僅僅是為數據分析提供便利嗎?先別急,下文便見分曉。
上文中我們的新方法和傳統方法測試得出的結果排名基本一致,或許會有讀者質疑這種方法的實用性。不過別忘了,到此為止我們僅僅測試了單塊顯卡,而多卡并聯系統還只字未提。結果又會怎樣呢?
以下多卡測試數據來自我們之前的GeForce GTX 590評測。和前面一樣,測試游戲同樣是《戰地:叛逆連隊2》,這一次我們采用了更加符合多卡系統定位的2560x1600分辨率。
測試方法與上面的單卡測試相同,具體結果如下:
可以明顯的看到,多卡的數據走向與單卡差別非常明顯,形狀也不再是一條線,而且突發幀的數量大大增加,這究竟是怎么回事兒?同樣,我們將這些繼續將這些數據放大,更直觀地觀察。
同樣的,三款單卡看起來還比較正常,總體來說比較問題,而且突發幀數量并不多。
從GTX 560 Ti SLI身上就已經開始顯現出較大波動,總體上遵循一高一低的趨勢,下面的多卡系統莫不如此。
已經不止一次的聽到關于多卡系統的Micro-stuttering(下文會具體解釋)問題了,這次算是一個集中的反映。需要清楚的是,我們這里看到的很像是多卡系統工作方式的一個人工還原。
不管是AMD還是NVIDIA,在CrossFire/SLI多卡系統中都將AFR(Alternate Frame Rendering,交替幀渲染)作為首要渲染模式。顧名思義,比如在雙卡系統中,AFR就是將偶數幀交給GPU1渲染,而奇數幀則安排給GPU2渲染;或者說把第 n 幀畫面指派給 GPU1渲染,把 n+1幀指派給 GPU2 渲染,使幀數渲染交替進行,從而充分利用多卡系統的并行幾何處能力。(三卡或四卡的原理一樣,渲染交替進行。) 雖然,CrossFire/SLI同樣支持其它一些負載平衡渲染模式,比如SFR(Split Frame Rendering,分割幀渲染),但效率方面并不如AFR。
雖然這些基本原理非常簡單,但要在多卡系統中做到負載平衡卻相當不易。首先,每一個獨立的幀從渲染原理上來看就是一個需要高度平行的任務,需要高度平行的天性使得幀與幀之間的平行也相當拿捏,所以保持幀間的同步很是困難,更不用說多卡之間的負載平衡了。(比如GPU1已經完成了1幀渲染,需要進行第3幀渲染,而此時GPU2的渲染還在進行,那么GPU1就需要等待。當然,實際的平衡負載問題要復雜的多,需要平衡算法來解決。)
另外,因為不管多卡系統中有幾款顯卡,只有主卡才能與顯示器連接,所以其他顯卡渲染的幀只能通過傳輸到主卡進行輸出。而無論是CrossFire還是SLI接口,這種數據傳輸都會耗費時間。除了幀數據,其它的一些緩存數據也需要經常在顯卡之間進行傳輸,尤其是一些高級渲染技術(比如render-to-texture,渲染到紋理)使用的情況下。而這些數據通常會使用PCI-E接口,同樣會造成延遲。
上面的圖表很好的說明了多卡系統之間負載平衡還遠遠未達到完美,需要解決的問題還有很多。不過現在,我們可以先從一些多卡系統的天生缺陷說起。
很明顯,繼續使用平均FPS去評估多卡系統的性能表現肯定是不靠譜的。因為從平均FPS很難看出高延遲幀,而這些高延遲幀卻恰恰是獲得連貫游戲畫面的關鍵因素。我的感覺是,在提供連貫的游戲體驗方面,幀延遲在20ms和50ms之間交替進行并不如一直穩定在50ms。
因為,從人類的視覺系統特別善于捕捉不規則的場景,也就是說一快一慢的畫面會讓人感覺相當不爽。事實上嗎,這種體驗我已遇到多次。這也就是為何很多人抱怨Micro-stuttering的原因。
當然,這些只是冰山一角。問題的復雜性要遠比這些圖表展現的高的多。關于這個問題我們接下來會進一步闡釋,但現在,我還是想把這些數據繼續放大,看看還有那些問題。
這里有一個進一步分析這些數據的原因, 因為我相信這里看到的問題并不完全依賴于micro-stuttring。如果你看看我們之前完整的測試圖表,就會很清楚的看到這個趨勢:多卡系統明顯要比單卡產生更多的延遲幀。平衡多卡之間的負載需要更多的系統資源消耗,以超過50ms延遲幀的數量來看,同樣型號的單卡要明顯好于多卡。
如果我們將閾值降低到20ms,這時多卡系統就看起來好多了,尤其是SLI。雖然我們之前也說到了Micro-stuttering可能會引起各種各樣畫面的不連貫,但只要高延遲幀的數量不是過多,多卡系統依然能夠在多數情況下比單卡表現的好。
上面兩張圖算是對我們的新測試方法最好的回報了。在前面單卡測試中,兩種測試方法各款顯卡排名鏡像排列,而這里情況就大不一樣了。比如采用FPS標準衡量,HD 6970 CF排名第二;而到了“99%幀時間”方法中卻跌倒了第四位。另外可以看到,HD 6870 CF的FPS表現相當不錯,GTX 580也屈居之后;但是在第二種方法中卻排名墊底,甚至還不如GTX 570。
現在還很難說這種新方法就是衡量顯卡性能的非常好的途徑,但至少可以肯定的是,作為考量顯卡幀耗時的一個指標,它要比傳統的FPS更加出色。換句話說,這種方法對我們的玩家更加負責、更加中肯,即便表面看起來有些呆板。
為了更好地反映這種新方法的作用,除了“99%幀時間”,我們還非別統計了50%、66%、75%、80%、90%、95%、98%幾個范圍內每組顯卡渲染幀的耗時。雖然我并不建議將來的顯卡評測都采用這種方式,但從說明問題方面來看,還是相當直觀的。
從上圖中不難看出,想要對比兩組顯卡相當簡單。比如在50%的幀數范圍內,HD 6970 CF的幀延時要明顯低于GTX 590,在提高幀數比例之后,劣勢就慢慢顯現出來。再比如,GTX 570 50%的幀數延時大大高于HD 6870 CF,但提高到99%的幀數之后,就基本打個平手了。
當然,僅僅靠一款游戲很難說明問題,接下來看看其他游戲中多卡并聯是否還是存在類似的問題。下面這款游戲是《子彈風暴》,為了區別于《戰地:叛逆連隊2》,我們使用了不同的測試方法:不再使用固定的場景,而是在一分鐘的時間內,在同一關卡內試玩5次,選取其中一次的統計結果。這也就意味著測試結果的變數會更大。
不管是什么樣的原因,相比單卡,多卡系統出現了幀延遲波動問題多多少少都會出現。從以上測試結果來看,除了GTX 580 SLI和HD 6970 CrossFire稍微好一些,其它幾組顯卡的波動都不小。雖然這只是一小段測試的數據,隨機性比較高,但我的感覺是即便跑完整個側這種問題依然無法避免。
按照慣例,我們將這些數據進行一步分析:
由于GTX 560 Ti表現太糟糕,50ms以上的延時幀就超過了500個,所以這里就不做討論了。坦白說,大多數多卡并聯對高延時幀的抑制還算不錯,唯一的例外就是HD 6870 CF,雖然沒有GTX 560 Ti那么差勁,但50%以上幀數延時都接近35ms。其中的原因不太好說,但我們分析可能是顯存過于吃緊造成的。
有個問題不得不說,在做類似的統計的時候,一定要注意設定的閾值。比如上圖中GTX 580高于20ms的延遲幀要明顯高于GTX 570,但以50ms為閾值的話,結果恰恰相反。一般來說,50ms的閾值對于日常測試應該就足夠了,而20ms就顯得稍微有些苛刻了。
在《子彈風暴》測試中,傳統的平均FPS和“99%幀時間”兩種方法獲得的顯卡排名基本上一致,但HD 6870 CF算是個例外,從第五名跌倒了第七。而我想說的是,在“99%幀時間”中我們看到了GTX 560 Ti是多么不濟。雖然平均FPS也達到了25幀左右,但經常出現80ms以上的幀數,玩游戲自然不會流暢。
《星際爭霸2》和其它游戲有些不同。雖然同樣采用Fraps進行幀數記錄,但測試過程中采用的是播放錄像Demo,而并不像前兩款游戲中我們親自去試玩。這里的錄像Demo為33分鐘,由于時間較長,所以每款顯卡也不再測試五遍。33分鐘所產生的幀數相當龐大(有些顯卡達到了140,000個之多),也不能全部都統計在一張表內,這里每個表我們只選取了6500個。
有些意外的是,前面兩款游戲中幾款單卡的幀數耗時幾乎沒有什么波動,但這里…….
可以看到,除了GTX 570還好為好點,無論是GTX 580還是HD 6970均是以三到四幀為跨度出現較大跳躍,尤其是GTX 580波動的周期相當有規律。HD 6970雖然沒有那么規則,但情況也比較類似。我反復猜疑其中的原因到底是什么,有可能是三重緩沖的影響,也可能是游戲引擎以周期工作,或者是這兩方面的綜合。這里也充分說明了一個道理,要獲得一個穩定的幀數延遲,單單靠SLI或者CrossFire的優化還是遠遠不夠的。
多卡系統中,SLI并沒有像NVIDIA單卡中波動那么明顯,反而趨于緩和;而CrossFire的情況與單卡很是類似,按照3-4個幀周期交替進行。雖然這里我非常想說明以上問題到底為何,但目前還很難給出一個合理的解釋。
單從《星際爭霸2》這款游戲來看,相同級別下,N卡在避免高延時幀方面顯然做的更好。但在6500個統計幀數之內,還是有相當多的幀延時超過50ms,即便是GTX 580 SLI也是如此。這里可能與CPU或者其它系統配置的限制有很大關系,可以肯定的是相對較少的高延遲幀能夠幫助我們獲得更好的游戲體驗。
事實上,文章一開始并沒有打算深入探討多卡并聯系統的Micro-stuttering(幀延時波動,實在找不到一個合適的詞翻譯…)。新測試方法幫助我們發現許多有意思的問題,也說明我們的方向沒有錯。但是,這個Micro-stuttering卻使得我們的任務復雜了不少。

這張圖可以比較直觀的反映Micro-stuttering(X軸以ns為單位,Y軸以幀數為單位),多卡系統單位時間內幀延時會上下波動。
很自然,我們已經聯系了主要的顯卡芯片廠商,看看他們對這個問題的解釋。但是令我們意外的是,不管是AMD還是NVIDIA都直接而且坦率地承認多卡系統的Micro-stuttering確實存在,而且是一個亟待解決的問題,他們也已研究多時。但有趣是,對于以上的多核心產品(比如HD 6990、GTX 590)或者多卡解決方案(SLI、CrossFire),AMD和NVIDIA都沒有明確告知消費者這個問題的存在。相當諷刺,不是嗎?
AMD的David Nalasco在評估多顯卡派遣幀任務的時候就發現了Micro-stuttering,他注意到幀數延時的波動隨著游戲的反復進行,因為幀與幀之間的相對時間是可變的。而且他聲稱這個問題并沒有普遍性。
根據有限但還算公平的測試,我們對于這個說法基本認同。首先,盡管幀延時波動隨著時間一直存在,但它更傾向于既定的而且反復進行的測試場景。其次,波動似乎在有相對性能有限的平臺里程度更深。例如,我們在相同設置下測試相同的游戲,中端的HD 6870 CF所體現出來的幀間波動就要比更高端的HD 6970 CF更加明顯。同理,GTX 560 SLI和GTX 580 SLI的情況也是如此。如果這一狀況是多卡系統的一大特性,那顯然是負面的。第三,在我們的測試數據中,CrossFire在抑制幀延時波動方面明顯沒有SLI好。雖然我們還不能說以上三點具有普適性,但知道從我們的測試中得到的結果就是如此。
Nalasco告訴我們一定程度上抑制幀延時波動有許多方法。你或許已經猜到了,那就是“垂直同步”。“垂直同步”啟用之后,可以阻止當前幀渲染完畢后GPU跳轉到不同的資源緩沖區(已完成新的幀渲染),而幀緩沖區跳轉被推遲到下一次屏幕刷新。不過Nalasco也指出開啟“垂直同步”也只能在“某些時候”有效果,換句話說也就是不一定完全有效。所以,我們認為關于“垂直同步”對于Micro-stuttering的精確影響還很難預測。
Ps.如果選擇“等待垂直同步信號”(也就是“打開垂直同步”),顯卡繪制圖形前會等待信號;性能強勁的顯卡則會提前完成繪制,并在下個信號到達之前等待。此時,游戲的fps值會受顯示器刷新率的制約。對于高端顯卡而言,這限制了其性能的發揮。而如果選擇“不等待垂直同步信號”(也就是“關閉垂直同步”),那么顯卡繪制完一屏畫面,不等待垂直同步信號,就開始下一屏畫面的繪制,自然可以完全發揮顯卡的實力。但是,不要忘記,正是因為垂直同步的存在,才能使得游戲進程和顯示器刷新率同步,使得畫面平滑,使得畫面穩定。取消了垂直同步信號,固然可以換來更快的速度,但是在圖像的連續性上,性能勢必打折扣。這也正是很多朋友抱怨關閉垂直后發現畫面不連續的理論原因。
有意思的是Nalasco提到的另一中可能:一種“更加聰明”的“垂直同步”,可以通過人的視覺感知來控制幀的跳轉。聽起來很不錯,這種方法也有潛在的可行性。但Nalasco只是說了一些未來的構想,對于現實技術只字未提,他也承認AMD到現在也沒有一個十全十美的解決方案。
另外,他還透露,未來AMD會在這方面投入更多精力,因為將來多卡系統肯定和LInao APU有很大關聯,而且是不對稱的結構,相比目前的多卡系統產生Micro-stuttering的幾率更大。
而NVIDIA的Tom Petersen也進行了如下的圖文闡述,幫助我們更好的理解。

上面的示意圖表明了幀產生的流程,從游戲引擎到顯示輸出,非常有助于上下文的討論。
其中,游戲引擎包含了一系列的內部變量,物理模擬、圖形處理以及用戶交互等等。當一個幀開始渲染,圖形引擎首先將其交給DirectX API。據Petersen的說法,Fraps就是在這個時候開始時間信息記錄。接下來,DirectX將調用高級API和Shader程序將其轉換成更基地的指令,然后交由顯卡驅動處理。進而,顯卡驅動將這些DirectX低級指令轉化成機器語言交付給GPU進行渲染,最終輸出到顯示設備。
為了更好的闡述關鍵問題,Petersen定義了許多變量。比如,”Stutter”就表示游戲時間(T_game)和輸出顯示時間(T_display)之間差的絕對值、”Lag”表示”T_game”和”T_dispaly”之間的耗時、”Slide show”表示每幀渲染時間的總共耗時。按照Petersen的觀點,在這三個變量中,玩家在游戲中感知最為明顯的就是”Stutter”。
在Petersen透露的諸多細節中,最讓人印象深刻的莫過于“NVIDIA在旗下的GPU中安置了許多硬件單元用來固定多卡系統的幀延時波動”。主要原理是基于一種名為“Frame metering(幀測量)”的技術,可以在幀間進行動態追蹤。一些“表現較快”的幀會被適當延遲,換句話說,就是GPU不會直接跳轉到新的緩沖區,從而保證渲染后的畫面能夠均勻地進行顯示輸出。而這些延遲會根據幀率的快慢在特性的時間進行調整。據稱,這種“Frame metering(幀測量)”技術至少在NVIDIA G80時代就已經開始運用了。
現在,注意一下其中的含義。因為這種延遲測量是大概是在T_render和T_display之間進行的,所以Fraps根本不會進行記錄。這也就意味著我們之前的SLI測試數據沒有將這一過程展現給讀者。呈現在他們面前的是表面看起來波動不大,而非一高一低交替進行的幀數流。
雖然“Frame metering(幀測量)”看起來相當不錯,但也包含了一些折中。為了平衡波動,NVIDIA大大提升了介于幀渲染完成到顯示輸出的延遲時間(lag)。雖然這回造成一部分的性能損失嗎,不過在大部分情況下,當我們以毫秒為單位進行討論的時候,這些延遲并不容易察覺。所以,在沒有一個相對完美的解決方案的前提下,這種方法還是能夠起到減輕波動的效果的。
當然,這種技術同樣存在不少問題,而關鍵在于它非常依賴于游戲引擎。如果游戲引擎處理每幀的時間都完全一樣,“Frame metering(幀測量)”就能起到非常不錯的效果;反之,就只能斷斷續續地解決暫時問題,甚至可能會起到反作用。舉個例子來說,比如我們的攝像機以奇數順序12-34-56-78進行幀數抓取,而投影儀卻已1-2-3-4-5-6-7-8的方式進行播放,那看起來會是什么效果?
這些問題我們也咨詢了Petersen,他也非常坦白的表明了” Frame metering”在面對不同游戲引擎的時候將面臨挑戰。但當問及具體哪些游戲引擎能夠和” Frame metering”完美搭配,他也未能給出詳細的例子。在承認還有很多工作要做的同時,Petersent還說道:”如果我們能將所有幀都能統一(不再有波動),那絕大多數游戲就非常完美了”。言外之意,就像Nalasco說的那樣,這在業界依然是一個值得研究的課題。
好吧,我先承認下面的文字算不上全文的總結。
經歷了一大推測試數據以及和Nalasco以及Petersen的交談之后,我們有以下幾點值得闡述。最重要的一條:保證游戲中的幀率平滑將會是未來GPU性能評定的一個新途徑,而不再是僅僅衡量單純的渲染速度。就目前來看,多卡并聯系統依然面臨著很大挑戰,而單卡也遠遠稱不上完美。可以肯定的是,未來新技術以及新算法亟待應用,而GPU與游戲廠商同樣任務不輕。只有這樣,才能為用戶提供更加出色的游戲體驗。
另外,擺在我們(評測人員)的是,如何測試才能夠準確衡量幀率波動給顯卡性能帶的影響。Petersen已經告訴我們NVIDIA正在考慮做一個API,允許Fraps此類第三方程序能夠從GPU內部渲染開始讀取時間。當然希望他們能夠這么做,我們也會盡量說服AMD在驅動程序中提供類似的功能。除此之外,或許高速攝像相機在測試屏幕變化精度方面會大有裨益。(開個玩笑,這可是出錢還要出力啊。)
最后,不管何種顯卡評估或者測試,讀者的體驗才是王道。比如,我們要對一些基本問題有深刻的理解:Mciro-stuttring的問題影響到底有多嚴重?(我想回答成畫面間斷不連續更為精確,而并非“高延遲幀的潛在可能性”云云。)答案很大程度上依賴讀者的觀點,而讀者的觀點往往又依賴于讀者本身以及對問題的認知程度等等。
與此同時,我們對Mciro-stuttring問題的讀者反饋很感興趣。如果你正在使用多卡系統,你曾遇到過Micro-stuttering問題嗎?如果遇到過,多久才能看到一次,感覺如何呢?在下面的評論中發揮吧。
講了一大推,最后還是說說我們的新測試方法。盡管遇到這樣或那樣的問題,但我們還是比較謹慎樂觀地和大家分享。客觀來講,我們的新方法提供了以往傳統測試方法無法獲得的顯卡性能真實表現,并使之大白于天下。無論是數據分析還是顯卡對比,都相當直觀而且淺顯易懂。甚至,用到CPU測試中也未嘗不可。在未來的測試中,我們很可能付之于實施。也歡迎各位讀者積極反饋。總之,我們的感覺是,一旦你走進微觀世界,就很難再用宏觀的眼光去看它了。■<
關注我們


