999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于VR技術的三維校園漫游系統的設計與實現

2019-09-10 07:22:44李滿陳展鵬
現代信息科技 2019年19期

李滿 陳展鵬

摘? 要:基于VR技術的三維校園漫游系統,是根據VR技術的三大特征——沉浸感、交互性和構想性去設計實現的,其中使用到三維建模軟件3DS MAX、功能實現軟件Unity3D 5.5.3f以及SteamVR插件和VRTK插件。本文主要實現漫游功能、UI交互功能。借助于虛擬現實設備,能夠做到足不出戶就能觀察到真實的虛擬校園。

關鍵詞:校園漫游;虛擬現實;Unity3D;C#

中圖分類號:TP391.41? ? ? ?文獻標識碼:A 文章編號:2096-4706(2019)19-0100-04

Abstract:The design and implementation of 3D campus roaming system based on VR technology is designed according to the three characteristics of VR technology-immersion,interactivity and conception,including 3D modeling software 3DS MAX,function realization software Unity 3D 5.5.3f,as well as the steam SteamVR plugin and the VRTK plugin. This topic mainly implements roaming functions and UI interaction functions. With the help of virtual reality devices,real virtual campuses can be observed without leaving home.

Keywords:campus roaming system;VR;Unity3D;C#

0? 引? 言

隨著科技的進步,VR(Virtual Reality,虛擬現實)技術和設備開始走向大眾,據IDC(國際數據公司)近期發布的《中國VR/AR市場季度跟蹤報告》顯示,2019年第一季度中國頭顯設備出貨量接近27.5萬臺,同比增長15.1%[1]。VR設備的俏銷說明VR的應用越來越廣泛,如在教育、醫療、旅游、游戲及建筑行業的應用如日中天,各個大學也紛紛把校園以VR形式搬到線上,達到宣傳學校、提高學校社會知名度的目的。

在國內,BAT(B——百度,A——阿里巴巴,T——騰訊)三巨頭都在投資虛擬現實。僅在中國網民中,BAT就已經擁有了非常龐大的虛擬現實內容受眾群體。如:

百度在2017年提出建造世界上最大的中國語言VR服務;阿里巴巴建設了VR購物體驗系統,推出VR商場——Buy+;2015年,騰訊公布了Tencent VR SDK及開發者支持計劃,并且系統闡釋了對虛擬現實領域硬件和平臺兩大部分的規劃。

在國內不少高校已經建立起VR實驗室,開展虛擬現實相關的教學活動和研究活動。并且把校園以VR的形式搬到線上,達到更直觀地宣傳學校的目的[2]。

未來,5G技術帶來的高帶寬和低時延等優勢,將帶動VR應用市場朝著更高精度、更強專業性的行業領域深入發展。IDC中國終端系統研究部市場分析師譚睿指出:“在經歷了一段技術與生態的沉淀期后,國內VR/AR行業將伴隨著迭代產品進入市場從而釋放增長潛能。VR/AR產業作為5G技術重要的落地應用場景之一,深度應用云計算、語音交互等技術,建立先發優勢。”[3]

1? 校園漫游系統總體設計

本文以廣州工商學院三水校區為藍本,設計完成校園的漫游系統。主要解決模型、移動、場景切換、UI交互以及打包發布五個問題,如圖1所示。模型由美工、美術人員進行搭建。移動和UI交互需要用到SteamVR和VRTK(Virtual Reality Toolkit)這兩個插件去實現,場景切換需要載入和UI交互配合使用。打包發布用軟件的打包工具。

1.1? 用戶漫游移動

在SteamVR插件的[CameraRig]上添加VRTK的VRTK_HeightAdjustTeleport腳本實現虛擬現實的基本遠程傳送,通過調整這個腳本的參數可以調整是否使用重力、速度等的參數。

