吳天成 虞嘉龍 高子卓 姚建華 馮天歌 薛 韡*
(防災科技學院信息工程學院,河北 三河 065201)
增強現(xiàn)實是通過平面識別、圖片識別、空間識別等方法將虛擬世界中的物體對象映射到現(xiàn)實世界中的新興技術(shù),它相較于虛擬現(xiàn)實不同的是,虛擬現(xiàn)實注重沉浸式的體驗,而增強現(xiàn)實注重虛實結(jié)合,實時交互,以達到提升內(nèi)容趣味性、增強用戶現(xiàn)實體驗的目的。隨著技術(shù)的發(fā)展,增強現(xiàn)實已經(jīng)極大的融入進了我們的日常生活中,如AR 地圖導航、AR 試衣?lián)Q裝,也有風靡一時基于增強現(xiàn)實技術(shù)的pokemon go 游戲等。
本項目基于Unity3D 引擎和Vuforia 平臺,以近年來常見的自然災害為主題,將救災和逃生作為核心玩法,制作移動端的AR 游戲。通過增強現(xiàn)實技術(shù)將災害場景拉近到玩家眼前,在玩家玩游戲的同時,激發(fā)他們認識了解自然災害相關知識的學習興趣。
本項目使用了Unity3D 游戲引擎和Vuforia AR 制作平臺提供的插件。其中Unity3D 是Unity Technologies 公司制作的一款具有良好跨平臺性、以C#為編程語言、在當下中國市場大火的2D/3D 游戲制作引擎;Vuforia 是實現(xiàn)增強現(xiàn)實技術(shù)的平臺,開發(fā)者可以使用它提供的平面識別、空間識別、圖片識別等完成AR產(chǎn)品制作,本項目主要通過使用Vuforia 為Unity3D專供的插件,完成了平面識別,圖片識別展示AR。
平面識別需要經(jīng)過以下步驟:運動跟蹤→平面檢測→深度計算→虛擬對象渲染→創(chuàng)建錨點→環(huán)境光線及強度檢測。
運動跟蹤:AR 應用通過用戶手機攝像頭攝取到的圖片進行兩個任務:第一個任務實時計算攝像頭的姿勢,將在AR 項目制作時Unity3D 中的虛擬攝像頭與現(xiàn)實攝像頭保持對齊,保證虛擬對象渲染出來時的位置角度等與Unity3D 中設置的位置角度一樣;第二個任務是為捕捉到的現(xiàn)實世界圖像設置特征點。
平面檢測:AR 應用根據(jù)在運動跟蹤環(huán)節(jié)中設置的特征點,認識在現(xiàn)實世界中哪些是平面和垂直面。
深度計算:該環(huán)節(jié)依賴于攝像機的配置。AR 應用根據(jù)RGB攝像機創(chuàng)建深度圖,計算攝像機到目標點的距離,從而可以讓虛擬對象更好的和目標進行貼合,設置虛擬對象相對于目標的位置。
虛擬對象渲染:AR 應用會根據(jù)之前的幾個步驟獲得的數(shù)據(jù),設置虛擬對象的位置,角度以及距離攝像機的距離,將虛擬對象渲染到現(xiàn)實世界中并覆蓋攝像機攝取到的原始圖像。
創(chuàng)建錨點:錨點用于虛擬對象相對于現(xiàn)實世界中的定位,它使攝像機在移動過程中,所創(chuàng)建的物體不會隨著位置或角度的變化而發(fā)生改變,同時也保證虛擬對象在現(xiàn)實世界中的渲染穩(wěn)定性。
環(huán)境光線及強度檢測:在Unity3D 中,可以設置虛擬對象的材質(zhì)是否為受光材質(zhì),如果不是,虛擬對象的渲染將不會受到光照的影響而改變自身表面的明暗程度;如果是受光材質(zhì),虛擬對象除自身在Unity3D 中的添加的光源影響外,AR 應用還會采集環(huán)境中的光線強度,對虛擬對象進行平均增強和顏色矯正,使虛擬對象最終在現(xiàn)實世界中的渲染受到環(huán)境光的影響,以增加虛擬對象的真實感。
圖片識別也叫增強圖像,需要以下步驟完成:數(shù)據(jù)庫增添圖像→圖像對比→建立坐標系→虛擬對象渲染→創(chuàng)建錨點→環(huán)境光線及強度檢測。
數(shù)據(jù)庫增添圖像:先在AR 應用中創(chuàng)建一個數(shù)據(jù)庫,并在數(shù)據(jù)庫中添加自己想要識別的圖片。在Vufroia 中會根據(jù)添加的圖片進行評級,評級的標準依據(jù)于特征點的算法,圖片的紋理越豐富,對比度越高,他能認定的特征點就越多,評定級數(shù)也就越高,如果評定級數(shù)較低,就代表該圖片識別度過差,開發(fā)者需要更換圖片或?qū)D片進行修改。
圖像對比:在用戶使用AR 圖片識別功能時,類似于人臉識別算法,AR 應用會通過攝像頭攝取到的圖像中的有效特征點和自身數(shù)據(jù)庫中的圖片特征點進行比對,如果不同,則識別失敗;如果相同,則會進行下一步。
建立坐標系:AR 應用會根據(jù)圖片識別時攝像頭相對于圖片的姿勢以及開發(fā)時在Unity3D 中的虛擬坐標,在現(xiàn)實世界中建立坐標系。
虛擬對象渲染:將在Unity3D 中創(chuàng)造的虛擬對象依據(jù)于虛擬坐標系中的位置,相對于剛建立的坐標系顯示出來,并覆蓋攝像機攝取的原始圖像。
創(chuàng)建錨點:在物體出現(xiàn)的同時,AR 應用會在該位置創(chuàng)造一個錨點,繼續(xù)跟蹤該點的位置,角度等數(shù)據(jù)變化,以便于攝像機移動時哪怕拍攝的目標圖片相對于攝像機的角度位置發(fā)生變化,之前創(chuàng)造的虛擬對象的位置和角度也會隨著圖片改變。
環(huán)境光線及強度檢測:和平面檢測一樣,讓虛擬對象的光照渲染受到周圍環(huán)境光的影響,增加真實度。
在AR 災害模擬游戲中,創(chuàng)作了3 個小游戲,分別以常見的自然災害:火災、地震以及洪水為主題,各個游戲場景都盡量貼近現(xiàn)實。在火災、洪水小游戲中,玩家扮演施救者,抵御災害并將npc 從火災,洪水中救出,同時模擬災害的真實性,游戲難度會隨著游戲時間的增加而加大;在地震游戲中,玩家扮演逃脫者,躲避重重障礙,順利逃離到安全地點。
內(nèi)容:
玩家通過操控AR 相機下的消防水泵,對于出現(xiàn)在周遭的火情進行消防滅火行動,玩家需通過調(diào)整手機的位置將水泵噴口對準火源進行滅火搶救行為,若滅火不及時,火勢會逐漸擴大,最后判定此次滅火搶救行動失敗。
在游戲整體上是采用了ARFPS 類型的射擊游戲的思想,玩家通過拿著手機進行移動,來參與滅火行動,程序通過感應玩家上下晃動手機,來控制水的射擊方向,增加玩家的體驗感和新鮮感。
游戲設計的目的是為了教育玩家,當火情來臨時,我們也可以采取的應對措施以保護我們自身的生命財產(chǎn)安全,當我們置身于火情之中,可以運用身邊的消防器具撲滅火勢。
技術(shù):
本游戲主要通過Vuforia 的ARCamera 功能實現(xiàn),在世界坐標下產(chǎn)生火情,由玩家操控相機位置對準火源實現(xiàn)滅火。
游戲通過獲取手機陀螺儀移動參數(shù)的方式,綁定ARCamera的移動,代碼部分如圖1 所示。
圖1 ARCamera 綁定手機陀螺儀移動
陀螺儀可以對轉(zhuǎn)動、偏轉(zhuǎn)的動作做很好的測量,這樣就可以精確分析判斷出使用者的實際動作以實現(xiàn)在游戲中模擬真實人物的移動,以將虛擬現(xiàn)實中的火苗同步于現(xiàn)實世界的坐標中,方便玩家進行不止固定于一處的滅火模擬。
在滅火的行為上,通過Unity3D 中的Particle System 進行火焰、水流、以及煙霧的制作,通過Particle System 的collision 中的send collision message 選項,與火焰進行粒子間的碰撞檢測,實現(xiàn)水撲滅火苗的功能。
在拓展功能方面,運用了Vuforia 的ImageTarget 下的VirtualButtons,設計了玩家通過掃描特定的現(xiàn)實中的滅火器,并通過觸碰滅火器來在游戲中實際獲得滅火器這一道具的行為,增加游戲的多變性。
在游戲管理流程方面,設立了GameManager 與UIManager兩個腳本進行管理控制,項目中導入了DOTween 輔助進行UI界面的設計。通過GameLevel 綁定初始生成的火苗數(shù)量,火勢蔓延的速度,來為游戲進行關卡設計,增加游戲的可玩性。
內(nèi)容:
玩家通過AR 相機掃描標識圖,掃描成功后會在標識圖表面生成啟動游戲的虛擬按鍵,按下按鍵所在的標識圖區(qū)域即可啟動游戲。游戲開始時,在標識圖的上方會生成地圖,人物在地圖末端自動開始向前運動,隨著人物的前進,地圖上還會隨機生成障礙物。而標識圖表面還設有控制人物左右移動的虛擬按鍵,玩家需在設備外對識別圖所顯示的按鍵區(qū)域進行遮蔽,來讓人物順利規(guī)避障礙物,從而使人物順利前行。若人物未能及時規(guī)避障礙物,則會因未能及時到達安全地點而視為游戲失敗。游戲大體與跑酷游戲類似,操作簡單,玩家可通過操控人物移動的過程中,不再只是單一視角進行觀察體驗,還可以通過調(diào)整設備位置來進行多角度的游戲體驗。
技術(shù):
本游戲是通過掃描5.12 防震減災日的標識而觸發(fā)的AR 小游戲,游戲主要運用了Vuforia 的ImageTarget 圖片識別功能,通過設備攝像頭對識別圖的掃描,并在成功識別后在設備界面生成已經(jīng)創(chuàng)建好的虛擬游戲場景。
本游戲還使用了ImageTarget 的VirtualButtons 虛擬按鍵功能,將現(xiàn)實圖片和虛擬場景中的人物串聯(lián)起來,在現(xiàn)實圖片的特征明顯處設置虛擬按鍵,通過玩家對現(xiàn)實圖片的特征處遮掩,識別圖片的哪一部分特征點消失,從而觸發(fā)該位置按鍵的功能來控制設備中人物的左右移動。
在預置的虛擬游戲場景方面,運用了Unity3D 的碰撞檢測和觸發(fā)檢測,為游戲場景中的人物、車輛、路牌、地面等多個物體添加碰撞體,在人物與其他物體接觸時能產(chǎn)生現(xiàn)實的阻擋和減速效果。為了實現(xiàn)人物持續(xù)的前行,在人物與指定地面的碰撞體接觸的時候,會調(diào)用相應函數(shù)在場景中添加新路段,對道路進行延長,使得人物能持續(xù)前行,如圖2。
圖2 GameManager 對添加新路段的函數(shù)實現(xiàn)
而新道路生成的物體,使用了Game Manager 對于隨機生成物體進行管理,為出生點、到達點等觸發(fā)檢測的物體設立了列表list,便于人物在觸發(fā)碰撞檢測的時候,調(diào)用對應列表的物體進行生成。
內(nèi)容:
此游戲以為加強大家的防洪意識而創(chuàng)作,通過開始的UI 界面,開始游戲。根據(jù)海拔,水位以及方塊的搭建來判斷游戲的進程。居民目前的海拔高度會受答題情況影響,如果水位于搭建的“堤壩”高,且高于居民海拔則游戲失敗,如果水位達到峰值且游戲任然未失敗則游戲勝利。
技術(shù):
通過Particle System 添加下雨的特效,符合洪水來臨前暴雨的情況,增強情景代入感和緊張感,不會使游戲場景太過單一。首先準備一張雨點圖片,將他設置成材質(zhì)球。shader 用legacy shader/particles/additive,選貼圖,把顏色改成深藍色。創(chuàng)建一個粒子系統(tǒng),命名為rain,把rotation 的x 從-90 改成90。把renderer 里的material 改成自己新建的材質(zhì),粒子就會變成雨點,將shape 改成box,形成降雨。duration 和start lifetime 來調(diào)節(jié)循環(huán)周期和粒子存活時間,start speed 和gravity modifier(重力增強)調(diào)節(jié)速度,max particles 調(diào)節(jié)粒子的密度(模擬雨量大小),rate over time 同時影響了密度和速度,最后通過start size更改雨點大小。
俄羅斯方塊代碼的實現(xiàn)。通過向下滑屏來控制方塊下落,向左、向右控制方塊右移、向上控制旋轉(zhuǎn)。建立代碼Queue 來控制積分面板,建立一個新的隊列。使用Random.Range 來隨機生成隊列,找到第一個賦值給currentPieces,并銷毀在隨機生成中的第一個,利用遞歸將其移到游戲框內(nèi)并實現(xiàn)循環(huán)。當游戲框與下一個剛生成的方塊接觸則執(zhí)行Time.timeScale = 0f 終止游戲。最后建立二維數(shù)組來遍歷目前鋪滿的最高度,當高度小于Slider 中value 時游戲失敗。
UI 界面的設置。是用UI 中Slider 制作海拔與水位,控制value 的大小控制填充狀態(tài)。建立三個Panel 界面作為問題的面板設置按鈕作答。結(jié)果將影響居民撤離海拔的高度,即海拔slider 的value,在水位上升時若超過堤高,則游戲失敗。
增強現(xiàn)實技術(shù)提供了新的內(nèi)容展示方式,改變了人們只能通過平面演示的現(xiàn)狀。本項目將游戲和增強現(xiàn)實技術(shù)相結(jié)合,極大的提升了游戲的互動性和立體感,游戲以自然災害為主題,讓玩家能夠在玩游戲的同時,通過在現(xiàn)實生活中渲染出的災害場景,更立體直觀的了解災害來臨時毀滅性的情景,在游戲娛樂的同時,不忘激發(fā)玩家對自然災害知識的學習興趣。