王一帆, 王昊, 孫浩楠, 塵原, 霍俊彥, 王豪, 張偉,3
(1. 西安電子科技大學通信工程學院, 710071, 西安; 2. 阿里巴巴集團, 310000, 杭州;3. 鵬城實驗室人工智能研究中心, 518055, 廣東深圳)
作為一種新興的以云計算為基礎的游戲方式,云游戲[1]引起了人們的極大關注[2]。該場景下,云端服務器完成游戲的復雜運算與渲染,并將3D游戲場景壓縮為2D視頻流,然后通過高速寬帶網絡傳輸到玩家游戲終端。終端只需要基本的視頻解壓能力和可靠的網絡即可享受到良好的游戲體驗。與傳統游戲模式相比,云游戲擺脫了終端對硬件的依賴,在很大程度上減少了玩游戲的設備成本。一些工作[3]提高了云游戲視頻傳輸的可靠性和穩定性,但是高幀率以及高分辨率的游戲視頻也對傳輸帶寬提出了更高的要求[4],例如分辨率為720P、幀率為60 幀/s 的游戲視頻需要15 Mb/s的傳輸帶寬,而對于4K視頻則需要40 Mb/s的傳輸帶寬才可滿足用戶的質量需求[5]。傳輸數據量大、占用帶寬高等問題是限制云游戲進步和發展的重要因素。因此,如何提高云游戲視頻的編碼碼率、減小帶寬,是目前云游戲亟待解決的一大問題。
一種直觀的方式是采用傳統的視頻壓縮技術,如高效視頻編碼(H.265/HEVC)[6]等,通過重復利用視頻間的相同像素信息來去除冗余。自20世紀80年代以來,傳統視頻編碼技術蓬勃發展并持續不斷優化:文獻 [7-9]通過優化編碼過程中的濾波、預測等模塊來提高編碼效率;文獻 [10-11]提出了快速模式判決算法來降低編碼復雜度;文獻 [12-13]建立了更加準確的率失真模型以對碼率控制進行改進。此外,隨著新興視頻的發展,文獻 [14-15]還總結了面向屏幕視頻內容的專門編碼工具。然而,傳統的視頻壓縮技術及其改進雖然對運動緩慢單一的平移運動具有良好的作用,卻無法對相機旋轉發揮很好的估計和補償作用[16]。在云游戲,尤其是第一人稱云游戲中,玩家的視角變化非常頻繁,游戲視頻往往包含更復雜的旋轉動作。此外,游戲視頻相鄰幀之間存在劇烈變化的大范圍運動,傳統的亞像素精度運動估計也無法精準地捕捉到相鄰幀之間的變化。因此,直接采用傳統的視頻編解碼技術壓縮游戲視頻編碼,殘差較大,碼率較高,僅通過調整幀率、分辨率和編碼碼率等參數[17-19],難以實現有效的編碼優化。
近年來,一些工作基于感興趣區域(region of interest, ROI)對云游戲視頻的編碼開展了碼率控制。文獻 [20]采用顯著性圖和優先級圖合成游戲注意力地圖,并利用其設置編碼參數,實現高質量的關注區域和較低質量的非關注區域以適應碼率限制;文獻 [21]針對游戲視頻提出了基于多目標優化的編碼樹單元級別的感知比特分配方法,優化了感興趣區域的質量同時兼顧了質量波動。結合云游戲視頻的內容特性,根據特定的準則將編碼比特向重要性高的感興趣區域傾斜,可以大幅度提高云游戲視頻的感知質量。
與由真實攝像機捕獲的傳統視頻序列不同,云游戲視頻是計算機生成視頻,可以直接從游戲引擎中獲得對象信息等圖形渲染上下文輔助編碼。文獻 [22]將來自游戲引擎的部分信息饋送到視頻編碼器中以繞過運動估計過程,降低計算復雜度,從而提高視頻編碼速度;文獻 [23]利用游戲開發者為游戲對象分配的簡單標簽提取ROI信息,在視頻幀中的不同區域分配不同數量的比特來優化視頻編碼,提高視頻的感知質量。此類方法由于需要游戲引擎信息,往往只適用于少量開源游戲平臺。此外,由于云游戲序列是計算機根據客戶端對虛擬相機的控制指令在服務器端渲染而成的,可以額外獲得游戲序列中逐幀的相機運動信息。一些工作[16,24-26]嘗試利用這一特點,通過基于深度圖的圖像繪制技術(depth image based rendering , DIBR)[27],將已知圖像映射到其他待編碼幀處,對映射后圖像與原始圖像的差值圖像進行編碼傳輸。相比于傳統的運動估計和運動補償,DIBR作為一種基于圖像的渲染技術,可以利用逐像素深度以及變換矩陣更為準確地抓取復雜運動間的變換信息,降低碼率。然而,此類方法需要額外的比特去傳輸深度信息,這在有限帶寬的高傳輸壓力下往往是不可接受的。同時,該方法需要虛擬相機的內參進行二維成像平面的投影,由于商業化電子游戲的版權保護,內參無法被直接獲得,這使得利用三維投影變換對云游戲編碼優化受到了開源云游戲平臺的限制。這些都會增加優化方案的實施難度。并且,上述工作僅對傳統編碼的輸入進行預處理,并未對編碼過程進行實質性地優化。文獻 [28]利用相機旋轉信息,采用深度學習的方法生成增強參考幀,并將其添加到參考幀列表以對現有視頻編解碼器進行優化。深度學習的使用在提升性能的同時也在一定程度上增加了編碼復度,且該工作僅針對相機旋轉下的游戲視頻進行了評估,具有一定的局限性。
基于此,利用云游戲視頻易于獲得全局相機運動信息這一特點,本文提出了一種三維投影變換輔助的云游戲編碼優化算法。該算法首先對游戲場景中世界坐標系下一點投影到二維平面的過程進行詳細分析,并據此三維投影變換過程建立約束,對相機內參進行估計。接著,利用估計的內參以及已知的攝像機運動信息,利用圖像單應性生成與當前待編碼幀平行的輔助參考幀,將其添加到編碼器的參考幀列表中參與編碼。由于生成的輔助參考幀與待編碼幀之間只有平移運動,所以更有利于傳統的運動估計和補償。本文算法不需要已知的相機內參與深度信息,使利用三維投影變換對云游戲編碼優化變得一般化,同時引入了額外的輔助參考幀參與編碼,以編碼塊為單位降低編碼殘差,大幅度提高了壓縮效率??紤]到H.265/HEVC為目前云游戲應用中的主流視頻編碼方式,本文將所提優化算法應用到HEVC中并與原始HEVC進行比較。實驗結果表明,本文算法在云游戲視頻上平均可以實現8.14%的BD-rate增益,在僅有相機旋轉的情況下,BD-rate 可達-24.68%。同時,還在一定程度上降低了編碼復雜度,編碼時間平均縮短5.34%。此外,本文算法相比于HEVC 屏幕內容編碼擴展(HEVC screen content coding, HEVC-SCC)也有超過20%的BD-rate性能增益。
游戲場景中的一點要經過多個坐標空間變換才能實現從三維空間坐標到二維像素坐標的映射。以Unity游戲引擎為例,假設三維場景中一點的世界坐標為Pworld=(xw,yw,zw,1),其具體的三維投影變換的過程如圖1 所示。

