郭天太,王可為,孔 明,吳曉康
(中國計(jì)量大學(xué)計(jì)量測試工程學(xué)院,杭州 310018)
實(shí)驗(yàn)是培養(yǎng)工科學(xué)生動手能力的必由之路。近年來,隨著我國在校大學(xué)生人數(shù)的不斷增加,實(shí)驗(yàn)儀器的臺套數(shù)不足已成為許多工科院校面臨的共性問題。在此背景下,虛擬現(xiàn)實(shí)(Virtual Reality,VR)技術(shù)在實(shí)驗(yàn)教學(xué)領(lǐng)域的應(yīng)用得到了越來越多的關(guān)注。以光學(xué)實(shí)驗(yàn)為例,實(shí)驗(yàn)儀器價(jià)格昂貴,脆弱易損壞,需要大量經(jīng)費(fèi)維護(hù),且經(jīng)常會因設(shè)備臺套數(shù)不足導(dǎo)致實(shí)驗(yàn)時(shí)間安排倉促[1]。將VR技術(shù)引入光學(xué)實(shí)驗(yàn),不僅可以輔助并補(bǔ)充理論教學(xué),培養(yǎng)學(xué)生的創(chuàng)新性思維,且能使抽象的光學(xué)理論體系變得通俗易懂[2]。虛擬光學(xué)實(shí)驗(yàn)室的研發(fā)不僅可節(jié)省實(shí)驗(yàn)室經(jīng)費(fèi),而且有助于打破傳統(tǒng)光學(xué)實(shí)驗(yàn)受制于時(shí)空限制的缺陷,但是部分虛擬光學(xué)實(shí)驗(yàn)系統(tǒng)因產(chǎn)權(quán)問題無法免費(fèi)向師生開放,面向大學(xué)生的虛擬光學(xué)實(shí)驗(yàn)平臺更加稀少[3]。
國外在虛擬光學(xué)實(shí)驗(yàn)室方面起步較早,水平較高。Gamo[4]開發(fā)了光學(xué)實(shí)驗(yàn)室軟件模擬不同光闌產(chǎn)生的光學(xué)衍射;Perez-Garcia等[5]設(shè)計(jì)并實(shí)現(xiàn)了虛擬和現(xiàn)實(shí)相結(jié)合的光學(xué)練習(xí)實(shí)驗(yàn)。國內(nèi)近年來在這一領(lǐng)域進(jìn)展很快,但虛擬光學(xué)實(shí)驗(yàn)更注重理論分析與考核。寧禹等[6]開發(fā)了光學(xué)仿真平臺SeeLight,但有時(shí)查看圖像以后需要刷新頁面才能再次查看;尤勐等[7]將部分內(nèi)容委托專業(yè)公司完成,其實(shí)驗(yàn)內(nèi)容局限于工程光學(xué);趙洋洋等[8]建立了物理光學(xué)仿真平臺,其光學(xué)器件超出一定范圍時(shí)會輸出錯(cuò)誤參數(shù);崔海瑛等[9]應(yīng)用Matlab自帶的庫函數(shù)實(shí)現(xiàn)仿真過程,但缺少物理光學(xué)實(shí)驗(yàn)?zāi)K,且畫面略單調(diào),無實(shí)物模型。
開發(fā)功能多樣、擴(kuò)展靈活、成本低廉的桌面型虛擬光學(xué)實(shí)驗(yàn)系統(tǒng)是解決以上問題的有效途徑。本文提出開發(fā)基于3DS Max 和Unity3D 的虛擬光學(xué)實(shí)驗(yàn)系統(tǒng)。初始階段的幾何建??捎媒\浖?DS Max 實(shí)施。該軟件使用簡單,可方便地對模型尺寸、材質(zhì)等進(jìn)行修改[10]。后續(xù)的功能可以用Unity3D 虛擬開發(fā)軟件實(shí)施。Unity3D 最大的優(yōu)勢是其腳本語言簡單,對操作者的編程能力要求不高,且跨平臺性好,兼容性優(yōu),物理效果好[11],適合開發(fā)各種虛擬光學(xué)實(shí)驗(yàn)。運(yùn)用Unity3D自帶功能完善各個(gè)實(shí)驗(yàn)框架,對光學(xué)實(shí)驗(yàn)進(jìn)行仿真。
本文開發(fā)的虛擬光學(xué)實(shí)驗(yàn)系統(tǒng)參考測控技術(shù)與儀器專業(yè)現(xiàn)有物理光學(xué)與幾何光學(xué)實(shí)驗(yàn),對光學(xué)實(shí)驗(yàn)進(jìn)行仿真。系統(tǒng)的模塊與功能設(shè)置如圖1 所示。
圖1 系統(tǒng)模塊與功能框架
除了實(shí)驗(yàn)預(yù)習(xí)、參數(shù)設(shè)置、儀器觀察、結(jié)果輸出外,學(xué)生還可以對實(shí)際實(shí)驗(yàn)結(jié)果與仿真結(jié)果進(jìn)行誤差分析,彰顯了“計(jì)量”特色,也加深了學(xué)生對實(shí)驗(yàn)測量結(jié)果準(zhǔn)確度的認(rèn)識。登錄界面和實(shí)驗(yàn)主界面見圖2。
圖2 登錄界面和實(shí)驗(yàn)主界面
虛擬光學(xué)實(shí)驗(yàn)系統(tǒng)由以下模塊組成:
(1)實(shí)驗(yàn)預(yù)習(xí)模塊。學(xué)生登錄系統(tǒng)之后,首先選定實(shí)驗(yàn),然后可通過指導(dǎo)性文字、原理圖、三維模型和動畫對實(shí)驗(yàn)理論部分進(jìn)行學(xué)習(xí),在預(yù)習(xí)之后出現(xiàn)思考界面,所有思考題均可在虛擬實(shí)驗(yàn)進(jìn)行過程中得到答案。
(2)參數(shù)設(shè)置模塊。主要利用GUI 交互界面實(shí)現(xiàn)參數(shù)的輸入。在了解操作流程后,學(xué)生根據(jù)自己的設(shè)計(jì)思路輸入不同實(shí)驗(yàn)的各種參數(shù),系統(tǒng)實(shí)時(shí)監(jiān)測輸入?yún)?shù)的有效性,并自動生成實(shí)驗(yàn)現(xiàn)象或光路圖。
(3)儀器觀察模塊。學(xué)生可用鼠標(biāo)或按鍵等實(shí)現(xiàn)與系統(tǒng)的交互,通過修改Hierarchy 面板中Main Camera的視角與位置,實(shí)現(xiàn)第一人稱漫游。學(xué)生可任意進(jìn)行視角的縮放,全方位觀察實(shí)驗(yàn)儀器和過程。
(4)結(jié)果輸出模塊。當(dāng)學(xué)生進(jìn)行實(shí)驗(yàn)時(shí),系統(tǒng)不僅會實(shí)時(shí)顯示實(shí)驗(yàn)現(xiàn)象,對應(yīng)的各種參數(shù)也會顯示出來,方便學(xué)生在觀察實(shí)驗(yàn)現(xiàn)象的同時(shí)把系統(tǒng)給出的實(shí)驗(yàn)結(jié)果與實(shí)驗(yàn)現(xiàn)象對應(yīng)起來,加深對實(shí)驗(yàn)的理解。
(5)誤差分析模塊。光學(xué)實(shí)驗(yàn)結(jié)果必然存在實(shí)驗(yàn)者操作誤差、公式的截?cái)嗾`差、儀器自身產(chǎn)生的誤差等[12],這些都會影響實(shí)驗(yàn)的準(zhǔn)確度。學(xué)生通過對實(shí)際實(shí)驗(yàn)數(shù)據(jù)進(jìn)行誤差分析,或通過系統(tǒng)隨機(jī)擾動產(chǎn)生一組符合特定分布規(guī)律的模擬數(shù)據(jù),再進(jìn)行誤差分析,從而加深對所學(xué)專業(yè)知識的理解。
本系統(tǒng)采用3DS Max繪制實(shí)驗(yàn)?zāi)P汀?DS Max的基本圖形有長方體、球體、四棱錐、管狀體等,也可利用擴(kuò)展基本體對模型進(jìn)行補(bǔ)充。最常用的建模指令有擠出、縮放、對齊等[13]。對于結(jié)構(gòu)較復(fù)雜的儀器模型,可選擇復(fù)合對象面板下的“ProBoolean”進(jìn)行操作。需要注意的是:在模型建立操作過程中,布爾運(yùn)算不可逆,所以務(wù)必要做好保存?zhèn)浞莨ぷ?。圖3(a)所示為繪制完成的望遠(yuǎn)鏡模型不同方向的視圖。
模型繪制成功后,需以.FBX 格式導(dǎo)入U(xiǎn)nity3D,并保證單位的統(tǒng)一。若采用3DS Max 自帶的材質(zhì)編輯器處理模型外觀,導(dǎo)入U(xiǎn)nity3D 后會出現(xiàn)材質(zhì)丟失的問題。解決方案有二:①在3DS Max 中對不同外觀的模型賦予不同的材質(zhì),隨后在Unity3D 中進(jìn)一步處理;②分別建立儀器模型,把整體模型拆分成組件,這樣在導(dǎo)入U(xiǎn)nity3D中后可分別賦予材質(zhì)。針對第2 種方案模型拆分不好選取的問題,可采用3DS Max 自帶的組功能,可將選中模型包含成一個(gè)組,且保證各個(gè)零件的獨(dú)立性。圖3(b)所示為望遠(yuǎn)鏡模型在Unity3D中成功賦予材質(zhì)后的圖樣。
圖3 模型的繪制與處理
虛擬光學(xué)實(shí)驗(yàn)平臺基于Unity3D 軟件進(jìn)行開發(fā)。交互功能主要通過編寫腳本實(shí)現(xiàn)。
交互界面的主要內(nèi)容如下:
(1)預(yù)習(xí)與思考等指導(dǎo)性文字的動畫設(shè)計(jì)。為體現(xiàn)指導(dǎo)性文字的靈活性,預(yù)習(xí)與思考之間的切換采取動畫方式。當(dāng)選中物體后打開動畫窗口(Animation),動畫狀態(tài)機(jī)(Animator)組件會自動創(chuàng)建在對應(yīng)物體上。以滑動動畫為例,點(diǎn)擊“Create”創(chuàng)建動畫名稱,創(chuàng)建動畫后單擊“Animator”面板對動畫進(jìn)行控制,用過渡關(guān)系(Transitions)將各個(gè)狀態(tài)連接起來,建立布爾運(yùn)算并編寫程序控制運(yùn)算。把代碼掛在“預(yù)習(xí)完畢”的按鈕(Button)上,即實(shí)現(xiàn)對動畫的控制。動畫狀態(tài)機(jī)的布局如圖4 所示。
圖4 預(yù)習(xí)與思考界面的動畫狀態(tài)機(jī)
(2)按鈕(Button)組件功能的實(shí)現(xiàn)。按鍵功能也是交互的重要組成部分。本系統(tǒng)實(shí)驗(yàn)的按鍵功能有進(jìn)入預(yù)習(xí)、實(shí)現(xiàn)動畫并進(jìn)入思考、進(jìn)入實(shí)驗(yàn)儀器分析、計(jì)算光強(qiáng)、進(jìn)入?yún)?shù)分析、實(shí)驗(yàn)誤差分析等界面和返回主頁面、進(jìn)入觀察儀器模型場景。實(shí)際操作過程中,只需在各個(gè)“Button”組件上把對應(yīng)的腳本及函數(shù)的名字添加在“On Click”上,即能實(shí)現(xiàn)所需功能。
(3)視角的旋轉(zhuǎn)與縮放。在儀器觀察模塊中,需要用鼠標(biāo)讓學(xué)生與視圖進(jìn)行交互。交互方式主要有3種:①點(diǎn)擊鼠標(biāo)左鍵實(shí)現(xiàn)視角拉近;②按住鼠標(biāo)右鍵并拖拽實(shí)現(xiàn)儀器模型各個(gè)方向的旋轉(zhuǎn);③移動鼠標(biāo)位置實(shí)現(xiàn)視角的移動。在Unity3D 中,運(yùn)用函數(shù)camera.fieldOfView實(shí)現(xiàn)視場范圍的改變實(shí)現(xiàn)視角的改變,縮放對象;運(yùn)用transform.RotateAround 函數(shù)實(shí)現(xiàn)了旋轉(zhuǎn)的功能;視角的移動則需要運(yùn)用transform.Rotate函數(shù)
(4)輸入?yún)?shù)的提示界面設(shè)計(jì)。為實(shí)現(xiàn)學(xué)生與實(shí)驗(yàn)的交互,需用到Unity3D 自帶的UI 制作參數(shù)界面。在Hierarchy面板右鍵選中UI,建立一個(gè)簡單的交互界面。為使界面美觀整潔,用PhotoShop 設(shè)計(jì)貼圖導(dǎo)入U(xiǎn)nity3D,并把圖片格式(Texture Type)改為“Spite”,以拖拽的方式把貼圖設(shè)置在Ispector 面板的“Image”組件“Source Image”中,即完成了參數(shù)界面的設(shè)計(jì)。在輸入?yún)?shù)時(shí),學(xué)生輸入的參數(shù)可能超過實(shí)驗(yàn)參數(shù)的允許范圍,此時(shí)提示界面會彈出。
在光學(xué)實(shí)驗(yàn)中,一些儀器會使光路發(fā)生改變。以顯微鏡實(shí)驗(yàn)為例,為實(shí)現(xiàn)光遇到透鏡后出射方向發(fā)生改變,可使用網(wǎng)格碰撞器(Mesh Collider)進(jìn)行檢測。利用Unity3D 自帶的Line Render 組件操作會更加簡便。把該組件添加至光源起點(diǎn)后,設(shè)置光線的材質(zhì)、粗細(xì)、是否投射陰影等,然后點(diǎn)擊“Positions”,將“size”的數(shù)值設(shè)置為“3”,即設(shè)置了所畫線的3 個(gè)點(diǎn),分別為起點(diǎn)、光路在透鏡上的轉(zhuǎn)折點(diǎn)和焦點(diǎn),并用“SetPosition”函數(shù)畫線,其他點(diǎn)也用相似的處理方法,最后的效果如圖5 所示。
圖5 開普勒望遠(yuǎn)鏡光路效果圖
為增加實(shí)驗(yàn)平臺的沉浸性體驗(yàn),需要添加粒子系統(tǒng)(Particle System)使模型直觀、動態(tài)地顯示。以蠟燭模型為例,制作好貼圖與模型后,添加粒子系統(tǒng),設(shè)置的主要參數(shù)如下:持續(xù)時(shí)間(Duration)5 s,生命周期(Start Delay)0.5 s,單位時(shí)間產(chǎn)生的粒子數(shù)(Rate Over Time)為7,啟動循環(huán)播放與預(yù)熱等。在設(shè)置參數(shù)過程中,粒子效果面板可以為系統(tǒng)調(diào)試提供參考,具體數(shù)值如圖6 所示。圖7 所示為蠟燭的最終顯示效果。
圖6 粒子效果面板的參數(shù)
圖7 蠟燭燃燒效果展示
以物理光學(xué)中的單縫衍射實(shí)驗(yàn)為例,展示系統(tǒng)的功能與操作。實(shí)驗(yàn)具體步驟如下:
步驟1實(shí)驗(yàn)準(zhǔn)備。此界面主要包含預(yù)習(xí)與思考2 個(gè)環(huán)節(jié)。預(yù)習(xí)中包含實(shí)驗(yàn)原理、實(shí)驗(yàn)儀器和實(shí)驗(yàn)?zāi)康牡慕榻B。思考部分包含實(shí)驗(yàn)思考題以及實(shí)驗(yàn)平臺的操作指南,如圖8 所示。
圖8 實(shí)驗(yàn)預(yù)習(xí)與思考界面
步驟2參數(shù)輸入。在系統(tǒng)初始界面上可以觀察實(shí)驗(yàn)儀器以及交互界面。系統(tǒng)會給出各個(gè)參數(shù)的范圍,由學(xué)生自主設(shè)計(jì)參數(shù)并輸入。在單縫衍射實(shí)驗(yàn)中,學(xué)生可設(shè)計(jì)縫寬與狹縫到光屏的距離,當(dāng)參數(shù)超出預(yù)定范圍時(shí),系統(tǒng)提示如圖9 所示。
圖9 系統(tǒng)提示界面
若參數(shù)在正確的數(shù)值范圍內(nèi),實(shí)驗(yàn)現(xiàn)象會根據(jù)設(shè)置的參數(shù)發(fā)生相應(yīng)變化。在單縫衍射實(shí)驗(yàn)中,設(shè)置相應(yīng)參數(shù),實(shí)驗(yàn)現(xiàn)象如圖10 所示。
圖10 單縫衍射實(shí)驗(yàn)光斑變化效果圖
步驟3儀器觀察。點(diǎn)擊主界面“Observe”按鈕,進(jìn)入觀察界面。點(diǎn)擊左鍵放大視角,長按右鍵并移動鼠標(biāo)實(shí)現(xiàn)儀器不同角度觀察,通過鼠標(biāo)左、右移動對視角進(jìn)行操控,如單縫衍射實(shí)驗(yàn)中觀察儀器模型,如圖11(a)、(b)所示。其他實(shí)驗(yàn),學(xué)生還可利用鍵盤對實(shí)物進(jìn)行控制,如顯微鏡實(shí)驗(yàn)中被控制部分會高亮顯示,如圖12(a)、(b)所示。
圖11 單縫衍射光學(xué)儀器觀察界面
圖12 對顯微鏡進(jìn)行控制
步驟4結(jié)果輸出。系統(tǒng)會針對當(dāng)前輸入?yún)?shù)自動計(jì)算其他參數(shù)。在單縫衍射中,系統(tǒng)會輸出如出線寬度、角寬度、各個(gè)條紋大小等重要參數(shù)的計(jì)算結(jié)果,如圖13 所示。
圖13 單縫衍射實(shí)驗(yàn)數(shù)據(jù)計(jì)算界面
步驟5誤差分析。點(diǎn)擊“誤差分析”,學(xué)生可選擇“實(shí)際數(shù)據(jù)”,在此直接輸入實(shí)際操作的各個(gè)實(shí)驗(yàn)參數(shù),或者選擇“模擬數(shù)據(jù)”,系統(tǒng)會放大所需測量的位置并顯示刻度讓學(xué)生自行讀數(shù),每隔5 s系統(tǒng)會按照誤差的分布規(guī)律生成擾動后的模擬測量結(jié)果。隨后,系統(tǒng)會生成記錄數(shù)據(jù)的圖表,并自動計(jì)算最佳估計(jì)值、實(shí)驗(yàn)標(biāo)準(zhǔn)偏差等與測量結(jié)果相關(guān)的參數(shù)。學(xué)生也可直接輸入實(shí)際的實(shí)驗(yàn)數(shù)據(jù)進(jìn)行誤差分析。實(shí)驗(yàn)誤差分析界面如圖14 所示。
圖14 實(shí)驗(yàn)誤差分析界面
本文基于3DS Max 和Unity3D 軟件開發(fā)了方便、實(shí)用的桌面虛擬光學(xué)實(shí)驗(yàn)系統(tǒng),成功模擬了光學(xué)實(shí)驗(yàn)的儀器與環(huán)境。系統(tǒng)不僅具有很強(qiáng)的交互性和沉浸感,不受人數(shù)、時(shí)間、空間、實(shí)驗(yàn)次數(shù)等的限制,還可自動對數(shù)據(jù)進(jìn)行進(jìn)一步處理,深刻挖掘各個(gè)光學(xué)參數(shù)的內(nèi)在聯(lián)系,加深學(xué)生對光學(xué)知識的理解。系統(tǒng)幾乎無需維護(hù)經(jīng)費(fèi),可大大節(jié)省運(yùn)行成本。所用技術(shù)擴(kuò)展性強(qiáng),且很容易移植到別的課程,對于提升高等工科院校的人才培養(yǎng)質(zhì)量具有積極的意義。