2013.06.20 08:09

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

ADVERTISEMENT

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

流暢度影響視覺感受

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

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

ADVERTISEMENT

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

ADVERTISEMENT

▲常見FPS速率比較

FRAPS的測試盲點

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

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

ADVERTISEMENT

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

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

ADVERTISEMENT

測不出問題畫格

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

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

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

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

FCAT:測量輸出端更精準

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

在遊戲畫面置入色條

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

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

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

▲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測試自己電腦的表現,官方也鼓勵使用者自行修改與再發行。不過筆者認為這項決策針對性相當明顯,就是要攻擊競爭對手的弱點。

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

延伸閱讀:

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

ADVERTISEMENT