趙洋洋,盛思遠
(1.中國刑事警察學院 基礎教研部,遼寧 沈陽 110854;2.沈陽化工大學 理學院,遼寧 沈陽 110142)
在高等教育中,理論課程的網絡課堂和傳統課堂相結合的教學模式已經相當成熟,但對于實驗課來說,還存在亟待解決的問題. 尤其是對于遠程培養方式的非全日制高等教育,由于受到空間和資源限制,幾乎不安排物理實驗課. 而物理實驗是科學實驗的先驅,體現了大多數科學實驗的共性[1]. 由于有些實驗課程對于環境的要求較高,追求理想的實驗環境,需要大量的實驗室維護經費來維持. 此外,由于學生生源地中等教育水平不均衡,學生對物理實驗的熟悉程度差別較大,帶來了較大的授課難度[2]. 這些因素,都影響了大學物理實驗課程的教學效果.
國內VR教育主要投入在虛擬現實教育的學習資源、虛擬現實理念研究和虛擬校園仿真環境的構建[3]. 物理仿真實驗室通過一系列設計的場景,模擬了特定實驗的實驗過程,在現代計算機物理引擎中,對于力學性質的模擬已經非常逼真,基本符合真實世界的物理規律[4]. 但是對于光學性質來說,一方面由于光學性質在臨界情況下比較復雜,另一方面受限于顯卡計算能力,無法大規模實時運用貼近真實世界的光柵化渲染算法. 由于光線追蹤渲染算法[5]更偏向以“與真實世界效果相似”為目標,而非從原理上模擬,所以對于某些光學器件的效果,無法精確地表現. 本文提出間接渲染的方法,基于Unity3D平臺開發三維物理光學實驗程序,并探討大規模運用此方法進行仿真的可行性.
Unity3D 是一款跨平臺的3D引擎,用于制作3D游戲、實時三維動畫等互動內容,而在教育領域,主要用來制作工業動畫,用仿真的方法對員工進行培訓. 本文就是采用Unity3D平臺對大學物理實驗中的光學部分進行仿真,主要用于在線實驗教育. Unity3D平臺的優勢主要在于,系統的交互性好,以及對不同平臺良好的適配性,實現1套代碼對應多種平臺. 但是由于Unity引擎是逐幀渲染,不同于大多數App的臟渲染,渲染計算量較大,對于渲染的優化問題比較重要[6].
實驗系統總體框架如圖1所示.

圖1 實驗系統總體框架圖
1.2.1 實驗介紹模塊
實驗介紹主要在Unity3D中播放預設好的視頻,仿照在線慕課的形式,講解實驗原理、操作和注意事項. 在Unity3D中播放視頻一般用UnityEngine.Video.VideoPlayer組件或MovieTexture組件,這2個組件都是用在物體表面渲染動態紋理的方法來播放視頻,因此必須依賴Render 組件,本文只是簡單的在屏幕上播放視頻,因此使用Render Texture組件.
此外還需在配置文件里配置文件讀寫的權限,例如安卓系統需要為Manifast配置如下項:
1.2.2 實驗操作模塊
在操作前需要先選擇操作對象,對于不同的對象有對應的操作方法,主要為開關類、移動類和旋轉類3種. 以分光儀測三棱鏡實驗為例,光源的操作方法主要是選擇和開關,在實驗中可以選擇不同的光源,如汞燈和鈉燈;分光儀的操作方法主要為旋轉;三棱鏡的操作方法為移動和旋轉. 對于移動和旋轉類操作,系統使用鍵盤進行操控,對每個操作設置步進和隨機因子
Δd=d步進+d′,

短按鍵時對象移動1個步進,長按鍵時目標連續移動,通過反復調節,可獲得準連續的儀器狀態. 在調節儀器過程中,同樣可調節攝像機位置,Unity3D支持預設多個攝像機,可在不同角度觀察實驗儀器,同時攝像機也可在場景中隨物體移動,如分光儀標尺處可以常置攝像機,通過切換到此攝像機即可比較方便地讀取數據.
1.2.3 數據處理和自動評閱
在實驗結束后,進入數據處理環節,系統自動生成數據處理表格,需要實驗者將數據處理結果輸入并上傳,由服務端計算數據處理的合理性,并給出實驗得分.
仿真光學器件的原理主要包括光學表面的局部光柵化渲染模型,以及準實時烘培貼圖的制作方法. 局部光柵化渲染模型主要涉及在光學表面難以適用光線追蹤渲染的情況下,利用傳統光柵化渲染的思路,在光學表面渲染出光照貼圖的算法. 準實時烘培貼圖是按照光學儀器的特性,將不同波長的光譜分別繪制在貼圖上.
2.1.1 光學表面的局部光柵化渲染模型
光學儀器主要體現光的波動性質,表現為光的折射、衍射和干涉,由于光在這種情況下從攝像機到光源之間并不是1條直線,光線追蹤渲染很難獲得良好的效果. 因為攝像機必須在所有可見的光學平面上逐點計算光線的貢獻值
其中,Ccamera代表渲染結果,積分項代表光學表面貢獻值,Cscene代表環境光. 這在實時渲染中幾乎是不可能的,因此需要比較巧妙的方法.
仿照傳統光柵化的思路,渲染從光源開始,將場景光靜態的烘培在觀察者曲面上,形成觀察者貼圖[7]. 在光源不改變的情況下,此過程僅需要計算1次. 然后將可能實時移動位置的圖像分層,在渲染時,實時算出圖像各層相對于觀察者的位置,將圖像以一定的方式疊加輸出,即可比較真實地模擬出光學儀器的動態實時效果.
對于分光儀來說,光通過準直光管照射到載物臺的光學元件上,然后通過光學元件照射到觀察者平面,建立以載物臺為原心,入射方向為0°的極坐標系(φ,r,z),如圖2所示.

