王雅妮,高全力,王西漢,畢明洋,焦子遜
(西安工程大學 計算機科學學院,陜西 西安 710600)
虛擬現實(Virtual Reality,VR)目前已經在娛樂、醫療保健、教育等眾多領域中得到應用。根據市場研究,全球虛擬現實市場預計到2023年將達到51億美元,并且在預測期內將超過55%的復合年增長率。近年來,VR線下體驗店數量增長迅速,VR電影、VR競技游戲等成為新的體驗熱點[1-2]。盡管VR前景廣闊,但仍然面臨諸多問題,如虛擬現實技術內容缺乏,渲染過程計算資源龐大,無法實時更新渲染的高清畫面,體驗過程會出現卡頓眩暈現象,以及用戶在體驗過程中由于數據線較長存在絆倒的風險等。因此,如何設計出高清、低延遲的交互式虛擬現實系統,在現有的智能終端和無線網絡環境下,實現高清、低延遲的交互式VR成為當下研究的熱點。
由于需要渲染高分辨率和高幀率的圖形以提供使用過程中的沉浸式體驗,VR應用具有很高的計算負荷。Chang等人[3]利用維度實驗量化了現有VR應用的交互時間和定位精度,并研究了目前有線VR應用程序以及智能終端VR系統的用戶體驗。Flashback[4]通過設計一種預渲染的方法解決了智能終端的低計算能力問題。Furion[5]系統支持商用移動設備上的高分辨率VR應用程序。Xie Chenhao等人[6]提出了一種新的軟硬件相結合的協同設計方案(Q-VR),實現了低延遲、高質量的協同移動VR。Coterie[7]設計中的關鍵挑戰是確定最佳截止點需要搜索虛擬世界中每個位置的截止點,由于VR虛擬世界可能有數億網格點,這在計算上很難實現。Liu Xing等人[8]設計并實現了一種新型的移動設備多用戶虛擬現實系統─Firefly,Firefly通過枚舉、預渲染、編碼和存儲在虛擬場景中可到達的所有位置的視圖來執行一次性的離線內容準備。
協同渲染的目的是為了營造沉浸感的虛擬現實環境[9]。與上述研究相比,該文針對虛擬場景下渲染資源龐大,渲染環境復雜等問題,提出了客戶端服務器協同渲染的方法。該方法將分布式計算技術應用于渲染領域,充分發揮了計算資源的優勢,提高了渲染的效率和速度。與上述方法相比較,該方法使用了全景圖切片的方式對全景圖進行編碼壓縮傳輸,一定程度上比視頻流傳輸加載更快,使得用戶體驗感更好。經實驗驗證,將上述方法相結合能夠降低網絡負載,提高幀刷新率,進而實現高清低延遲交互。
VR環境渲染需要較好的硬件和網絡環境支持,受功耗、散熱和體積等物理條件限制,智能終端CPU/GPU的運算能力不可能在短時間內得到明顯改善[10]。因此將VR場景渲染資源進行計算任務遷移,分為前景交互和背景環境交互,虛擬場景下的前景交互和背景環境具有不同的可預測性和渲染工作負載。
對于絕大多數的VR應用程序來說,渲染的VR內容可拆分為前景交互(FI)與背景環境(BE)。例如,對圖1中的VR應用程序進行了測試,圖1(a)所示的飛行器與控制器相互作用,圖1(b)所示的弓箭,圖1(c)所示的手槍,圖1(d)所示的槍,這些都是前景交互內容,與用戶直接相關,這些物體的動畫效果會根據用戶控制器的輸入而改變,虛擬現實技術的基本任務就是構建一個虛擬場景來為用戶提供一種沉浸感[11],并以背景環境作為虛擬世界組成的主體,它涵蓋了整個游戲空間的絕大部分。

