呂瑞升,李 壯,張歆雨,田培楠
(1. 中海油能源發(fā)展股份有限公司采油服務(wù)分公司 天津 300452; 2. 中海油能源發(fā)展股份有限公司工程技術(shù)分公司 天津 300452)
目前,國(guó)內(nèi)外尚沒(méi)有自升式井口平臺(tái)無(wú)人化的應(yīng)用,海油發(fā)展作為擁有自升式平臺(tái)裝備的專業(yè)服務(wù)公司,正在以現(xiàn)存自安裝井口平臺(tái)為載體進(jìn)行無(wú)人化技術(shù)的創(chuàng)新和管理。無(wú)人化探索過(guò)程中的仿真可以為產(chǎn)品設(shè)計(jì)驗(yàn)證、功能展示記錄和后續(xù)升級(jí)改造測(cè)試等提供依據(jù)[1],并且隨著數(shù)字孿生和物聯(lián)網(wǎng)技術(shù)的深度發(fā)展,仿真技術(shù)會(huì)更加深入到無(wú)人平臺(tái)的全生命周期階段,如維修、保養(yǎng)參照、報(bào)廢回收數(shù)據(jù)支持等[2]。虛幻引擎(Unreal Engine 4,UE4)是一款成熟的虛擬現(xiàn)實(shí)開(kāi)發(fā)引擎,并開(kāi)源了所有的源代碼,可以在圖形圖像顯示、功能開(kāi)發(fā)等建設(shè)過(guò)程為仿真系統(tǒng)建設(shè)提供支持與便利。
虛幻引擎通過(guò)提供一些封裝好的結(jié)構(gòu)和功能的類(lèi),使得開(kāi)發(fā)者在構(gòu)建整個(gè)系統(tǒng)時(shí)的表現(xiàn)、邏輯、數(shù)據(jù)方面都更加清晰。
將場(chǎng)景模型、碰撞、光照信息、后期體積、功能模塊等元素拆分關(guān)卡,并根據(jù)需要進(jìn)行加載卸載,以實(shí)現(xiàn)不同天氣狀況和照明的切換。Game Mode和Game Instance類(lèi)負(fù)責(zé)整個(gè)進(jìn)度控制、類(lèi)登記、進(jìn)度加載保存等功能;Player Controller負(fù)責(zé)輸入接收和分發(fā)、操作響應(yīng)、視角切換等功能;功能模塊負(fù)責(zé)實(shí)現(xiàn)具體功能,如漫游、信息展示、工藝流程展示、安防功能實(shí)現(xiàn)等,通過(guò)有效繼承接口等降低模塊間的耦合度來(lái)提升 靈活性,系統(tǒng)框架設(shè)計(jì)如圖1所示。
圖1 系統(tǒng)框架設(shè)計(jì)Fig.1 System framework design
整個(gè)仿真項(xiàng)目的建設(shè)與現(xiàn)實(shí)中的無(wú)人化平臺(tái)設(shè)計(jì)同步進(jìn)行并相互促進(jìn),仿真的開(kāi)發(fā)過(guò)程必然需要經(jīng)歷多次修改,所以開(kāi)發(fā)過(guò)程盡量采用模塊化、功能化和迭代開(kāi)發(fā)的思路。在完成框架和方案設(shè)計(jì)后將整個(gè)模擬器按照框架拆分成多個(gè)模塊以降低模塊之間的耦合度,并進(jìn)行迭代式開(kāi)發(fā)和版本及分支控制,在修改特定功能時(shí)不影響系統(tǒng)整體的運(yùn)行。
整個(gè)項(xiàng)目的開(kāi)發(fā)過(guò)程按照方案設(shè)計(jì)、場(chǎng)景搭建、模型參數(shù)設(shè)定、界面實(shí)現(xiàn)、功能開(kāi)發(fā)、測(cè)試優(yōu)化等流程進(jìn)行。方案設(shè)計(jì)是整個(gè)開(kāi)發(fā)的參照,方案確定之后是開(kāi)發(fā)制作過(guò)程,靈活使用虛幻引擎提供的開(kāi)發(fā)工具可以有效提升開(kāi)發(fā)效率。
場(chǎng)景搭建主要包括三維軟件建模和場(chǎng)景整體實(shí)現(xiàn)2部分。三維軟件建模是在3dmax、Blender等DCC(Digital Content Creation)軟件中按照平臺(tái)和設(shè)備的外觀及功能以poly面片的形式完成數(shù)字化的三維模型制作、UV展開(kāi)等工作,進(jìn)而讓模型擁有頂點(diǎn)、UV、坐標(biāo)軸、變換等信息。U和V指的是2D空間的水平軸和垂直軸,避免和3D空間XYZ重復(fù);UV展開(kāi)主要是為了將所有的3D網(wǎng)格信息映射到2D空間,并形成一一對(duì)應(yīng)的狀態(tài),以便于貼圖紋理的賦予、指認(rèn)和引擎中光照信息、著色器等信息的使用和操作。UV展開(kāi)效果如圖2所示。
圖2 UV展開(kāi)效果Fig.2 UV expansion effect
然后將模型從DCC軟件中導(dǎo)出為FBX格式,F(xiàn)BX是Autodesk開(kāi)發(fā)的文件格式,其開(kāi)發(fā)目的就是為了實(shí)現(xiàn)軟件之間的數(shù)據(jù)交換,現(xiàn)已被各大主流游戲引擎所兼容[3]。將FBX導(dǎo)入引擎后添加環(huán)境因素, 包括光源、光照體積、反射體積、天空球、后期體積等內(nèi)容。
場(chǎng)景搭建完成后還需要根據(jù)整體方案對(duì)場(chǎng)景中的模型進(jìn)行設(shè)定和調(diào)整,包括碰撞設(shè)置、光照貼圖密度設(shè)定、消隱及LOD層級(jí)切換設(shè)定等。
該系統(tǒng)包含場(chǎng)景漫游功能,允許體驗(yàn)者在場(chǎng)景中以步行或無(wú)人機(jī)狀態(tài)進(jìn)行游覽,需要對(duì)場(chǎng)景中的設(shè)備、墻壁等進(jìn)行碰撞設(shè)置。碰撞檢測(cè)在UE4中歸屬于物理模擬模塊[4],并默認(rèn)調(diào)用physX引擎,通過(guò)設(shè)置碰撞體實(shí)現(xiàn);根據(jù)檢測(cè)的準(zhǔn)確程度使用軸對(duì)齊包圍盒、有向包圍盒、離散有向包圍盒、復(fù)雜碰撞體進(jìn)行碰撞設(shè)定。圖3為4種碰撞體設(shè)置對(duì)比,此4種包圍精度依次增加且運(yùn)算量依次增大[5],都可以進(jìn)行碰撞或重疊檢測(cè)并觸發(fā)事件。
圖3 4種碰撞體設(shè)置對(duì)比Fig.3 Comparison of four collider settings
光照貼圖密度用來(lái)控制當(dāng)前設(shè)備的光照細(xì)節(jié),引擎在光照烘焙過(guò)程為場(chǎng)景中的靜態(tài)模型繪制一張光照貼圖,記錄靜態(tài)模型的光照信息,所占比例越大說(shuō)明光照信息越細(xì)致。可以手動(dòng)調(diào)節(jié)每個(gè)模型的光照貼圖密度和調(diào)整當(dāng)前模型光影細(xì)致程度;根據(jù)靜態(tài)設(shè)備的重要性和模型的復(fù)雜度給定不同的光照密度參數(shù);漫游過(guò)程中處于近景的設(shè)備其參數(shù)可以適當(dāng)調(diào)高,遠(yuǎn)景不重要設(shè)備可以適當(dāng)調(diào)低;其調(diào)整過(guò)程可以借助光照貼圖密度查看器和著色器復(fù)雜度等工具,可以通過(guò)帶有顏色的格子貼圖查看最終的密度,通過(guò)發(fā)現(xiàn)調(diào)整使近景設(shè)備處于綠色光照密度比較合適。光照貼圖分辨率調(diào)整結(jié)果如圖4所示。
圖4 光照貼圖分辨率調(diào)整結(jié)果Fig.4 Illumination map resolution adjustment results
LOD是根據(jù)模型的節(jié)點(diǎn)在顯示環(huán)境中所處的位置和重要度來(lái)決定物體渲染的資源分配,并通過(guò)降低非重要物體的面數(shù)和細(xì)節(jié)數(shù)來(lái)獲得高效率的渲染計(jì)算。UE4可根據(jù)模型占據(jù)屏幕大小和預(yù)設(shè)的LOD切換條件進(jìn)行自動(dòng)切換,開(kāi)發(fā)人員可以手動(dòng)設(shè)置LOD層級(jí)數(shù)量和切換占比,以控制LOD切換平滑度和運(yùn)行效率之間的平衡。
仿真在使用過(guò)程中需要切換不同的功能和展示模塊,為提升整個(gè)系統(tǒng)的完整性和易用性需要設(shè)計(jì)界面,并在界面的設(shè)計(jì)完成后根據(jù)界面設(shè)計(jì)方案在UE4內(nèi)進(jìn)行實(shí)現(xiàn)。整個(gè)實(shí)現(xiàn)過(guò)程中主要考慮2個(gè)方面的技術(shù)內(nèi)容:一是不同視口適配,即軟件使用在不同尺寸的顯示器上保證功能按鈕和畫(huà)面保持合理的位置;二是通過(guò)嵌套基本元素實(shí)現(xiàn)高效復(fù)用和修改。 整體的頁(yè)面布局需要為畫(huà)面的不同大小進(jìn)行自適應(yīng),并根據(jù)承載的元素在畫(huà)板、覆層、垂直框、水平框、滾動(dòng)框、下拉框等形式中進(jìn)行選擇和嵌套,合理地設(shè)置定位錨點(diǎn),最終形成適合整體內(nèi)容的界面。按鈕及小體積的元素需要根據(jù)形式和功能做成基本元素,開(kāi)放圖片、文字和調(diào)用接口,并根據(jù)實(shí)際需要進(jìn)行替換和變更。
藍(lán)圖系統(tǒng)是虛幻引擎提供的可視化腳本,可以通過(guò)調(diào)用和連接代表預(yù)制功能的模塊圖形來(lái)創(chuàng)建功能,不必編寫(xiě)實(shí)際的代碼,這也是本仿真系統(tǒng)的主要開(kāi)發(fā)工具。
根據(jù)方案進(jìn)行功能分析和拆分,首先需要制作與角色有關(guān)的導(dǎo)航地圖功能,其可以在體驗(yàn)者需要的時(shí)候調(diào)出地圖,具有顯示當(dāng)前位置、主要設(shè)備區(qū)域、快速跳轉(zhuǎn)點(diǎn)等功能。為了實(shí)現(xiàn)位置的對(duì)應(yīng)關(guān)系,需要制作一個(gè)貼圖同比例的面片,指定貼圖通過(guò)縮放等操作與實(shí)體模型對(duì)應(yīng)獲得角色相對(duì)于貼圖錨點(diǎn)的相對(duì)位置,可以通過(guò)縮放比例等方法在地圖UI上生成一個(gè)與角色相同位置的指示點(diǎn),然后通過(guò)在場(chǎng)景中放置代表跳轉(zhuǎn)位置的目標(biāo)點(diǎn)藍(lán)圖對(duì)角色進(jìn)行位移轉(zhuǎn)換。
設(shè)備信息顯示設(shè)計(jì)為可復(fù)用的場(chǎng)景組件,帶有立方體觸發(fā)框用于靠近和離開(kāi)的檢測(cè)并進(jìn)行相關(guān)文字或圖片信息的展示和收起。將觸發(fā)框尺寸修改、信息顯示等內(nèi)容放到構(gòu)建藍(lán)圖中,為每個(gè)組件設(shè)置對(duì)應(yīng)的顯示內(nèi)容,此處有2種實(shí)現(xiàn)思路:一是在制作階段將信息填入對(duì)應(yīng)的組件內(nèi);二是為組件設(shè)置唯一標(biāo)識(shí)符,通過(guò)Excel自動(dòng)加載信息,開(kāi)放有信息編輯接口。表1為2種信息錄入方法對(duì)比所示,考慮到平臺(tái)上有60余個(gè)設(shè)備和維護(hù)成本,故采用Excel加載方式進(jìn)行了異步加載處理,減小了運(yùn)行卡頓。
表1 2種信息錄入方法對(duì)比Tab.1 Comparison of two information entry methods
傳感器模擬是對(duì)某種內(nèi)容的檢測(cè),入侵、火焰、煙霧、溫度等檢測(cè)基本邏輯是互通的,在子藍(lán)圖中選擇檢測(cè)內(nèi)容和檢測(cè)范圍;每個(gè)傳感器藍(lán)圖根據(jù)基本設(shè)置在一定區(qū)域內(nèi)發(fā)射射線進(jìn)行指定類(lèi)型的發(fā)射器檢測(cè),獲取到發(fā)射器后對(duì)其參數(shù)進(jìn)行監(jiān)測(cè),使用衰減等算法判定其數(shù)值是否達(dá)到各個(gè)報(bào)警級(jí)別;如果達(dá)到了,就會(huì)通過(guò)接口將自身名稱、檢測(cè)類(lèi)型、當(dāng)前狀態(tài)發(fā)送給處理藍(lán)圖;處理藍(lán)圖進(jìn)行報(bào)警狀態(tài)的顯示和信息的記錄。為了后續(xù)升級(jí),當(dāng)前的檢測(cè)邏輯、衰減算法等都進(jìn)行了封裝,可以直接替換為傳感器的參數(shù)并按照設(shè)定對(duì)參數(shù)進(jìn)行閾值判斷、觸發(fā)報(bào)警等動(dòng)作。
工藝流程模擬采用平面展示方法,分別制作設(shè)備、閥門(mén)、傳感器的展示節(jié)點(diǎn),根據(jù)圖紙手動(dòng)擺放節(jié)點(diǎn),設(shè)置輸出輸入節(jié)點(diǎn)名稱,運(yùn)行過(guò)程會(huì)根據(jù)輸入信息確定配對(duì)的輸入與輸出節(jié)點(diǎn)及其屏幕空間的位置,并繪制節(jié)點(diǎn)間的連接線代表管線,統(tǒng)一采用直角轉(zhuǎn)折,進(jìn)而形成工藝流程的演示;在生成的管線基礎(chǔ)上添加運(yùn)動(dòng)元素,表示物流方向和流量。工藝流程示意如圖5所示。
圖5 工藝流程示意Fig.5 Schematic diagram of process flow
虛幻引擎整體可視為由一個(gè)個(gè)模塊構(gòu)成,除了集成好的必備模塊外,還可以將自行開(kāi)發(fā)一系列功能模塊進(jìn)行集成和封裝,以插件形式掛載到整個(gè)引擎上,方便在不同項(xiàng)目之間進(jìn)行移植和使用。數(shù)據(jù)展示過(guò)程需要使用圖表并根據(jù)數(shù)據(jù)和算法在UI繪制坐標(biāo)和線形等,可以使用代碼編寫(xiě)基本邏輯,封裝后使用藍(lán)圖進(jìn)行參數(shù)傳遞、曲線顏色、曲線數(shù)量、橫縱坐標(biāo)等參數(shù)的設(shè)定;Excel是使用比較廣泛的數(shù)據(jù)工具,便于使用過(guò)程的參數(shù)配置,開(kāi)發(fā)插件進(jìn)行表、行、列、單元格的讀寫(xiě)功能并支持單元格內(nèi)整形、浮點(diǎn)、字符串等格式。
系統(tǒng)開(kāi)發(fā)過(guò)程及里程碑節(jié)點(diǎn)完成后需進(jìn)行多輪測(cè)試和優(yōu)化,虛幻引擎為測(cè)試人員提供了完整的性能測(cè)試和分析工具,可以對(duì)運(yùn)行狀態(tài)、流暢度進(jìn)行檢測(cè)及優(yōu)化,用于發(fā)現(xiàn)影響運(yùn)行的低效點(diǎn),并指導(dǎo)開(kāi)發(fā)人員有的放矢地進(jìn)行優(yōu)化。開(kāi)發(fā)過(guò)程可以使用幀率查看工具,出現(xiàn)異常狀態(tài)及時(shí)進(jìn)行修改;到達(dá)里程碑節(jié)點(diǎn)或某些功能模塊開(kāi)發(fā)完成后,可以使用分析數(shù)據(jù)查看器進(jìn)行邏輯線程分析和檢查CPU運(yùn)行效率;使用GPU線程分析的ProfileGPU工具對(duì)場(chǎng)景著色器、貼圖大小等進(jìn)行再次優(yōu)化,以平衡性能和效果。
該套仿真系統(tǒng)實(shí)現(xiàn)了以下功能:通過(guò)鼠標(biāo)鍵盤(pán)實(shí)現(xiàn)了平臺(tái)漫游、設(shè)備信息查看、查看工藝流程功能;通過(guò)控制閥門(mén)和設(shè)備的狀態(tài)實(shí)現(xiàn)了流程切換、查看傳感器分布情況、傳感器檢測(cè)模擬等功能。
使用虛幻引擎通過(guò)場(chǎng)景搭建、模型參數(shù)設(shè)置、界面設(shè)計(jì)及實(shí)現(xiàn)、功能開(kāi)發(fā)、測(cè)試及優(yōu)化等操作實(shí)現(xiàn)了整個(gè)仿真系統(tǒng)。
借助成熟的虛幻引擎可以極大地提高仿真類(lèi)項(xiàng)目的開(kāi)發(fā)效率和提升開(kāi)發(fā)效果,讓整個(gè)開(kāi)發(fā)過(guò)程和工作協(xié)同方法有據(jù)可依。后續(xù)工作中可以通過(guò)工控?cái)?shù)據(jù)的接入和大數(shù)據(jù)及人工智能技術(shù)的結(jié)合將仿真系統(tǒng)進(jìn)一步升級(jí),作為自安裝無(wú)人化井口平臺(tái)的數(shù)字孿生體為生產(chǎn)運(yùn)維等工作提供全方位的數(shù)字化支持,助力海上智慧油田建設(shè)。