陳昭喜,許愛軍
(1.廣州中醫(yī)藥大學(xué)醫(yī)學(xué)信息工程學(xué)院,廣州510006;2.廣州鐵路職業(yè)技術(shù)學(xué)院創(chuàng)新創(chuàng)業(yè)學(xué)院,廣州510430)
虛擬現(xiàn)實(shí)(Virtual Reality)是一種可以創(chuàng)建和體驗(yàn)虛擬世界的計(jì)算機(jī)仿真系統(tǒng),它利用計(jì)算機(jī)生成模擬環(huán)境,是一種多源信息融合的、交互式的三維動(dòng)態(tài)視景和實(shí)體行為的系統(tǒng)仿真,帶給用戶沉浸式體驗(yàn)。虛擬仿真實(shí)驗(yàn)是虛擬現(xiàn)實(shí)系統(tǒng)的一種,通過對(duì)實(shí)驗(yàn)儀器和實(shí)驗(yàn)過程進(jìn)行仿真,使用者可以利用計(jì)算機(jī)完成實(shí)驗(yàn),獲取實(shí)驗(yàn)結(jié)果,熟練技能,掌握相關(guān)知識(shí)。
分光計(jì)的調(diào)整和使用是大學(xué)物理的基礎(chǔ)實(shí)驗(yàn),實(shí)驗(yàn)儀器的結(jié)構(gòu)復(fù)雜,儀器的調(diào)整難度較大,學(xué)生不易掌握。為滿足學(xué)生課前預(yù)習(xí)、課后復(fù)習(xí)的實(shí)驗(yàn)需求,本文采用3D Max 2018 作為建模工具,VRay 作為模型渲染軟件,Unity3D 作為場(chǎng)景漫游和交互操作引擎,實(shí)現(xiàn)了分光計(jì)虛擬實(shí)驗(yàn)系統(tǒng),在實(shí)驗(yàn)教學(xué)中取得良好應(yīng)用效果,為大學(xué)實(shí)驗(yàn)教學(xué)改革提供了借鑒和案例。
作為真實(shí)物理實(shí)驗(yàn)的有效補(bǔ)充,分光計(jì)虛擬實(shí)驗(yàn)系統(tǒng)要求能為用戶提供分光計(jì)的三維展示和拆裝功能。具體而言,需要滿足以下需求:
(2)能按照流程自動(dòng)進(jìn)行三維演示;
(3)具備簡(jiǎn)單交互功能,點(diǎn)擊相應(yīng)部件能呈現(xiàn)該部件的三維模型和結(jié)構(gòu)講解聲音等;
(4)能提供拆裝功能,滿足用戶自由拆裝的意愿。
文獻(xiàn)[1-2]詳細(xì)闡述了VRML 虛擬實(shí)驗(yàn)系統(tǒng)的設(shè)計(jì)流程,大體思路是:首先在三維建模軟件中進(jìn)行物體模型設(shè)計(jì);其次用可視化編輯軟件將單個(gè)模型進(jìn)行合成;再次在VRML 文本編輯工具中添加交互節(jié)點(diǎn);最后對(duì)模型文件進(jìn)行壓縮和優(yōu)化,并進(jìn)行發(fā)布,具體流程如圖1 所示。
本文采用的三維建模工具是3D Max 2018、渲染工具是VRay(VRay 是由Chaosgroup 和Asgvis 公司出品,中國(guó)由曼恒公司負(fù)責(zé)推廣的一款高質(zhì)量渲染軟件)、模型組合和交互腳本設(shè)計(jì)工具是Unity3D、預(yù)覽瀏覽器是Cortona VRML。
模型的設(shè)計(jì)需要遵循通用的設(shè)計(jì)流程。以下按照分光計(jì)粗描模型、分光計(jì)零部件建模、模型整合、添加材質(zhì)和貼圖等流程進(jìn)行建模。
資料收集是建模的第一步。收集的資料主要是分光計(jì)相關(guān)圖片,包括前視圖、結(jié)構(gòu)圖、實(shí)拍圖等。進(jìn)行粗描模型前需要用分光計(jì)的前視圖作為參考。具體就是在3D Max 前視圖畫一個(gè)平面,長(zhǎng)和寬與圖片大小一致,把貼圖通過材質(zhì)導(dǎo)入平面。然后用模糊數(shù)據(jù)把分光計(jì)模型的樣子大致畫出來(lái),必要時(shí)利用放大縮小工具調(diào)整到適宜的大小。這樣能大大降低建模的難度。
在建模過程中,結(jié)構(gòu)可根據(jù)前視圖來(lái)做,細(xì)節(jié)部分根據(jù)實(shí)拍圖來(lái)調(diào)節(jié)。具體模型可以分為分光計(jì)上半部分建模、載物臺(tái)和刻度盤以及游標(biāo)盤的建模、分光計(jì)下半部分建模三個(gè)部分。
質(zhì)譜條件:離子源為電噴霧離子源(ESI),采用正離子檢測(cè)方式;毛細(xì)管電壓為3.60 kV;離子源溫度為150℃,去溶劑化溫度為500℃;噴霧氣為氮?dú)猓鲎矚鉃闅鍤猓籄TV和鹽酸噻氯匹定(內(nèi)標(biāo))的錐孔電壓分別為44、30 V,碰撞能分別為22、26 eV;采用多反應(yīng)離子監(jiān)測(cè)(MRM)模式,質(zhì)荷比(m/z)分別為 559.20→440.20(ATV)、264.20→154.05(內(nèi)標(biāo))。
分光計(jì)上半部分模型大體是對(duì)稱的,對(duì)左側(cè)部分建模后可以采用鏡像方式對(duì)右側(cè)部分建模。建模內(nèi)容包括鏡筒部分、Y 型支架和三角支架。對(duì)鏡筒建模時(shí),先在模板畫一條樣條線,然后畫一個(gè)圓環(huán)最后進(jìn)行放樣操作。Y 型支架可以通過圓環(huán)、長(zhǎng)方體、圓柱體等基本標(biāo)準(zhǔn)體通過布爾運(yùn)算組合形成。對(duì)于三腳架建模,可以直接構(gòu)建一個(gè)圓角長(zhǎng)方體,然后采用FFD 命令改變它的形狀來(lái)完成。望遠(yuǎn)鏡的目鏡結(jié)構(gòu)相對(duì)比較復(fù)雜,本文將它拆成三部分,然后通過布爾命令組合起來(lái)。為了與實(shí)物圖更加契合,還應(yīng)對(duì)其一些部分進(jìn)行倒角處理,使得邊緣更圓潤(rùn)。其他部分包括螺絲釘?shù)闹谱鞑辉儋樖觥?/p>
載物臺(tái)和刻度盤以及游標(biāo)盤的建模。載物臺(tái)建模相對(duì)簡(jiǎn)單,由幾個(gè)圓柱體拼接而成,頂層載物臺(tái)本身的圓形紋路可以通過布爾命令切割實(shí)現(xiàn)。刻度盤的制作需要用到陣列工具,陣列可以與規(guī)律的復(fù)制出多個(gè)物體。刻度盤盤一圈360 度,共有720 小格,每一小格對(duì)應(yīng)0.5 度。所以在制作時(shí)可以先設(shè)計(jì)一個(gè)長(zhǎng)方體,通過陣列旋轉(zhuǎn)360 度,數(shù)量設(shè)為720。因?yàn)橛腥N不同長(zhǎng)度的指針,中等長(zhǎng)度指針數(shù)量設(shè)為360,最長(zhǎng)的指針設(shè)為36。游標(biāo)盤的制作和刻度盤一樣,用陣列工具做。做完后和刻度盤的對(duì)比效果如圖2 所示。