圖1 幾款VR游戲畫面
圖1(b)(c)(d)是高質量的虛擬現實游戲[12]。分別對3個游戲的前景和背景環境進行測試,測量出每個游戲版本的幀渲染[13]時間和CPU,GPU的利用率。結果如表1所示。前景交互時只需要10~11 ms,比背景環境的渲染少8倍,并且CPU和GPU的開銷都有明顯的下降。只渲染背景環境需要85~101 ms,并且CPU和GPU的利用率也是前景交互的2~3倍。由此可見,在VR場景渲染過程中,與背景渲染相比較,只渲染前景交互的內容資源利用率較低。其原因就在于高品質VR應用下,真實的、沉浸式的環境自然包含了更多的細節和紋理(如圖1中的建筑和陰影),這導致了巨大的渲染開銷。

表1 3種高質量VR程序資源使用情況
在VR應用程序中,影響用戶體驗跟虛擬場景中玩家的數量、渲染的每幀大小以及幀從服務器傳輸到客戶端頻率都有關系[14]。可以通過幀內相似度以及幀間相似度來衡量VR程序的渲染方式,以減少背景環境幀的預取頻率[15]。
該文測量了用戶在虛擬場景中移動時的相鄰網格點的背景環境幀之間的相似性,從Unity Asset Store的3D游戲中分別測量了6個VR游戲。每個VR應用程序分別運行在具有4K分辨率的客戶端10分鐘并記錄下用戶在虛擬世界中的軌跡,然后為軌跡中的每個網格點生成全景的背景環境幀,并計算相鄰背景環境幀之間的相似度。圖2繪制了每個BE幀與其在軌跡中的下一個相鄰BE幀的相似性(CDF)。從圖2(a)中可以看出,在6個VR應用程序中,前背景未分離時相鄰幀的相似性接近于0,SSIM值大于0.9的只占不到20%。因此,在整個程序渲染過程中,每一幀對應相似度并不高。為了衡量虛擬場景中FI幀與BE幀的分離對幀相似性的影響,使用自適應截斷半徑的方案生成截斷半徑,對6個VR應用程序進行度量,如圖2(b)所示,單個玩家相鄰的BE幀之間的相似性顯著提高。

(a)分離前
上述關于玩家附近的物體降低虛擬世界中渲染的BE幀的相似性以及在2.1的分析中,GPU在渲染背景環境時資源消耗更多。在程序上,根據截斷半徑來區分FI和BE,如圖3所示,其中半徑內的建筑物屬于前景交互內容,半徑外的樓房屬于遠的背景虛擬環境。

圖3 虛擬場景中前景和背景拆分
由于BE往往比FI包含更多的交互對象,特別是對于復雜場景的VR應用,渲染BE在移動設備上仍然具有很大的挑戰性,因此,應該在遠程服務器上進行BE的渲染和預取。FI包含的對象比BE少很多,因此,可以在移動客戶端進行渲染。然而,由于FI接近于用戶的視點,FI將占據最終幀的重要部分,因此,渲染過程中接近BE的幀將保持高質量較大幀。FI幀和BE幀大約是原始BE幀的一半。因此,在服務器上渲染FI幀不會大大降低網絡負載,FI幀應該在移動客戶端進行渲染。
由于VR虛擬世界中的物體密度變化大,用戶在使用過程中會隨時改變移動位置,為每一個位置確定一個截斷半徑在計算上來說是不可行的,因為VR游戲在虛擬世界中可以包含數億個網格點[16]。因此,該文提出一種自適應截斷方案,該方案大大減少了需要計算的截斷半徑的數量,并且可以遞歸地劃分虛擬世界,直到每個子區域不同位置的截斷半徑變得大致均勻。流程如圖4所示。在大多數VR環境中,用戶是以二維方式在移動,因此虛擬世界的遞歸分區為二維。對于每個K值,遵循上述虛擬世界遞歸劃分葉區域為四叉樹,然后測量FI中不滿足最低延遲條件的區域百分比小于0.25%,因此在設計中K值為10是最佳選擇。

