孫奇,樊嘉琪,程健
(北方工業大學計算機學院,北京 100144)
暴風魔鏡是一款虛擬現實頭戴式顯示設備,根據左右眼屏幕顯示圖像的不同,使用戶腦海中產生立體感的圖像,增強用戶的沉浸感;而在此基礎上運行的三維場景是以計算機圖形學為基礎,通過三維技術將游戲元素以立體方式呈現出來,經過信息融合和交互式的三維動態視景使用戶沉浸到虛擬環境中,從而給用戶帶來較為逼真的虛擬現實體驗。
三維場景的實現需要游戲引擎的支持[1],通過游戲引擎將模型、圖片、聲音等不同的元素進行整合從而形成較為逼真的三維環境。而Unity3D游戲引擎具有強大的編輯器功能,跨平臺性等特點,受到開發人員的歡迎。為了開發出較為逼真的太陽系三維展示系統,結合暴風魔鏡和Unity3D游戲引擎進行研究是非常具有實際意義。
畫面切換技術是將左右眼圖像交互顯示在屏幕上的方式[2]。因暴風魔鏡本身包含立體眼鏡和立體顯示模式,這里需要將左右眼圖像(以垂直同步訊號分隔的畫面)分送到左右眼顯示設備,將垂直同步訊號作為快門切換同步訊號即可達成立體顯像的目的。在三維場景制作過程中,畫面切換技術應用在場景跳轉,場景加載等過程中。在這里為了避免立體顯像的閃爍影響用戶的體驗,需要左右眼都需要保證能夠提供至少每秒60個畫面,也就是說垂直掃描頻率必須達到120Hz或更高。
為了增強用戶的體驗,需要設置自動導航,讓用戶沿著固定的路徑進行漫游。這里通過研究Camera Path Animator插件,掌握插件中的各個接口及功能的使用,在熟悉掌握Bezier和Hermite曲線的實現的基礎上,通過設置路線標點,調整轉向等功能來實現自動漫游,一般情況下,自動漫游需要用戶來進行選擇,若一旦選擇自動漫游,不需要進行手工控制;待自動漫游結束后可通過手柄等方式來控制視角的切換。為了增強系統的可玩性,從不同角度,不同地點引入自動漫游是非常有必要的。
為了保證系統的順暢運行,避免因模型加載過多
而影響系統的使用,這里涉及到異步加載,所謂的異步加載會在系統運行時開啟一個異步任務將它們按照規定的次序或方式進行加載并顯示出來,一般而言是通過設置資源腳本,掛載到某對象上,在執行某場景時進行判斷加載,比較適合加載較大的三維場景。因本系統涉及到較多的模型和圖片,若不使用異步加載,會在手機中出現卡頓現象,影響用戶體驗。所以說,研究異步加載技術非常具有必要。
為了增強系統的真實性,提高用戶體驗,需要在三維場景中添加虛擬人物,而虛擬人物需要涉及到角色動畫,如走路,揮手等,這就要用到Unity3D的Anima?tion動畫編輯器,將虛擬人物的動畫序列進行拆分,按照設定的順序和邏輯進行播放,從而使系統更加真實和人性化,在本系統中使用到角色動畫的有空姐,博士、游客等。
由于行星中有不少氣態行星,為了增加真實性,在場景中增加大氣層是非常必要的。這里使用體積霧插件Fog Volume;它是一種體積霧的渲染器,用來模擬大規模的氣體效果,可用來調整在外觀和性能上的需求。有了Fog Volume,可以在游戲中體驗乘坐宇宙飛船穿越大氣層的樂趣,增加了趣味性。
為了完成基于暴風魔鏡太陽系三維展示系統的開發,除了需要研究暴風魔鏡相關技術外,也需要研究Unity3D游戲引擎本身的模型加載和自動漫游技術,為了使三維環境更加具有真實性,研究與Unity3D相關的Camera Path Animator自動漫游插件、Fog Volume體積霧插件,從場景搭建、角色控制等方面將太陽系三維展示系統劃分成角色漫游、場景加載、場景特效、暴風魔鏡SDK等部分,其設計如圖1所示。
角色控制是整個太陽系三維展示系統的核心,其中包括角色漫游和角色動畫。為了使系統較為真實,設置了同伴、空姐、博士等虛擬人物,通過添加角色動畫使不同的虛擬人物活動起來,增強用戶的體驗。角色動畫通過兩種方式實現:一是通過Unity3D中的An?imation動畫編輯器,拆分角色動畫,在系統運行后,自動循環的播放其動畫;二是通過JavaScript編程讓人物移動,通過腳本文件來實現藍牙通信,從而通過手柄來控制人物向不同的方向移動,從而形成不同的動畫效果。
角色漫游分自動漫游和手柄控制兩種方式,自動漫游是虛擬人物乘坐宇宙飛船、在設定好的路徑中,沿著設定的路徑去游覽各大行星;手柄控制是通過藍牙通信方式,將上、下、左、右發送到手機上進行控制。角色漫游涉及到碰撞檢測,若沒有碰撞檢測,無法檢測到執行的操作或移動的方向等操作。

