沈劍鋒, 姜忠鼎
(復旦大學 上海市數據科學重點實驗室, 上海 201203)
?
基于游戲引擎的柱面主動立體多投影顯示系統
沈劍鋒, 姜忠鼎
(復旦大學 上海市數據科學重點實驗室, 上海 201203)
為了使面向柱面的主動立體多投影顯示系統能夠覆蓋用戶更多的視野空間,營造強烈的沉浸感,為人們帶來震撼的視覺體驗。游戲引擎是互動圖形應用的集成化開發工具,能夠提高多投影顯示系統的開發效率,降低系統復雜度。然而,現有基于游戲引擎只支持主動立體顯示的圖形系統中間件,不支持柱面多投影顯示系統。因此,基于游戲引擎,整合了多投影校正技術、柱面全方位立體影像生成技術以及主動立體顯示技術,設計并實現了面向柱面的主動立體多投影顯示系統。實驗結果表明,該系統具有良好的顯示效果。
柱面顯示; 立體成像; 多投影校正; 游戲引擎
隨著圖形技術和顯示技術的快速發展,人們對顯示系統要求越來越高。多投影顯示系統以其尺寸大、分辨率高、支持多人同時觀看等特點,在教育、娛樂、仿真、虛擬現實以及數據可視化等領域有著越來越廣泛的應用。多投影顯示系統的顯示表面可能有多種形狀,其中面向柱面的多投影顯示系統能夠覆蓋用戶更多的視野空間,結合柱面立體影像生成技術和主動立體顯示技術為用戶提供強烈的沉浸感。
游戲引擎是互動圖形應用的集成化開發工具,提供了高性能的基礎系統、豐富的功能和高效的開發流程。基于游戲引擎開發多投影顯示系統,能夠提高開發效率,簡化系統復雜度。Unity[1]和Unreal[2]是目前主流的商業游戲引擎,功能強大,且具有很好的擴展性。
基于游戲引擎開發面向柱面的主動立體多投影顯示系統具有重要意義,開發此類系統涉及的技術點包括多投影校正技術,立體影像生成技術和主動立體顯示技術等。然而,現有基于游戲引擎且支持主動立體顯示的圖形系統中間件不支持柱面顯示表面。MiddleVR for Unity[3]是基于Unity引擎的圖形系統中間件,提供簡單易用的接口幫助開發者進行虛擬現實應用的創作。MiddleVR能夠生成平面立體影像并進行主動立體顯示。然而,MiddleVR不支持帶有重疊區的多投影拼接融合,因而無法直接運行在柱面多投影系統中。MiddleVR可以借助桌面融合技術在柱面多投影系統中運行,但必須依賴于專業顯卡。此外,MiddleVR不能生成柱面全方位立體影像,應用范圍有限。CaveUDK[4]是針對Unreal游戲引擎的虛擬現實框架,支持用戶頭部跟蹤和多種交互設備,但僅用于開發CAVE系統。本文基于Unity游戲引擎,整合了柱面多投影校正技術、柱面全方位立體影像生成技術和主動立體顯示技術,設計實現了面向柱面的主動立體多投影顯示系統,并通過實驗驗證了系統的顯示效果。相比MiddleVR,本文系統支持帶有重疊區的柱面多投影校正,不依賴專業顯卡和桌面融合技術,能夠生成柱面全方位立體影像,同時提供主動立體和紅藍立體輸出,便于調試。
基于游戲引擎的柱面主動立體多投影顯示系統整體架構如圖1所示。

圖1 基于游戲引擎的柱面主動立體多投影顯示系統架構
本系統主要分為兩個子系統,分別是柱面多投影校正系統和面向柱面顯示表面的三維圖形應用。
柱面多投影校正系統:柱面投影校正系統在離線階段進行柱面多投影校正,使所有投影機的輸出畫面對齊,且重疊區過渡平滑,所有投影畫面共同顯示一幅完整的柱面影像。系統以文件形式輸出投影校正數據。本文使用文獻[5]中基于交互式網格編輯的多投影校正技術。
面向柱面顯示表面的三維圖形應用:面向柱面顯示表面的三維圖形應用是柱面多投影顯示系統中實時運行的程序,基于Unity引擎開發,主要包含如下5個部分:
1) 虛擬場景:虛擬場景是系統的基本組成部分,虛擬場景內容根據應用的具體需求進行開發。本文系統的虛擬場景是一個射擊類游戲場景。
2) 集群同步模塊:集群同步模塊負責在多個節點之間逐幀同步虛擬場景中的游戲對象和UI,并確保各節點同步刷新畫面。本文直接使用文獻[6-8]中基于Master-Slave架構的集群同步技術。
3) 柱面立體影像生成模塊:該模塊使用基于多視點的全方位柱面立體影像生成方法[9-10]為虛擬場景實時生成柱面立體影像。
4) 幾何與顏色校正模塊:該模塊負責在程序啟動時讀取投影校正數據,并在運行時根據投影校正數據對生成好的柱面立體影像進行幾何與顏色校正。
5) 主動立體顯示插件:該插件以主動立體的方式將校正后的畫面輸出到每臺投影機,并通過硬件同步技術解決集群中多節點之間左右眼畫面不同步的問題。
下文中,我們介紹多投影校正系統,柱面立體影像生成模塊以及主動立體顯示插件。
本文采用基于交互式網格編輯的多投影校正方法。該方法為每臺投影機創建一張變形網格,通過手工編輯的方式使各個投影機的網格對齊后均勻分布在投影幕上,如圖 2所示。

