PS3模擬器重大突破,深入瞭解如何透過非同步繪製解決畫面卡頓問題

RPCS3是目前最成熟的Sony PlaySataion 3模擬器之一,已經可以在電腦上正常執行許多套裝遊戲,在先前的更新中也加入升頻功能,能讓遊戲在高於原本的畫質設定下執行。在近期更新中,更是透過非同步繪製的方式來降低畫面發生停頓狀況的頻率,以及加入了玩家帳號管理等功能。

ADVERTISEMENT

遊戲過程不再卡卡

有使用過RPCS3模擬器的玩家,應該都會在開啟遊戲時等待漫長的系統啟動,並在過程中遇到不正常卡頓的狀況,明明在大多數的時間FPS都可以流暢跑到60幀,為什麼偶爾就會發生明顯的卡頓感?這就要從RPCS3的繪圖方式來說明。

在2017年的時候,開發者為了要提升程式效能,於是移除了大量佔用處理器資源的頂點預處理(Vertex Preprocessing)步驟,雖然能大幅增進效能(在某些情況增益甚至高達10倍),但這種方式會增加頂點著色器(Vertex Shader)的資料量,並增加從記憶體區塊讀取頂點資料的複雜性,會造成顯示驅動程式需要花很常的時間連接至程式,執行過程也需要透過位元轉移(Bitshift)與資料遮罩(Masking)等方式來解碼頂點資料。

雖然程式執行的速度很快,但是連接步驟則非常緩慢,即便可以透過繪圖快取(Shader Cache)來降低延遲,但是當玩家到達新場景的時候,就很容易遇到需要的資料不在快取之中,而造成卡頓的狀況。為了要避免這個問題,RPCS3就會預先將所有的資料預先處理備用,而其副作用就是開啟遊戲時需花很長的時間預備資料。

PS3模擬器重大突破,深入瞭解如何透過非同步繪製解決畫面卡頓問題

解決之路困難重重

在解決這個問題的過程中,開發人員遇到了許多困難,首先PlaySataion 3的RSX繪圖處理器,並非採用現在主流的統一繪圖架構(Unified Shader),而是具有獨立的頂點與像素管線,彼此具有各自的指令集架構,這些龐大且複雜的程式將會讓執行檔的程式碼相當混雜。

另一個大挑戰是,位元組碼(Bytecode)本身並不包含程式運作所需的全部資訊,需要在傳送繪圖需求的過程中透過暫存器進行設定。舉例來說,TEX指令並不會區分貼圖是1D、2D、3D、立方體等種類與它們的陰影變數,這代表模擬器需要在資料進入暫存器之後才能知道其種類,所以這類資料就無法在遊戲執行之前預先準備。

PS3模擬器重大突破,深入瞭解如何透過非同步繪製解決畫面卡頓問題

(下一頁還有解決方式與其他更新說明)

使用 Facebook 留言

發表回應

謹慎發言,尊重彼此。按此展開留言規則