陳昭喜,許愛軍
(1.廣州中醫(yī)藥大學(xué)醫(yī)學(xué)信息工程學(xué)院,廣州510006;2.廣州鐵路職業(yè)技術(shù)學(xué)院創(chuàng)新創(chuàng)業(yè)學(xué)院,廣州510430)
虛擬現(xiàn)實(Virtual Reality)是一種可以創(chuàng)建和體驗虛擬世界的計算機仿真系統(tǒng),它利用計算機生成模擬環(huán)境,是一種多源信息融合的、交互式的三維動態(tài)視景和實體行為的系統(tǒng)仿真,帶給用戶沉浸式體驗。虛擬仿真實驗是虛擬現(xiàn)實系統(tǒng)的一種,通過對實驗儀器和實驗過程進行仿真,使用者可以利用計算機完成實驗,獲取實驗結(jié)果,熟練技能,掌握相關(guān)知識。
分光計的調(diào)整和使用是大學(xué)物理的基礎(chǔ)實驗,實驗儀器的結(jié)構(gòu)復(fù)雜,儀器的調(diào)整難度較大,學(xué)生不易掌握。為滿足學(xué)生課前預(yù)習(xí)、課后復(fù)習(xí)的實驗需求,本文采用3D Max 2018 作為建模工具,VRay 作為模型渲染軟件,Unity3D 作為場景漫游和交互操作引擎,實現(xiàn)了分光計虛擬實驗系統(tǒng),在實驗教學(xué)中取得良好應(yīng)用效果,為大學(xué)實驗教學(xué)改革提供了借鑒和案例。
作為真實物理實驗的有效補充,分光計虛擬實驗系統(tǒng)要求能為用戶提供分光計的三維展示和拆裝功能。具體而言,需要滿足以下需求:
(2)能按照流程自動進行三維演示;
(3)具備簡單交互功能,點擊相應(yīng)部件能呈現(xiàn)該部件的三維模型和結(jié)構(gòu)講解聲音等;
(4)能提供拆裝功能,滿足用戶自由拆裝的意愿。
文獻[1-2]詳細闡述了VRML 虛擬實驗系統(tǒng)的設(shè)計流程,大體思路是:首先在三維建模軟件中進行物體模型設(shè)計;其次用可視化編輯軟件將單個模型進行合成;再次在VRML 文本編輯工具中添加交互節(jié)點;最后對模型文件進行壓縮和優(yōu)化,并進行發(fā)布,具體流程如圖1 所示。
本文采用的三維建模工具是3D Max 2018、渲染工具是VRay(VRay 是由Chaosgroup 和Asgvis 公司出品,中國由曼恒公司負責(zé)推廣的一款高質(zhì)量渲染軟件)、模型組合和交互腳本設(shè)計工具是Unity3D、預(yù)覽瀏覽器是Cortona VRML。
模型的設(shè)計需要遵循通用的設(shè)計流程。以下按照分光計粗描模型、分光計零部件建模、模型整合、添加材質(zhì)和貼圖等流程進行建模。
資料收集是建模的第一步。收集的資料主要是分光計相關(guān)圖片,包括前視圖、結(jié)構(gòu)圖、實拍圖等。進行粗描模型前需要用分光計的前視圖作為參考。具體就是在3D Max 前視圖畫一個平面,長和寬與圖片大小一致,把貼圖通過材質(zhì)導(dǎo)入平面。然后用模糊數(shù)據(jù)把分光計模型的樣子大致畫出來,必要時利用放大縮小工具調(diào)整到適宜的大小。這樣能大大降低建模的難度。
在建模過程中,結(jié)構(gòu)可根據(jù)前視圖來做,細節(jié)部分根據(jù)實拍圖來調(diào)節(jié)。具體模型可以分為分光計上半部分建模、載物臺和刻度盤以及游標盤的建模、分光計下半部分建模三個部分。
質(zhì)譜條件:離子源為電噴霧離子源(ESI),采用正離子檢測方式;毛細管電壓為3.60 kV;離子源溫度為150℃,去溶劑化溫度為500℃;噴霧氣為氮氣,碰撞氣為氬氣;ATV和鹽酸噻氯匹定(內(nèi)標)的錐孔電壓分別為44、30 V,碰撞能分別為22、26 eV;采用多反應(yīng)離子監(jiān)測(MRM)模式,質(zhì)荷比(m/z)分別為 559.20→440.20(ATV)、264.20→154.05(內(nèi)標)。
分光計上半部分模型大體是對稱的,對左側(cè)部分建模后可以采用鏡像方式對右側(cè)部分建模。建模內(nèi)容包括鏡筒部分、Y 型支架和三角支架。對鏡筒建模時,先在模板畫一條樣條線,然后畫一個圓環(huán)最后進行放樣操作。Y 型支架可以通過圓環(huán)、長方體、圓柱體等基本標準體通過布爾運算組合形成。對于三腳架建模,可以直接構(gòu)建一個圓角長方體,然后采用FFD 命令改變它的形狀來完成。望遠鏡的目鏡結(jié)構(gòu)相對比較復(fù)雜,本文將它拆成三部分,然后通過布爾命令組合起來。為了與實物圖更加契合,還應(yīng)對其一些部分進行倒角處理,使得邊緣更圓潤。其他部分包括螺絲釘?shù)闹谱鞑辉儋樖觥?/p>
載物臺和刻度盤以及游標盤的建模。載物臺建模相對簡單,由幾個圓柱體拼接而成,頂層載物臺本身的圓形紋路可以通過布爾命令切割實現(xiàn)。刻度盤的制作需要用到陣列工具,陣列可以與規(guī)律的復(fù)制出多個物體??潭缺P盤一圈360 度,共有720 小格,每一小格對應(yīng)0.5 度。所以在制作時可以先設(shè)計一個長方體,通過陣列旋轉(zhuǎn)360 度,數(shù)量設(shè)為720。因為有三種不同長度的指針,中等長度指針數(shù)量設(shè)為360,最長的指針設(shè)為36。游標盤的制作和刻度盤一樣,用陣列工具做。做完后和刻度盤的對比效果如圖2 所示。
圖2 分光計游標盤與刻度盤對比圖
分光計整個下半部分建模。分光計下半部分都是一些支架,首先用線段描繪它的樣子,然后進行放樣操作就能完成,這里不再重復(fù)敘述。
對分光計各零部件建模完成后,就可以把各個部件組合在一起。為使結(jié)構(gòu)更加精確,需要用到對齊工具使各個零件對齊。在對齊過程中可能還需要對部分零件的大小和方位進行調(diào)整,從而優(yōu)化模型。整個過程只需要用到移動、放大縮小、旋轉(zhuǎn)操作。組裝完成后,就可以刪除掉之前的模板,這樣使整個分光計界面更加清晰,不受其他視線干擾,易于操作。
為使分光計模型更加接近實物,使用VRay 渲染軟件對分光計添加材質(zhì)和貼圖。VRay 是目前業(yè)界最受歡迎的渲染引擎。VRay 渲染器提供了一種特殊的材質(zhì)——VrayMtl。在場景中使用該材質(zhì)可以獲得更精確的物理照明(光線分布),更快的渲染,以及更方便的反射和折射參數(shù)調(diào)整??紤]到分光計顏色相對比較單調(diào),材質(zhì)種類也不多,本文只采用VRay 制造了不銹鋼、鋁箔和清玻璃三種材質(zhì)和幾種不同的顏色,利用VRay渲染可以大大減輕建模工作量。
建模是虛擬實驗系統(tǒng)的基礎(chǔ),但模型本身不能提供交互功能。本文采用Unity3D 作為虛擬現(xiàn)實開發(fā)引擎,將3D 模型導(dǎo)出后傳遞給Unity,Unity 負責(zé)將這些模型有機地組合起來,并通過腳本形成交互。
從3D Max 導(dǎo)出模型的基本步驟是:首先在3D Max 將顯示單位和系統(tǒng)單位設(shè)為厘米,使之與Unity 的單位一致;其次將3D Max 模型以.fbx 的格式導(dǎo)出;然后將導(dǎo)出的文件存放在Unity 項目里的Assets 文件夾下;最后啟動Unity,在項目視圖中將已經(jīng)創(chuàng)建好的分光計模型拖拽到游戲視圖中。
導(dǎo)入模型后,通常會出現(xiàn)模型散架、模型模糊失真等問題,這需要在Unity3D 中予以修正。
Unity3D 支持多種編譯腳本,本文用C#腳本對分光計系統(tǒng)進行交互設(shè)計。通過編寫C#腳本,用鼠標和鍵盤對分光計各零部件進行操作,不僅對分光計各結(jié)構(gòu)進行移動旋轉(zhuǎn)以及多方位觀察,還標出各結(jié)構(gòu)的名字和功能,并且對分光計的部分原理進行展示。本文采用第一人稱方式對場景進行控制,在Unity3D 中,第一人稱控制方式可以通過編寫腳本利用鼠標來控制人或攝像機的旋轉(zhuǎn)來實現(xiàn)。
添加C#腳本控制攝像機跟隨Cube 移動,達到第一人稱場景漫游的效果。設(shè)計思路是:首先在Start 中創(chuàng)建三個變量,初始化相機位置。然后新建一個cameraMove 方法,在里面設(shè)置使相機跟隨鼠標旋轉(zhuǎn)然后物體與相機同步旋轉(zhuǎn)同時更新相機位置。最后在Update方法中調(diào)用cameraMove 方法,同時監(jiān)聽“WASD”鍵控制其前后左右移動,“QE”鍵分別控制其上下移動。
交互的前提是系統(tǒng)能識別分光計各部分的結(jié)構(gòu),從而能夠選中并對其進行相應(yīng)的操作。為實現(xiàn)這個目標,C#腳本的設(shè)計思路是:首先給需要識別的對象添加BoxColider 組件(碰撞組件),并對其碰撞結(jié)構(gòu)進行調(diào)整。然后在C#腳本中創(chuàng)建方法來識別碰撞,同時返回與鼠標碰撞對象的信息。最后再創(chuàng)建一個窗口顯示方法,獲取鼠標按鍵信息后顯示窗口。
以望遠鏡的交互為例闡述交互腳本的設(shè)計過程。望遠鏡需要帶動刻度盤一起繞載物臺中心旋轉(zhuǎn),讓物體繞自身XYZ 軸旋轉(zhuǎn)很簡單,但是想讓物體繞另一個物體旋轉(zhuǎn)稍微復(fù)雜一點。有兩種處理方法,一是保持A 不變,B 繞A 旋轉(zhuǎn);二是A 繞自身旋轉(zhuǎn)同時帶動B 一起旋轉(zhuǎn)。這里采用第一種方法,先建立一個參考點spot,放在刻度盤的中央,然后寫入代碼使望遠鏡系繞spot 旋轉(zhuǎn)就能達到期望效果。然后把腳本添加到望遠鏡系上面,并且給C#腳本中的spot 變量附上Scene 場景中spot 的Transform 信息。完成后,鼠標點擊望遠鏡,可顯示望遠鏡信息,并可以通過鍵盤左鍵和右鍵控制其旋轉(zhuǎn),實現(xiàn)了交互功能。
通過Unity3D 打包發(fā)布,可以使實驗系統(tǒng)成為獨立文件,從而可以脫離Unity3D 環(huán)境在其他電腦運行和傳播。Unity3D 打包發(fā)布,可以直接在Unity 界面的File 目錄下點擊Build Settings,就可以發(fā)布到PC、iOS、Android 等客戶端。最后成品文件包括一個.exe 文件和一個Data 數(shù)據(jù)文件夾,二者缺一不可,且不可分割。
對虛擬現(xiàn)實場景打包發(fā)布后,可以對虛擬分光計系統(tǒng)進行測試。測試功能主要分為場景漫游和交互控制兩部分。
首先進行場景漫游測試,可以通過鍵盤“Q、W、E、A、S、D”控制攝像機移動同時鼠標控制方向,進行場景漫游。測試表明,該操作簡單流暢,能夠快速定位自己所需求的視角。場景漫游時能更加清晰了解分光計的機械結(jié)構(gòu),從而加深對分光計工作原理的理解。圖3是場景漫游獲取的各個角度的圖片。
圖3 分光計漫游場景圖
分光計各零部件的交互控制功能,就是當鼠標移動到對象上時能顯示其名字,點擊零部件后顯示其詳細信息并給予操作提示,同時還可以通過鍵盤對其進行旋轉(zhuǎn)和移動操作。
以望遠鏡為例進行操作展示,系統(tǒng)實現(xiàn)了望遠鏡的旋轉(zhuǎn)、狹縫調(diào)節(jié)器的伸縮與旋轉(zhuǎn)、載物臺的升降與旋轉(zhuǎn),以及各螺釘?shù)男D(zhuǎn)等功能,如圖4 所示。
本文實現(xiàn)了分光計虛擬實驗系統(tǒng),經(jīng)過測試與發(fā)布,系統(tǒng)具有操作簡單、使用方便、逼真度高、跨平臺運行等特點,對學(xué)生認識分光計、操作分光計有良好的輔助作用,能大大提高實驗效率。未來將進一步優(yōu)化模型,添加更加復(fù)雜的交互功能,完整還原分光計實驗的實驗過程,這也是今后研究工作的重點。
圖4 望遠鏡操作示意圖