在SteamVR的[CameraRig]下的兩個Controller上都掛載VRTK的VRTK_Tracked Object和VRTK_Simple Pointer來實現在手柄上添加一條射線,方便用戶知道自己在往哪個方向傳送和知道哪些地方能夠過去、哪些地方不能過去。再配合VRTK_ControllerEvents等腳本實現手柄射線控制用戶移動[4]。

1.2? 場景切換

Unity3D引擎由于場景物體過多會導致過度占用內存,所以一個場景之中一般不能存在過多的物體,否則會占用大量內存,影響用戶體驗。這個時候就需要使用場景切換。場景切換有四種方法。

第一種是同步載入,代碼是Application.LoadLevel();第二種是異步載入,代碼是Application.LoadLevelAsync();第三種是同步附加式載入,代碼是Application.LoadLevel Addictive();第四種是異步附加式載入,代碼是Application.LoadLevelAddictiveAsync()。

使用同步載入的時候,在A場景切到B場景時,Unity3D會銷毀A場景顯示B場景,但是如果B場景比較大的時候會感到異常的卡頓。

使用異步載入的時候,載入場景是在后臺進行的,所以在切換場景的時候不會卡頓,適合載入大型場景的時候使用。

使用同步附加式載入的時候,在載入結束后場景A和場景B將會同一時間存在,比較適合地圖比較大的時候使用。

異步附加式載入跟同步附加式載入的區別依舊是一個在主線程運行一個在后臺線程異步進行。

1.3? UI交互

在Unity3D中有兩種方法制作UI交互面板。一個是NGUI插件,另一個是Unity自帶的UGUI。NGUI和UGUI都是出自同一個制作組,前者是在Unity3D沒有UI制作面板的時候由NGUI的制作組制作發布供給用戶使用;后者則是在Unity3D 5.X版本之后Unity的公司招募這個制作組制作的。

1.3.1? 使用NGUI進行制作UI交互面板

在創建NGUI的時候,系統會自動檢測有沒有UI Root和NGUI的Camera,如果沒有,會自動生成UI Root和Camera,所有UI空間都必須放在UI Root中。其中,Sprite是圖片,使用Sprite的時候需要把圖片打包成圖集,使用NGUI的Atlas Maker把圖片打包,然后使用圖片,通過調整參數調整圖片大小等。Label是文字,值得注意的是NGUI自帶的字體不支持中文,需要使用Unity3D里的字體才能支持中文。Texture也是圖片,它與Sprite的區別是不用把圖片打包成圖集,一般用于制作背景。Prefab Toolbar把里面需要的按鈕放上去就能直接使用,按鈕背景可以根據自己喜好去修改[5]。

1.3.2? 使用UGUI進行制作UI交互面板

因為是出自同一個制作組,跟NGUI部分原理相同。UGUI使用的時候需要添加一個Canvas(畫布),用作于承載體,所以UGUI的控件也必須放在Canvas里。Panel相當于NGUI的Texture,image相當于NGUI的Sprite,Text相當于NGUI的Label。功能一樣,但是,使用image的時候,圖片不需要打包成圖集,可以直接放進去使用。功能按鈕控件的使用方法和NGUI基本相同,導入就能直接使用。

1.4? Unity的打包與發布

在制作好之后要把自己制作好的東西打包發布成exe、apk等格式的文件供用戶使用,因為這個三維校園漫游系統是在PC端運行的,所以需要將文件打包成exe格式發布供用戶下載使用。

2? 三維校園漫游系統的設計與實現

2.1? 前期準備

在制作三維校園漫游系統之前,首先要進行拍攝,掌握學校每一棟建筑的特點,這對于建模和場景搭建都有非常深遠的影響。以學生宿舍為例,學生宿舍結構都是一樣的,只不過是位置和房間的數量不同,掌握好這些基本條件,很快就能將大量宿舍的模型創建出來。同時還需要準備一張學校的俯視圖和施工圖,這樣方便場景搭建,能夠很好地確定每個模型在場景中的具體位置。

2.2? 場景搭建

