李歡
摘? 要:文章介紹了基于Unity 3D 平臺(tái)開(kāi)發(fā)的 3D房產(chǎn)裝飾仿真系統(tǒng),對(duì)新房裝修構(gòu)建了3D模擬仿真場(chǎng)景,將房屋設(shè)計(jì)與虛擬現(xiàn)實(shí)技術(shù)結(jié)合起來(lái),避免了傳統(tǒng)裝修公司房屋設(shè)計(jì)圖紙反復(fù)修改、不能團(tuán)隊(duì)同時(shí)開(kāi)發(fā)設(shè)計(jì)的限制,從而實(shí)現(xiàn)房屋裝修設(shè)計(jì)的高效出圖設(shè)計(jì)。
關(guān)鍵詞:VR;Unity 3D;虛擬
中圖分類(lèi)號(hào):TP391.9? ? ? ?文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2019)10-0040-03
Abstract: This paper introduces the 3D real estate decoration simulation system based on Unity 3D platform, constructs the 3D simulation scene for the decoration of the new house, and combines the house design with virtual reality technology, therebysettlesseveral problems such asthe repeated modification of the traditional decoration company housing design drawings and the inability of a team to develop the design simultaneously, so as to realize the efficient drawing design of the housing decoration design.
Keywords: VR;Unity 3D; virtual
VR(全稱(chēng)為Virtual Reality),指虛擬現(xiàn)實(shí)技術(shù),是由美國(guó)公司創(chuàng)建人拉尼爾(Jaron Lanier)提出的一個(gè)虛擬仿真場(chǎng)景化概念。其具體操作就是利用計(jì)算機(jī)終端和外圍設(shè)備接口,在計(jì)算機(jī)上進(jìn)行渲染,操作者通過(guò)外圍設(shè)備,在可交互的三維環(huán)境中體驗(yàn)真實(shí)場(chǎng)景。
本文以設(shè)備安裝、室內(nèi)裝飾、場(chǎng)景漫游、家具詳情展示為例,設(shè)計(jì)了包括家居、門(mén)窗、室內(nèi)裝飾物等一體化Unity3D仿真場(chǎng)景,從觸控板監(jiān)聽(tīng)、場(chǎng)景漫游家居裝飾為順序進(jìn)行設(shè)計(jì)和編碼,形成一套適合房產(chǎn)裝修的立體化場(chǎng)景設(shè)計(jì)軟件系統(tǒng),可以通過(guò)游戲手柄和射線進(jìn)行房屋的場(chǎng)景漫游、為客戶提供具有交互性和真實(shí)性的漫游體驗(yàn)。
1 設(shè)備介紹
HTC VIVE,是由HTC與Valve聯(lián)合開(kāi)發(fā)的頭戴式顯示產(chǎn)品,于2015年3月在MWC2015上發(fā)布。它是距今為止比較通用的3D體驗(yàn)設(shè)備,產(chǎn)品演示前,需要在Steam平臺(tái)下載相關(guān)軟件進(jìn)行支持。
2 HTC VIVE安裝
步驟一:選定合適的游戲位置
找到屬于自己的游戲位置,關(guān)鍵是要適合你,它適合任何的空間區(qū)域,你只要遵循考慮激光定位器在游玩區(qū)中的安裝和放置位置:激光定位器的組合視場(chǎng)要能復(fù)蓋整個(gè)游戲區(qū),因此兩個(gè)激光定位器之間的距離不要超過(guò)16.4英尺或5米。
步驟二:安裝軟件
開(kāi)始安裝之前需要在 HTC Vive官網(wǎng)下載 Vive執(zhí)行文件,可以幫助我們一步一步正確的安裝和配置整個(gè)VR軟硬件系統(tǒng)。Vive需要的顯卡功能比較高,一般的臺(tái)式筆記本顯卡不支持該設(shè)備運(yùn)行,如果是AMD顯卡需要安裝最新驅(qū)動(dòng)程序。下載后,依照其程序即可隨時(shí)的安裝了。
步驟三:安裝HTC vive激光定位器
打開(kāi)HTC Vive的包裝盒,對(duì)照物品清單取出激光定位其相關(guān)設(shè)備(2個(gè)激光定位器、電源適配器、安裝支架),并確認(rèn)以下需求:
激光定位器需高于使用者的頭部,才能利于追蹤(建議至少6英尺半);兩個(gè)激光定位器需分別被安置于對(duì)角位置;支架架設(shè)完成后,將激光定位器對(duì)準(zhǔn)游戲區(qū)位置,調(diào)整其位置為向下傾斜30-45度;確保兩個(gè)激光定位器之間的視線不受阻擋;為激光定位器接上電源并撕下保護(hù)膜后,即可開(kāi)始啟用。需要離地兩米,可以選擇通過(guò)相機(jī)三腳架和隨機(jī)自帶墻面固定座安裝,定位器接通電源即可啟動(dòng)。頻道設(shè)置,更改為不同頻道方可正常定位,狀態(tài)指示燈為綠色時(shí)表示工作正常,閃爍表示出現(xiàn)了位移。
步驟四:設(shè)置頭戴式設(shè)備
將電源適配器插上電后,再接到串流盒上; 將USB數(shù)據(jù)線插到串流盒上(PC端口),并將另一端插入電腦的USB端口; 將HDMI連接線插到串流盒上(PC端口),然后將另一端插入電腦顯卡的HDMI端口; 最后,將頭戴式設(shè)備的線纜插頭一一插入串流盒上的橙色端口,完成初步設(shè)置。
接下來(lái)拿起頭戴式顯示器,撕下顯示器上的保護(hù)膜即可使用。但要注意的是,盡量避免尖銳物品觸及感應(yīng)器,另外,也須避免將鏡頭放至于陽(yáng)光直射處,這些行為都有可能傷害頭戴式顯示器,整體集成度一般,串流盒的細(xì)節(jié),黃色接口為頭顯端,另外一端接到電腦上,連接頭顯。
步驟五:設(shè)置HTC游戲操作手柄,長(zhǎng)按系統(tǒng)按鈕啟動(dòng)手柄
步驟六:劃定游戲區(qū)域
步驟七:房間設(shè)置,手柄放置到地面上點(diǎn)擊校準(zhǔn)地面,按住扳機(jī)畫(huà)出最大活動(dòng)范圍,有時(shí)候場(chǎng)景的材質(zhì)會(huì)影響設(shè)置,比如場(chǎng)地的一面墻是玻璃材質(zhì),反光造成了定位偏移。最后帶上頭顯和耳機(jī)就可以開(kāi)始進(jìn)行3D漫游了。
3 3D場(chǎng)景設(shè)計(jì)
搭建場(chǎng)景及顯示指針,首先導(dǎo)入SteamVR和VRTK包,新建場(chǎng)景,刪掉自帶Camera,新建一個(gè)Plane,新建一個(gè)空物體,重命名為[VRTK_SDKManager],添加組件VRTK_SDK Manager。創(chuàng)建空物體為[VRTK_SDKManager]的子物體,重命名為VRTK_SDKSetup,添加組件VRTK_SDKSetup。在VRTK_SDK Setup中的Quick Selection里選擇SteamVR,如果VRTK_SDKSetup腳本中的Actual Objects中沒(méi)有自動(dòng)填充,則點(diǎn)擊Populate Now填充物體。添加預(yù)制體Camera_Rig作為VRTK_SDKSetup的子物體。選中[VRTK_SDKManager],選中Setups中點(diǎn)擊“+”,將VRTK_SDKSetup拖動(dòng)到“None(VRTK_SDK Setup)”的位置。新建空物體,重命名為[VRTK_Scripts]。在[VRTK_Scripts]下創(chuàng)建兩個(gè)空物體,分別重命名為L(zhǎng)eftController(用來(lái)配置左手柄)、RightController(右手柄)。選中LeftController和RightController,分別添加VRTK_Controller Events(事件交互的腳本)、VRTK_Pointer(手柄的指針)、VRTK_Straight Pointer Renderer(直線指針)或者VRTK_Bezier Pointer Renderer(貝茲爾曲線指針)。分別設(shè)置左指針和右指針。分別制定兩個(gè)手柄。
4 觸控按鈕監(jiān)聽(tīng)
首先要獲取左手控制器,先獲取到這個(gè)左手control這個(gè)腳本組件組件,通過(guò)這個(gè)腳本組件,再調(diào)用是STeaVRinput這一個(gè)方法,可以得到正確的設(shè)備。因此第1步獲取左手設(shè)備上面的一個(gè)腳本,取名為追蹤腳本,如果是左手程序變量我們?nèi)∶鹟eft,右手的程序變量取名right,我們以左手變量為例,將變量初始化,我們可以通過(guò)transform來(lái)查找它的子物體,它也是VR相機(jī)的一個(gè)子物體,他們是有父子關(guān)系的,通過(guò)子物體的路徑找到當(dāng)前子物體的控制器,這個(gè)只是找到了它的transform,我們還是要獲取它的腳本,就是通過(guò)代碼從而獲取左手設(shè)備,獲取左手設(shè)備,還需要調(diào)用方法,傳遞對(duì)應(yīng)設(shè)備的手柄ID,獲取對(duì)應(yīng)的設(shè)備ID,然后由系統(tǒng)自動(dòng)填充的,它可能是device1也可能是device2或device3,這是隨機(jī)的。但是由于在第1次使用的時(shí)候,設(shè)備手柄由于各種原因(或者是沒(méi)電或者說(shuō)是沒(méi)有開(kāi)機(jī)),可能不能正確拿到這個(gè)手柄,這時(shí)那我們就需要時(shí)時(shí)的去獲取,所以將設(shè)備的初始化放到Update()里面,還有一種情況就是當(dāng)我們離開(kāi)了定位器范圍之后,我的手柄包括圖形都會(huì)丟失,當(dāng)我再次回時(shí)需要重新獲取設(shè)備,也需要我們的設(shè)備的初始化放到Update里面。接下來(lái)輸入?yún)?shù),首先要判斷這個(gè)腳本,如果說(shuō)這個(gè)腳本是空的,那么我們通過(guò)這一個(gè)空的游戲物體是沒(méi)有辦法拿到這個(gè)index的,這時(shí)候會(huì)報(bào)一個(gè)錯(cuò)誤,這時(shí)需要加一個(gè)判斷。如果條件成立的,說(shuō)明這個(gè)腳本是肯定獲取到的,并且是start方法里面獲取的,通過(guò)調(diào)用Steam input這個(gè)方法傳入對(duì)應(yīng)的設(shè)備ID,通過(guò)ID我們可以正確的得到設(shè)備,也就是得到left device,我們通過(guò)這個(gè)設(shè)備可以去監(jiān)聽(tīng)設(shè)備上面的9個(gè)按鍵。
5 場(chǎng)景漫游
Move函數(shù)是做場(chǎng)景漫游,首先要去監(jiān)聽(tīng)左手,手柄觸摸板的一個(gè)點(diǎn)擊事件,所以需要添加一個(gè)判斷。首先判斷設(shè)備是否為空,并且ID不能為NO,當(dāng)這些條件成立之后,可以通過(guò)左手設(shè)備去獲取一個(gè)事件,這個(gè)事件是對(duì)于按鍵的監(jiān)聽(tīng),按鍵監(jiān)聽(tīng)分為三種狀態(tài),一種狀態(tài)是一開(kāi)始按下的那一瞬間,是press down事件,然后傳入要監(jiān)聽(tīng)的是哪一種類(lèi)型的按鍵,比如說(shuō)枚舉值,現(xiàn)在我們監(jiān)聽(tīng)的是觸摸板,所以添加一個(gè)Touchpad。如果我們監(jiān)聽(tīng)單擊鍵我們可以傳一個(gè)Trigger參數(shù),選擇Touchpad,按F12進(jìn)入Api,查看按鍵類(lèi)型,這里的監(jiān)聽(tīng)Touchpad可以得到一個(gè)布爾值,默認(rèn)值為Fasle,當(dāng)按鍵按下去的時(shí)候?yàn)閠rue,代碼如下:
6 家具詳情展示
此處以沙發(fā)為例,在沙發(fā)上添加一個(gè)UI控件,取名為image,系統(tǒng)會(huì)自動(dòng)給它添加一個(gè)副控件Canvas和EventSystem,Canvas相當(dāng)于一個(gè)畫(huà)布,EventSystem是一個(gè)事件系統(tǒng),通過(guò)此事件系統(tǒng)來(lái)檢測(cè)事件的交互,image相當(dāng)于一個(gè)背景,可以在上面添加文字、圖片等,選中image,將場(chǎng)景切換到2D,選中Canvas,雙擊,選中image在image屬性面板,選擇樣式列表中的最后一個(gè)樣式,調(diào)整image錨點(diǎn)大小,讓image大小正好填充滿Canvas,修改Canvas屬性窗口中的Render Mode,改為World Space,場(chǎng)景由2D切換為3D,找到沙發(fā)物體上的Couch,調(diào)整屬性窗口的Scale參數(shù)為1,1,調(diào)整沙發(fā)的子物體,將主界面的Iteminfo拖動(dòng)到沙發(fā)下面,當(dāng)作沙發(fā)子物體,修改畫(huà)布大小,修改縮放比例,尺寸Scale參數(shù)為-0.1,-0.1,在主界面將Iteminfo拖動(dòng)到合適位置,其他家具也如此進(jìn)行相關(guān)屬性及畫(huà)面大小的調(diào)整,然后,監(jiān)聽(tīng)左手的TrackPad點(diǎn)擊事件進(jìn)行射線發(fā)射,選中指定家具,使用UGUI顯示具體家具詳情,監(jiān)聽(tīng)事件代碼如下:
7 結(jié)束語(yǔ)
本文主要針對(duì)房屋的門(mén)窗及室內(nèi)家具物體進(jìn)行了Unity 3D的虛擬場(chǎng)景設(shè)計(jì),使用C#語(yǔ)言開(kāi)發(fā)了動(dòng)態(tài)場(chǎng)景,可以為房產(chǎn)施工者和買(mǎi)房客戶提供虛擬的場(chǎng)景體驗(yàn)。虛擬現(xiàn)實(shí)技術(shù)是未來(lái)的發(fā)展趨勢(shì),可以應(yīng)用于更多的場(chǎng)景,并且可以逐步推廣至手機(jī)端。
參考文獻(xiàn):
[1]朱惠娟.基于Unity3D的虛擬漫游系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,21(10):36-39.
[2]高國(guó)雪,高輝,焦向東,等.基于Unity3D的焊接機(jī)器人虛擬現(xiàn)實(shí)仿真技術(shù)研究[J].組合機(jī)床與自動(dòng)化加工技術(shù),2018(3).
[3]汪學(xué)著,孫鳳佳.宣城市宛溪河矮塔斜拉橋設(shè)計(jì)[J].世界橋梁,2012,40(1).
[4]C Helbig,H S Bauer,K Rink,et al.Concept and workflow for 3D visualization of atmospheric data in a virtual reality environment for analytical approaches[J].Environmental Earth Sciences,2014,72(10).