柏敏杰 陸佳飛 方玉燕



【摘 要】為了增強(qiáng)了人們對紅船的認(rèn)識和對歷史的銘記,讓體驗者有“身臨其境”的真實效果。利用Unity結(jié)合三維建模技術(shù)可以真實展現(xiàn)紅船場景。 本文結(jié)合VR技術(shù)探討了以虛擬現(xiàn)實的實現(xiàn)紅船南湖再現(xiàn)的方法,在文中描述了實現(xiàn)的關(guān)鍵技術(shù)。
【關(guān)鍵詞】南湖紅船;一大會址;虛擬現(xiàn)實;人機(jī)交互仿真
中圖分類號: G434文獻(xiàn)標(biāo)識碼: A 文章編號: 2095-2457(2019)35-0058-003
DOI:10.19694/j.cnki.issn2095-2457.2019.35.026
Research and Implementation of Red Boat on the Southern Lake Reconstruction Based on VR Technology
BAI Min-jie LU Jia-fei FANG Yu-yan
(JaiXing? Vocational & Technical College, Jaixing Zhejiang 314000, China)
【Abstract】In order to enhance peoples understanding of the Red Ship and the memory of history. Using Unity and 3D modeling technology can truly show red boat scene. Based on VR technology, this paper discusses the method of realizing the reappearance of Red Ship South Lake by virtual reality. The key technologies of implementation are described in this paper.
【Key words】Red Boat on the Southern Lake; Major venue; Virtual reality; Human-Computer Interactive Simulation.Let the experiencer have the real effect of “being there”
0 前言
南湖紅船是紅色圣地,其船體只能是遠(yuǎn)觀而不能進(jìn)入?yún)⒂^,游客的參觀僅僅只是局限于在岸上參觀在湖里的紅船,這種瀏覽方式具有局限性,很難真正了解到紅船內(nèi)部到底是什么樣的場景。利用虛擬現(xiàn)實技術(shù)再現(xiàn)的紅船,用戶可以在虛擬現(xiàn)實平臺上真正的了解到紅船內(nèi)部的場景,同時通過交互還可以學(xué)習(xí)一大的歷史知識。
虛擬現(xiàn)實技術(shù)是一種可以創(chuàng)建和體驗虛擬世界的計算機(jī)仿真系統(tǒng),是一種多源信息融合的、交互式的三維動態(tài)視景和實體行為的系統(tǒng)。將紅色文化和VR技術(shù)相結(jié)合,并且通過VR設(shè)備特有的沉浸性和交互性體驗進(jìn)行傳播,有利于加強(qiáng)青少年愛國主義教育,使得紅色教育不僅僅只是局限于枯燥的課本知識。
使用Unity3D技術(shù),結(jié)合3DMax等三維圖形軟件,采用C#語言作為腳本語言實現(xiàn)。同時主場景使用Unity的Terrain地形系統(tǒng),最大程度實現(xiàn)還原場景,結(jié)合交互,可以給人身臨其境的感覺,給用戶提供良好的視覺體驗[1]。
1 設(shè)計方案
整個項目分為二大部分,要實現(xiàn)“身臨其境”的逼真性,首先需要對南湖和紅船進(jìn)行建模,然后通過Unity3D技術(shù),實現(xiàn)體驗者的交互。
把南湖和紅船拆分各部分逐一建模,完成建模后。在3dsmax軟件進(jìn)行貼圖,再導(dǎo)出Fbx格式再導(dǎo)入Unity中。
體驗者的交互技術(shù)主要在Unity 3D中用c#語言實現(xiàn)。使用者模型中移動主要分為定點漫游和瞬移自由漫游兩大塊,首先是定點的漫游,為了增高項目的交互性,提高可操作性。開始時用戶是無法自由漫游的,需要在一些已經(jīng)設(shè)置好的定點漫游點上,完成指定的操作以后才能進(jìn)行自由漫游,此時參觀者可通過手柄發(fā)出的射線完成瞬移,瞬移至場景內(nèi)的任意位置。
不論在定點漫游還是自由漫游,用戶都可以進(jìn)行360度環(huán)視參觀場景內(nèi)的素材。在自由漫游被激活的時候,場景中會有許多的花草樹木以及湖面,這些位置是能移動的,所以在具體實施的時候需要解決這個問題,讓用戶不能移動到這些不能移動的點上。
在進(jìn)入紅船內(nèi)部以后可以通過轉(zhuǎn)動身體360度環(huán)視內(nèi)部的場景,同時在漫游的時候也不會移動到一些不能移動的物體上導(dǎo)致穿模、位置信息錯誤的問題出現(xiàn)。最后用戶只需要佩戴上VR設(shè)備就可以完成對南湖紅船的虛擬漫游。
2 紅船外景及人物的建模方法
首先通過利用紅船參數(shù)進(jìn)行了外觀建模,再運用布爾運算開出紅船窗口,然后分別對船頭的甲板、木桿、內(nèi)部的墻柱進(jìn)行建模,根據(jù)紅船的外觀進(jìn)行貼圖。同樣的方法對船部內(nèi)飾、船倉內(nèi)的擺設(shè)、人物和南湖外景進(jìn)行建模,先根據(jù)素材進(jìn)行分解,然后進(jìn)行整合,建成模型再復(fù)制,完成貼圖,最后擺設(shè)放到船倉內(nèi)部。紅船外景設(shè)計效果如圖1所示,走入紅船內(nèi)部的顯示效果如圖2所示。
圖1 完成的紅船外景的效果
圖2 走入紅船內(nèi)部的顯示效果
3 實現(xiàn)交互體驗的關(guān)鍵方法
3.1 環(huán)視的實現(xiàn)
要實現(xiàn)整個項目的場景漫游,需要運用到SteamVR軟件提供的組件,并將其導(dǎo)入到Unity3D項目文件的Assets文件目錄下,同時將CameraRig拖入到Hierarchy窗口下,經(jīng)過對組件的配置后就能夠?qū)崿F(xiàn)場景攝像機(jī)隨著HTC VIVE頭盔控制旋的功能,它包含了控制器上相關(guān)模型的子物體,可以動態(tài)獲取到頭部Y軸方向的轉(zhuǎn)動,以及頭部在X、Y軸轉(zhuǎn)動的方向,同時將這個坐標(biāo)信息實時的賦值給這個腳步綁定的對象上。
3.2 定點移動的實現(xiàn)
在項目開始運行的時候,將場景地面上的MeshCollider組件設(shè)置為不可用,同時在地面上放置三個固定點(固定點為高亮顯示),只有完成了固定點上的相關(guān)要求之后該固定點才會消失,當(dāng)三個固定點任務(wù)都完成的時候,地面上的MeshCollider組件才會被設(shè)為開啟狀態(tài)。當(dāng)檢測到拋物線終點在第一個固定點上的時候,第一個任務(wù)開啟,以此類推,當(dāng)完成任務(wù)后,該界面跟固定點將被立即銷毀。關(guān)鍵代碼如下:
if(e.target.tag=="Point")
{Canvas.gameObject.SetActive(true); }
當(dāng)完成最后一個任務(wù)后,該界面被立即銷毀,同時開啟地面MeshCollider組件,此時用戶可以自由漫游,關(guān)鍵代碼如:
if(e.currentTarget.layer == LayerMask.NameToLayer("move")) {
CanvasDestory();
dati.gameObject.GetComponent
scene.GetComponent
}
3.3 瞬移自由漫游的實現(xiàn)
在VRTK_SDKManager中創(chuàng)建一個空物體,并重命名為PlayArea,添加組件VRTK_Basic Teleport并設(shè)置相關(guān)屬性,瞬移都是基于碰撞的,所以需要給要進(jìn)行瞬移傳送的物體或區(qū)域添加Collider組件,為手柄控制器添加上VRTK_Bezier Pointer Renderer組件(貝賽爾曲線指針)來實現(xiàn)拋物線的效果,增強(qiáng)用戶的觀感。
3.4 設(shè)置不可移動區(qū)域
在PlayArea上添加PolicyList組件,在不可傳送的物體上都設(shè)置Collider碰撞器,其中樹、植被、湖面、船身、船內(nèi)的裝飾以及人物皆不可被傳送,同時設(shè)置這些物體的Tag標(biāo)簽為notpass(意為不可穿越的意思),將PolicyList組件的操作方式改為Ignore,當(dāng)場景中物體的Tag匹配上PolicyList中的Tag “notpass”時,拋物線會被設(shè)置成紅色,表示不能傳送到該物體上。此時用戶按下TouchPad按鈕也不能進(jìn)行瞬移操作。
同時在PlayArea上添加VRTK_TeleportDisableOnCont-
rollerObscured組件,添加時會自動添加VRTK_HeadsetC-
ontrollerAware組件,這個是用來跟蹤手柄是否碰撞到物體,當(dāng)手柄碰撞到場景內(nèi)的任一物體時,會提示禁止傳送。
當(dāng)參觀者由于操作不當(dāng)?shù)脑驅(qū)鼍皟?nèi)身體陷入場景內(nèi)物體時,會影響觀看效果。所以此時在PlayArea上添加VRTK_TeleportDisableOnHeadsetCollision和VRTK_H
eadsetCollision兩個組件進(jìn)行限制,同時可以通過修改該組件屬性面板下的Public變量Collider Radius(碰撞半徑)來達(dá)到最優(yōu)的效果,提升用戶的觀感體驗。
4 物體瞬移實現(xiàn)原理
4.1 拋物線瞬移
圖3 拋物線發(fā)射規(guī)則
虛擬現(xiàn)實中的瞬移過程,是在體驗者決定移動之前,通過手柄選擇目標(biāo)位置,選定之后,視野呈現(xiàn)短暫黑屏(時間相當(dāng)于一次眨眼),過后將體驗者位置設(shè)定為選定位置。通過對VRTK_Bezier Pointer Renderer組件(貝賽爾曲線指針)組件的調(diào)用,可以從控制器頂部發(fā)射出一條拋物線,通過拋物線原理在終點端做出碰撞檢測。當(dāng)檢測到是可瞬移區(qū)域的時候,松開TouchPad鍵就可以完成瞬移[7]。如圖3顯示拋物線發(fā)射規(guī)則。
4.2 定點位置檢測原理
圖4 拋物線終點端計算規(guī)則
定點移動就是在場景中預(yù)先設(shè)置好固定點,通過VRTK_DestinationMarker組件方法實現(xiàn)允許特定的場景標(biāo)記或場景中可以傳送到的特定區(qū)域,這是一個抽象類,它將繼承到提供對象控制操作功能的具體類,因此不應(yīng)直接使用此腳本。應(yīng)當(dāng)拋物線終點端檢測到該固定預(yù)設(shè)點后,通過組件調(diào)用已經(jīng)設(shè)置好的包括未選中、選中、取消選中的預(yù)設(shè)體之間的調(diào)用,當(dāng)拋物線終點端不是在固定點位上時,Enable Teleport復(fù)選框會鎖定目標(biāo)點并阻止傳送到目標(biāo)點,當(dāng)destination marker是active時發(fā)送事件,確定最新的目標(biāo)點。拋物線終點端計算規(guī)則如圖4所示。
5 結(jié)論
本文描述了基于VR技術(shù)的紅船漫游實現(xiàn)關(guān)鍵技術(shù),實現(xiàn)了對于南湖紅船的漫游功能。通過對“VR技術(shù)的紅船南湖再現(xiàn)的研究,可以更好的通過虛擬現(xiàn)實技術(shù)中沉浸性、交互性和多感知性特性再現(xiàn)我黨誕生這一偉大歷史時刻,更好的宣傳我黨,更好的激發(fā)人們愛黨、敬黨的熱情。
【參考文獻(xiàn)】
[1]VRTK. Virtual Reality Toolkit,2019.
[2]宣雨松.Unity3D游戲開發(fā) 第2版,2019.
[3]姜學(xué)智,李忠華.國內(nèi)外虛擬現(xiàn)實技術(shù)的研究現(xiàn)狀.遼寧工程技術(shù)大學(xué)學(xué)報,2004,23(2):238-240.
[4]Unity Technologies.Unity 5.X從入門到精通,2016.
[5]郭勝.C#.NET程序設(shè)計教程[M].北京:清華大學(xué)出版社,2002.
[6]劉氫.基于Unity3D和htcvive的虛擬現(xiàn)實游戲設(shè)計與實現(xiàn)[J].通訊世界,2017.
[7]賴佑吉,姚智,姚智原.Unity 3D游戲開發(fā)實戰(zhàn):人氣游戲這樣做[M].清華大學(xué)出版社,2015.
[8]詹秦川,弓宸.虛擬現(xiàn)實技術(shù)的應(yīng)用及發(fā)展現(xiàn)狀分析[J].產(chǎn)業(yè)與科技論壇,2014,(7):75-76.
[9]陳浩磊,鄒湘軍,陳燕,劉天湖.虛擬現(xiàn)實技術(shù)的最新發(fā)展與展望[J].中國科技論文在線,2011,(01):1-5.
[10]龐賽男.基于移動平臺的明清建筑斗拱教育游戲設(shè)計研究[D].哈爾濱工業(yè)大學(xué),2016.