圖1 游戲中的三維投影變換
由于玩家觀察場景時總是從攝像機的視角出發,攝像機決定了引擎渲染游戲的畫面,因此首先需要將世界空間下的點Pworld通過觀察矩陣Mview變換到觀察空間中
(1)
式中:R和T分別表示從世界坐標系到相機坐標系的旋轉和平移變換。
將該點從觀察空間變換到裁剪空間,以對相機的可見范圍進行設置。裁剪空間由6個裁剪平面包圍的視錐體決定,其中近裁剪平面和遠裁剪平面決定了攝像機可以看到的深度范圍。為投影到二維平面進行準備,通過投影矩陣Mproject得到頂點在裁剪空間中的坐標Pclip=(xc,yc,zc,wc)
Pclip=MprojectPview=
(2)
式中:V′、r、N、F分別表示相機的視場角、近裁剪平面的寬高比、視錐體近裁剪平面和遠裁剪平面距離相機的距離;cot是余切函數。由式(2)可知,裁剪坐標wc與zv密切相關,且隨著像素的變化而變化。
完成所有裁剪工作后,需要把視錐體投影到屏幕空間來生成對應的2D坐標。首先,通過
(3)
利用透視除法將視錐體變換到一個立方體內,得到歸一化的設備坐標PNDC=(xNDC,yNDC,zNDC,1),其中xNDC,yNDC,zNDC∈ [-1,1]。接著,利用
(4)
通過簡單的視口變換Mviewport,根據圖像的寬度W和高度H得到對應的像素坐標Ppixel=(u,v,1)。
通過上述步驟實現了從攝像機視角出發,將場景從三維空間映射到二維畫面的過程。那么,從屏幕上一點投影到世界空間的過程則為上述三維投影變換的逆過程。因此,在已知深度信息以及相機內外參(內參即投影矩陣,外參即觀察矩陣)的情況下,世界坐標系下一點從一幅視圖映射到另一幅視圖的變換過程為式(5)

