ADVERTISEMENT
解決之道:非同步繪製
如果你有看過RPCS3的程式生產管線,就會發現程式反組譯器被拆分為程式與反組譯執行緒等2大分類,這是因為RPCS3一開始就採用非同步反組譯,雖然執行準確度與效率都無法與同步反組譯相比,但其最終目標就是能讓解碼與重新編譯分開進行。
在實現這個目標之前,解碼器需要非常有效率與降低處理器負擔,否則反組譯著色器就會造成劃面閃爍或錯誤,於是開發者需要花更多心力去清理反組譯器,以最小化產生的著色器數量。
一旦頂點程式分析器能將大多數遊戲產生的著色器數量降低到1,000以下時,就能從主要繪圖流程中,將反組譯、重新編譯、連接等步驟分離。這個方式對原本就支援多執行緒的Vulkan來說不會太難,但是對OpenGL來說要處理執行緒先後順序就有點難度。
這種處理手法原本預期會產生嚴重的圖型錯誤,但實際上程式只需幾秒鐘的時間就能正確編譯,所以不需近似著色器或直譯器(Interpreter)的幫助,也能應用在模擬器上。
這功能對玩家來說是個非常好的消息,因為與其在遊戲開始前要等待1分鐘左右的「黑畫面」,大多數玩家寧可圖像在1、2秒之間短暫出錯,來降低整體等待時間。
▲影片右半部的畫面採用非同步繪製技術,可以看到卡頓狀況比左邊畫面改善許多。
其它改進也值得一提
RPCS3近期除了透過非同步繪製來改提升戲體驗外,也在更新中改善了頂點程式反組譯器(Vertex Program Decompiler)與分析器,能進一步簡化著色器,並降低整體產生的著色器數量。這個改進除了解除許多效能瓶頸之外,也解決了許多如長時間停在相同畫面會造成當機,或是大量著色器快取導致畫面閃爍等間接產生的問題,也讓《音速小子 世界大冒險》(Sonic Unleashed)、《全面抵抗2、3》(Resistance 2、3)、《拉捷特與克拉克 Future 2》(Ratchet & Clank Future:A Crack in Time)等遊戲能夠正常執行。
RPCS3先前雖然已經支援遊戲存檔與獎盃功能,但是模擬系統只具有「00000001」這個單一使用者ID,在近期更新中則加入了使用者管理功能,讓玩家可以在模擬系統中建立多重使用者ID,並自由切換使用者,不但方便管理不同玩家的存檔與獎盃,也能讓《泰拉瑞亞》(Terraria)這類單機多人遊戲的玩家可以同時登入帳號。
▲改善頂點程式反組譯器與分析器,除了增加RPCS3的效能外,也提升了相容性,讓《音速小子 世界大冒險》等遊戲能夠正常執行。
到目前為止RPCS3已經可以執行約75%的PlaySataion 3遊戲,共有高於3成的遊戲列為可正常遊玩,約4成為可進入遊戲(但可能有效能或圖像問題),整體而言已經算是不錯的成果,但仍然有相當多的努力空間。如果讀者想以實際行動對開發團對表示支持的話,不妨透過Patreon募資平台進行小額捐款。
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!