彭玉元
(韓國又石大學(xué)大學(xué)院造景建設(shè)工學(xué)科,全羅北道 全州 55338 )
隨著計(jì)算機(jī)圖形學(xué)和軟件處理技術(shù)的發(fā)展,三維可視化技術(shù)廣泛用于各種領(lǐng)域[1]。數(shù)字孿生概念也在近年被重新提及,其是指使用物理模型、互聯(lián)網(wǎng)、物聯(lián)網(wǎng)以及傳感器技術(shù)采集生命周期的數(shù)據(jù),并在設(shè)備或系統(tǒng)上進(jìn)行仿真的過程,能有效實(shí)現(xiàn)對現(xiàn)實(shí)環(huán)境和虛擬空間的映射。
機(jī)房擔(dān)負(fù)著存儲數(shù)據(jù)、運(yùn)行系統(tǒng)以及服務(wù)高校發(fā)展的重要使命。機(jī)房三維可視化設(shè)計(jì)是對數(shù)字孿生概念的實(shí)際運(yùn)用,常規(guī)的機(jī)房管理系統(tǒng)相對于該系統(tǒng)存在數(shù)據(jù)呈現(xiàn)形式弱、機(jī)房監(jiān)控復(fù)雜等劣勢。該項(xiàng)目進(jìn)行了數(shù)字孿生技術(shù)的應(yīng)用模式探索,以Unity 3D 為客戶端的技術(shù)支持,并結(jié)合C#程序開發(fā)了一款可在PC 端使用的三維機(jī)房管理軟件,極大地提高了機(jī)房管理的效率,優(yōu)化了機(jī)房管理系統(tǒng)的用戶使用界面。機(jī)房的三維可視化管理可通過三維建模(機(jī)房設(shè)備、機(jī)房格局等的數(shù)字孿生體)配合實(shí)時渲染的三維引擎進(jìn)行機(jī)房的虛擬仿真并展示出來,讓用戶可以與三維場景交互,從而實(shí)現(xiàn)機(jī)房的三維可視化管理和運(yùn)維[2]。目前國內(nèi)外對該領(lǐng)域都具有一定的研究,相關(guān)產(chǎn)品有Visual DAQ 系統(tǒng)和Twaver系統(tǒng)等。
機(jī)房三維可視化是對傳統(tǒng)管理系統(tǒng)的進(jìn)一步提升,通過三維可視化的形式呈現(xiàn)機(jī)房的大量數(shù)據(jù),提高管理人員對機(jī)房數(shù)據(jù)的查閱、接收效率。該系統(tǒng)具有實(shí)時性,便于機(jī)房管理人員對機(jī)房進(jìn)行資產(chǎn)查看、設(shè)備定位,直觀地提供了全方位視角,可以對機(jī)房進(jìn)行立體的分析、管理。
傳統(tǒng)的機(jī)房管理系統(tǒng)主要使用一維或二維的系統(tǒng)構(gòu)架圖、網(wǎng)絡(luò)拓?fù)鋱D來表達(dá)機(jī)房數(shù)據(jù),視覺呈現(xiàn)難以精確描述機(jī)房的整體結(jié)構(gòu),不利于直觀理解機(jī)房數(shù)據(jù)。而基于數(shù)字孿生理念的可視化機(jī)房管理系統(tǒng)通過虛擬仿真來進(jìn)行信息表達(dá),可以通過三維可視化的形式直觀地呈現(xiàn)復(fù)雜的機(jī)房數(shù)據(jù)、位置等各種重要信息,幫助管理人員完成更為高效的行動與決策[3]。其優(yōu)勢如圖1 所示。

圖1 可視化機(jī)房管理系統(tǒng)與傳統(tǒng)管理的差異對比圖
機(jī)房的業(yè)務(wù)具有復(fù)雜性和專業(yè)性,難以將所有的管理內(nèi)容全部遷移到三維可視化客戶端,在經(jīng)過一系列的實(shí)踐后,筆者認(rèn)為三維可視化部分應(yīng)該保持其功能的獨(dú)立性和單一性,主要實(shí)現(xiàn)客戶端的表現(xiàn)功能,其余復(fù)雜的業(yè)務(wù)邏輯工作依舊交由后臺管理程序和傳統(tǒng)機(jī)房管理系統(tǒng)進(jìn)行處理。
因此,機(jī)房的三維可視化客戶端首先需要解決的就是資產(chǎn)的三維可視化編輯。通過預(yù)先制作好的三維模型等資源,例如設(shè)備機(jī)柜、機(jī)房空調(diào)以及門禁等各種三維資源組件,在客戶端實(shí)現(xiàn)場景的編輯功能,可實(shí)時編輯機(jī)房的布局圖,并實(shí)時生成三維可視化場景。已經(jīng)開發(fā)實(shí)現(xiàn)的軟件界面截圖如圖2 所示。

