- 正文開始 -
如果對AR的開發感興趣,或者初學AR開發的人想小小炫技一下,傳送門真的是一個很好的入門項目。實現起來非常簡單,只要與有一個內面顯示,外面隱藏的場景模型就可以了,當然,模型最好有一個門,這樣才有穿門而入的感覺,也會有虛實兩屆穿越的感覺。
2020年初,新冠疫情席捲全球,受其影響,人們取消了大量出行計劃。儘管全球各地通過網際網路發起了諸如線上音樂會等活動來增添居家樂趣,但旅行計劃被打斷的遺憾仍然存在,為彌補此遺憾,本產品聚焦居家旅遊,參考哆啦A夢任意門的思路,實現在AR場景下的虛擬遊覽。任意門的創意體現了90後的童年記憶,也包含了對童年的懷念。
方案
/ 開發引擎選擇 /
Unity是全球應用非常廣泛的實時內容開發平臺,為遊戲、汽車、建築、影視動畫等領域的開發者提供強大且易上手的創作工具,全平臺所以遊戲中有超過一半都使用Unity 進行創作【1】。
然而開發新手並不了解各種引擎之間的區別,在尋找教學視頻的過程中了解到Unity具有直觀的GUI開發界面,同時提供豐富的教程,對開發新手來說上手較為容易。同時,Unity提供多種AR、VR引擎,給後續開發提供了許多便利。因此選擇Unity作為開發引擎。
/ AR引擎選擇 /
目前世界主流的AR SDK提供廠商主要是Vuforia、Metaio等。其中Metaio在被Apple重金收購後就再未對外公開過SDK,經過兩年的封閉開發,Apple已經打造出了強大的ARKit,能夠基於龐大的IOS和iPad設備生產出各種驚豔的AR產品。Vuforia也在2015年11月被PTC公司收購,後續一直在更新並提供SDK,眾多的功能以及高質量的識別技術,使得Vuforia深入人心。
而ARCore是谷歌於2017年推出的搭建增強現實應用程式的軟體平臺。它可以在現下多種流行開發平臺中使用,本身封裝了一套本地API,通過它可以實現一些最基礎的AR效果,比如手勢監聽、世界定義、燈光識別等【2】。
由於開發者的電腦不是IOS系統,在選擇AR引擎時首先排除了ARKit,而隨著Unity版本的更新,Vuforia中的一些函數無法繼續使用,因此決定選擇ARCore。
/ 模型選擇 /
本產品最初的設計並不是用於虛擬旅遊,而是通過任意門傳送到一個完全虛擬的動漫世界,這是開發者個人愛好的體現。然而在以動漫《夏目友人帳》中場景為藍本進行建模的過程中,開發者感受到了個人能力的不足,預感將無法完成模型的搭建,因此轉變思路,忍痛放棄動漫世界的主題,將目光投向居家旅遊。
為給使用者帶來身臨其境的體驗,預期建模效果是能實現真實場景到AR場景70%-80%的復刻,這對建模精度的要求很高,受個人能力限制,開發者清楚地認識到實現這一目標的可能性較低,因此選擇在模型網站上尋找現有建築模型,用於產品設計。
開發流程
/ 軟硬體 /
本產品的實現過程中,硬體採用安卓系統智慧型手機華為P30。
軟體採用Unity、Google ARCore和Visual Studio編譯環境。
/ 開發結構/
圖1 開發結構圖
Fig.1 Project development structural diagram
綜上對開發引擎、AR引擎、使用模型以及軟硬體的選擇,本產品的開發結構如上圖所示。
/ 功能描述 /
本產品是一款AR虛擬旅遊軟體,打開軟體即可出現任意門,在門外可觀察到門內景象,而繞至其背後則只能看到門的背面,走進任意門可對門內景物進行全方位的遊覽。
/ 開發過程 /
ARCore導入及環境配置
在ARCore-Google Developer官方網站中下載arcore-unity-sdk-v1.1.0.unitypackage,將其導入Unity,導入後做以下更改:ARCore中控制識別圖片的腳本為ARCore Session,其具有public變量Session Config,當完成識別後將顯示指定模型。控制待顯示模型的腳本為ARCore Session Config,因此將3D模型生成Perfab,並將腳本中的變量Grid Visualizer指向該Perfab。
圖2 ARCore腳本設置
Fig.2 Scripts setting
圖3 環境腳本設置
Fig.3 Scripts Setting of Grid
平面捕捉
編寫C#腳本,對ARCore的工作狀態進行檢查,並獲取檢測到的平面。
圖4 平面捕捉腳本
Fig.4 Scripts of Plane Detecteing
Google ARCore SDK提供了給檢測到的物體產生蒙皮的腳本,現在只需要將其粘貼進新建立的Grid Visualizer腳本中即可。
圖5 ARCore腳本
Fig.5 Scripts of ARCore
在Material中選擇由ARCore提供的PlaneGrid。
圖6 網格材料
Fig.6 Grid Material
當ARCore檢測到平面時,該腳本將被應用於每個被檢測到的平面。
導入模型場景資源
導入模型資源,該模型來源於Free 3D網站,由3dMAX進行製作。為了實現簡單任意門效果,最主要的地方是場景需要被「隱形衣」包裹,給被包裹的場景留出一個門的位置。
圖7 導入模型外觀
Fig.7 Appearance of the model
圖8 導入模型內部
Fig.8 Inside of the model
圖9 模型腳本設置
Fig.9 Scripts Setting of Model
實現任意門效果
最後需要給導入的模型穿上「隱形衣」,新建一個平面,通過腳本編寫,可實現除門以外的模型全部不可視的效果,該平面就是「隱形衣」。
圖10 部分平面腳本
Fig.10 Scripts of PortalPlane
圖11 隱形效果
Fig.11 Invisible Effect
效果及測試
在具有一定行走空間的地方打開程序,可以看到任意門。
圖12 效果1
Fig.12 The Scene on Android 1
從門正面向內部看,可見內部景象,角度不同則景象不同。
繞至門的側面及背面,只可見任意門,不可見其內部結構。
圖13 任意門側面
Fig.13 The Side of The Door
進入任意門內部,可從各個角度進行全方位遊覽。
圖14 任意門內部-1
Fig.14 The Inside of The Door-1
圖15 任意門內部-2
Fig.15 The Inside of The Door-2
圖16 任意門內部-3
Fig.16 The Inside of The Door-3
項目總結
1、目前實現了基於AR技術的任意門開發,使用現有中世紀教堂模型完成了門內景象;
2、通過改變Portal Plane包裹的區域可實現任意門的嵌套,即可以實現多個虛擬場景之間的轉換;
3、在本項目的基礎上,可加入景點音頻介紹、虛擬路標等功能,使本產品成為較為專業的虛擬旅遊軟體。
致謝
在項目的開發過程中,我學習了許多網頁上的內容,例如CSDN上許多優秀博主的文章,同時也在youtube和嗶哩嗶哩上觀看了一些Unity教學視頻和開發實例,最後照貓畫虎獨立完成了本項目的開發製作,感謝在網絡上無私分享學習經驗的博主和up主。
參考文獻(References)
[2] ARCore簡介https://blog.csdn.net/zxm317122667/article/details/80408205https://blog.csdn.net/zhang2333333333/article/details/105001086?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control