圖2 分光計(jì)游標(biāo)盤與刻度盤對(duì)比圖
分光計(jì)整個(gè)下半部分建模。分光計(jì)下半部分都是一些支架,首先用線段描繪它的樣子,然后進(jìn)行放樣操作就能完成,這里不再重復(fù)敘述。
對(duì)分光計(jì)各零部件建模完成后,就可以把各個(gè)部件組合在一起。為使結(jié)構(gòu)更加精確,需要用到對(duì)齊工具使各個(gè)零件對(duì)齊。在對(duì)齊過程中可能還需要對(duì)部分零件的大小和方位進(jìn)行調(diào)整,從而優(yōu)化模型。整個(gè)過程只需要用到移動(dòng)、放大縮小、旋轉(zhuǎn)操作。組裝完成后,就可以刪除掉之前的模板,這樣使整個(gè)分光計(jì)界面更加清晰,不受其他視線干擾,易于操作。
為使分光計(jì)模型更加接近實(shí)物,使用VRay 渲染軟件對(duì)分光計(jì)添加材質(zhì)和貼圖。VRay 是目前業(yè)界最受歡迎的渲染引擎。VRay 渲染器提供了一種特殊的材質(zhì)——VrayMtl。在場(chǎng)景中使用該材質(zhì)可以獲得更精確的物理照明(光線分布),更快的渲染,以及更方便的反射和折射參數(shù)調(diào)整。考慮到分光計(jì)顏色相對(duì)比較單調(diào),材質(zhì)種類也不多,本文只采用VRay 制造了不銹鋼、鋁箔和清玻璃三種材質(zhì)和幾種不同的顏色,利用VRay渲染可以大大減輕建模工作量。
建模是虛擬實(shí)驗(yàn)系統(tǒng)的基礎(chǔ),但模型本身不能提供交互功能。本文采用Unity3D 作為虛擬現(xiàn)實(shí)開發(fā)引擎,將3D 模型導(dǎo)出后傳遞給Unity,Unity 負(fù)責(zé)將這些模型有機(jī)地組合起來(lái),并通過腳本形成交互。
從3D Max 導(dǎo)出模型的基本步驟是:首先在3D Max 將顯示單位和系統(tǒng)單位設(shè)為厘米,使之與Unity 的單位一致;其次將3D Max 模型以.fbx 的格式導(dǎo)出;然后將導(dǎo)出的文件存放在Unity 項(xiàng)目里的Assets 文件夾下;最后啟動(dòng)Unity,在項(xiàng)目視圖中將已經(jīng)創(chuàng)建好的分光計(jì)模型拖拽到游戲視圖中。
導(dǎo)入模型后,通常會(huì)出現(xiàn)模型散架、模型模糊失真等問題,這需要在Unity3D 中予以修正。
Unity3D 支持多種編譯腳本,本文用C#腳本對(duì)分光計(jì)系統(tǒng)進(jìn)行交互設(shè)計(jì)。通過編寫C#腳本,用鼠標(biāo)和鍵盤對(duì)分光計(jì)各零部件進(jìn)行操作,不僅對(duì)分光計(jì)各結(jié)構(gòu)進(jìn)行移動(dòng)旋轉(zhuǎn)以及多方位觀察,還標(biāo)出各結(jié)構(gòu)的名字和功能,并且對(duì)分光計(jì)的部分原理進(jìn)行展示。本文采用第一人稱方式對(duì)場(chǎng)景進(jìn)行控制,在Unity3D 中,第一人稱控制方式可以通過編寫腳本利用鼠標(biāo)來(lái)控制人或攝像機(jī)的旋轉(zhuǎn)來(lái)實(shí)現(xiàn)。
添加C#腳本控制攝像機(jī)跟隨Cube 移動(dòng),達(dá)到第一人稱場(chǎng)景漫游的效果。設(shè)計(jì)思路是:首先在Start 中創(chuàng)建三個(gè)變量,初始化相機(jī)位置。然后新建一個(gè)cameraMove 方法,在里面設(shè)置使相機(jī)跟隨鼠標(biāo)旋轉(zhuǎn)然后物體與相機(jī)同步旋轉(zhuǎn)同時(shí)更新相機(jī)位置。最后在Update方法中調(diào)用cameraMove 方法,同時(shí)監(jiān)聽“WASD”鍵控制其前后左右移動(dòng),“QE”鍵分別控制其上下移動(dòng)。
交互的前提是系統(tǒng)能識(shí)別分光計(jì)各部分的結(jié)構(gòu),從而能夠選中并對(duì)其進(jìn)行相應(yīng)的操作。為實(shí)現(xiàn)這個(gè)目標(biāo),C#腳本的設(shè)計(jì)思路是:首先給需要識(shí)別的對(duì)象添加BoxColider 組件(碰撞組件),并對(duì)其碰撞結(jié)構(gòu)進(jìn)行調(diào)整。然后在C#腳本中創(chuàng)建方法來(lái)識(shí)別碰撞,同時(shí)返回與鼠標(biāo)碰撞對(duì)象的信息。最后再創(chuàng)建一個(gè)窗口顯示方法,獲取鼠標(biāo)按鍵信息后顯示窗口。
以望遠(yuǎn)鏡的交互為例闡述交互腳本的設(shè)計(jì)過程。望遠(yuǎn)鏡需要帶動(dòng)刻度盤一起繞載物臺(tái)中心旋轉(zhuǎn),讓物體繞自身XYZ 軸旋轉(zhuǎn)很簡(jiǎn)單,但是想讓物體繞另一個(gè)物體旋轉(zhuǎn)稍微復(fù)雜一點(diǎn)。有兩種處理方法,一是保持A 不變,B 繞A 旋轉(zhuǎn);二是A 繞自身旋轉(zhuǎn)同時(shí)帶動(dòng)B 一起旋轉(zhuǎn)。這里采用第一種方法,先建立一個(gè)參考點(diǎn)spot,放在刻度盤的中央,然后寫入代碼使望遠(yuǎn)鏡系繞spot 旋轉(zhuǎn)就能達(dá)到期望效果。然后把腳本添加到望遠(yuǎn)鏡系上面,并且給C#腳本中的spot 變量附上Scene 場(chǎng)景中spot 的Transform 信息。完成后,鼠標(biāo)點(diǎn)擊望遠(yuǎn)鏡,可顯示望遠(yuǎn)鏡信息,并可以通過鍵盤左鍵和右鍵控制其旋轉(zhuǎn),實(shí)現(xiàn)了交互功能。
通過Unity3D 打包發(fā)布,可以使實(shí)驗(yàn)系統(tǒng)成為獨(dú)立文件,從而可以脫離Unity3D 環(huán)境在其他電腦運(yùn)行和傳播。Unity3D 打包發(fā)布,可以直接在Unity 界面的File 目錄下點(diǎn)擊Build Settings,就可以發(fā)布到PC、iOS、Android 等客戶端。最后成品文件包括一個(gè).exe 文件和一個(gè)Data 數(shù)據(jù)文件夾,二者缺一不可,且不可分割。
對(duì)虛擬現(xiàn)實(shí)場(chǎng)景打包發(fā)布后,可以對(duì)虛擬分光計(jì)系統(tǒng)進(jìn)行測(cè)試。測(cè)試功能主要分為場(chǎng)景漫游和交互控制兩部分。
首先進(jìn)行場(chǎng)景漫游測(cè)試,可以通過鍵盤“Q、W、E、A、S、D”控制攝像機(jī)移動(dòng)同時(shí)鼠標(biāo)控制方向,進(jìn)行場(chǎng)景漫游。測(cè)試表明,該操作簡(jiǎn)單流暢,能夠快速定位自己所需求的視角。場(chǎng)景漫游時(shí)能更加清晰了解分光計(jì)的機(jī)械結(jié)構(gòu),從而加深對(duì)分光計(jì)工作原理的理解。圖3是場(chǎng)景漫游獲取的各個(gè)角度的圖片。

