影像順暢度深度解析:破解 FPS 盲點、找出影像頓呆的主因

影像順暢度深度解析:破解 FPS 盲點、找出影像頓呆的主因

ADVERTISEMENT

從人類打造出第一張顯示卡開始,廠商就不斷灌輸消費者「速度快就是好卡」的觀念,使得消費者在選購顯示卡時,以產品的效能做為最主要的選擇依據。但是你砸下去的錢,真的能全部轉換為顯示於螢幕上的效能嗎?

流暢度影響視覺感受

動畫的原理在於利用人眼視覺暫留的特性,當許多靜止的畫面連續播放時,只要速度夠快(約為每秒顯示16張畫面),就會因為視覺暫留的錯覺,誤認為畫面是活動的動畫。多數玩家在執行遊戲時,大多會調整畫面品質,將FPS目標值設在60幀,然而遇到效能偏低的瞬間,前後畫格出現的時間可能大於1/16秒,大於產生視覺暫留所需的最短時間,於是畫面還是會產生停頓感。

相信大多數的讀者都是透過FRAPS,測量遊戲進行時的FPS,姑且不論上述FPS分佈不均勻所造成的停頓感,FRAPS的運作方式只能讓我們測量到顯示卡繪製畫格的速度,而不是螢幕顯示畫格的速度。所以有時就會遇到FPS表現並無異常,但仍然會感覺畫面有所停頓,並不如測試成績般流暢。

影像順暢度深度解析:破解 FPS 盲點、找出影像頓呆的主因

▲筆者以比較誇張的方式,解釋為何瞬間FPS的落差,會造成畫面停頓感。當FPS為60幀且分佈均勻的情況,視覺感受是最好的,若FPS降至30幀,且分佈也是均勻的話,畫面看起來並不會有明顯的停頓感。然而即使FPS維持在60幀,但是前0.1秒就顯示51幀,其餘9幀剛好平均分佈於剩下的0.9秒中,等於後半部每0.1秒才顯示1張新的畫格,將造成嚴重的停頓感。

影像順暢度深度解析:破解 FPS 盲點、找出影像頓呆的主因

▲常見FPS速率比較

FRAPS的測試盲點

無論遊戲使用的API是Direct3D或OpenGL,API都會透過複雜的流程處理資料並進行運算。以Direct3D為例,當遊戲送出繪圖需求與相關資料之後,資料會先被Direct3D送入顯示卡驅動程式,並送回Direct3D的畫格佇列以及排程器,然後再次送到顯示卡驅動程式中,最後送到GPU進行運算。

FRAPS的運作原理是記錄每個畫格繪製結束後,攔截Direct3D發出的運算呼叫(present call),藉由分析運算呼叫產生的時間點,FRAPS就能計算畫格資料送入API的速度,能夠有效率地分析FPS表現。

由於FRAPS攔截運算呼叫的位置在整個運算流程的頂部,並且只能得知每張畫格進入API的時間,對於資料在API、驅動程式、GPU等階段之間發生的事,以及運算所花費的時間一無所知。此外畫格佇列與frame buffer,都具有可以暫存畫格的能力,所以各運算呼叫之間的時間間隔,並不一定等於各畫格輸出時的間格,再加上多GPU環境運算下,資源的分配及運算流程會更加複雜,FRAPS所測量到的數據與螢幕顯示的畫面會有不少落差,並不適合作為畫面顯示是否流暢的指標。

影像順暢度深度解析:破解 FPS 盲點、找出影像頓呆的主因

▲Direct3D遊戲的顯示部份處理流程如圖所示,經過繁複的處理手續後,受各步驟延遲影響,畫格運算與顯示的速度可能會有所不同。

測不出問題畫格