場景搭建是至關重要的一步,如果沒搭建好場景就開始制作,會導致一些功能的實現出現bug。在搭建場景時,需要注意比例。在Unity3D里面所使用的單位是米,所以在建模和搭建場景要使用米來做單位,防止因為單位比例不對而導致出現模型失調等bug。在制作初期通常使用白模或者是低精度模去搭建場景,以便保持進度一致,在完成低模場景搭建后再進行功能實現,在后期將白模或者低精度模替換成有貼圖的高精度模型,并不會影響到功能的實現。圖2是制作三維校園漫游系統使用白模搭建的校門口場景。在使用虛擬現實設備調試時,由于純白色的模型顯示會對眼睛造成傷害,要把模型加上顏色,如紫色,方便觀察以及后期的調試。

在搭建場景時,使用地形工具創建河流和湖泊,首先要先將地形抬高,再按住Shift+鼠標左鍵,對地形進行降低處理,再在降低的地形上放置Unity3D官方提供的水材質,把水鋪上去就能完成河和人工湖了。如圖3所示為校園內河流添加水面后的效果。

2.3? 漫游系統的實現

漫游系統的實現主要是靠SteamVR插件和VRTK這兩個插件共同完成,SteamVR插件主要是使用[CameraRig]預制體。這個預制體是已經自帶相機的,所以需要刪除或者隱藏場景中的主要攝像機,以獲取SteamVR的攝像機。[CameraRig]下是帶有兩個控制手柄的,這個控制手柄只有在運行的時候才會顯示出來。這兩個手柄都已經是有對應的腳本功能的,使用時只要獲取按鈕就能實現交互功能。使用SteamVR_TrackedObject trackdeObjec;這句代碼能夠獲取到SteamVR手柄[6]。

在開始前輸入這一段代碼能夠獲取到手柄上的組件。

void Awake()

{

//獲取手柄上的這個組件

trackdeObjec = GetComponent<SteamVR_TrackedObject>();

}

在獲取完手柄組件之后,在FixedUpdate中獲取手柄的輸入“var device = SteamVR_Controller.Input((int)trackdeObjec. index);”,然后使用if()條件語句來設置事件,例如下面這一句是當觸碰到扳機鍵后,控制臺會打印出“觸碰扳機鍵,持續中…”:

if (device.GetTouch(SteamVR_Controller.ButtonMask.Trigger))

{

Debug.Log("觸碰扳機鍵,持續中…");

}

這就是SteamVR手柄按鈕的獲取以及功能的實現。

在獲取SteamVR手柄按鈕之后,就需要實現漫游功能,而VRTK這個插件的腳本正好能夠實現漫游功能。VRTK_HeightAdjustTeleport這個腳本能實現基本的傳送功能,把它掛載到SteamVR的攝像機上,但是它必須要使用VRTK的世界坐標。然后使用VRTK_Tracked Object、VRTK_Simple Pointer、VRTK_ControllerEvents等腳本,掛載在SteamVR手柄上,能實現可視化傳送目標,能夠根據射線顏色和目標點來確定傳送的地方。

if (pointer.gameObject.activeSelf)

{

Ray pointerRaycast = new Ray(transform.position, transform.forward);

RaycastHit pointerCollidedWith;

var rayHit = Physics.Raycast (pointerRaycast, out pointerCollidedWith, pointerLength,~layersToIgnore);

var pointerBeamLength = GetPointerBeam Length(rayHit, pointerCollidedWith);

SetPointerTransform(pointerBeamLength, pointerThickness);

}

這一段代碼實現可視化傳送,在手柄上發射一條射線,射線擊中的地方就是傳送的目的地。但是要注意,因為有些地方是不能過去的,所以要給物體加上碰撞體的組件,否則會出現穿模。

在添加碰撞體組件時要注意包裹住整個模型,以免出現因為部分穿模而產生bug。添加完碰撞體組件后,有阻擋的地方射線會變成紅色,用戶就無法傳送到紅色的地方。