圖4 自適應截斷半徑流程
該自適應截斷方案根據虛擬世界中變化的對象密度自適應地生成截斷半徑,最小化虛擬世界中不同位置分離前景和背景的截斷半徑的總數,同時最大化每個葉區域的截斷半徑,從而最大化其中的位置。
針對VR應用程序的渲染負載和CPU,GPU利用率等指標進行了實測與分析。該文提出可以利用客戶端和服務器的協同渲染機制對虛擬環境的前景交互和背景環境分別進行渲染,主要有以下幾個步驟:
(1)在VR應用場景中,將總體的VR渲染負載拆分成渲染前景交互和渲染背景交互兩部分。
(2)前景交互的部分利用本地GPU進行渲染。
(3)背景環境的部分利用服務器端進行預加載和預渲染。
(4)最終在客戶端將前景交互和背景環境的渲染效果進行合并,呈現給用戶。
使用客戶端和服務器協同渲染可以通過計算遷移,很大一部分計算開銷被無線網絡傳送到服務器上實現。本地渲染是隨機的并且難以預測,可以避免實時交互受到較大網絡延遲,并且可以使用預渲染和預加載的方法,避免網絡傳輸時產生的附加延遲。所以,采用協同渲染的方式,若背景環境能在本地客戶端被及時加載,每渲染一幀延遲可減少為本地渲染前景與本地解碼背景所需時間的最大值加上合成前后景的時間。協同渲染需要在終端上將前景交互和背景環境合并,實際渲染系統中(例如OpenGL ES),需要將像素數據填充在一個緩沖區中,進而生成最終畫面呈現給用戶。
在一般的協同渲染器中,如果直接在VR應用中抓取下一幀可能會出現諸多問題,由于用戶可以隨機改變移動方向和位置,并將服務器預渲染的高質量幀傳送給客戶端,這會帶來巨大的帶寬開銷,同時也會增加客戶端CPU的利用率,因此,可以通過以下VR方案來優化預加載背景環境幀。
客戶端請求背景環境幀的指令首先會被發送到幀緩存區,如果緩存區未找到類似幀則會被發送至服務器。在背景環境中,相鄰的BE幀具有很高的相似性,由于虛擬環境可以離散成數個網格點,則網格點i的預取BE通常可以重復用于相鄰幾個網格點。如圖5所示,網格點0處的BE幀位于幀緩存區,且0處的幀緩存可以重用于附近區域,當用戶從0位置移動到2位置時,只需要在到達4位置之前預渲染出4以及5,6,7位置即可。這種幀的重用方式一方面降低了客戶端從服務器預取幀的頻率,另一方面每次預取可以留有更大的時間窗口使得BE幀能夠預加載出來。

圖5 背景環境幀預取示意圖
虛擬世界中的臨近位置可以重用幀緩存,由于上述自適應截斷方案可以導致不同葉區域的不同截斷半徑,因此高速緩存查找算法還需要考慮臨近點的其他因素。
幀緩存查找算法:緩存存儲的是背景環境的相關數據,比如對應的網格點和所屬的葉區域。如果網格點K滿足以下3個條件,則對于網格點K的緩存查找所返回的幀緩存結果為找到:(1)網格點在網格點K一定的閾值內;(2)由于不同葉區域有不同的截斷半徑,則其與網格點需要位于同一葉區域;(3)為了確保渲染的FI與緩存的BE幀合并后沒有缺失,其對應的FI需包含與網格點K相同的對象。這3個條件確保重復使用的BE與FI更好的融合呈現。在滿足上述約束所有緩存幀中,最接近正在查找的網格點的幀將作為最相似的幀返回。
在VR系統中,控制器將輸入用戶的姿態,其中包括位置及角度信息,但是,在任意一個網格點,用戶可以根據自己的需求任意變換位置和視角,因為看到的內容會隨著轉動角度的不同而發生變化。所以,很難預測出用戶在將來旋轉的角度信息。該文提出利用全景圖來進行背景環境采集,全景圖像覆蓋了當前位置360度的所有信息,對任何位置來說,不管是哪一種視角下的內容,均可對全景圖進行裁剪,獲得對應內容。通過全景圖切片編碼方法,當運動到某個位置時,預先加載周圍位置上對應的全景圖切片。
全景圖的顯示過程需要較高的分辨率和較大的數據量,而直接加載在三維場景中會造成系統卡頓。為了獲取高效率的渲染運算,該文使用了動態連續多分辨率(LOD)技術[17],在全景圖數據中構造圖像金字塔模型并依據展示范圍對數據進行動態調度。
圖像金字塔是根據LOD技術構建的一種多分辨率層級模型一一對圖像進行分級分塊。在虛擬場景下,該文利用全景相機進行全景圖像獲取,采用8 192×8 192高分辨率全景圖為原始數據對模型底層進行處理,在向上構建層級模型的過程中,原始數據被重新采樣,分辨率層層遞減,最上層圖像分辨率最小。鑒于所收集全景圖的長寬比是1∶1,適用于四叉樹分塊方法對數據分塊。設定起始數據塊的尺寸為256×256,8 192×8 192分辨率全景圖數據分塊,圖像分辨率如表2所示。圖像分辨率從低到高被命名為LODi(i=0,1,…,5)。基于四叉樹,以行列編碼方式傳輸數據圖像,設左下角數據塊為開始數據,坐標為(0,0)。每塊圖像編碼為xyz,x表示數據塊所在行,y表示數據塊所在列,z表示數據塊所屬層級。假設初始在001位置,此時會預加載好101,111,011對應的全景圖,已被預加載過的全景圖將暫存于本地緩存,避免重復預加載,進而減小了預加載延遲,降低了網絡傳輸開銷。