除了上述的問題之外,FRAPS也無測量到遺失畫格(drop frame)與侏儒畫格(runt frame)。當遊戲引擎的物理、AI部分出現錯誤,或是繪製畫面時若發生錯誤時,驅動程式很可能會直接捨棄這些畫格,若是某特定畫格的複雜度太高,其繪圖時間超過系統緩衝容忍的上限,也會被捨棄不予繪製,形成遺失畫格。

侏儒畫格則只會發生於多GPU的環境,當其中某一GPU在繪圖時發生錯誤時,由於其他GPU並不會即時知道這個狀況,所以其他GPU仍會照常運作、輸出影像,此現象會造成該不正常畫格出現在螢幕的時間非常短,並造成畫面撕裂。

由於FRAPS偵測的訊號為運算呼叫,當遺失或侏儒畫格產生時,運算呼叫早已送出,所以仍會被計算為完整的1幀,但是它們並不會正常顯示於螢幕,將會造成測試成績與實際觀看的誤差。

影像順暢度深度解析:破解 FPS 盲點、找出影像頓呆的主因

若將各畫格的處理過成簡化成此示意圖,就可以看到FRAPS的測量方式雖然可以測得效能表現(整體處理的畫格數量一樣),但可能無法精準測出畫面停頓。

FCAT:測量輸出端更精準

為了要改善FRAPS等工具無法測量最終輸出畫面情況的缺陷,NVIDIA開發了FCAT(Frame Capture Analysis Tool,畫格擷取分析工具),透過外部擷取設備錄下遊戲畫面並進行分析,找出FRAPS無法檢測的瑕疵。

在遊戲畫面置入色條

FCAT的運作原理很簡單,首先程式會在Overlay顯示層中,在每一個畫格的左側加入從上到下跨越畫面的色條,這些色條會遵照畫格順序更改顏色,比方說第1個畫格是白色,第2個畫格是綠色,第3個畫格是藍色等,其用途為標記各畫格的身份與出現順序。

接著FCAT系統會將遊戲畫面錄下來,並透過軟體分析色條,判讀各畫格顯示的時間。特別的是它並非使用軟體方式錄製影片,而是讓顯示卡將畫面輸出至外部擷取設備,再進行錄影動作。從外部錄影的原因很簡單,透過這種方式錄影,不會受到任何軟體或是API架構限制的干擾,能夠測量到真實顯示於螢幕的狀況,而不像FRAPS只能測量present call的數量。

影像順暢度深度解析:破解 FPS 盲點、找出影像頓呆的主因

▲當FCAT的Overlay工具開始運作後,會在輸出畫面左側貼上色條,分析工具就可依色條出現的順序及長度,推算畫面顯示狀況。

影像順暢度深度解析:破解 FPS 盲點、找出影像頓呆的主因

▲FCAT會在各畫格左側依序置入不同顏色,在分析時就可以透過影像識別軟體,依據顏色的分佈判讀各畫格顯示的時間。

Video Overlay可以堆疊圖層

Video Overlay是電腦處理顯示畫面過程的一環。目前的顯示卡大多具有專屬的緩衝區,用於儲存要輸出的畫面,我們可以把這個緩衝區想像成畫布,各程式可以透過Video Overlay,在畫布貼上圖層,此時顯示卡只需處理前景物件,而不需要重繪整幅畫面。

Video Overlay對於圖型使用者介面來說相當重要,以Windows為例,如果不採用Video Overlay,那麼在游標、視窗移動的時候,顯示卡就必需不斷重繪整個畫面,如果有Video Overlay的協助,系統只需重繪移動的物件即可。在FCAT中,各畫格左側的色條,就是透過Video Overlay貼到輸出畫面上。

測量眼睛看到的畫面

FCAT的終極目標,就是原汁原味地測量使用者透過螢幕所看到的遊戲畫面,透過外部影像擷取設備,就能避開API、驅動程式與顯示卡硬體間,繁複作業流程產生延遲的影響,提供更準確的數據,以利於評估顯示畫面實際的品質,也能夠確實測出顯示於螢幕的FPS表現。