圖1 太陽系三維展示系統劃分
場景控制分為場景搭建和場景跳轉兩部分,場景搭建要考慮到星球分為氣態行星和巖質行星。巖質行星包括水星、金星、火星,這三個星球根據地表不同,額外需要登陸場景。因飛船從地球出發,所以地球上需要地球基地場景。而其他木、土、天王、海王星均為氣態星球,飛船都需要穿過不同大氣層才能近距離觀察星球。所以說,場景搭建是太陽系三維展示系統的基礎,只有搭建好場景,才能實現三維系統。
場景跳轉是在碰撞檢測技術下實現的,由系統中的用戶分別觸碰各種物體,達到切換場景的效果。比如在地球基地,就由“我”來觸碰宇宙飛船,從而跳轉到飛船內部場景。因為場景眾多,在系統中處處體現。
在場景搭建細節處理上,UI設計是不可缺少的環節,它讓游戲劇情更加真實合理化,例如基地方向標,基地監測宇宙圖、飛船行駛準則等二維圖片,需要分別結合到不同場景中推動劇情發展。而在設計過程中,圖片分辨率大小、重繪度、圖片是否壓縮等都是需要考慮的問題。
音頻特效是游戲中的重要組成部分,本游戲主要通過“向導講解”展現教育意義,所以在游戲制作中需要大量宇宙知識文本的撰寫和聲音錄制工作。除了要在不同場景、不同情況下播放語音、背景音樂,還需要在游戲中添加人物行走、開門、登陸等特殊音效,增加系統的真實性和趣味性。Unity3D游戲引擎支持AIFF、WAV、MP3等格式[3],可以依據游戲的需要來選擇不同的格式,這里注意的是需要添加Audio Source控件,將相應的音樂或音效拖入到對應的控件中,后再通過腳本以便執行音樂或音效的播放。
場景特效包含粒子系統和氣態星球兩個部分。粒子系統分為流體粒子、破碎粒子、煙霧粒子等幾類,在宇宙飛船和地球基地中分別有所體現。而在氣態星球中,則應用大氣層粒子特效技術,模擬不同氣體包圍星球、氣體緩慢移動的效果。
場景特效的加入不僅可以美化游戲界面加強游戲的觀賞性,同時還可以使用戶在虛擬的世界中體驗到現實世界中很難經歷的一些景象[4]。
暴風魔鏡的SDK是暴風魔鏡所提供的軟件開發工具包,用于在不同環境下進行開發,方便程序員在不同的開發環境下調用。在這里使用的是Unity3D開發包,具體操作是用虛擬現實攝像機替換Unity場景中的主攝像機,完成左右眼分屏,并獲取手機的陀螺儀數據,啟用頭部跟蹤以調整玩家視角,后使用圖像抗鏡片畸變函數,進行圖像和顏色的特殊處理;為了便于控制,開啟手機藍牙來連接暴風魔鏡的手柄,更好地控制角色漫游。
本文通過研究Unity3D游戲引擎中的角色控制、場景加載、暴風魔鏡SDK等技術,設計并開發了太陽系三維展示系統,從而證明暴風魔鏡和Unity3D游戲引擎聯合開發的可行性和實用性。游戲開發所需的軟件環境是Unity3D,硬件為暴風魔鏡5代。
圖2是在地球基地的漫游截圖,玩家在“博士”的講解下,熟悉地球基地以及各個設備的作用,后通過地球基地進入到宇宙飛船,如圖3所示。

圖2 地球基地截圖

圖3 宇宙飛船內部截圖

圖4 外太空及火星截圖
圖3是聽“博士”介紹八大行星,跟著向導的視角來查看八大行星的外貌特征,圖4是通過宇宙飛船看到的太空場景以及場景跳轉后的火星場景。
本文在掌握Unity3D和暴風魔鏡SDK的相關知識的基礎上,按照設計的劇情實現太陽系三維展示系統的開發,包括場景搭建、角色漫游、音頻特效等技術,從而體現出Unity3D的強大性和兼容性。為了增加游戲的真實性,重點研究了自動漫游技術、Fog Volume氣體效果以及碰撞檢測技術;因制作過程中時間精力有限,在教育方法上稍顯單一,趣味性不強,需要在娛樂性上得到進一步完善和體現。
[1]李杰,孫奇,陳愛玲.基于Unity3D的音樂交互游戲設計與實現[J].現代計算機(專業版),2017,(19):62-65.
[2]百度百科“VR眼鏡”詞條[EB/OL].http://https://baike.baidu.com/item/VR%E7%9C%BC%E9%95%9C/18675220?fr=aladdin,2017-10-25/2017-10-31
[3]楊娜,李杰,廖金巧.基于Unity3D的三維生態莊園游戲設計與實現[J].現代計算機(專業版),2015(01):45-48.
[4]謝韜.基于Unity3D粒子系統的游戲特效實現[J].現代計算機(專業版),2015(24):30-32.1.