文/陸春雨
三維虛擬仿真技術(shù)是一種可以創(chuàng)建和體驗虛擬世界的計算機(jī)仿真系統(tǒng),其利用計算機(jī)生成一種多源信息融合的交互式的三維動態(tài)視景和實體行為的系統(tǒng)仿真,使用戶沉浸其中。該技術(shù)已被廣泛應(yīng)用于實驗教學(xué)過程中,即以計算機(jī)三維建模技術(shù)來生成數(shù)字化三維儀器,用仿真軟件構(gòu)建虛擬儀器的操作環(huán)境,通過設(shè)定虛擬儀器在輸入設(shè)備如鍵盤和鼠標(biāo)的操作下響應(yīng)方式,以實現(xiàn)人機(jī)交互,達(dá)到虛擬仿真教學(xué)的目的。
UE4(虛幻引擎4)是一套為使用實時技術(shù)的人士開發(fā)的工具。從企業(yè)應(yīng)用和電影體驗到高品質(zhì)的PC、主機(jī)、移動、VR及AR游戲,UE4都能夠提供從啟動項目到發(fā)行產(chǎn)品所需的一切,在同類產(chǎn)品中獨樹一幟。其優(yōu)點包括:實時逼真渲染、包含完整的C++源代碼、對設(shè)計師友好的Blueprint(藍(lán)圖可視化腳本)、穩(wěn)健的多人框架、內(nèi)置級聯(lián)粒子視覺效果編輯器、電影級后期處理效果、包羅萬象的動畫套件、先進(jìn)的人工智能等。
本研究即嘗試使用UE4來實現(xiàn)高效液相色譜儀操作的虛擬仿真。
開發(fā)流程如圖1所示。
在3ds Max中采用多邊形建模的方法制作模型,包括實驗室房間、實驗臺、高效液相色譜儀的各個組件、顯示器、燒杯、廢液瓶等。建模過程中注意模型的布線,確保都是四邊面,同時精簡面數(shù)以保證在UE4中進(jìn)行虛擬互動時運行流暢。需要做旋轉(zhuǎn)操作的物體(如蓋子),要設(shè)置好旋轉(zhuǎn)的軸心。每個模型要展開好兩套UV(貼圖坐標(biāo)),第二套UV是UE4里光照貼圖使用。模型最后都導(dǎo)出成FBX格式。貼圖尺寸的長和寬最好都使用2的次方像素,如128×128、256×128、512×512等。一 般 貼 圖的格式用jpg即可,如果要在引擎中作為貼花(Decal)使用,則要保存成有透明通道的png格式。
在UE4開始創(chuàng)建一個新工程時有許多模板可以選擇,如First Person、Third Person、Flying、Top Down、Side Scroller等等。本研究使用First Person(第一人稱)模板。因為這個模板默認(rèn)是制作第一人稱射擊游戲的,所以首先要做一些修改:把手臂模型和槍械模型刪除,保留膠囊體和攝像機(jī),膠囊體相當(dāng)于操作者的身體,攝像機(jī)相當(dāng)于操作者的眼睛;把Spawn Projectile(發(fā)射子彈)功能取消,保留用鍵盤W、A、S、D鍵控制移動和用鼠標(biāo)控制視角的功能。
把模型都導(dǎo)入到UE4中,調(diào)整好位置。有交互操作的模型的Mobility屬性設(shè)置為Movable,同時添加一個名為BPI_Interact的藍(lán)圖接口。在房間靠天花板的地方放置幾盞燈,調(diào)整好亮度和范圍,調(diào)整天空球中太陽的位置,使陽光透過窗戶灑在地板上。
UE4中的材質(zhì)是PBR(基于物理渲染)材質(zhì)。主要屬性有BaseColor(基本色)、Metallic(金屬性)、Specular(高光)、Roughness(粗糙度)等。分別制作好金屬、玻璃、塑料等材質(zhì),賦予相應(yīng)的模型。布置好燈光、賦予材質(zhì)后的場景如圖2所示。
3.3.1 FirstPersonCharacter
在這個腳本中要創(chuàng)建兩個函數(shù):Trace和ShowName。它們的功能:當(dāng)操作者把準(zhǔn)心對準(zhǔn)場景中某一個可交互的物體時,該物體會顯示出金黃色輪廓線,同時在畫面下方顯示該物體的名稱(如圖3所示),這時如果按下鼠標(biāo)左鍵即可進(jìn)行交互操作;當(dāng)把準(zhǔn)心移開時,輪廓線和名稱消失。
圖1:開發(fā)流程圖
圖2:布置好燈光、賦予材質(zhì)后的場景
Trace函數(shù):首先獲取操作者(攝影機(jī))的位置和方向,然后從攝影機(jī)發(fā)射一條100cm的射線,如果射線沒有碰到物體,就隱藏CurrentTarget變量中的物體的金黃色輪廓線,把CurrentTarget設(shè)為空,設(shè)置Interact變量為False,把物體名稱變量設(shè)為空。如果射線碰到了物體,先判斷該物體是否具有BPI_Interact。如果沒有,則隱藏CurrentTarget變量中的物體的金黃色輪廓線,設(shè)置Interact變量為False,把物體名稱變量設(shè)為空,然后調(diào)用ShowName函數(shù)。如果物體具有BPI_Interact,則與CurrentTarget變量中的物體比較:如果相同,就用SetRenderCustomDepth顯示物體的金黃色輪廓線,設(shè)置Interact變量為True,把該物體通過HitActor變量傳值給ShowName函數(shù),并調(diào)用ShowName函數(shù);如果不同,就隱藏CurrentTarget變量中的物體的金黃色輪廓線,把該物體設(shè)置為CurrentTarget,顯示物體的金黃色輪廓線,設(shè)置Interact變量為True,把該物體傳值給ShowName函數(shù),并調(diào)用該函數(shù)。如圖4所示。
圖4:Trace函數(shù)的藍(lán)圖腳本
圖5:ShowName函數(shù)的藍(lán)圖腳本
圖6:交互操作的觸發(fā)腳本
圖7:power藍(lán)圖腳本
ShowName函數(shù):從Trace函數(shù)傳遞過來的物體,利用GetClass和GetDisplayName可以得到該物體在UE4里的英文名,要顯示出中文名就要做一下轉(zhuǎn)換。先創(chuàng)建兩個Array(陣列),一個存放英文名EngName,一個存放中文名ChiName,順序一致;然后用ForEachLoop對GetDisplayName的值和EngName陣列進(jìn)行一一比對,再把得到的ArrayIndex傳給ChiName陣列,最后轉(zhuǎn)換成字符串通過藍(lán)圖UI(用戶界面)顯示出來。如圖5所示。
3.3.2 交互操作的觸發(fā)腳本
當(dāng)按下鼠標(biāo)左鍵時,如果Interact變量為真,則通過BPI Interact藍(lán)圖接口發(fā)送消息給HitActor變量中的可交互物體,該物體接到消息后就會執(zhí)行相應(yīng)的交互操作。如圖6所示。
3.3.3 可交互物體的藍(lán)圖腳本
每一個可交互物體都有自己的藍(lán)圖腳本,以三個按鈕(power電源、pump泵、purge排氣泡)為例:正確的順序是先檢查固定相和流動相,再按下電源開機(jī),然后是排氣泡,最后啟動泵。如果順序不對,則會出現(xiàn)相應(yīng)提示。比如:先按purge,會提示“還沒有開機(jī)”;開機(jī)后直接按pump,會提示“請先排氣泡”;排氣泡之前如果沒有擰松二通閥,會提示“請先擰松二通閥”等等。另外,按鈕還有一個按下和彈起的小動畫,即按鈕在該場景中沿X軸進(jìn)行位移運動,可以通過Timeline實現(xiàn)。如圖7所示。復(fù)雜的動畫則是通過Matinee功能實現(xiàn),比如清洗泵頭。清洗泵頭由多個動畫組成:打開甲醇瓶的封口塑料紙、泵頭從甲醇瓶中取出并移動到燒杯上方、打開流動相瓶子的蓋子、流動相瓶子上升并傾斜、流動相倒出清洗泵頭、流動相瓶子放回桌面、泵頭移動至流動相瓶子中、封口塑料紙移動到流動相瓶子的瓶口處。水流的效果則是通過粒子系統(tǒng)模擬實現(xiàn)。
通過UE4的打包功能,可以輸出成.exe的可執(zhí)行程序。
操作者以第一人稱視角,在一個實驗室場景中漫游,并可對實驗桌上的高效液相色譜儀進(jìn)行操作:檢查固定相色譜柱、檢查流動相、清洗泵頭、開機(jī)、排氣泡、啟動泵、進(jìn)樣等。
許多高校由于受場地、經(jīng)費、人員等方面的限制,儀器設(shè)備往往數(shù)量有限,而且昂貴儀器的使用壽命也限制了其使用的次數(shù)。學(xué)生操作實驗設(shè)備的機(jī)會常常不足,導(dǎo)致他們的動手能力薄弱。通過虛擬仿真技術(shù)來實現(xiàn)儀器設(shè)備的虛擬操作,可以在一定程度上解決這一問題。本文即以高效液相色譜儀為仿真對象,提出了一種基于UE4的虛擬仿真開發(fā)的解決方案,可滿足低成本、易操作、交互性強(qiáng)、可重用、安全、逼真等教學(xué)需求,也有利于提高學(xué)生的學(xué)習(xí)興趣,增強(qiáng)學(xué)生的自主學(xué)習(xí)能力。