NVIDIA表示FCAT的開發時間已經超過2年,公司內部也於研發產品時,使用FCAT分析與改進顯示卡的表現。目前NVIDIA官方已經將FCAT軟體釋出,供所有人(包括競爭對手)使用FCAT測試自己電腦的表現,官方也鼓勵使用者自行修改與再發行。不過筆者認為這項決策針對性相當明顯,就是要攻擊競爭對手的弱點。

影像順暢度深度解析:破解 FPS 盲點、找出影像頓呆的主因

▲FCAT測量的目標,是顯示卡將畫面繪製完成後輸出的畫面,相較於FRAPS測量Present Call,可以更準確反映使用者所見的畫質。

延伸閱讀:

決戰多螢幕,大容量 VGA 記憶體實戰:容量多1倍、效能多2%

顯示卡 4 大反鋸齒技術探討:鋸齒的產生與消除,前處理、後處理之爭

Futuremark 新一代 3DMark 搶先測試,Windows、Android 、 iOS 都能測

(後面還有:測試環境介紹以及FCAT實測)

國寶大師 李文恩
作者

電腦王特約作者,專門負責硬派內容,從處理器、主機板到開發板、零組件,尖端科技都一手包辦,最近的研究計畫則包括Windows 98復活與AI圖像生成。

使用 Facebook 留言
一定要配溫開水
2.  一定要配溫開水 (發表於 2013年6月21日 02:27)
※ 引述《劈你是為你好》的留言:
> 標題寫的動人,內容卻完全讓一般人看不懂

深度解析這種東西
不是給小孩子看的╮(╯_╰)╭
FUCXSOP
3.  FUCXSOP (發表於 2013年6月21日 11:58)
這個國寶大師是在亂寫個什麼東西
開啟垂直同步並不會造成效能的浪費好嗎
垂直同步的作用是強迫顯示卡把繪圖時序抓在一個穩定的時間間隔上
以避免顯示卡不斷用最高效能無窮盡的輸出

"若效能足以繪製55幀,但是實際運作時會受垂直同步的影響,讓FPS只能達到30幀,其中有25幀的效能就浪費了。"

這 25 幀並不是浪費
而是顯示卡被系統命令限制叫它不要畫這 25 幀
所以這 25 幀在開啟垂直同步後就根本不存在了
如果畫了 55 幀卻只輸出 30 幀那才叫真的浪費
但垂直同步明顯並不是這個樣子 ╮(╯_╰)╭

所以相反的
關閉垂直同步才會造成效能的浪費
尤其在超過 60 幀的情況下 ╮(╯_╰)╭
國寶大師 李文恩
4.  國寶大師 李文恩 (發表於 2013年6月22日 14:50)
※ 引述《SOP》的留言:
> 這個國寶大師是在亂寫個什麼東西
> 開啟垂直同步並不會造成效能的浪費好嗎
> 垂直同步的作用是強迫顯示卡把繪圖時序抓在一個穩定的時間間隔上
> 以避免顯示卡不斷用最高效能無窮盡的輸出
>
> "若效能足以繪製55幀,但是實際運作時會受垂直同步的影響,讓FPS只能達到30幀,其中有25幀的效能就浪費了。"
>
> 這 25 幀並不是浪費
> 而是顯示卡被系統命令限制叫它不要畫這 25 幀
> 所以這 25 幀在開啟垂直同步後就根本不存在了
> 如果畫了 55 幀卻只輸出 30 幀那才叫真的浪費
> 但垂直同步明顯並不是這個樣子 ╮(╯_╰)╭

應該是我文章沒有寫的很清楚的關係,導致有些誤會

我想表達的是,如果你買了一張高階顯示卡,它能提供55幀的效能,而你開起垂直同步後,它就只能輸出30幀,效能表現可能變成與低階顯示卡一樣。

我說的效能浪費指的就是這段落差。
發表回應
謹慎發言,尊重彼此。按此展開留言規則