圖3 分光計(jì)漫游場(chǎng)景圖
分光計(jì)各零部件的交互控制功能,就是當(dāng)鼠標(biāo)移動(dòng)到對(duì)象上時(shí)能顯示其名字,點(diǎn)擊零部件后顯示其詳細(xì)信息并給予操作提示,同時(shí)還可以通過鍵盤對(duì)其進(jìn)行旋轉(zhuǎn)和移動(dòng)操作。
以望遠(yuǎn)鏡為例進(jìn)行操作展示,系統(tǒng)實(shí)現(xiàn)了望遠(yuǎn)鏡的旋轉(zhuǎn)、狹縫調(diào)節(jié)器的伸縮與旋轉(zhuǎn)、載物臺(tái)的升降與旋轉(zhuǎn),以及各螺釘?shù)男D(zhuǎn)等功能,如圖4 所示。
本文實(shí)現(xiàn)了分光計(jì)虛擬實(shí)驗(yàn)系統(tǒng),經(jīng)過測(cè)試與發(fā)布,系統(tǒng)具有操作簡(jiǎn)單、使用方便、逼真度高、跨平臺(tái)運(yùn)行等特點(diǎn),對(duì)學(xué)生認(rèn)識(shí)分光計(jì)、操作分光計(jì)有良好的輔助作用,能大大提高實(shí)驗(yàn)效率。未來(lái)將進(jìn)一步優(yōu)化模型,添加更加復(fù)雜的交互功能,完整還原分光計(jì)實(shí)驗(yàn)的實(shí)驗(yàn)過程,這也是今后研究工作的重點(diǎn)。

圖4 望遠(yuǎn)鏡操作示意圖