劉卓炫, 劉賢梅, 趙婭
(東北石油大學 計算機與信息技術學院,大慶 163318)
基于Unity3d的機械清罐作業(yè)仿真培訓系統(tǒng)的設計與實現(xiàn)
劉卓炫, 劉賢梅, 趙婭
(東北石油大學 計算機與信息技術學院,大慶 163318)
針對傳統(tǒng)機械清罐作業(yè)培訓方式缺乏交互性且無法滿足員工實踐需求等問題,設計并開發(fā)了一套基于Unity3d的機械清罐作業(yè)仿真培訓系統(tǒng)。描述了使用Unity3d引擎開發(fā)機械清罐作業(yè)仿真培訓系統(tǒng)的流程,總結了系統(tǒng)中用到的紋理切換、遮擋剔除、自動尋路等關鍵技術。該系統(tǒng)將仿真交互式培訓與移動培訓、數(shù)字化培訓等多種培訓方式相融合,通過本系統(tǒng)進行培訓,提高了機械清罐作業(yè)培訓效果,增加了員工對所負責業(yè)務的熟練程度,降低了由于錯誤操作造成安全事故發(fā)生的可能性。
Unity3d; 機械清罐; 虛擬現(xiàn)實; 仿真
虛擬現(xiàn)實技術,利用計算機圖形學、三維建模、多媒體等多種技術手段,在計算機上實現(xiàn)逼真的三維場景渲染與構建,模擬視覺聽覺等感官,讓使用者可及時、自由地觀察三維空間內的事物[1]。近年來,隨著虛擬現(xiàn)實技術的發(fā)展,各行業(yè)開始將虛擬現(xiàn)實技術引入相關培訓環(huán)節(jié),帶來了良好培訓效果。
Unity3d平臺,用于創(chuàng)建諸如三維視景仿真、建筑可視化、實時三維動畫等類型互動內容的多平臺綜合型虛擬現(xiàn)實開發(fā)工具,是全面整合的專業(yè)虛擬現(xiàn)實引擎[2]。Unity3d憑借良好跨平臺性、視覺化編輯特性以及支持多種編程語言特點成為目前主流虛擬現(xiàn)實開發(fā)平臺。
機械清罐因清罐效率與資源回收率高、人力成本低的特點在油田得到大規(guī)模推廣。機械清罐作業(yè)主要包括油移送、溫水清洗、在線氣體檢測、清洗機安裝等十多個環(huán)節(jié)。由于機械清罐過程復雜,錯誤操作極易引起設備損毀乃至罐體爆炸。傳統(tǒng)培訓方式培訓效果差、人力成本高,為改善油田機械清罐作業(yè)培訓現(xiàn)狀,進一步提高機械清罐過程的安全程度,設計并開發(fā)了高度模擬現(xiàn)場環(huán)境、操作性強、節(jié)約成本的機械清罐作業(yè)仿真培訓系統(tǒng)。
機械清罐作業(yè)仿真培訓系統(tǒng)采用B/S+C/S的四層體系架構,支持PC機、手機與平板電腦等多種終端使用,系統(tǒng)的整體架構,如圖1所示。
2.1 場景建模
通過現(xiàn)場真實數(shù)據(jù)采集,整理相關文檔、圖片和視頻等資料,對機械清罐過程中的浮頂罐、清洗機、過濾設備等主要設備進行建模。建模所用軟件為3ds Max,具體建模流程,如圖2所示。
圖1 系統(tǒng)架構圖
圖2 建模流程圖
在建模過程中,模型優(yōu)化將直接影響仿真場景運行效率與渲染負擔。常用優(yōu)化方法有減少布爾操作、避免三角面建模與四邊面建?;煊?、刪除多余面片、修正模型布線以及模型附加等。通過優(yōu)化,將明顯提高模型渲染速度。
2.2 模型導入
將3ds Max中模型導出為FBX格式的文件,然后將FBX文件放入Unity3d項目的Asserts目錄下,Unity3d會自動識別模型、材質等[3]。
2.3 功能實現(xiàn)
2.3.1 題型存儲與解析
通過對機械清罐作業(yè)過程中操作步驟的梳理和拆分,在系統(tǒng)中設計了四類題型與之對應,分別是文字選擇題、工具選擇題、操作選擇題以及自動播放題。
基于四種題型結構,難以二維邏輯關系表示,故利用半結構化XML實現(xiàn)了四種題型結構的統(tǒng)一。四類試題信息均存儲在XML文件根節(jié)點list下的子節(jié)點item中,每個item結構包括:stxh(試題序號)、xxa(選項A內容)、xxb(選項B內容)、xxc(選項C內容)、zqda(選擇題正確答案)、kcgw(被考察人員崗位,需根據(jù)系統(tǒng)對各崗位的定義值確定)、sfgj(是否需要工具,N為否,Y為是)、gjbm(若需要工具,則填寫工具編碼)、stlx(試題類型,1為文字選擇題,2為工具選擇題,3為操作選擇題,4為自動播放題)、djgjjc(選擇的工具簡稱)、djmxjc(選擇的模型簡稱)、csdtsxx(測試點提示信息)、fz(分值)。
對于XML試題文件解析,是通過以下步驟實現(xiàn)的:
(1)利用XmlDocument類解析并加載XML試題文件內容;
XmlDocument xmlDoc = new XmlDocument();
string data = Resources .Load ("st" ).ToString ();//xmlDoc.LoadXml(www.text);
xmlDoc .LoadXml (data );
(2)獲取list根節(jié)點下所有子節(jié)點item中的試題信息;
XmlNodeList nodeList=xmlDoc.SelectSingleNode("list").ChildNodes;
(3)根據(jù)試題存儲結構構造結構體并聲明結構體數(shù)組來存放XML試題文件中試題信息;
(4)遍歷XmlNodeList類中獲取的所有試題信息并加載到試題的結構體數(shù)組中;
foreach(XmlElement xe in nodeList){stlist [k] .屬性=xe.GetAttribute("對應屬性");k++;}
2.3.2 物體的位移與旋轉
仿真場景中一切操作和運動,歸結為兩類:位移與旋轉。
(1)物體位移
在仿真場景中,經(jīng)常需要響應用戶操作,實現(xiàn)物體位移,通常利用transform.Translate方法實現(xiàn):transform.Translate(三維方向向量*系統(tǒng)增量時間*運動速度)。
當然由于某些位移運動較復雜,所以需配合使用Vector3.Lerp(起點坐標,終點坐標,系統(tǒng)增量時間*運動速度)來實現(xiàn)物體的平滑運動。
(2)物體旋轉
在仿真場景中,物體旋轉分為以自身坐標軸旋轉、以世界坐標軸旋轉和以其他物體為參照旋轉。
物體以自身坐標軸旋轉時建議模型規(guī)格是等比例的,即物體軸心方向與局部坐標軸某一方向平行,常用方法是transform.Rotate(方向向量*增量時間*旋轉速度,Space.Self);區(qū)別于以自身坐標軸旋轉,以世界坐標軸旋轉只需將Space.Self改成Space。
物體以其他物體為參照旋轉,常用方法為transform.RotateAround(參照物位置坐標,方向向量,增量時間*旋轉速度)。
2.3.3 攝像機的調整
為保證良好交互性和培訓效果,經(jīng)常需要調整攝像機。調整攝像機常見方法有兩種,分別是調整攝像機位置和調整攝像機視域。
(1)調整攝像機位置
調整攝像機位置要求避免鏡頭抖動,實現(xiàn)攝像機平滑移動,因此常用的方法與物體平滑移動方法相同,即Vector3.Lerp(起點坐標,終點坐標,系統(tǒng)增量時間*運動速度)。
(2)調整攝像機視域
調整攝像機視域與調整焦距原理類似,可以實現(xiàn)攝像機固定的情況下,拉近或推遠攝像機捕捉的鏡頭,實現(xiàn)方法為:攝像機.fieldOfView=Mathf.Lerp(當前視域值,目標視域值,調整速度)。
2.4 發(fā)布
2.4.1 網(wǎng)頁版部署
在Unity3d平臺下,點擊菜單欄中File的Build Settings選項,彈出界面如圖3所示。
圖3 發(fā)布設置界面
發(fā)布網(wǎng)頁版,設置流程如下:
(1)添加需部署的場景Scene,添加場景后各場景將標有0、1等序號來表示場景添加順序,同時影響發(fā)布出來后的場景調用順序;
(2)選擇Platform,網(wǎng)頁版選擇Web Player平臺;
(3)取消勾選離線狀態(tài)運行選項Offline Deployment,是否勾選該選項依系統(tǒng)需求而定。
(4)點擊Build按鈕,開始發(fā)布網(wǎng)頁版程序,發(fā)布文件擴展名為.unity3d。
導出后,利用Unity Web Player插件在網(wǎng)頁進行瀏覽,效果如圖4所示。
圖4 網(wǎng)頁版運行效果
2.4.2 安卓版部署
安卓版部署需要SDK支持,點擊Edit下Preferences選項,彈出偏好設置界面,選擇External Tools選項,在Android SDK Location中選擇SDK位置。
安卓版發(fā)布同樣操作如圖3所示的發(fā)布設置界面,設置流程如下:
(1)添加需部署的場景Scene,選擇Android平臺;
(2)點擊Player Settings按鈕,設置右側面板參數(shù),Company Name和Product Name均需填寫,發(fā)布出的apk名稱與Product Name相同;Default Icon是apk的圖標設置,Default Cursor是默認鼠標樣式,如無特殊需要默認為None即可。Resolution and Presentation中的Default Orientation可設置屏幕方向,包括橫屏、豎屏和自動等選項。需特殊說明的是Other Settings中的Bundle Identifier需要設置成xxx.xxx.xxx格式,不能使用默認值。
(3)點擊Build按鈕,發(fā)布安卓版程序,發(fā)布文件擴展名為.apk。
3.1 紋理切換
紋理切換技術通過動態(tài)加載紋理來模擬場景中液體流動效果,不僅效果理想且渲染代價極低。在機械清罐過程中主要利用紋理切換技術模擬排空設備時流出水、油的效果。實現(xiàn)方法如下:
(1)進行水流模型建模并將水流模型導入到場景中;
(2)編寫模擬液體流動效果的shader著色程序,實現(xiàn)控制材質紋理UV坐標沿著X和Y方向持續(xù)滾動。
fixed2 scrolledUV = Input.uv_MainTex;//提取貼圖UV坐標
fixed xScrollValue = _ScrollXSpeed * _Time;
fixed yScrollValue = _ScrollYSpeed * _Time;
scrolledUV += fixed2(xScrollValue, yScrollValue);
通過SurfaceOutput.Albedo =tex2D (_MainTex, scrolledUV).rgb * _MainTint可以調整材質附著的顏色,使得效果更加逼真。
(3)新建材質球,選擇實現(xiàn)紋理切換的著色程序并設置貼圖。
(4)將材質球附在水流模型上,便能模擬水流效果,通過renderer.material.SetFloat("參數(shù)名",模型對象.renderer.material.GetFloat("對應參數(shù)名")-增量時間*速度)來控制紋理UV坐標在不同方向上的滾動速度。
3.2 遮擋剔除
遮擋剔除(Occlusion Culling)技術是指當一個物體被其他物體遮擋住而相對當前相機不可見時,可不對其進行渲染[4],在仿真場景中使用遮擋剔除技術后將比不使用的場景提高30%—70%的FPS。Unity3d中使用遮擋剔除的方法如下:
(1)點擊window下Occlusion Culling選項,打開Occlusion Culling窗口并新建Occlusion Area,通過調整遮擋剔除區(qū)域大小和中心位置,保證需遮擋剔除的模型在Occlusion Area內。
(2)將Occlusion Area內不需移動的模型設置成Occluder Static和Occludee Static。
(3)選擇Bake選項,設置遮擋剔除烘焙參數(shù)Smallest Occluder、Smallest Hole和Backface Threshold
三項的值:
Smallest Occluder:設置最小遮擋物尺寸,當遮擋物的長或寬大于設定值時,該物體才能夠遮擋住后面物體。
Smallest Hole:設置最小孔尺寸,當穿過物體內部的孔或者多個物體堆疊形成的孔的大小小于設定值時,遮擋剔除烘焙將忽略該孔存在。
Backface Threshold:設置背面移除閾值,當該值為100%時,攝像機拍攝不到的模型背面信息將完整保留;當該值為5%時,系統(tǒng)將對背面信息優(yōu)化,去掉可剔除的全部背面信息。
(4)點擊Bake按鈕進行烘焙,將場景中物體進行網(wǎng)格空間劃分,如圖5所示。
圖5 遮擋剔除烘焙場景
完成烘焙后,選擇不同視角攝像機,將發(fā)現(xiàn)被遮擋物體被明顯剔除,如圖6所示。
圖6 遮擋剔除效果展示
3.3 Unity3d與Html網(wǎng)頁交互
發(fā)布完網(wǎng)頁版的xhsyzjb_net.unity3d文件需要同相關js文件一同放入項目。在html頁面上添加object標簽,設置寬高等屬性,添加param標簽設置unity3d文件路徑。代碼如下:
通過unity3d程序的Application.ExternalCall("setUInfo")向網(wǎng)頁提交調取參數(shù)請求,網(wǎng)頁通過消息機制的u.SendMessage("Main Camera","開始函數(shù)",參數(shù))將提取的參數(shù)回傳到.unity3d程序中,實現(xiàn)Unity3d與Html網(wǎng)頁的交互。
3.4 自動尋路
關于自動尋路的算法種類較多且較為復雜,因此大多數(shù)Unity3d用戶都選擇了自帶的導航網(wǎng)格尋路組件:Nav Mesh Agent,Off Mesh Link。Unity3d的導航網(wǎng)格尋路系統(tǒng)原理是事先通過烘焙將地形信息記錄并存儲在Nav Mesh文件上[5],并可通過基本體源構造尋路路徑,實現(xiàn)方法如下:
(1)在被導航物體上設置導航網(wǎng)格代理,調整以下參數(shù):
Radius半徑:設置代理的半徑,僅用于尋路目的,可以跟實際對象的半徑大小不一樣,一般比實際對象的半徑大。
Speed速度:設置走向它的目的地的最大移動速度。
Acceleration加速度:最大加速度。
Angular Speed角速度:最高轉速(度/秒)。
Stopping distance制動距離:制動距離,到目的地的距離小于這個值時代理減速。
Auto Traverse OffMesh Link自動遍歷OffMesh鏈接:自動移動并關閉OffMeshLinks。
Auto Repath 自動重新尋路:如果現(xiàn)有的部分已失效,獲得新的路徑。
Height 高度:代理的高度(用于調試圖形)。
Base offset基本偏移:碰撞幾何體相對于實際幾何體垂直的偏移。
NavMesh Walkable導航網(wǎng)格行走:指定代理可以遍歷的導航網(wǎng)格層類型。
(2)在完成導航網(wǎng)格代理參數(shù)調整后,將場景中可行走路徑和障礙體設置為Navigation Static,并在被導航物體上利用GetComponent
(3)設置Nav Mesh烘焙選項,打開Window下Navigation窗口,將可行走路徑的Navigation Layer設置為Default,將障礙物的Navigation Layer設置為Not Walkable。
(4)點擊Bake按鈕進行烘焙,烘焙后的藍色區(qū)域即為Nav Mesh,如圖7所示。
機械清罐作業(yè)仿真培訓系統(tǒng)以Unity3d為主要開發(fā)引擎,綜合利用web技術、android技術和虛擬現(xiàn)實技術進行設
圖7 烘焙效果圖
計與開發(fā),利用Unity3d跨平臺特性,為用戶提供可在網(wǎng)頁和移動端使用的仿真培訓系統(tǒng),使員工利用閑暇時間培訓,有利于降低集中式培訓成本和提高整體員工作業(yè)熟練程度,進一步保證了機械清罐作業(yè)的安全開展。
[1] 楊光輝. 石化安全虛擬現(xiàn)實平臺的研究與實現(xiàn)[D]. 青
島:中國海洋大學, 2014.
[2] LU G P,XUE G H,CHEN Z. Design and Implementation of Virtual Interactive Scene Based on Unity3D[J]. Advanced Materials Research, 2011, 317:2162-2167.
[3] 沈旭霞, 賈欣欣, 滿強, 趙婭. 基于Unity3d的防噴演習系統(tǒng)的設計與實現(xiàn)[J]. 自動化技術與應用, 2016, 35(7): 139-142.
[4] 吳香太. 基于GPU的大規(guī)模復雜場景渲染的優(yōu)化算法研究與實現(xiàn)[D]. 廣州:華南理工大學, 2013.
[5] 邱建松. 基于Unity3d的實時虛擬仿真系統(tǒng)的研究與實現(xiàn)[J]. 電子制作, 2012, (12):11-12.
The Design and Implementation of Simulation Training System for Mechanical Tank Cleaning Operation Based on Unity3d
Liu Zhuoxuan, Liu Xianmei, Zhao Ya
(School of Computer & Information Technology, Northeast Petroleum University, Daqing, 163318, China)
Aimed at the problems about lacking of interactivity and dissatisfying the practical needs of employees, we designed and developed a set of simulation training system for mechanical tank cleaning operation based on Unity3d. This paper described the process of developing the simulation training system of mechanical cleaning operation by using Unity3d engine, and summed up the key technologies such as texture switching, occlusion culling, automatic routing and so on. This system combined interactive simulation training with mobile training, digital training and other methods of training. We improved the effect of mechanical tank cleaning, increased employees proficiency in the business which they might be responsible for, reduced the possibility of security accidents caused by incorrect operation through the training of this system.
Unity3d; mechanical tank cleaning; virtual reality; simulation
黑龍江省教育科學規(guī)劃重點課題(GJB1215019)
劉卓炫(1992-),男,河北省秦皇島市,碩士研究生,研究方向:虛擬現(xiàn)實方向。 劉賢梅(1968-),女,山東省日照市,教授,碩士生導師,研究方向:虛擬現(xiàn)實方向。 趙婭(1980-),女,河南省臨潁市,副教授,碩士研究生,研究方向:虛擬現(xiàn)實方向。
1007-757X(2017)08-0004-05
TP311
A
2017.05.14)