圖2 投影幾何校正示意圖
接著,根據網格重疊關系計算投影畫面的亮度衰減,使畫面重疊區平滑過渡。系統最終為每臺投影機生成一張變形網格和一張用于保存亮度衰減值的Alpha貼圖。面向柱面顯示表面的三維圖形應用在啟動時讀取這些校正數據,并在運行中實時對柱面立體影像進行校正輸出,如圖 3所示。




圖3 程序內幾何與顏色校正示意圖
人們在觀察柱面時,需要通過不斷旋轉觀察角度來觀察柱面的不同區域。Peleg等人提出的多視點全方位立體影像生成方法模擬了這一過程,令立體相機在柱面中央進行多次旋轉,從不同的視點分別拍攝不同的柱面區域,并將生成的一系列平面立體影像拼接為柱面立體影像。
本文基于上述方法,在三維立體應用中為虛擬場景生成柱面立體影像。我們依據柱面投影幕的形狀大小,在虛擬場景中生成一個柱面成像表面。接著,將柱面剖分為若干片段,針對每個柱面片段在拍攝環上生成一對左右眼透視相機,如圖 4所示。

圖4 柱面剖分及立體相機示意圖
120度柱面被剖分為8個片段,從拍攝環出發的實線和虛線分別表示左眼相機和右眼相機的水平視域。
柱面立體影像實際為一張左眼柱面影像和一張右眼柱面影像。生成左右眼柱面影像時,我們首先將所有左右眼相機捕捉的矩形畫面直接拼接為左右眼原始影像,然后通過柱面重映射的方法,找到左右眼柱面影像每個像素點在左右眼原始影像中對應的紋理坐標,采樣出顏色,并填充到左右眼柱面影像中,如圖 5所示。

圖5 全方位柱面立體影像生成過程示意圖
上述映射關系可以用查找表(Lookup Table)來保存,查找表本質為一張紋理,大小和左右眼柱面影像相同,二者像素點一一對應。查找表的每個像素保存的不是顏色信息,而是左右眼柱面影像中每個像素在左右眼原始影像中對應的紋理坐標。這種映射關系在運行時保持不變,因此我們可以在初始化階段預計算得到查找表,并在運行時根據查找表快速生成柱面立體影像。
由于相機使用斜投影方式且相鄰相機的位置存在差異,上述方法生成的左右眼柱面影像在柱面剖分位置會存在折痕。對此,我們在剖分柱面時令相鄰相機的水平視域產生重疊,如圖 6所示。

圖6 帶重疊區的柱面剖分及立體相機示意圖
接著,在柱面重映射過程中,對于重疊區內的點,我們從重疊區對應的兩個相機拍攝片段中采樣出顏色進行融合,融合所需的權重值根據該點到重疊區兩側的距離進行計算,越靠近的片段權重值越高。這種使重疊區漸變過渡的方法能削弱甚至消除折痕。這里的權重值也可以在初始化階段算好,并寫入查找表。查找表使用4通道浮點數紋理,其中R和G通道保存紋理坐標,B通道保存權重值,A通道暫不使用。由于重疊區的存在,左眼和右眼柱面影像都需要兩張查找表,查找表的使用方式,如圖 7所示。

