管芳景 林達(dá)
摘? 要:文章主要對(duì)破損船舶運(yùn)動(dòng)及進(jìn)出水運(yùn)動(dòng)結(jié)果三維視景展示進(jìn)行研究,開(kāi)發(fā)了一款仿真軟件,首先對(duì)軟件進(jìn)行功能需求分析,確定了軟件總體方案和基本結(jié)構(gòu),并給出了軟件主界面原型,軟件中實(shí)現(xiàn)了船型建模、運(yùn)動(dòng)控制、模擬、顏色設(shè)置等功能模塊,然后給出軟件中主要的功能模塊的設(shè)計(jì)思路和實(shí)現(xiàn)方法,最后,展示了軟件主要功能模塊的實(shí)現(xiàn)效果。
關(guān)鍵詞:破損船舶;三維視景展示;進(jìn)水過(guò)程;仿真
中圖分類號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2021)18-0001-04
Abstract: This paper mainly studies the three-dimensional visual display of damaged ship motion and water Inflow and outflow movement results, and develops a simulation software. This paper firstly analyzes the functional requirements of the software, then determines the overall plan and the basic structure, gives the prototype of the main interface of the software. The software realizes ship shape modeling, motion control, simulation, color setting and other functional modules. functional module? Then the design idea and implementation method of main function modules in software are given. Finally, the effect of main function modules in the software is showed.
Keywords: damaged ship; 3D visual display; water inflow process; simulation
0? 引? 言
船舶經(jīng)常在航行過(guò)程中由于碰撞等因素造成不同程度的船體破損,船舶破損后吃水增加,在波浪中運(yùn)動(dòng),對(duì)破損船體造成極大的危險(xiǎn),造成人員和財(cái)產(chǎn)的損失[1]。當(dāng)前一些仿真軟件不能滿足試驗(yàn)需求,為了更清楚了解不同船型在試驗(yàn)過(guò)程中破損船體運(yùn)行和進(jìn)水過(guò)程[2],可以使用試驗(yàn)人員更直觀了解船體進(jìn)水的時(shí)間和吃水情況,需建設(shè)成一款可積累、高復(fù)用的船舶破損進(jìn)出水仿真集成軟件,從而成為船舶試驗(yàn)中了解破損船舶運(yùn)行和進(jìn)出水過(guò)程的有效手段。
1? 軟件功能分析
破損船舶運(yùn)動(dòng)和進(jìn)出水運(yùn)動(dòng)結(jié)果三維視景展示軟件[3]主要用于船舶后處理展示,根據(jù)用戶提供的船體模型、船體運(yùn)動(dòng)結(jié)果、進(jìn)水時(shí)域結(jié)果等,在計(jì)算機(jī)中建立起虛擬試驗(yàn)場(chǎng)景,模擬仿真求解過(guò)程中船舶的運(yùn)動(dòng)狀態(tài)及進(jìn)出水狀態(tài)。軟件功能需求主要包括如下幾個(gè)方面。
1.1? 前處理功能模塊
該模塊主要實(shí)現(xiàn)對(duì)船型的模型轉(zhuǎn)換及三維展示。在友好的用戶界面下實(shí)現(xiàn)參數(shù)定義,并進(jìn)行合法性檢查。前處理階段輸入的參數(shù)主要包括用戶基本信息、船型信息、工況信息等,能夠?qū)崿F(xiàn)針對(duì)不同船型的三維展示??衫瞄_(kāi)發(fā)平臺(tái)對(duì)接相關(guān)API,在三維場(chǎng)景中對(duì)船型進(jìn)行相應(yīng)的調(diào)整、視角切換、縮放等操作。
1.2? 求解器調(diào)用模塊
該模塊主要實(shí)現(xiàn)對(duì)軟件所輸入的參數(shù)進(jìn)行校驗(yàn),確保軟件中各部分功能之間的協(xié)調(diào)工作。在友好的用戶界面下實(shí)現(xiàn)求解參數(shù)設(shè)置,并進(jìn)行合法性檢查。求解階段所需的輸入?yún)?shù)主要包括求解控制參數(shù)和求解輸出選項(xiàng)等。并具備在計(jì)算開(kāi)始前對(duì)參數(shù)具備初步檢查功能,如判斷參數(shù)數(shù)值選擇范圍等,提供完善的報(bào)錯(cuò)機(jī)制,支持流程自動(dòng)及交互式運(yùn)行,各功能既可以獨(dú)立運(yùn)行,又可在流程管理環(huán)境內(nèi)按照具體業(yè)務(wù)流程形成有機(jī)整體,實(shí)現(xiàn)模塊間按邏輯執(zhí)行及數(shù)據(jù)的自動(dòng)流轉(zhuǎn)。
1.3? 后處理功能模塊
讀入求解器生成的結(jié)果文件,對(duì)結(jié)果數(shù)據(jù)進(jìn)行處理,并采用曲線、云圖、報(bào)告等多種形式展示后處理數(shù)據(jù)內(nèi)容。根據(jù)計(jì)算功能對(duì)不同計(jì)算結(jié)果顯示實(shí)現(xiàn)差異化,具備后處理結(jié)果截圖、視頻或動(dòng)態(tài)圖片錄制功能,計(jì)算結(jié)果數(shù)據(jù)能夠采用通用格式(txt、dat等)導(dǎo)出。
后處理展示中,具備船艙破損進(jìn)水動(dòng)畫(huà)效果,突出展示船艙破裂時(shí),波浪進(jìn)入艙內(nèi)的效果。
2? 軟件總體設(shè)計(jì)
根據(jù)破損船舶運(yùn)動(dòng)和進(jìn)出水運(yùn)動(dòng)結(jié)果三維視景展示軟件功能分析結(jié)果,搭建了軟件集成架構(gòu)和軟件原型界面。
如圖1所示軟件主界面主要由左側(cè)工具欄和右側(cè)視景展示區(qū)兩部分組成。
工具欄主要包括導(dǎo)入、運(yùn)動(dòng)模擬、波浪模擬[4]、進(jìn)水模擬[5]等控件,具體功能如以下所示:
(1)導(dǎo)入船體模型和計(jì)算結(jié)果。
(2)控制運(yùn)動(dòng)模擬的顯示、隱藏以及開(kāi)始、暫停、結(jié)束。
(3)控制進(jìn)水效果的顯示、隱藏以及開(kāi)始、暫停、結(jié)束。
(4)控制波浪的波高、波長(zhǎng)、周期、相位等。
(5)控制時(shí)間進(jìn)度。
視景展示區(qū)主要用于展示船舶模型、運(yùn)動(dòng)及進(jìn)出水模擬,同時(shí)可以協(xié)同展示運(yùn)動(dòng)和艙室進(jìn)水的數(shù)據(jù)曲線,以及物理試驗(yàn)視頻。
3? 軟件設(shè)計(jì)方案
3.1? 開(kāi)發(fā)平臺(tái)選取
三維視景展示軟件其重點(diǎn)在于三維場(chǎng)景的交互,結(jié)合軟件功能需求,在開(kāi)發(fā)平臺(tái)選取時(shí),采用了Unity作為開(kāi)發(fā)平臺(tái)。Unity(Unity 3D),是由Unity Technologies公司開(kāi)發(fā)的一個(gè)讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實(shí)時(shí)三維動(dòng)畫(huà)等類型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開(kāi)發(fā)工具。全世界在工業(yè)VR/AR內(nèi)容中的60%是Unity驅(qū)動(dòng),很多領(lǐng)先汽車品牌中使用了Unity的技術(shù),所以,軟件開(kāi)發(fā)平臺(tái)選用了Unity。gzslib2022040510203.2? 船舶模型轉(zhuǎn)換
在本軟件中,船舶模型轉(zhuǎn)換是前處理功能模塊中的重要功能,能夠?qū)⒂?jì)算采用的型值點(diǎn)數(shù)據(jù)文件轉(zhuǎn)換成標(biāo)準(zhǔn)3D模型文件,便于導(dǎo)入視景仿真軟件進(jìn)行后處理制作,同時(shí)在模型文件中保留有船舶各部件的信息。
實(shí)現(xiàn)方法分三步完成:
第一步:數(shù)據(jù)處理。設(shè)置一個(gè)容差(可由用戶修改),剔除間距小于該容差的數(shù)據(jù)點(diǎn),防止節(jié)點(diǎn)過(guò)于密集導(dǎo)致網(wǎng)格連接錯(cuò)誤。由于船體的對(duì)稱性,二維數(shù)據(jù)文件中僅存有橫剖面一般站點(diǎn)的數(shù)據(jù),因此需要補(bǔ)全缺少的節(jié)點(diǎn),形成整船的節(jié)點(diǎn)數(shù)據(jù)。
第二步:節(jié)點(diǎn)信息寫(xiě)入。從船尾開(kāi)始,按照Y坐標(biāo)值從小到大的順序記錄每一個(gè)型值點(diǎn)的三維坐標(biāo),以便網(wǎng)格數(shù)據(jù)正確匹配節(jié)點(diǎn)。
第三步:網(wǎng)格信息寫(xiě)入。根據(jù)船體形狀特征,以船中為分界,對(duì)船尾部的站面求取任意兩個(gè)相鄰型值點(diǎn)Y坐標(biāo)的平均值,并將該值與相鄰站面上的型值點(diǎn)Y坐標(biāo)比對(duì),獲取最接近的節(jié)點(diǎn),由這三個(gè)節(jié)點(diǎn)構(gòu)成一個(gè)三角形網(wǎng)格,在模型文件中記錄此網(wǎng)格三個(gè)節(jié)點(diǎn)的編號(hào)。對(duì)于船尾部,則求取相鄰兩節(jié)點(diǎn)的Z坐標(biāo),后續(xù)步驟同上,從而形成完整的船體網(wǎng)格信息,并且網(wǎng)格之間不發(fā)生重疊。
3.3? 船型三維展示模塊
3.3.1? 船型三維展示模塊功能
船型三維展示模塊屬于前處理功能模塊,實(shí)現(xiàn)讀取并展示用戶導(dǎo)入的船體模型,具體功能如以下所示:
(1)通過(guò)鼠標(biāo)按鍵操作自由調(diào)整視角位置及大小。
(2)顯示船體內(nèi)部的艙室結(jié)構(gòu)及破損口。
(3)設(shè)置吃水大小來(lái)調(diào)節(jié)液面與船體的位置。
(4)支持用戶自定義船體、艙室的顏色。
3.3.2? 實(shí)現(xiàn)方法
建模,在軟件運(yùn)行過(guò)程中通過(guò)讀取模型文件內(nèi)容重新構(gòu)建船體模型。將讀取到的節(jié)點(diǎn)、網(wǎng)格信息以Unity中數(shù)據(jù)類型存儲(chǔ)到MeshFilter組件中,按照模型文件中船體部件創(chuàng)建空對(duì)象并修改名稱為部件名,添加相應(yīng)的MeshFilter組件,同時(shí)創(chuàng)建MeshRender組件并賦予該部件相應(yīng)的材質(zhì),完成模型創(chuàng)建。
顯示,Unity平臺(tái)中內(nèi)置幾種渲染隊(duì)列,按照渲染順序,從先到后進(jìn)行排序,隊(duì)列數(shù)越小的,越先渲染,隊(duì)列數(shù)越大的,越后渲染。根據(jù)顯示邏輯,水面與船體默認(rèn)處于同一渲染隊(duì)列,將船殼的渲染隊(duì)列順序設(shè)置為第一個(gè),艙室渲染順序設(shè)置為第二個(gè)。同時(shí)創(chuàng)建一個(gè)包裹體完全包裹住船體模型,包裹體的材質(zhì)不賦予任何顏色,渲染隊(duì)列設(shè)置為第三個(gè),以確保模型顯示正常。
鼠標(biāo)控制視角。Unity通過(guò)相機(jī)將用戶搭建的場(chǎng)景呈現(xiàn)出來(lái),本模塊中通過(guò)記錄鼠標(biāo)操作來(lái)計(jì)算移動(dòng)相機(jī)的距離及角度以實(shí)現(xiàn)調(diào)整用戶的觀測(cè)視角。
3.4? 船舶運(yùn)動(dòng)模塊
3.4.1? 船舶運(yùn)動(dòng)模塊功能
船舶運(yùn)動(dòng)模塊屬于后處理模塊中的功能模塊,讀取導(dǎo)入的運(yùn)動(dòng)結(jié)果文件,展示船舶六自由度運(yùn)動(dòng)(包括橫搖、縱搖、艏搖、橫蕩、縱蕩、垂蕩),具體功能如以下所示:
(1)可自由選擇顯示或隱藏任意某個(gè)自由度上的運(yùn)動(dòng)。
(2)運(yùn)動(dòng)具備開(kāi)始、暫停、停止等功能。
(3)可任意調(diào)節(jié)時(shí)間軸上的時(shí)刻,并從選定時(shí)刻進(jìn)行船體運(yùn)動(dòng)模擬。
3.4.2? 實(shí)現(xiàn)方法
通過(guò)Unity的動(dòng)畫(huà)系統(tǒng)可以輕易地在船體對(duì)象施加運(yùn)動(dòng)效果,保準(zhǔn)時(shí)間與動(dòng)作的一致性,同時(shí)可以方便地控制動(dòng)畫(huà)的啟停,播放倍數(shù)等。
本模塊首先在獲取的船體模型上添加Animation動(dòng)畫(huà)組件,然后創(chuàng)建六個(gè)動(dòng)畫(huà)剪輯片段(分別存儲(chǔ)六自由度運(yùn)動(dòng)數(shù)據(jù)),對(duì)不存在縱搖數(shù)據(jù)的片段添加航速數(shù)據(jù)。再將動(dòng)畫(huà)剪輯添加到Animation組件中,通過(guò)腳本控制動(dòng)畫(huà)的播放。
3.5? 進(jìn)水動(dòng)畫(huà)模塊
3.5.1? 進(jìn)水動(dòng)畫(huà)模塊功能
進(jìn)水動(dòng)畫(huà)模塊屬于后處理模塊中的功能模塊,讀取導(dǎo)入的進(jìn)水結(jié)果文件,展示船艙破損后海水涌入及艙室內(nèi)液面上升動(dòng)畫(huà),具體功能如以下所示:
(1)運(yùn)動(dòng)具備開(kāi)始、暫停、停止等功能。
(2)可任意調(diào)節(jié)時(shí)間軸上的時(shí)刻,并從選定時(shí)刻進(jìn)行船體運(yùn)動(dòng)模擬。
3.5.2? 實(shí)現(xiàn)方法
(1)進(jìn)水效果。在獲取到的破艙口對(duì)象上添加粒子系統(tǒng)組件,調(diào)整粒子系統(tǒng)的形狀,方向,重力材質(zhì)等參數(shù),模擬海水進(jìn)入艙室的效果。獲取液面對(duì)象,添加到粒子系統(tǒng)的碰撞器中,模擬水柱進(jìn)入液面后消失效果。
(2)液面升降。復(fù)制一個(gè)艙室底面對(duì)象,艙室底面上添加Animation動(dòng)畫(huà)組件,然后創(chuàng)建一個(gè)動(dòng)畫(huà)剪輯片段,添加液面高度時(shí)歷數(shù)據(jù)。再將動(dòng)畫(huà)剪輯添加到Animation組件中,通過(guò)腳本控制動(dòng)畫(huà)的播放。
4? 軟件詳細(xì)設(shè)計(jì)及效果展示
4.1? 軟件主界面
為便于分析人員操作,將功能集成在軟件主界面中,運(yùn)行效果如圖2所示。
4.2? 船舶模型轉(zhuǎn)換模塊
船舶模型轉(zhuǎn)換模塊能夠?qū)⒂?jì)算采用的自定義型值點(diǎn)數(shù)據(jù)文件轉(zhuǎn)換成obj格式的標(biāo)準(zhǔn)3D模型文件,能直接導(dǎo)入視景仿真軟件進(jìn)行后處理制作,同時(shí)在模型文件中保留有船舶各部件的信息具體步驟為:
(1)輸入文件,即船舶基礎(chǔ)信息數(shù)據(jù),可分為船體型值文件(ship.data)和艙室型值文件(dam.data)兩種,船體型值文件格式如圖3所示,第一行為船體名稱,第二行為船長(zhǎng)、船寬、吃水?dāng)?shù)據(jù),第三行為總剖面?zhèn)€數(shù),從第四行開(kāi)始記錄每一個(gè)剖面的型值點(diǎn)坐標(biāo)數(shù)據(jù)。第一行為該剖面的型值點(diǎn)個(gè)數(shù)與剖面X坐標(biāo),此后29個(gè)值為剖面型值點(diǎn)的Y與Z坐標(biāo)值,依次類推。
艙室型值文件主要包括艙室和破口信息,文件格式如圖4所示。
(2)輸出文件,即3D模型文件,其內(nèi)容包括船體各部件的名稱,頂點(diǎn)坐標(biāo)數(shù)據(jù)及面網(wǎng)格數(shù)據(jù),具體如圖5所示。gzslib202204051020根據(jù)所提供的船舶3D模型文件,在主界面中導(dǎo)入模型文件,轉(zhuǎn)換后的模型如圖6所示。
4.3? 船型三維展示模塊
船型三維展示模塊能夠讀取并展示用戶導(dǎo)入的船體模型,并且顯示船體內(nèi)部的艙室結(jié)構(gòu)及破損口;能夠設(shè)置吃水大小來(lái)調(diào)節(jié)液面與船體的位置;通過(guò)鼠標(biāo)按鍵操作可自由調(diào)整視角位置及大小;支持用戶自定義船體、艙室的顏色。船型三維展示效果如圖7所示。
4.4? 船舶運(yùn)動(dòng)模塊
船舶運(yùn)動(dòng)模塊能夠讀取導(dǎo)入的運(yùn)動(dòng)結(jié)果文件數(shù)據(jù),利用Unity動(dòng)畫(huà)系統(tǒng)將離散的時(shí)域數(shù)據(jù)擬合成連續(xù)的數(shù)據(jù),在船型三維展示界面上模擬船舶六自由度運(yùn)動(dòng)(包括橫搖、縱搖、艏搖、橫蕩、縱蕩、垂蕩),模擬過(guò)程中,用戶可自由選擇顯示或隱藏任意某個(gè)自由度上的運(yùn)動(dòng);運(yùn)動(dòng)模擬具備開(kāi)始、暫停、停止等功能;支持任意調(diào)節(jié)時(shí)間軸上的時(shí)刻,并從選定時(shí)刻進(jìn)行船體運(yùn)動(dòng)模擬。通過(guò)鼠標(biāo)滾輪可自由縮放視角大小,鼠標(biāo)右鍵按住可調(diào)整視角位置。運(yùn)行效果如圖8所示。
4.5? 進(jìn)水動(dòng)畫(huà)模塊
進(jìn)水動(dòng)畫(huà)模塊能夠讀取導(dǎo)入的進(jìn)水結(jié)果文件,利用Unity粒子系統(tǒng)模擬船艙破損后海水從破艙口涌入過(guò)程,利用Unity動(dòng)畫(huà)系統(tǒng)將離散的時(shí)域數(shù)據(jù)擬合成連續(xù)的數(shù)據(jù)展示艙室內(nèi)液面上升動(dòng)畫(huà)。進(jìn)水模擬具備開(kāi)始、暫停、停止等功能;支持任意調(diào)節(jié)時(shí)間軸上的時(shí)刻,并且從選定時(shí)刻進(jìn)行船體運(yùn)動(dòng)模擬。通過(guò)鼠標(biāo)滾輪可以自由縮放視角大小,鼠標(biāo)右鍵按住可調(diào)整視角位置。運(yùn)行效果如圖9所示。
5? 結(jié)? 論
本文采用了Unity開(kāi)發(fā)平臺(tái),開(kāi)發(fā)了破損船舶運(yùn)動(dòng)及進(jìn)出水運(yùn)動(dòng)的三維視景展示軟件,軟件根據(jù)試驗(yàn)專家經(jīng)驗(yàn),創(chuàng)建不同船舶模型,從不同視角展示船體情況,根據(jù)時(shí)間段和場(chǎng)景不同,模擬破損船舶運(yùn)動(dòng)和進(jìn)出水情況,讓試驗(yàn)人員直觀了解破損船舶進(jìn)出水過(guò)程。
參考文獻(xiàn):
[1] 夏淼.破損船舶在波浪中的運(yùn)動(dòng)響應(yīng)研究 [D].鎮(zhèn)江:江蘇科技大學(xué),2019.
[2] 徐濤.船舶破損緊迫局面的應(yīng)對(duì)措施 [J].中國(guó)水運(yùn)(下半月),2019,19(2):16-17.
[3] 聶海英,劉常波,張建華.關(guān)于潛艇破損進(jìn)水實(shí)時(shí)監(jiān)視管理系統(tǒng)設(shè)計(jì) [J].計(jì)算機(jī)仿真,2018.35(2):1-5.
[4] 楊威,毛筱菲.波浪中船舶破損進(jìn)水模擬研究 [J].船海工程,2010,39(1):48-51.
[5] 孫智超.艦船多艙室破損進(jìn)水仿真及抗沉決策研究 [D].大連:大連海事大學(xué),2018.