圖2 客戶端實(shí)時布局演示(軟件截圖)
該軟件使用Unity 3D 技術(shù),并基于C#編程規(guī)范進(jìn)行開發(fā)。開發(fā)過程中,在進(jìn)行三維模型預(yù)制件的動態(tài)編輯布局時,使用C#編程語言來計(jì)算多邊形網(wǎng)格,從而繪制墻體和地面的實(shí)時三維模型。其步驟依次為設(shè)置多邊形頂點(diǎn)數(shù)組、設(shè)置三角形序列和設(shè)置網(wǎng)格UV。在Unity 3D 中將這些步驟依次編寫為3個步驟的靜態(tài)函數(shù):1)SetVertices(List
機(jī)房場景實(shí)時編輯解決了三維機(jī)房可視化的客制化需求,可以根據(jù)自己的需求進(jìn)行三維可視化場景的快速編輯布局,簡單快捷地創(chuàng)建出現(xiàn)實(shí)機(jī)房的數(shù)字孿生體模型。但是只有機(jī)房的三維模型是不夠的,還要將三維模型與對應(yīng)的后臺數(shù)據(jù)快速關(guān)聯(lián)起來,從而滿足對機(jī)房數(shù)據(jù)信息可視化的要求。
在開發(fā)過程中,使用Web 開發(fā)技術(shù)從傳統(tǒng)機(jī)房管理系統(tǒng)中提取必要的數(shù)據(jù)接口,并借助橋接層,供三維可視化客戶端調(diào)用,從而實(shí)現(xiàn)后臺數(shù)據(jù)的交互。流程結(jié)構(gòu)如圖3 所示。

圖3 三維可視化客戶端與后臺數(shù)據(jù)交互流程圖
三維可視化客戶端中的橋接層使用C#語言進(jìn)行編寫,自定義接口采用Web services 技術(shù),以XML 格式的形式進(jìn)行數(shù)據(jù)交互,在Unity 3D 中編寫C#代碼,周期性主動請求調(diào)用數(shù)據(jù)接口,然后根據(jù)所獲得的數(shù)據(jù)實(shí)時關(guān)聯(lián)到機(jī)房三維場景(即數(shù)字孿生體)模型中。三維可視化客戶端會根據(jù)現(xiàn)實(shí)機(jī)房中對應(yīng)設(shè)備的狀態(tài)來觸發(fā)數(shù)字孿生體中相應(yīng)的行為條件,從而在三維場景模型中呈現(xiàn)相應(yīng)的數(shù)據(jù)信息,實(shí)現(xiàn)了三維場景模型和數(shù)據(jù)的關(guān)聯(lián)與交互。
雖然通過實(shí)現(xiàn)以上2 個功能,用戶已經(jīng)可以自定義機(jī)房的三維模型以及獲取相應(yīng)的數(shù)據(jù),但是還要給用戶提供三維模型及UI 的可視化操作。該系統(tǒng)主要是通過鼠標(biāo)和鍵盤進(jìn)行交互,因此該系統(tǒng)需要穩(wěn)定、可擴(kuò)展的三維對象交互系統(tǒng)。
在開發(fā)過程中,需要在Unity 3D 中使用C#編寫能與多種三維物體對象進(jìn)行交互的鼠標(biāo)事件,從而實(shí)現(xiàn)用戶對三維模型與UI 的拖拽等交互操作。筆者基于Unity 3D 中的MonoBehaviour 類以及自定義封裝Unity RayCast API 中的PRayCast 類來對射線進(jìn)行檢測,從而實(shí)現(xiàn)鼠標(biāo)拾取三維空間中的虛擬對象的功能。同時配合單例PMouseManager 進(jìn)行事件分發(fā),實(shí)現(xiàn)三維虛擬對象的選擇和取消選擇事件。使用單例模式可以方便地在任何地方調(diào)取當(dāng)前交互狀態(tài)的信息供開發(fā)更多的功能。BaseObjectHandle 類實(shí)際作為接口和父類來使用,其直接繼承了MonoBehaviour 和所有EventSystem 的交互接口,讓EventSystem 中的Unity 默認(rèn)交互事件能夠?qū)⑹录职l(fā)到擴(kuò)展的所有BaseObjectHanlde的子類中。總的來說,在該系統(tǒng)下,只需要為具體的虛擬對象新建一個實(shí)現(xiàn)類,并繼承BaseObjectHandle,然后重寫其中需要響應(yīng)的交互,并實(shí)現(xiàn)具體邏輯,再將腳本中的GameObject.AddComponent

