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

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

圖3 分光計漫游場景圖
分光計各零部件的交互控制功能,就是當鼠標移動到對象上時能顯示其名字,點擊零部件后顯示其詳細信息并給予操作提示,同時還可以通過鍵盤對其進行旋轉和移動操作。
以望遠鏡為例進行操作展示,系統實現了望遠鏡的旋轉、狹縫調節器的伸縮與旋轉、載物臺的升降與旋轉,以及各螺釘的旋轉等功能,如圖4 所示。
本文實現了分光計虛擬實驗系統,經過測試與發布,系統具有操作簡單、使用方便、逼真度高、跨平臺運行等特點,對學生認識分光計、操作分光計有良好的輔助作用,能大大提高實驗效率。未來將進一步優化模型,添加更加復雜的交互功能,完整還原分光計實驗的實驗過程,這也是今后研究工作的重點。

圖4 望遠鏡操作示意圖