(5)
式中:上標1和2分別表示兩幅視圖對應的參數信息。實際上,由于大部分商業化電子游戲平臺都不開源,相比于游戲開發者可以很容易地從游戲引擎中拿到圖像渲染上下文,用戶往往很難獲得相機的內參進行上述視圖間的變換。因此,如何利用已知視圖對相機內參進行一定程度的估計,對有效利用游戲中的三維投影變換是至關重要的。
本文在相機旋轉下,基于三維投影變換對相機內參進行了一定的估計。依據式(2),假設待估計的相機投影矩陣Mproject為
(6)
式中:f1、f2、c1、c2分別對應于投影矩陣中的4個參數。相機旋轉下的Mview可表示為
(7)
式中:θx、θy、θz分別表示繞x、y、z軸的旋轉角。
(8)
(9)
結合式(5),可對f1、f2建立3個約束
(10)
通過min((A-B)2+(C-B)2+(A-C)2),采用經典的非線性最小二乘法便可求解得到f1以及f2??紤]到游戲視頻,尤其是第一人稱游戲視頻,往往包含大量的相機旋轉運動,采用本文算法可以很容易估計出f1以及f2。為提升匹配的準確性,本文采用紋理相對豐富的已知視圖進行匹配。此外需要注意的是,當相機僅繞x軸或y軸旋轉時,目標函數僅為f2或f1的相關函數,因此采用多軸復合旋轉運動可以更加方便快捷地計算出f1、f2。
基于此,通過抓取游戲視頻中相機旋轉的兩幀,采用本文提出的基于三維投影變換的相機內參估計算法,便可通過上述過程求得相機投影矩陣的f1、f2參數。利用圖像單應性[30],可在已知相機運動信息的前提下,僅利用f1、f2實現對已知視圖的旋轉變換。不同坐標表示的其他游戲引擎內參也可通過類似方法得到。
在游戲序列中,視角通常會保持移動,尤其是在第一人稱游戲中,相機的運動往往是旋轉角度更大、移動頻率更高的旋轉和平移的復合運動,然而傳統運動估計對相機旋轉較為敏感。本節利用第2節中基于三維投影變換的相機內參估計算法,結合圖像單應性特點,利用視圖間的旋轉信息生成與當前待編碼幀平行的輔助參考幀,然后將其添加到編碼器的參考幀列表中參與編碼。由于輔助參考幀利用相機的旋轉信息進行了視角校正,與待編碼幀之間只有平移,因此更有利于進行運動估,從而減少編碼殘差,優化編碼性能。
相機在發生旋轉前后呈現的兩幅視圖具有圖像單應性[30],因此相機旋轉運動下從圖像1到圖像2的映射可由式(5)簡化為
(11)
式中:H表示3×3的單應性矩陣;K、V分別表示3×3的相機內參矩陣(投影矩陣)和視口變換矩陣。
由第1節中Mviewport和Mproject的表示形式,不難得到相機旋轉下的V
(12)
相機旋轉下的K可表示為
(13)
且其參數可通過第2節的內參估計算法得到。
因此,給定參考視圖與相機旋轉矩陣,即可依據式(11)在不使用深度圖的情況下實現從參考視圖到任意目標視圖的空間映射?;诖?本文選擇每個編碼視頻序列(CVS)中質量較高的幀內隨機接入點(IRAP)幀作為映射過程的參考幀,利用上述公式通過圖像單應性校正相機旋轉,并應用三角形重心插值算法[31]模擬游戲引擎的渲染過程,生成與當前CVS中其他待編碼幀平行的輔助參考幀。由于旋轉之后視圖之間只有平移,本文算法更有利于進行運動估計,從而減少壓縮殘差所需的比特。此外,當游戲序列包含單一的相機旋轉運動時,生成的輔助參考幀與待編碼幀同視點同方向,可以最大程度地減小編碼殘差。相比于傳統編碼器,本文算法額外增加的比特開銷只有相機的旋轉信息與兩個內參,且內參通常對整個序列保持相同并且只需要傳輸一次。
利用生成的輔助參考幀更新編碼器的參考幀列表,以提供更好的運動估計和補償。以標準Low-Delay-P (LDP)配置下HEVC參考軟件HM為例,參考幀列表最多包含4個以圖像序列號(POC,用符號IPOC表示)從大到小順序排列的參考幀。本文將生成的輔助參考幀添加到原始參考幀列表的第二個位置,第一個位置的原始參考幀保持不變以保持較強的相關性,除最后一幀外的其余原始參考幀按順序依次排列在輔助參照幀之后。更新過程見圖2。輔助參考幀的 POC 設為-1,與原始參考幀進行區分。如果原始參考幀列表包含POC為3、2、1、0的參考幀,則更新后參考幀的POC依次為3、-1、2、1。

