在當今數字化浪潮中,云計算已成為IT行業的中流砥柱。云游戲作為這一領域的嶄新亮點,通過將游戲渲染的任務從玩家個人設備轉移至集中式的渲染服務器,正在開始改變游戲的游玩體驗。然而目前高幀率的云游戲都面臨著一個難題,那就是云游戲畫面撕裂。游戲畫面撕裂是游戲自誕生以來便一直存在的棘手問題。在傳統本地游戲中,這個問的發生是因為顯示器的刷新率和顯卡(GPU)生成圖像的幀率之間的不同步。如果顯示器正在刷新一個新的圖像時,而GPU正好在生成下一幀,顯示器上下兩部分獲取到非同一幀的畫面就會導致畫面撕裂。
為了解決這個問題,常見的方法是啟用垂直同步(V-Sync)技術,該技術通過降低顯卡輸出幀率以同步顯示器的靜態刷新率,從而減少或消除撕裂現象。然而,垂直同步會導致輸入延遲,而且在顯卡輸出幀率低于顯示器靜態刷新率時會導致幀率大幅下降(顯卡幀率到不到顯示器幀率時,垂直同步會將顯卡幀率限制到顯示器幀率的一半),影響游戲性能表現。因此在一些情況下,玩家可能為了保證游戲性能表現,會關閉垂直同步。
針對垂直同步的缺點,顯卡公司英偉達和AMD各自推出了G-Sync和FreeSync技術,該技術反向通過動態調整顯示器的刷新頻率來同步顯卡幀率,這種技術在顯卡幀率介于下限幀率(G-SYNC支持超低下限4-10hz都可以工作,G-Sync Compatible(G-Sync的兼容版)和FreeSync多數是42HZ)和顯示器最高刷新率之間時,可以在保證游戲流暢度和低延遲的同時有效解決畫面撕裂的問題,但該技術需要顯示器兼容。
垂直同步和G-Sync、FreeSync等技術都是為了解決本地游戲畫面撕裂的問題。而云游戲一般分為以下幾個步驟:云端顯卡輸出畫面->采集畫面并編碼->網絡傳輸->客戶端接收并解碼->輸出至本地顯示器。目前云游戲主要采用WGC/DXGI技術和顯卡欺騙器實現畫面采集(無法兼容G-Sync和FreeSync),因此云游戲普遍的防撕裂方案還是在[云端顯卡輸出畫面->采集畫面并編碼]和[客戶端接收并解碼->輸出至本地顯示器]階段使用垂直同步技術。而表現更好的G-Sync/FreeSync技術則僅能用在客戶端解碼階段。
本文所提出的基于自適應同步技術針云游戲場景畫面撕裂的解決辦法是通過幀率同步技術,虛擬顯示器技術,結合已有的G-Sync和Free-Sync自適應同步技術共同作用以達到三個視頻流幀率同步以消除云游戲畫面撕裂的問題。
具體包括以下步驟:
1)開發一個虛擬顯示器(vMonitor),該虛擬顯示器的驅動加入G-Sync compatible和FreeSync兼容層。云端主機掛載該虛擬顯示器,并在云端顯卡驅動開啟G-Sync compatible或FreeSync功能。該虛擬顯示器作用是替代原本用于畫面采集的DXGI或WGC技術,直接接收顯卡輸出的畫面并轉給編碼模塊。該虛擬顯示器可以實現DXGI或WGC所無法實現的G-Sync compatible或FreeSync技術,可以在接收顯卡輸出畫面時消除采集階段的畫面撕裂。
2)進行云游戲時,云端主機的顯卡將渲染好的畫面傳輸給虛擬顯示器,同時通過G-Sync/FreeSync協議動態調整虛擬顯示器的刷新率,云游戲編碼程序接收虛擬顯示器的原始視頻數據和幀率信息(由G-Sync/FreeSync協議提供),編碼程序按照幀率信息以動態幀率(VFR)進行視頻編碼,在編碼時需要對低于G-Sync/FreeSync技術下限值的幀率(一般低于42FPS)進行重復采樣使其在客戶端側的G-Sync/FreeSync生效。最后將編碼后的視頻流發送給客戶端。
3)客戶端顯卡和實體顯示器也開啟G-Sync/FreeSync功能,在接收到視頻流后將視頻進行解碼,解碼出的視頻直接輸出至顯示器。