圖2 分光儀抽象俯視圖
由于入射光為一道狹縫,因此z方向上可以近似看成各向同性,則觀察者平面的亮度為
Ccamera=f(Clight,φ,r,θ)+Cscene

由于三棱鏡有1個不透光的磨砂面,這時加上三棱鏡的2個光學面都在預設光路上的限制條件,在真實環境下,若某個光譜的光路被三棱鏡的磨砂面擋住,鏡筒中自然不可能看到該光譜.
對于光柵來說,光學公式可以近似為標準差為準直管1/2狹縫寬度的高斯分布[8],即
f(Clight,φ,r,θ)=N(μ,σ2)Clight,
其中,k表示光柵衍射條紋級數,取值0,±1,…隱含限制條件為光路必須經過光柵,當不滿足限制條件時,光不發生衍射,只會形成中央亮條紋,固定在φ=π的位置.
式中光譜位置是極坐標φ、波長λ和光學器件位置θ的函數,因此在烘培時需要將光譜中不同的部分進行分層,以便渲染時能夠分別計算其中每個貼圖對于φ的偏移量. 而對于極坐標系中r對貼圖的影響,留待2.2中進行討論.
2.1.2 準實時烘培貼圖制作
當入射光線通過光學器件照射到觀察者曲面上時,需要在φ=π的位置形成合成光譜,合成光譜貼圖為32×32和有透明通道的png貼圖,如圖3所示.

圖3 準實時譜線貼圖
根據光源的性質,入射光線的光譜成分可以近似地分解為多條單色譜線,實驗室常用光源譜線波長和近似顏色如表1所示,其中顏色基于1931CIE-XYZ色度圖用RBG代碼表示[9].

表1 鈉燈汞燈常見譜線1931CIE-XYZ色度值
2.2.1 成像的合成與位移
渲染時,根據光學器件的位置和旋轉情況,需要實時計算每條譜線在觀察者平面上的位置{φ1,…,φn},并且根據引入光譜衰減參量,模擬光源的亮度變化. 由于分光儀的目鏡是半徑為R的圓形區域,那么觀察者的觀察范圍可以寫作(φ觀察者-φ′,φ觀察者+φ′).
每幀算出譜線相對于觀察者的位置{φ1′,…,φn′},在其中選出絕對值小于φ的譜線參與渲染. 若第m條譜線參與渲染,則渲染貼圖相對于中心點的位置xm=φmr觀察者,根據相對位置將渲染結果乘以衰減參量疊加映射在Render Texture組件上. 由于渲染結果的變化只與光學器件位置θ、觀察者位置φ和光譜衰減參量有關,因此,在這些值不改變的情況下,不需要實時刷新渲染結果,這樣可以更加節省資源.
2.2.2 用加權高斯模糊模擬目鏡調焦效果
分光儀的目鏡實際效果類似于望遠鏡,調節目鏡的焦距可以調節圖像的清晰程度[10]. 為了模擬這一效果一般需要圖像模糊算法進行屏幕效果后處理[11],引入改進的加權高斯模糊算法對圖像進行進一步處理,假設圖像的渲染結果都包含在每個像素的顏色中,那么圖像的每個像素的顏色為
其中,i∈Pn,Pn為附近n個像素的任意集合,也就是說每個像素的顏色等于原像素與附近共n+1個元素的顏色加權平均,其中μ為模糊權值,可以代表圖像的模糊程度. 當μ=0時,圖像完全不模糊,當μ=1時達到最大模糊,因此在調節目鏡焦距時,可調節的范圍x是(-1,1),而μ=abs(x),這樣當向某方向連續調節目鏡焦距時,圖像由模糊逐漸變得清晰再變得模糊,基本符合目鏡調焦的效果形式. 為了獲得更好的模糊效果,可以加大n的數值,從更多像素點進行采樣,但是模糊需要逐幀逐像素計算最終的渲染效果,過大的n值會造成巨大的負擔[12].
仿真實驗室允許學生在移動端進行實驗操作和演練,不受時空限制,節省實驗室維護成本,是未來教育的發展方向. 對于網絡教育來說,在線實驗室提供了一種物理實驗教學的解決方案[13]. 但是在具體應用環節還需要深入地研究和討論,本文提出的間接渲染的思路可以用于大多數普通光學實驗. 本仿真實驗還有很大的不足之處,主要是對實驗中用到的光學器件有限制,光學器件只能在一定范圍內進行移動和旋轉,當超出移動范圍時,無法輸出正確的結果. 在后續的改進中,需要進一步完善本仿真實驗,為實驗者提供更為優良的交互體驗.