趙洋洋,盛思遠
(1.中國刑事警察學院 基礎(chǔ)教研部,遼寧 沈陽 110854;2.沈陽化工大學 理學院,遼寧 沈陽 110142)
在高等教育中,理論課程的網(wǎng)絡(luò)課堂和傳統(tǒng)課堂相結(jié)合的教學模式已經(jīng)相當成熟,但對于實驗課來說,還存在亟待解決的問題. 尤其是對于遠程培養(yǎng)方式的非全日制高等教育,由于受到空間和資源限制,幾乎不安排物理實驗課. 而物理實驗是科學實驗的先驅(qū),體現(xiàn)了大多數(shù)科學實驗的共性[1]. 由于有些實驗課程對于環(huán)境的要求較高,追求理想的實驗環(huán)境,需要大量的實驗室維護經(jīng)費來維持. 此外,由于學生生源地中等教育水平不均衡,學生對物理實驗的熟悉程度差別較大,帶來了較大的授課難度[2]. 這些因素,都影響了大學物理實驗課程的教學效果.
國內(nèi)VR教育主要投入在虛擬現(xiàn)實教育的學習資源、虛擬現(xiàn)實理念研究和虛擬校園仿真環(huán)境的構(gòu)建[3]. 物理仿真實驗室通過一系列設(shè)計的場景,模擬了特定實驗的實驗過程,在現(xiàn)代計算機物理引擎中,對于力學性質(zhì)的模擬已經(jīng)非常逼真,基本符合真實世界的物理規(guī)律[4]. 但是對于光學性質(zhì)來說,一方面由于光學性質(zhì)在臨界情況下比較復雜,另一方面受限于顯卡計算能力,無法大規(guī)模實時運用貼近真實世界的光柵化渲染算法. 由于光線追蹤渲染算法[5]更偏向以“與真實世界效果相似”為目標,而非從原理上模擬,所以對于某些光學器件的效果,無法精確地表現(xiàn). 本文提出間接渲染的方法,基于Unity3D平臺開發(fā)三維物理光學實驗程序,并探討大規(guī)模運用此方法進行仿真的可行性.
Unity3D 是一款跨平臺的3D引擎,用于制作3D游戲、實時三維動畫等互動內(nèi)容,而在教育領(lǐng)域,主要用來制作工業(yè)動畫,用仿真的方法對員工進行培訓. 本文就是采用Unity3D平臺對大學物理實驗中的光學部分進行仿真,主要用于在線實驗教育. Unity3D平臺的優(yōu)勢主要在于,系統(tǒng)的交互性好,以及對不同平臺良好的適配性,實現(xiàn)1套代碼對應多種平臺. 但是由于Unity引擎是逐幀渲染,不同于大多數(shù)App的臟渲染,渲染計算量較大,對于渲染的優(yōu)化問題比較重要[6].
實驗系統(tǒng)總體框架如圖1所示.
圖1 實驗系統(tǒng)總體框架圖
1.2.1 實驗介紹模塊
實驗介紹主要在Unity3D中播放預設(shè)好的視頻,仿照在線慕課的形式,講解實驗原理、操作和注意事項. 在Unity3D中播放視頻一般用UnityEngine.Video.VideoPlayer組件或MovieTexture組件,這2個組件都是用在物體表面渲染動態(tài)紋理的方法來播放視頻,因此必須依賴Render 組件,本文只是簡單的在屏幕上播放視頻,因此使用Render Texture組件.
此外還需在配置文件里配置文件讀寫的權(quán)限,例如安卓系統(tǒng)需要為Manifast配置如下項:
1.2.2 實驗操作模塊
在操作前需要先選擇操作對象,對于不同的對象有對應的操作方法,主要為開關(guān)類、移動類和旋轉(zhuǎn)類3種. 以分光儀測三棱鏡實驗為例,光源的操作方法主要是選擇和開關(guān),在實驗中可以選擇不同的光源,如汞燈和鈉燈;分光儀的操作方法主要為旋轉(zhuǎn);三棱鏡的操作方法為移動和旋轉(zhuǎn). 對于移動和旋轉(zhuǎn)類操作,系統(tǒng)使用鍵盤進行操控,對每個操作設(shè)置步進和隨機因子
Δd=d步進+d′,
短按鍵時對象移動1個步進,長按鍵時目標連續(xù)移動,通過反復調(diào)節(jié),可獲得準連續(xù)的儀器狀態(tài). 在調(diào)節(jié)儀器過程中,同樣可調(diào)節(jié)攝像機位置,Unity3D支持預設(shè)多個攝像機,可在不同角度觀察實驗儀器,同時攝像機也可在場景中隨物體移動,如分光儀標尺處可以常置攝像機,通過切換到此攝像機即可比較方便地讀取數(shù)據(jù).
1.2.3 數(shù)據(jù)處理和自動評閱
在實驗結(jié)束后,進入數(shù)據(jù)處理環(huán)節(jié),系統(tǒng)自動生成數(shù)據(jù)處理表格,需要實驗者將數(shù)據(jù)處理結(jié)果輸入并上傳,由服務(wù)端計算數(shù)據(jù)處理的合理性,并給出實驗得分.
仿真光學器件的原理主要包括光學表面的局部光柵化渲染模型,以及準實時烘培貼圖的制作方法. 局部光柵化渲染模型主要涉及在光學表面難以適用光線追蹤渲染的情況下,利用傳統(tǒng)光柵化渲染的思路,在光學表面渲染出光照貼圖的算法. 準實時烘培貼圖是按照光學儀器的特性,將不同波長的光譜分別繪制在貼圖上.
2.1.1 光學表面的局部光柵化渲染模型
光學儀器主要體現(xiàn)光的波動性質(zhì),表現(xiàn)為光的折射、衍射和干涉,由于光在這種情況下從攝像機到光源之間并不是1條直線,光線追蹤渲染很難獲得良好的效果. 因為攝像機必須在所有可見的光學平面上逐點計算光線的貢獻值
其中,Ccamera代表渲染結(jié)果,積分項代表光學表面貢獻值,Cscene代表環(huán)境光. 這在實時渲染中幾乎是不可能的,因此需要比較巧妙的方法.
仿照傳統(tǒng)光柵化的思路,渲染從光源開始,將場景光靜態(tài)的烘培在觀察者曲面上,形成觀察者貼圖[7]. 在光源不改變的情況下,此過程僅需要計算1次. 然后將可能實時移動位置的圖像分層,在渲染時,實時算出圖像各層相對于觀察者的位置,將圖像以一定的方式疊加輸出,即可比較真實地模擬出光學儀器的動態(tài)實時效果.
對于分光儀來說,光通過準直光管照射到載物臺的光學元件上,然后通過光學元件照射到觀察者平面,建立以載物臺為原心,入射方向為0°的極坐標系(φ,r,z),如圖2所示.
圖2 分光儀抽象俯視圖
由于入射光為一道狹縫,因此z方向上可以近似看成各向同性,則觀察者平面的亮度為
Ccamera=f(Clight,φ,r,θ)+Cscene
由于三棱鏡有1個不透光的磨砂面,這時加上三棱鏡的2個光學面都在預設(shè)光路上的限制條件,在真實環(huán)境下,若某個光譜的光路被三棱鏡的磨砂面擋住,鏡筒中自然不可能看到該光譜.
對于光柵來說,光學公式可以近似為標準差為準直管1/2狹縫寬度的高斯分布[8],即
f(Clight,φ,r,θ)=N(μ,σ2)Clight,
其中,k表示光柵衍射條紋級數(shù),取值0,±1,…隱含限制條件為光路必須經(jīng)過光柵,當不滿足限制條件時,光不發(fā)生衍射,只會形成中央亮條紋,固定在φ=π的位置.
式中光譜位置是極坐標φ、波長λ和光學器件位置θ的函數(shù),因此在烘培時需要將光譜中不同的部分進行分層,以便渲染時能夠分別計算其中每個貼圖對于φ的偏移量. 而對于極坐標系中r對貼圖的影響,留待2.2中進行討論.
2.1.2 準實時烘培貼圖制作
當入射光線通過光學器件照射到觀察者曲面上時,需要在φ=π的位置形成合成光譜,合成光譜貼圖為32×32和有透明通道的png貼圖,如圖3所示.
圖3 準實時譜線貼圖
根據(jù)光源的性質(zhì),入射光線的光譜成分可以近似地分解為多條單色譜線,實驗室常用光源譜線波長和近似顏色如表1所示,其中顏色基于1931CIE-XYZ色度圖用RBG代碼表示[9].
表1 鈉燈汞燈常見譜線1931CIE-XYZ色度值
2.2.1 成像的合成與位移
渲染時,根據(jù)光學器件的位置和旋轉(zhuǎn)情況,需要實時計算每條譜線在觀察者平面上的位置{φ1,…,φn},并且根據(jù)引入光譜衰減參量,模擬光源的亮度變化. 由于分光儀的目鏡是半徑為R的圓形區(qū)域,那么觀察者的觀察范圍可以寫作(φ觀察者-φ′,φ觀察者+φ′).
每幀算出譜線相對于觀察者的位置{φ1′,…,φn′},在其中選出絕對值小于φ的譜線參與渲染. 若第m條譜線參與渲染,則渲染貼圖相對于中心點的位置xm=φmr觀察者,根據(jù)相對位置將渲染結(jié)果乘以衰減參量疊加映射在Render Texture組件上. 由于渲染結(jié)果的變化只與光學器件位置θ、觀察者位置φ和光譜衰減參量有關(guān),因此,在這些值不改變的情況下,不需要實時刷新渲染結(jié)果,這樣可以更加節(jié)省資源.
2.2.2 用加權(quán)高斯模糊模擬目鏡調(diào)焦效果
分光儀的目鏡實際效果類似于望遠鏡,調(diào)節(jié)目鏡的焦距可以調(diào)節(jié)圖像的清晰程度[10]. 為了模擬這一效果一般需要圖像模糊算法進行屏幕效果后處理[11],引入改進的加權(quán)高斯模糊算法對圖像進行進一步處理,假設(shè)圖像的渲染結(jié)果都包含在每個像素的顏色中,那么圖像的每個像素的顏色為
其中,i∈Pn,Pn為附近n個像素的任意集合,也就是說每個像素的顏色等于原像素與附近共n+1個元素的顏色加權(quán)平均,其中μ為模糊權(quán)值,可以代表圖像的模糊程度. 當μ=0時,圖像完全不模糊,當μ=1時達到最大模糊,因此在調(diào)節(jié)目鏡焦距時,可調(diào)節(jié)的范圍x是(-1,1),而μ=abs(x),這樣當向某方向連續(xù)調(diào)節(jié)目鏡焦距時,圖像由模糊逐漸變得清晰再變得模糊,基本符合目鏡調(diào)焦的效果形式. 為了獲得更好的模糊效果,可以加大n的數(shù)值,從更多像素點進行采樣,但是模糊需要逐幀逐像素計算最終的渲染效果,過大的n值會造成巨大的負擔[12].
仿真實驗室允許學生在移動端進行實驗操作和演練,不受時空限制,節(jié)省實驗室維護成本,是未來教育的發(fā)展方向. 對于網(wǎng)絡(luò)教育來說,在線實驗室提供了一種物理實驗教學的解決方案[13]. 但是在具體應用環(huán)節(jié)還需要深入地研究和討論,本文提出的間接渲染的思路可以用于大多數(shù)普通光學實驗. 本仿真實驗還有很大的不足之處,主要是對實驗中用到的光學器件有限制,光學器件只能在一定范圍內(nèi)進行移動和旋轉(zhuǎn),當超出移動范圍時,無法輸出正確的結(jié)果. 在后續(xù)的改進中,需要進一步完善本仿真實驗,為實驗者提供更為優(yōu)良的交互體驗.