圖7
為立體影像生成查找表的過程包含大量浮點數坐標計算,CPU算法耗時較長,會導致程序啟動緩慢。本文系統基于可編程圖形渲染管線,在著色器中進行柱面重映射和顏色權重計算,利用顯卡的浮點計算能力和并行計算能力,大幅縮短了查找表的生成時間。
立體顯示技術通過模擬人類左右眼視差產生立體感,常見的立體顯示技術包括紅藍立體,偏振立體和主動立體等。紅藍立體顯示會產生色差,影響觀看體驗。偏振立體使用兩組投影機分別顯示左右眼畫面,需要特制的投影幕,成本較高。主動立體技術則能避免上述問題。
主動立體顯示技術本身比較簡單,只需在渲染階段將左右眼畫面分別渲染到左右眼后臺緩沖區即可。然而,Unity引擎沒有提供主動立體顯示功能,由于引擎未開源,我們也無法修改其窗口管理和渲染系統的代碼。因此,我們采用變通方法,利用插件技術實現主動立體顯示。
主動立體顯示技術通常使用OpenGL圖形庫中與QuadBuffer有關的函數,因此Unity程序需使用OpenGL內核。在應用初始化階段,主動立體插件首先創建立體模式的OpenGL窗口,并通過wglShareLists函數得到Unity渲染系統的OpenGL上下文使用權限。接著,Unity程序會創建兩張RenderTexture用于渲染每幀的左右眼畫面,我們通過GetNativeTexturePtr函數獲取RenderTexture在OpenGL系統中的紋理ID,并將該ID告知主動立體插件。在渲染階段,主動立體插件通過紋理ID獲取每幀的左右眼畫面,將其渲染到立體窗口的后臺緩沖區,最后通過wglSwapLayerBuffers函數輸出畫面。這樣,我們就借用插件創建的窗口輸出了主動立體游戲畫面,整體流程如圖 8所示。
為了便于調試,我們還可以通過配置文件讓插件輸出紅藍立體畫面。
由于集群系統存在網絡延遲和硬件差異,單純的軟件同步技術無法保證所有節點交換前后臺換緩沖區的時間嚴格一致,此外,各個節點顯卡自動切換左右眼畫面的時間也存在差異,這些問題可以用硬件同步技術來解決。硬件方面,我們為集群中每個節點安裝一塊硬件同步卡,同步卡與顯卡相連,不同節點的同步卡使用RJ45網線串聯。軟件方面,我們只需在插件初始化階段,以立體窗口的設備上下文為參數,調用OpenGL擴展庫中的wglJoinSwapGroupNV和wglBindSwapBarrierNV函數,即可開啟硬件同步。

圖8 通過插件在Unity引擎中實現主動立體顯示的流程圖
4.1 實驗環境
本文實驗環境,如圖 9所示。

圖9 實驗測試環境示意圖
主機A與主機B接入同一局域網,主機A連接兩臺投影機,主機B連接一臺投影機。3臺投影機投射在半徑4米,高2.6米,120度張角的柱面投影幕上。
系統硬件配置如下:主機A配備Intel Core i7-4970處理器,16GB內存。主機B配備Intel Core i5-2320處理器,8GB內存。主機A和主機B均配備了NVIDIA Quadro K4200顯卡和Quadro Sync同步卡。3臺投影機均為麗訊標清投影機,支持主動立體顯示。網絡環境為百兆局域網。系統的開發和運行環境為Microsoft Windows 7-64bit操作系統,Unity 5.4.5以及Microsoft Visual Studio 2015。
4.2 實驗結果
本節從柱面多投影校正系統,柱面立體影像生成模塊,主動立體顯示插件三方面進行實驗。
(1) 柱面多投影校正系統
本文使用交互式網格編輯的方式對柱面多投影系統進行校正,幾何與顏色校正前后的投影網格,以及圖片顯示效果,如圖 10所示。

(a)幾何校正前的投影網格(b)幾何校正后的投影網格

(c)幾何與顏色校正前的圖片顯示效果(d)幾何與顏色校正后的圖片顯示效果
圖10 幾何與顏色校前后效果對比
(2) 柱面立體影像生成模塊
我們在系統中使用120度的柱面成像表面,剖分為8個片段,片段重疊角為5度。左右眼相機拼接出的原始影像,圖 11所示。左右眼相機使用的查找表,如圖 12所示。根據查找表生成的左右眼柱面影像,如圖 13所示。合成出的柱面紅藍立體影像,如圖 14所示。
我們實現了柱面立體影像查找表(Lookup Table)生成方法的CPU算法和GPU算法,并通過實驗對比二者的性能。我們統計了兩種算法在不同分辨率下的平均耗時。結果如圖 15所示。

(a) 所有左眼相機拼接成的原始影像

(b) 所有右眼相機拼接成的原始影像
圖11 左右眼相機拼接成的原始影像




圖12 左右眼柱面影像的查找表

(a) 左眼柱面影像
圖13 根據查找表生成的柱面影像