圖2 參考幀列表更新示意
為驗證所提云游戲編碼優化算法的有效性,將本文算法加入到HEVC參考軟件HM16.16中,從編碼性能和編碼復雜度兩方面與原有的HEVC編碼算法進行對比。
由于云游戲低時延的要求,本文以標準LDP為配置,在Intel (R) Core (TM) i7-9700KF CPU @ 3.60 GHz處理器上,以4個量化參數22、27、32、37進行編碼。參數IntraPeriod、intrqpoffset以及GOPSize分別設置為8、0和4,編碼幀數設置為96。本文選擇編碼序列中每個CVS中的IRAP幀作為映射參考幀,用以生成優化算法中相同CVS中其他幀的輔助參考幀。
由于標準測試序列大部分為不含相機運動信息的自然序列,本文使用Air Light VR(ALVR)軟件將SteamVR游戲流式傳輸到客戶端獨立的VR頭戴式顯示器中,通過捕獲視頻幀及其對應的相機運動信息,建立包含渲染圖像和相機運動的云游戲視頻測試序列。本文將VR游戲的里程碑之作The Lab作為游戲數據庫,選取其中具有不同內容特征的5個場景下的20個YUV 8 bit序列作為測試序列。每個場景下的序列分別包含4種不同的大幅度相機運動方式,每個序列的分辨率為1 024×1 024。圖3 為5個場景的示意。

