文/陸春雨
三維虛擬仿真技術是一種可以創建和體驗虛擬世界的計算機仿真系統,其利用計算機生成一種多源信息融合的交互式的三維動態視景和實體行為的系統仿真,使用戶沉浸其中。該技術已被廣泛應用于實驗教學過程中,即以計算機三維建模技術來生成數字化三維儀器,用仿真軟件構建虛擬儀器的操作環境,通過設定虛擬儀器在輸入設備如鍵盤和鼠標的操作下響應方式,以實現人機交互,達到虛擬仿真教學的目的。
UE4(虛幻引擎4)是一套為使用實時技術的人士開發的工具。從企業應用和電影體驗到高品質的PC、主機、移動、VR及AR游戲,UE4都能夠提供從啟動項目到發行產品所需的一切,在同類產品中獨樹一幟。其優點包括:實時逼真渲染、包含完整的C++源代碼、對設計師友好的Blueprint(藍圖可視化腳本)、穩健的多人框架、內置級聯粒子視覺效果編輯器、電影級后期處理效果、包羅萬象的動畫套件、先進的人工智能等。
本研究即嘗試使用UE4來實現高效液相色譜儀操作的虛擬仿真。
開發流程如圖1所示。
在3ds Max中采用多邊形建模的方法制作模型,包括實驗室房間、實驗臺、高效液相色譜儀的各個組件、顯示器、燒杯、廢液瓶等。建模過程中注意模型的布線,確保都是四邊面,同時精簡面數以保證在UE4中進行虛擬互動時運行流暢。需要做旋轉操作的物體(如蓋子),要設置好旋轉的軸心。每個模型要展開好兩套UV(貼圖坐標),第二套UV是UE4里光照貼圖使用。模型最后都導出成FBX格式。貼圖尺寸的長和寬最好都使用2的次方像素,如128×128、256×128、512×512等。一 般 貼 圖的格式用jpg即可,如果要在引擎中作為貼花(Decal)使用,則要保存成有透明通道的png格式。
在UE4開始創建一個新工程時有許多模板可以選擇,如First Person、Third Person、Flying、Top Down、Side Scroller等等。本研究使用First Person(第一人稱)模板。因為這個模板默認是制作第一人稱射擊游戲的,所以首先要做一些修改:把手臂模型和槍械模型刪除,保留膠囊體和攝像機,膠囊體相當于操作者的身體,攝像機相當于操作者的眼睛;把Spawn Projectile(發射子彈)功能取消,保留用鍵盤W、A、S、D鍵控制移動和用鼠標控制視角的功能。
把模型都導入到UE4中,調整好位置。有交互操作的模型的Mobility屬性設置為Movable,同時添加一個名為BPI_Interact的藍圖接口。在房間靠天花板的地方放置幾盞燈,調整好亮度和范圍,調整天空球中太陽的位置,使陽光透過窗戶灑在地板上。
UE4中的材質是PBR(基于物理渲染)材質。主要屬性有BaseColor(基本色)、Metallic(金屬性)、Specular(高光)、Roughness(粗糙度)等。分別制作好金屬、玻璃、塑料等材質,賦予相應的模型。布置好燈光、賦予材質后的場景如圖2所示。
3.3.1 FirstPersonCharacter
在這個腳本中要創建兩個函數:Trace和ShowName。它們的功能:當操作者把準心對準場景中某一個可交互的物體時,該物體會顯示出金黃色輪廓線,同時在畫面下方顯示該物體的名稱(如圖3所示),這時如果按下鼠標左鍵即可進行交互操作;當把準心移開時,輪廓線和名稱消失。

圖1:開發流程圖