表2 全景圖金字塔層級與分塊數目
使用全景圖切片模型將會為虛擬世界的每個位置渲染一張全景圖,而非對每一個方向渲染一幀圖像,這已在很大程度上減少了所需幀數。H.264編碼過程中,每個幀被分成大小一致的宏塊。對這些宏塊進行離散余弦變換(DCT)、量化和熵編碼。8*8模塊的快速DCT及其反變換的定義如公式(1)(2)。
(2)
其中,
(3)
其中,Fuv表示未變換的圖像數據,Xuv表示通過DCT后得到的圖像數據。
假定處于虛擬世界的任何地方,存在n個潛在的瀏覽角度,每個普通幀的代銷為10 MB,則下一時刻,用戶移動位置可能是自己的位置以及前后左右4個位置,需要預加載的普通幀大小為5*n*10 MB。而用整幅全景圖加載時,每個全景圖像為4 MB,那么在下一時刻抵達的地點可能用到的全景圖大小為3*4 MB,因為每一次抵達的新地點最多為周圍3個位置。因此,利用相鄰全景圖的相似的特點,對每個需要加載的全景圖編碼為P幀進行壓縮,最終每次只需要加載130 KB的全景圖。
將全景圖加載到客戶端后進行解碼,由于全景圖進行了分片處理,當分片全景圖加載到本地后由客戶端的解碼模塊進行解碼后與前景交互的內容進行合并,VR系統的傳感和失真校正是通過HTC Vive SDK實現的,其傳感器需要從VR頭盔中錄入用戶信息,畸變校正模塊負責把融合的VR內容變換成與人眼距離相適應的圖像傳送到顯示器上。
在VR系統中,利用渲染的全景圖可以提供給用戶更加流暢直觀的感受,在移動到某一個位置的時候,會對周圍對應的全景圖進行預加載,這就需要實時掌握用戶的運動軌跡。該文使用了卡爾曼濾波算法對用戶的軌跡進行動態跟蹤。
卡爾曼濾波(Kalman Filtering)動態軌跡預測方程和觀測方程如公式(4)(5):
X(k+1)=A(k)X(k)+T(k)W(k)
(4)
Z(k)=H(k)X(k)+V(k)
(5)
對于預測軌跡點與實際軌跡點的幾何空間誤差采用公式(6)所示的均方根誤差(RMSE)來計算:
(6)