(a)場景1
本小節首先通過Bj?ntegaard-Delta rate(BD-rate,用符號ΔR表示)和Bj?ntegaard-Delta PSNR(BD-PSNR,用符號ΔP表示)[32]評估所提優化算法在YUV上的編碼性能。BD-rate表示在相同編碼質量下節省了多少碼率,負值表示所提算法具有更高的編碼效率;BD-PSNR表示在相同碼率下可以獲得的質量增益,正值表示所提算法具有更優異性能。
將本文算法與原始HEVC進行比較,結果如表1 所示。相比HEVC,本文算法額外的比特增加只有相機的旋轉信息與兩個內參,因此本文在表1的計算中忽略這部分開銷。
從表1 可知,從均值來看,相比于原始HEVC,本文算法在相同視頻客觀質量下可以節省8.14%的比特率,在相同的碼率下可以實現0.313 8 dB的性能增益。針對不同的相機運動方式,本文算法都有良好的編碼性能增益。其中,在相機單獨旋轉運動下,BD-rate和BD-PSNR性能可達-24.68%和0.989 2 dB。這是因為在單一的相機旋轉運動下,本文算法生成的輔助參考幀與待編碼幀同視點同方向,最大程度地減小了編碼殘差,提升了編碼性能。此外,相機運動的幅度與快慢也會影響算法的性能。例如,在單獨旋轉下,相比于其他4個場景,場景4的相機旋轉幅度更大,變化更劇烈,原始HEVC無法對如此大范圍的運動進行很好的運動估計和補償,而本文算法克服了運動范圍與幅度的限制,利用三維投影變換較為準確地捕獲了大運動下視圖間像素的運動,因此可以獲得-29.96%的BD-rate性能。綜上可知,本文算法在不同游戲場景不同運動下都可以實現良好的壓縮性能。
為了對編碼后的視頻進行進一步的視覺客觀評價,表2給出了量化參數(QP)為22、27、32、37編碼后的視頻結構相似度(structural similarity, SSIM)和多尺度結構相似度值(multi-scale structural similarity,MS-SSIM)。可以看出,本文算法編碼后的視頻相比于HEVC仍然沒有視頻質量的降低。在達到相同客觀質量的情況下,本文算法所需的碼率更低,本文算法的優越性得到了進一步驗證。

表2 4個QP編碼后視頻的結構相似度和多尺度結構相似度
同時,考慮到云游戲是提供計算機生成文本、圖形和動畫等屏幕內容的典型應用之一,本文算法與HEVC 屏幕內容編碼擴展(HEVC screen content coding, HEVC-SCC)[15]進行了對比,結果如表3所示。可以看出,盡管HEVC-SCC可以利用云游戲視頻具有重復圖案、高度飽和度或者有限數量顏色等不同于自然視頻的特性對其實現良好的壓縮,卻無法應對頻繁視角變化的情況。相比之下,本文算法充分考慮了云游戲的應用特性,實現了任意視角與運動下良好的壓縮性能,相比于HEVC-SCC有超過20%的BD-rate性能增益,從而進一步證明了本文算法相比于目前云游戲應用中主流視頻編碼方式的優越性。

表3 本文算法與HEVC-SCC平均壓縮性能的比較
由于本文算法與文獻 [28]算法都利用了相機運動信息來優化編碼器的參考幀列表,以此提高云游戲視頻的編碼效率,所以本文算法與文獻 [28]算法進行了比較,亮度分量上的壓縮性能結果如表4所示。由于文獻 [28]算法僅針對相機旋轉下的視頻序列進行了訓練,所以僅對單獨旋轉下的序列采用文獻 [28]中訓練好的模型進行測試??梢钥闯?本文算法在5個場景下的壓縮性能都遠遠高于文獻 [28]算法,平均可以實現-24.12%的BD-rate和1.005 0 dB的BD-PSNR性能增益。這是因為本文的測試序列運動幅度更大,視角變換更加劇烈,采用文獻 [28]中增強參考幀的方法已經無法從根本上對如此劇烈變化的運動實現更好的運動估計與補償效果,而本文算法利用三維投影變換生成與當前待編碼幀更相似的輔助參考幀,進一步降低了劇烈運動下運動估計的難度,且大幅度減少了編碼殘差,從而實現了良好的壓縮效果。

