數字(zi)化浪潮(chao)席卷全球(qiu),云計算已成(cheng)IT行業發展之核。云游(you)戲(xi)(xi)作為(wei)新興技術力量,將游(you)戲(xi)(xi)渲(xuan)染從玩家設備轉移至集中服(fu)務器,革(ge)新游(you)戲(xi)(xi)體驗(yan)。然而,當前PC端云游(you)戲(xi)(xi)始終受限(xian)于(yu)網絡限(xian)制在(zai)流暢(chang)度(du)、延遲(chi)和畫面上難以達到本地游(you)戲(xi)(xi)的體驗(yan)。其中有一個關鍵(jian)因數便是(shi)鼠(shu)標刷新率問(wen)題。
鼠(shu)標刷新(xin)率(lv)(也(ye)叫鼠(shu)標輪詢率(lv))既(ji)鼠(shu)標每(mei)秒(miao)鐘向操作系統報告位(wei)移的頻率(lv),常見的有125Hz、500Hz、1000Hz、4000Hz和8000Hz。這項(xiang)數(shu)據對游(you)戲體驗極(ji)為(wei)重要,人手操作鼠(shu)標(biao)(biao)移(yi)動(dong)是一(yi)(yi)段自然平(ping)滑(hua)的(de)(de)(de)曲線,而(er)鼠(shu)標(biao)(biao)上報(bao)給系(xi)統的(de)(de)(de)位(wei)移(yi)從(cong)微觀尺度(du)來看,并不是連(lian)續的(de)(de)(de),而(er)是由一(yi)(yi)個一(yi)(yi)個零(ling)散的(de)(de)(de)位(wei)置(zhi)點連(lian)成的(de)(de)(de)位(wei)移(yi)線段。系(xi)統在每次鼠(shu)標(biao)(biao)上報(bao)位(wei)移(yi)時(shi),系(xi)統就會(hui)將鼠(shu)標(biao)(biao)位(wei)置(zhi)瞬移(yi)到相(xiang)應的(de)(de)(de)位(wei)置(zhi),因此當鼠(shu)標(biao)(biao)上報(bao)頻率不夠(gou)高時(shi),在用戶看來,鼠(shu)標(biao)(biao)的(de)(de)(de)滑(hua)動(dong)顯示(shi)出(chu)(chu)來就是一(yi)(yi)卡一(yi)(yi)卡的(de)(de)(de)不連(lian)續畫面(mian),在FPS類(lei)游(you)戲中,由于畫面(mian)整體跟著鼠(shu)標(biao)(biao)移(yi)動(dong),因此卡頓更為(wei)明顯。反之鼠(shu)標(biao)(biao)刷(shua)新率越(yue)高就越(yue)能擬合出(chu)(chu)自然平(ping)滑(hua)曲線,視覺(jue)流(liu)暢度(du)就越(yue)高。因而(er)一(yi)(yi)般游(you)戲專用鼠(shu)標(biao)(biao)往(wang)往(wang)會(hui)將輪詢(xun)率設置(zhi)得比較高,1000Hz設置(zhi)4000Hz、8000Hz。
高鼠標輪詢率對于本地(di)游戲環境而言只(zhi)是會消耗更多的CPU資源來(lai)處理USB輪詢信(xin)號(hao)。但對于云游(you)戲來(lai)說,就(jiu)是非常棘手的(de)(de)(de)問題(ti)。云游(you)戲由于操(cao)(cao)作(zuo)和渲染分(fen)離(li),需(xu)要將(jiang)玩家(jia)的(de)(de)(de)鼠(shu)標(biao)操(cao)(cao)作(zuo)通過網(wang)(wang)絡(luo)(luo)傳(chuan)輸(shu)(shu)給遠端(duan)的(de)(de)(de)機(ji)房,因此當(dang)鼠(shu)標(biao)輪詢率過高(gao)時,就(jiu)會造(zao)成大(da)量(liang)的(de)(de)(de)網(wang)(wang)絡(luo)(luo)數據包(bao),而這些大(da)量(liang)的(de)(de)(de)鼠(shu)標(biao)位移(yi)網(wang)(wang)絡(luo)(luo)數據包(bao)在網(wang)(wang)絡(luo)(luo)傳(chuan)輸(shu)(shu)中非常容(rong)易造(zao)成網(wang)(wang)絡(luo)(luo)擁塞或者觸發網(wang)(wang)絡(luo)(luo)設備QoS限(xian)制(zhi)機(ji)制(zhi)導致丟(diu)包(bao)。
因(yin)此云游戲難(nan)以像本地游戲一樣通過(guo)提高鼠標刷新(xin)(xin)率(lv)來(lai)提升畫面流(liu)暢度。但是過(guo)低的鼠標刷新(xin)(xin)率(lv)又會導致Moba類游戲鼠(shu)標移(yi)動卡頓,FPS類游戲畫面移(yi)動卡頓。
綜(zong)上(shang)所述,目前云游戲鼠標體驗上(shang)存在以下(xia)難題(ti)
1)若像本地游戲(xi)一樣通過提高鼠標(biao)刷新率來提升畫面流(liu)暢度會造(zao)成網絡(luo)擁(yong)塞和鼠標(biao)網絡(luo)數(shu)據包(bao)丟失。
2)若為(wei)保證網(wang)絡傳輸穩(wen)定(ding),鼠標輪詢率就(jiu)要設(she)為(wei)較低的值,游戲(xi)畫面就(jiu)會因(yin)鼠標位移不連續而出現卡頓。
本(ben)文所提出的(de)(de)基于(yu)(yu)三次(ci)樣條插(cha)(cha)(cha)值(zhi)(zhi)算法(fa)提升云(yun)(yun)(yun)游戲(xi)鼠(shu)標(biao)刷(shua)新(xin)率(lv)的(de)(de)方(fang)法(fa)核心思想是(shi)降低(di)云(yun)(yun)(yun)游戲(xi)客戶端(duan)發送的(de)(de)鼠(shu)標(biao)位(wei)移(yi)(yi)(yi)頻(pin)率(lv)以(yi)降低(di)對網絡的(de)(de)負載(zai),在(zai)低(di)頻(pin)率(lv)的(de)(de)每(mei)一(yi)幀(zhen)鼠(shu)標(biao)位(wei)移(yi)(yi)(yi)數據包到了(le)算力(li)端(duan)后(hou),會加入(ru)到一(yi)個位(wei)移(yi)(yi)(yi)緩(huan)存(cun)隊列(lie),并(bing)將(jiang)緩(huan)存(cun)中所有的(de)(de)位(wei)移(yi)(yi)(yi)幀(zhen)數據,輸(shu)入(ru)三次(ci)樣條插(cha)(cha)(cha)值(zhi)(zhi)算法(fa),將(jiang)最新(xin)一(yi)次(ci)的(de)(de)低(di)頻(pin)位(wei)移(yi)(yi)(yi)幀(zhen)插(cha)(cha)(cha)值(zhi)(zhi)成(cheng)高(gao)(gao)頻(pin)位(wei)移(yi)(yi)(yi)幀(zhen),按照插(cha)(cha)(cha)值(zhi)(zhi)后(hou)的(de)(de)時(shi)間間隔逐(zhu)次(ci)輸(shu)入(ru)給系統。這樣對于(yu)(yu)云(yun)(yun)(yun)游戲(xi)的(de)(de)算力(li)系統而言得到的(de)(de)就是(shi)一(yi)個高(gao)(gao)刷(shua)新(xin)率(lv)的(de)(de)鼠(shu)標(biao)位(wei)移(yi)(yi)(yi)曲線,能夠(gou)生成(cheng)更(geng)流(liu)暢(chang)的(de)(de)鼠(shu)標(biao)滑(hua)動動畫和更(geng)流(liu)暢(chang)的(de)(de)游戲(xi)畫面(mian)移(yi)(yi)(yi)動。
具體流程如下:
1)云游戲客戶端對(dui)鼠標采樣設置一個較低的采樣率
2)云游(you)戲客戶端每(mei)次采樣鼠(shu)標位移后,將鼠(shu)標位移封裝為網絡數據包發送(song)給云游(you)戲算(suan)力端
3)云(yun)游戲(xi)算(suan)力端(duan)接(jie)收到每一幀的(de)鼠標(biao)位(wei)(wei)移(yi)(yi)(yi)后,加入(ru)(ru)緩存(若(ruo)隊列(lie)滿,則彈出最早(zao)的(de)鼠標(biao)位(wei)(wei)移(yi)(yi)(yi)數(shu)據(ju)(ju)),并(bing)利用三(san)次樣條插(cha)值算(suan)法(fa),將前一段時間的(de)位(wei)(wei)移(yi)(yi)(yi)數(shu)據(ju)(ju)和本(ben)次的(de)位(wei)(wei)移(yi)(yi)(yi)數(shu)據(ju)(ju)作為輸(shu)入(ru)(ru)共(gong)同輸(shu)入(ru)(ru)到三(san)次樣條插(cha)值算(suan)法(fa)模型(xing),得出本(ben)次位(wei)(wei)移(yi)(yi)(yi)經過插(cha)值后的(de)位(wei)(wei)移(yi)(yi)(yi)數(shu)據(ju)(ju)組(zu)
4)算力端根據(ju)插值后的位移數據(ju)組按照(zhao)相應的時間間隔輸(shu)入到算力端系統(tong)
5)系統根據插值后的高頻(pin)鼠(shu)標(biao)位移渲染更流暢的鼠(shu)標(biao)滑動(dong)或者(zhe)是游戲畫面(mian)移動(dong)。