圖4 用戶交互模塊中主要類名與結(jié)構(gòu)
為了存儲每個自定義編輯場景的數(shù)據(jù),且將場景數(shù)據(jù)與后臺服務(wù)器進(jìn)行交互,筆者研究設(shè)計(jì)了一套基于XML 的數(shù)據(jù)存儲系統(tǒng)。該系統(tǒng)的主要功能在于能夠在Unity 3D 框架下進(jìn)行擴(kuò)展和管理,并完成對不同需求數(shù)據(jù)的生成、增加、查找、修改與保存工作。
在整個數(shù)據(jù)存儲系統(tǒng)中,由Storer
為了解決存儲實(shí)現(xiàn)類Storer
為了避免數(shù)據(jù)文件因遭遇不必要的修改而導(dǎo)致程序運(yùn)行錯誤,在該框架中筆者為數(shù)據(jù)的存儲添加了一個AES 加密算法,以提供一定的安全加密功能和防串改功能,在項(xiàng)目中采用了C#的RijndaelManaged 類制作數(shù)據(jù)加密模塊。
客戶端服務(wù)器主要采用php 進(jìn)行開發(fā),部署運(yùn)行于Windows Server 或Linux 操作系統(tǒng)上,通過固定域名地址為三維可視化客戶端提供數(shù)據(jù)訪問接口。
測試采用的的系統(tǒng)軟件具體部署如下:1)Windows Server。IIS(Internet Information Services)。2)MySQL。3)PHP Linux(CentOS)。Nginx、MySQL 以及PHP。
客戶端為運(yùn)行于Windows 操作系統(tǒng)上的三維軟件,需要有中高性能顯卡硬件作為支持,在測試中使用的軟硬件配置為intel core i7、8G DDR4 2133 ram、256g SSD、NVidia GTX 980 8G 顯卡以及windows 10 64bit 操作系統(tǒng)。
配合橋接層后臺可以擴(kuò)展手機(jī)端的信息查看功能,通過配合手機(jī)App 可以快速查看服務(wù)器的信息,如果出現(xiàn)緊急狀況也可以讓運(yùn)維人員第一時間掌握故障信息的初步狀況。
可以在橋接層服務(wù)器納入更多的數(shù)據(jù)處理程序,配合部署在服務(wù)器機(jī)房內(nèi)的各種傳感器(溫度、濕度及風(fēng)量等)進(jìn)行數(shù)據(jù)采集,并將其提供給三維可視化客戶端,再由客戶端以二維圖表或三維的形式呈現(xiàn)相關(guān)數(shù)據(jù),例如服務(wù)器機(jī)房的溫度布局就可以通過熱力圖計(jì)算疊加到三維空間中,可直觀地了解機(jī)房的溫度分布。
可以同時對機(jī)房的動環(huán)信息進(jìn)行三維可視化操作,可以實(shí)現(xiàn)動力監(jiān)控、計(jì)算環(huán)境監(jiān)控、安防監(jiān)控以及服務(wù)器監(jiān)測等功能。運(yùn)維人員能夠通過三維圖形直接了解機(jī)房的動環(huán)信息,配合傳統(tǒng)管理系統(tǒng)提供的相關(guān)數(shù)據(jù),實(shí)現(xiàn)更高效的動環(huán)系統(tǒng)控制。
借助原有的客戶端動態(tài)布局功能可以設(shè)計(jì)更多其他領(lǐng)域的三維組件模型供用戶調(diào)用,即可應(yīng)用于其他領(lǐng)域的三維可視化快速預(yù)覽,例如室內(nèi)布局、園區(qū)布局等。
該文根據(jù)數(shù)字孿生理念所設(shè)計(jì)的機(jī)房可視化管理方案可以滿足三維機(jī)房可視化的客制化需求,簡單快捷地創(chuàng)建出現(xiàn)實(shí)機(jī)房的數(shù)字孿生體模型,并能與傳統(tǒng)機(jī)房的后臺進(jìn)行數(shù)據(jù)交互,可以快速實(shí)現(xiàn)不同機(jī)房場景的搭建以及對機(jī)房場景的擬真,從而提升機(jī)房的管理效率。