表4 本文算法與文獻 [28]算法壓縮性能的比較
生成的輔助參考幀、原始參考幀以及待編碼幀如圖4所示。這里原始參考幀指相關性最強的前一幀的重構幀。可以明顯看出,生成的輔助參考幀實現了視角的校正,相比于原始參考幀,與待編碼幀之間只有簡單的平移運動,更容易進行運動估計。利用該輔助參考幀可以使編碼器更好地估計云游戲視頻中復雜的全局相機旋轉以及劇烈變化的大范圍運動,提高云游戲的編碼效率。

(a)原始參考幀
各場景下,預測塊采用輔助參考幀進行預測的輔助參考幀命中率如圖5所示。可以看出:生成的輔助參考幀深度參與了編碼,其命中率隨運動狀態的不同而變化,最高可超過50%;輔助參考幀的命中率呈規律性分布,每個CVS中距離映射參考幀(即IRAP幀)越近的幀,采用輔助參考幀進行預測的命中率越高。這是由于距離較遠的幀與映射參考幀之間的場景重復度降低,大量未在映射參考幀中出現的新場景逐漸暴露出來,導致生成的輔助參考幀與待編碼幀相似度降低,從而降低了命中率。

圖5 使用輔助參考幀進行預測的比例
設THEVC為原始HEVC的編碼時間,Tproposed為本文算法的編碼時間(包括額外生成輔助參考幀的時間以及將輔助參考幀添加到參考幀列表進行編碼的時間),則編碼復雜度衡量指標ΔT可表示為
ΔT=(Tproposed-Toriginal)/Toriginal
(14)
ΔT為負表明本文算法編碼復雜度較低。表5 給出了4種運動方式下編碼時間的對比??梢钥闯?相比原始HEVC,本文算法在帶來大幅度性能增益的同時還在一定程度上降低了編碼復雜度,編碼時間平均縮短5.34%。

表5 本文算法與HEVC編碼時間的比較
隨著高性能云計算等技術的快速發展,云游戲生態逐步擴大,高幀率以及高分辨率的云游戲視頻對傳輸帶寬提出了更高的要求,然而云游戲視頻中復雜的全局相機旋轉以及劇烈變化的大范圍運動給傳統視頻壓縮帶來了極大的挑戰。本文針對這一問題,利用云游戲視頻易于獲得全局相機運動信息這一特點,提出了一種三維投影變換輔助的云游戲編碼優化算法。
本文通過對游戲場景中三維投影變換的過程進行理論分析,利用來自世界坐標下同一點的匹配點對建立約束,構建了虛擬相機的內參估計算法。結合全局相機運動信息,利用估計的內參生成與待編碼幀平行的輔助參考幀更新原始參考幀列表,參與編碼。由于生成的輔助參考幀相對于待編碼幀只有平移,更有利于進行運動估計和補償。本文算法克服了開源云游戲平臺的限制,使利用三維投影變換對云游戲編碼優化變得一般化。實驗結果表明,本文算法在云游戲視頻上平均可以實現8.14%的BD-rate增益,在僅有相機旋轉的情況下,BD-rate 可達-24.68%。同時,還在一定程度上降低了編碼復雜度,編碼時間平均縮短5.34%。此外,本文算法相比HEVC-SCC也有超過20%的BD-rate性能增益。
云游戲的大規模應用對通信系統提出了多項挑戰,除高帶寬外,云游戲對網絡時延要求很高,尤其在實時競技類游戲中,卡頓現象會嚴重影響用戶體驗。因此,除了提高云游戲視頻的編碼效率以降低帶寬外,如何滿足云游戲對網絡的低時延要求也在進一步研究中。