圖2:布置好燈光、賦予材質后的場景
Trace函數:首先獲取操作者(攝影機)的位置和方向,然后從攝影機發射一條100cm的射線,如果射線沒有碰到物體,就隱藏CurrentTarget變量中的物體的金黃色輪廓線,把CurrentTarget設為空,設置Interact變量為False,把物體名稱變量設為空。如果射線碰到了物體,先判斷該物體是否具有BPI_Interact。如果沒有,則隱藏CurrentTarget變量中的物體的金黃色輪廓線,設置Interact變量為False,把物體名稱變量設為空,然后調用ShowName函數。如果物體具有BPI_Interact,則與CurrentTarget變量中的物體比較:如果相同,就用SetRenderCustomDepth顯示物體的金黃色輪廓線,設置Interact變量為True,把該物體通過HitActor變量傳值給ShowName函數,并調用ShowName函數;如果不同,就隱藏CurrentTarget變量中的物體的金黃色輪廓線,把該物體設置為CurrentTarget,顯示物體的金黃色輪廓線,設置Interact變量為True,把該物體傳值給ShowName函數,并調用該函數。如圖4所示。

圖4:Trace函數的藍圖腳本

圖5:ShowName函數的藍圖腳本

圖6:交互操作的觸發腳本

圖7:power藍圖腳本
ShowName函數:從Trace函數傳遞過來的物體,利用GetClass和GetDisplayName可以得到該物體在UE4里的英文名,要顯示出中文名就要做一下轉換。先創建兩個Array(陣列),一個存放英文名EngName,一個存放中文名ChiName,順序一致;然后用ForEachLoop對GetDisplayName的值和EngName陣列進行一一比對,再把得到的ArrayIndex傳給ChiName陣列,最后轉換成字符串通過藍圖UI(用戶界面)顯示出來。如圖5所示。
3.3.2 交互操作的觸發腳本
當按下鼠標左鍵時,如果Interact變量為真,則通過BPI Interact藍圖接口發送消息給HitActor變量中的可交互物體,該物體接到消息后就會執行相應的交互操作。如圖6所示。
3.3.3 可交互物體的藍圖腳本
每一個可交互物體都有自己的藍圖腳本,以三個按鈕(power電源、pump泵、purge排氣泡)為例:正確的順序是先檢查固定相和流動相,再按下電源開機,然后是排氣泡,最后啟動泵。如果順序不對,則會出現相應提示。比如:先按purge,會提示“還沒有開機”;開機后直接按pump,會提示“請先排氣泡”;排氣泡之前如果沒有擰松二通閥,會提示“請先擰松二通閥”等等。另外,按鈕還有一個按下和彈起的小動畫,即按鈕在該場景中沿X軸進行位移運動,可以通過Timeline實現。如圖7所示。復雜的動畫則是通過Matinee功能實現,比如清洗泵頭。清洗泵頭由多個動畫組成:打開甲醇瓶的封口塑料紙、泵頭從甲醇瓶中取出并移動到燒杯上方、打開流動相瓶子的蓋子、流動相瓶子上升并傾斜、流動相倒出清洗泵頭、流動相瓶子放回桌面、泵頭移動至流動相瓶子中、封口塑料紙移動到流動相瓶子的瓶口處。水流的效果則是通過粒子系統模擬實現。
通過UE4的打包功能,可以輸出成.exe的可執行程序。
操作者以第一人稱視角,在一個實驗室場景中漫游,并可對實驗桌上的高效液相色譜儀進行操作:檢查固定相色譜柱、檢查流動相、清洗泵頭、開機、排氣泡、啟動泵、進樣等。
許多高校由于受場地、經費、人員等方面的限制,儀器設備往往數量有限,而且昂貴儀器的使用壽命也限制了其使用的次數。學生操作實驗設備的機會常常不足,導致他們的動手能力薄弱。通過虛擬仿真技術來實現儀器設備的虛擬操作,可以在一定程度上解決這一問題。本文即以高效液相色譜儀為仿真對象,提出了一種基于UE4的虛擬仿真開發的解決方案,可滿足低成本、易操作、交互性強、可重用、安全、逼真等教學需求,也有利于提高學生的學習興趣,增強學生的自主學習能力。