實驗在PC機上完成,PC設置為Windows 10操作系統,處理器為Intel(R) Xeon(R) W-2102 CPU @ 2.90 GHz,機帶RAM為8.00 GB,GPU為NVIDIA Quadro P400,GPU內存為5.8G,unity版本為2020.3.12f1c1(64-bit)。
將協同渲染方法服務端運行在一臺性能較強的圖形工作站上。將客戶端部分運行在一臺可移動PC機上。通過802.11ac WiFi網絡和服務端相連,此網絡能夠提供400 Mbps的可用帶寬,文中方法使用自建VR虛擬環境進行驗證。
針對虛擬場景設置了3種測試版本:(1)僅在本地客戶端渲染:VR內容由本地計算機的CPU/GPU渲染;(2)僅在遠程服務器渲染:通過WiFi網絡將所有的渲染任務都遷移至一臺高性能圖形工作站進行渲染;(3)通過文中方法:通過本地與服務器計算資源協同渲染VR內容最終呈現給用戶。
該文使用SSIM指標來量化系統渲染的圖像質量。SSIM通常被用于評價最終圖像質量與原始圖像質量之間的質量損失,它的值介于0和1之間,如果SSIM值越接近1,意味著相似度越高,反之相似度越低。表3展示了VR應用在3種渲染情況下的圖像質量以及畫面刷新率。在本地客戶端渲染情況下,SSIM值約為0.8,顯示畫質相對不高。該結果主要由于本地渲染存在計算開銷大,圖像渲染不及時所致。遠程渲染和協同渲染的SSIM均高于0.9,這是由于在服務器端渲染,傳輸內容均通過H.264進行了壓縮和解壓縮,其傳輸的畫質內容較高。

表3 不同渲染方式下的圖像質量和刷新率
為了保證VR系統逼真的用戶體驗,要求系統提供更高的幀數,以實現虛擬場景下更為流暢的畫面。依照參考文獻[18],VR至少要達到60 FPS才能使畫質流暢。而協同渲染的刷新率平均可以達到87 FPS。接下來,修改了虛擬場景下的動態對象的數量,同時測量了不同渲染條件下的FPS指標。圖6展示了不同渲染方式下,渲染動態交互對象的數量以及FPS的變換。可以看出協同渲染方式下渲染動態交互隨著交互數量的增加其刷新率較高且保持穩定。

圖6 動態渲染對象數量變化與FPS的變化情況
在交互響應性方面,該文測量了在3種渲染方式下的CPU處理1幀所消耗的總時間。由圖7可以看出,協同渲染下CPU處理1幀所消耗的總時間平均為0.9 ms,相對于其他兩種方式耗時較短。接下來測量了用戶在虛擬場景中轉動頭顯設備時的轉動延遲和運動過程中的位移延遲。測量結果表明,相比于其他兩種渲染方式,協同渲染可以有效地降低用戶操作過程中的響應延遲,轉動延遲要低于運動延遲是因為在轉動的過程中,任何一個角度的畫面都可以由當前位置的全景圖切片按需加載而成。

圖7 VR應用在移動過程中的用戶感知延遲
該文對3種渲染方式下的CPU/GPU資源利用率和運行過程中的網絡帶寬使用情況進行了實測。從表4可以看出,協同渲染方式下CPU和GPU的利用率以及平均帶寬都較低,這些數據表明,將本地較大的計算資源遷移到服務器端進行計算可以有效地提高渲染效率。

表4 3種渲染方式下的資源開銷情況
以上實驗結果均驗證了VR應用在協同渲染方式下的性能指標,并且可以在現有的設備條件和無線網絡環境下實現高清、低延遲交互。
隨著虛擬現實技術的發展,高清低延遲交互必將成為研究的重要課題。該文針對虛擬場景下用戶瀏覽時產生的響應延遲高、畫面刷新率低、圖像質量差等問題,提出將虛擬場景中復雜的渲染環境進行前景和背景區分,將前景較小的渲染資源放在本地進行計算,背景較大的渲染工作量遷移至另外一臺運算較強的服務器端進行協同渲染。實驗表明,提出的客戶端和服務器協同渲染的方法在刷新率上有了明顯提升,并且資源利用率和用戶感知延遲也有所降低,此方法可以有效減輕用戶在移動過程中的畫面卡頓不流暢等問題,進而實現復雜虛擬環境下的高清、低延遲交互。
由于該文是基于現今無線網絡進行數據傳輸,所能達到的最高網絡帶寬在傳輸過程中也會造成一定的延遲,隨著5G技術的發展以及6G技術的到來,可以從網絡帶寬方面進一步提升,從而降低網絡傳輸速率。