2.4? 場景跳轉的實現

實現場景跳轉需要使用UI交互,UI交互是用戶體驗最重要的環節。在這個三維校園漫游系統里面,選擇使用異步載入的方式,以防止部分用戶因設備問題導致加載卡頓。異步載入使用SceneManager.LoadSceneAsync()方法進行載入場景。首先是在場景A里面創建一個Canvas,然后在Canvas里面創建一個Button,新建一個腳本,用于實現跳轉加載場景,因為加載場景里面就只有一張圖片和加載條,所以一般用戶很快就能讀取到加載場景。所以腳本直接使用同步載入。代碼如下:

public class ToLoading : MonoBehaviour,IPointerClickHandler

{

[Tooltip("Loading")]

public string nextSceneName="Loading";

public void OnPointerClick(PointerEventData eventData)

{

SceneManager.LoadScene(nextSceneName);

}

}

在加載場景Loading里面放入圖片和滑動條以及文字,在文字上新建一個腳本就能實現異步載入。完成異步載入,能夠使得電腦配置較差的用戶在切換場景時不會過于卡頓。

任何漫游系統都不能缺少場景切換,如果場景較小,對于設備要求不高的可以使用同步載入;如果場景較大,對于設備要求較高的就需要使用異步載入。如果說場景較大對設備要求不高但是切換場景后不銷毀前一個場景那就是用同步附加式載入;對設備要求高則用異步附加式載入。

2.5? UI交互實現

UI交互是非常常見也是必需的一種功能,三維校園漫游系統是使用虛擬現實設備手柄去體驗UI交互的。所以需要使用到SteamVR插件和VRTK插件。

在右手的手柄上添加以下幾個組件:VRTK_Controller Events;VRTK_Controller Actions;VRTK_Pointer;VRTK_UI Pointer以及VRTK_Straight Pointer Render。添加完組件之后要注意指定Renderer,否則無法運行。

然后開始設置UI。創建UGUI,把GUI的模式設置為World Space,如果不設置World Space的話會無法使用UI的。在Canvas上添加一個VRTK_UI Canvas組件用于交互。然后把需要的按鈕等放進去就能使用虛擬現實設備去進行UI交互了。

但是這樣還不夠,不能讓UI面板一直顯示在視線前面,需要先把UI面板隱藏,然后添加一個腳本,獲取到手柄的輸入,當用戶按下菜單鍵的時候讓UI面板顯示,不需要時再按一次將其隱藏。

2.6? 音樂的添加

音樂也是必須要有的功能,可以讓用戶在輕松愉快的音樂聲中漫游虛擬校園。

在SteamVR的攝像機上添加一個Audio Source組件,把準備好的音樂放進去就能夠實現音樂的播放,可以設置循環播放;如果音樂太少可以使用Audio Clip編輯音頻添加多音樂進去。也可以通過添加UI來調整聲音的大小,添加一個Slider,然后設置腳本綁定Audio Source組件的音量,就能實現聲音大小調整的功能了。

2.7? 打包發布

設計完成,調試通過,最后就要進行打包發布。在選項File中找到Build Setting,然后設置發布,選擇PC端打包發布,把做好的場景拖進去,然后點擊Build就能打包發布了。要注意場景順序不要打亂,否則發布之后會導致場景混亂和bug的出現。

3? 結? 論

三維校園漫游系統的開發,是技術和藝術綜合知識能力的應用,要有整體規劃,要掌握拍攝技術、建模技術,要懂美工和編程等等,作為VR技術開發人員,必須要技藝兩全,有開拓創新精神和團隊合作意識,綜合素質要高。

盡管整個三維校園漫游系統的開發已經完成,功能內容已經實現,具有一定的使用價值,但是由于時間關系和開發經驗不足,在這個系統中仍有值得去改進的地方,比如所代碼的簡化完善、場景優化等等。

參考文獻:

[1] 趙佳蕊.2019年Q1中國VR頭顯出貨量同比增長15.1%,增量來自桌面頭顯 [EB/OL].智東西.(2019-07-10).http://www. sohu.com/a/326214839_115978,2019-07-10.

[2] VR小哥.深度解析BAT在VR領域的布局和投資 [EB/OL].(2018-03-07).http://www.sohu.com/a/225049842_ 100085695.

[3] 盧雁明.國外VR虛擬現實技術的發展及應用現狀 [EB/OL].(2016-11-09).http://www.yuloo.com/mbgx/1611/ 1475372.shtml.

[4] Karli Watson,Christian Nagel,等著.C#入門經典:第5版 [M].齊立波,譯.北京:清華大學出版社,2010.

[5] 程杰.大話設計模式 [M].北京:清華大學出版社,2007.

[6] 銳萌瑞.SteamVR插件使用 [EB/OL].(2018-01-29).https://blog.csdn.net/qq_34552886/article/details/79200302.

作者簡介:李滿(1966.12-),女,漢族,河南南陽人,副教授,本科,碩士,研究方向:計算機應用;陳展鵬(1997.10-),男,漢族,廣東廣州人,本科,學士學位,研究方向:數字媒體技術。

主站蜘蛛池模板: a毛片免费在线观看| 99久久精品视香蕉蕉| 在线精品视频成人网| 亚洲国产亚综合在线区| 日韩乱码免费一区二区三区| 999国内精品久久免费视频| yjizz视频最新网站在线| 欧美啪啪一区| 一级做a爰片久久毛片毛片| 91小视频在线| 精品人妻AV区| 97超爽成人免费视频在线播放 | 国产精品大尺度尺度视频| 国产一级特黄aa级特黄裸毛片| 欧美一级高清视频在线播放| 国产亚洲欧美日韩在线观看一区二区 | 亚洲国产av无码综合原创国产| 中文字幕永久在线看| 欧美在线视频a| 国产亚洲日韩av在线| 国产麻豆va精品视频| 色天天综合| 欧美在线精品一区二区三区| 国产午夜福利亚洲第一| 激情无码字幕综合| 91亚洲精选| 国产精品无码久久久久久| 国产黑丝一区| 成人无码一区二区三区视频在线观看| 免费观看男人免费桶女人视频| 欧美成人看片一区二区三区| 欧美色99| 国内毛片视频| 强乱中文字幕在线播放不卡| 国产欧美日韩一区二区视频在线| 97人人做人人爽香蕉精品| 91精品国产麻豆国产自产在线| 在线免费无码视频| 国产人人射| 国产福利在线免费| 国产精品无码在线看| 在线观看无码a∨| 中文字幕 91| 91久久偷偷做嫩草影院电| 午夜爽爽视频| 国产导航在线| 国模极品一区二区三区| 国产爽妇精品| 色欲国产一区二区日韩欧美| 色综合天天操| 日韩高清一区 | 美女无遮挡被啪啪到高潮免费| 色丁丁毛片在线观看| 一级毛片免费观看不卡视频| 视频一区视频二区日韩专区 | 无码免费视频| 欧美亚洲一区二区三区导航 | 永久免费无码日韩视频| 无码内射在线| 国产亚洲精| 爆乳熟妇一区二区三区| 亚洲成A人V欧美综合天堂| 免费无遮挡AV| 欧美a级完整在线观看| 五月丁香在线视频| 久久青草热| 免费福利视频网站| а∨天堂一区中文字幕| 国产男女XX00免费观看| 国产精品lululu在线观看 | 国产亚洲欧美在线人成aaaa| 成人免费午间影院在线观看| 在线另类稀缺国产呦| 波多野结衣亚洲一区| 国产一二三区视频| 国产午夜福利在线小视频| 日韩国产欧美精品在线| 久久9966精品国产免费| 日本免费a视频| 91日本在线观看亚洲精品| 日韩中文字幕免费在线观看| 国产啪在线|