圖14 左右眼柱面影像合成出的柱面紅藍立體影像

圖15 柱面立體影像的查找表(Lookup Table)生成算法性能對比
CPU算法的耗時與查找表分辨率正相關,耗時較長。而GPU算法的耗時始終保持在3~4毫秒,性能明顯優于CPU算法。
(3) 主動立體顯示與硬件同步
為了驗證主動立體顯示效果和硬件同步效果,我們在分別在場景左眼畫面的上半部分和右眼畫面的下半部分顯示出當前幀的幀號,然后用相機抓拍程序運行時畫面。開啟硬件同步后,1/30秒的低速快門拍攝的游戲畫面,可以看到相機捕捉到了左右眼疊加的主動立體畫面(兩行幀號),如圖 16所示。

圖16 開啟硬件同步后,1/30秒低速快門拍到的畫面
關閉硬件同步后,使用1/125秒的高速快門拍攝的兩幅游戲畫面。如圖 17所示。可以看到左側和中部畫面的幀號與右側畫面的幀號錯位,說明左右眼畫面不一致。開啟硬件同步后,使用1/125秒的高速快門拍攝的游戲畫面,可以看到系統在同一時刻顯示的左右眼畫面保持一致,如圖 18所示。


4.3 系統運行效果
在柱面多投影系統中運行主動立體應用的最終效果,如圖 19所示。

本文基于Unity游戲引擎,整合了多投影校正技術、柱面全方位立體影像生成技術、面向游戲引擎的主動立體顯示技術,設計實現了面向柱面的主動立體多投影顯示系統。實驗結果表明,系統具有良好的柱面立體影像生成效果和主動立體顯示效果,硬件同步技術則保證了立體畫面的嚴格一致性。未來系統將整合基于相機反饋的柱面投影校正技術,提升投影校正的效率和準確性,并在更大規模的集群中進行測試。
[1] Unity Game Engine [EB/OL]. [2017-04-16]. http://www.unity3d.com/
[2] Unreal Engine 4[EB/OL]. [2017-04-16]. https://www.unrealengine.com/what-is-unreal-engine-4.
[3] MiddleVR for Unity[EB/OL]. [2017-04-16]. http://www.middlevr.com/middlevr-for-unity/
[4] Lugrin J, Charles F, Cavazza M. CaveUDK: a VR game engine middleware[J]. Virtual Reality Software and Technology, 2012.
[5] 陸明, 陳恒, 姜忠鼎. 面向矩形融合區校正的多投影顯示系統的設計與實現[J]. 微型電腦應用, 2015(11):1-4.
[6] 羅璇, 馮一洲, 姜忠鼎. 一種面向網絡游戲的沉浸式顯示框架[J]. 計算機應用與軟件, 2011, 28(12):1-4.
[7] 謝文斌. 基于游戲引擎的沉浸式立體顯示游戲框架設計與實現[D]. 上海:復旦大學, 2013.
[8] 宋輝,姜忠鼎. 基于游戲引擎的圖形用戶界面集群渲染系統設計與實現[J]. 微型電腦應用, 2016(10):5-9
[9] Peleg S, Ben-Ezra M. Stereo Panorama with a single camera [A]. In: Proceedings of IEEE Computer Society Conference on Computer Vision and Pattern Recognition [C]. USA:IEEE, 1999:395-401, vol.1.
[10] Peleg S, Ben-Ezra M, Pritch Y. Omnistereo: Panoramic stereo imaging [J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2001, 23 (3):279-290.
Cylindrical Multi-projector Active Stereo Display System Based on Game Engine
Shen Jianfeng, Jiang Zhongding
(Shanghai Key Laboratory of Data Science, Fudan University, Shanghai 201203, China)
Cylindrical multi-projector system can create strong sense of immersion. Development of this system based on game engine can greatly improve the efficiency and reduce the complexity. However, the existing game engine supports only middleware of active stereo display system, does not support multi-projector system for cylindrical surface. In this paper, we integrate the multi-projector correction technique, stereo image generation technique and active stereo display technique, design and implement a multi-projector active stereo display system for cylindrical surface based on game engine. Experiments show that the system has good display effect.
Cylindrical display; Stereoscopic imagine; Multi-projector correction; Game engine
國家自然科學基金項目(60803064)
沈劍鋒(1991-),男,碩士研究生,研究方向:計算機圖形學和虛擬現實。 姜忠鼎(1976-),男,副教授,研究方向:計算機圖形學和虛擬現實。
1007-757X(2017)07-0001-06
TP313
A
2017.04.01)