汪子涵 董維華



摘要:淤地壩對水資源調控過程是一種動態變化的過程,只用文字描述,無法給研究人員形象直觀的展示,本文提出一種基于Unity3D的降雨過程與淤地壩調控水資源過程的模擬方法。采用3DsMax對淤地壩系主要模型進行三維建模,使用Unity3D引擎進行場景交互設計,采用粒子系統進行降雨的模擬,設計并實現了水資源收集仿真算法,利用多層次細節技術和剔除遮擋技術等進行渲染優化。借助這一方法,開發了淤地壩水資源調控虛擬再現仿真系統。實例表明,該方法可以形象逼真的再現降雨徑流過程,還能表現淤地壩等組件對于水資源的調控過程,使展示的效果更加逼真。
關鍵詞:淤地壩;水資源;Unity3D;三維仿真
中圖分類號:TP391.9? ?文獻標識碼: A
文章編號:1009-3044(2021)06-0205-04
Abstract: The regulation and control process of water resources by warping dams is a dynamic process, which can not be displayed visually and intuitively by researchers. This paper proposes a simulation method of rainfall process and warping dam regulating water resources process based on unity3d. 3DsMax is used to model the main model of Warping Dam System in the scene, unity3d is used for scene interaction design, particle system is used for rainfall simulation, and simulation algorithm for water resource collection is designed and implemented, and multi-level detail technology and occlusion removal technology are used for rendering optimization. With the help of this method, a virtual reappearance simulation system for water resources regulation of warping dams is developed. The example shows that the method can reproduce the rainfall runoff process vividly, and can also show the regulation process of warping dam and other components on water resources, which makes the display effect more realistic.
Key words: rainfall runoff; water resources; unity3d; 3D simulation
我國干旱半干旱地區進行生態環境建設所面臨的主要問題就是嚴重的水資源短缺與水土流失。黃土高原是我國水土流失極其嚴重的地區之一,同時也是黃河淤積泥沙的主要來源。黃土高原地區有效防治水土流失的措施之一就是建設淤地壩,不僅可以減少水土流失、攔泥淤地,還能夠高效存蓄并利用水資源。因此研究黃土高原區的降雨徑流過程以及水資源的高效利用是至關重要的。王麗云等[1]分析了十大孔兌現狀淤地壩數量與時空分布, 并計算了近10年淤地壩攔沙量, 估算了未來攔沙潛力和剩余攔沙壽命。高雅玉等[2]通過對司家溝流域淤地壩建設情況分析,認為充分高效利用淤地壩攔蓄利用雨洪水資源的潛力,對緩解半干旱地區水資源危機有至關重要的作用。黨維勤等[3]對淤地壩及其壩系的試驗研究進行了系統梳理,可以為今后淤地壩的進一步研究提供參考。
三維可視化技術是虛擬仿真領域的重要應用之一,構建了現實世界與虛擬世界的橋梁,通過渲染管線對現實數據處理,再通過三維引擎開發模擬,不僅給用戶提供逼真的視覺效果,還能夠為用戶的決策提供幫助[4]。何雋等[5]針對船舶火災成因的特殊性、消防訓練的局限性和危險性, 構建了船舶虛擬消防訓練系統, 供船員進行安全有效的人機交互船舶滅火訓練。劉標等[6]針對現有電力系統仿真教學系統存在的事故仿真不足、缺乏真實感以及開發難度大的問題,以220KV變電站為仿真對象,利用Unity3D 提供的豐富的功能,搭建了一個完整的電力仿真教學系統。嚴雨靈等[7]通過研究虛擬現實的應用和開發,以飛機起落架為例設計了一套基于Unity3D虛擬現實引擎的虛擬維修教學系統,該系統實現了飛機零部件的展示、拆裝等功能。通過對西柳溝流域重點示范區刀勞慶的調研,設計了基于Unity3D的三維可視化系統,形象逼真地再現了降雨徑流水文過程,表現了淤地壩等組件對于水資源的調控過程,實現了淤地壩水資源調控過程的三維模擬。
1 示范區實景仿真方法
西柳溝位于內蒙古河套平原的中部,發源于鄂爾多斯市東勝區,是黃河的一級支流[8],刀勞慶示范區是西柳溝流域綜合治理的重點建設示范區。示范區實景仿真方法首先利用無人機航拍地形數據,經GlobalMapper處理后得到可以導入Unity3D的三維地形文件,然后使用建模軟件3DsMax為示范區內淤地壩及其組件建立三維模型,利用Unity3D引擎設計三維仿真場景,通過C#編程語言實現了水資源收集仿真算法,還有基于粒子系統的降雨特效技術[9]、碰撞檢測技術[10]等共同實現示范區特殊功能仿真。
1.1開發流程
2019年5月15日于刀勞慶示范區現場采集當地地形地貌真實數據、淤地壩及其相關組件的位置信息和各類需要建模的物體實體尺寸信息等,對現場采集到的真實數據進一步處理,建立基本信息庫和實景圖像庫,用于3DsMax建模貼圖,將已經建立好的三維模型導入到Unity3D引擎中,使用C#語言編寫應用程序,設計相應仿真算法,導入建立的三維模型,開發降雨和水資源收集利用仿真場景,生成降雨過程和淤地壩水資源調控過程再現應用案例。經過反復對應用案例的仿真體驗、測試、改進,最終完成了淤地壩水資源調控三維仿真系統。
1.2 3DsMax技術
Autodesk公司所開發的3DsMax是一個專業的三維建模軟件,也是目前最受歡迎的三維建模工具之一,不僅可以創建各式各樣的三維模型,還能制作出形象逼真的三維動畫,并且能對模型進行渲染,輸出各種格式的三維模型,其中包括Unity3D中常用的FBX格式。
3DsMax對于使用者來說非常方便,采用多邊形對象建模方法,可以單獨對點和邊進行編輯。對于場景以及物體材質的設置,我們則可以通過編輯材質顏色紋理、設計貼圖和調整參數等操作來實現物體特質效果。所以對淤地壩水資源調控場景及場景中模型的制作,選用3DsMax是非常合適的。
1.3 Unity3D技術
淤地壩水資源調控過程虛擬再現系統中需要對3D虛擬場景進行渲染、設計交互仿真功能,將創建好的模型添加到三維場景中,采用Unity3D 渲染技術來實現這部分功能。
Unity是由Unity Technologies開發的一個多平臺綜合性工具,用戶可以利用Unity開發游戲、創建三維動畫、進行可視化仿真等。Unity開發采用C#和JavaScript編程語言,腳本編寫較為簡便,并且還給用戶提供了大量的第三方插件。Unity是一個層級式的3D應用綜合開發環境,主要提供了場景面板、游戲面板、層次面板、項目面板、檢測面板。在Unity3D中,由寫好的腳本程序操控實體對象,各種不同的實體對象組成一個場景,每個場景展示的內容都不相同,這些不同的場景共同構成了Unity3D應用程序,場景中的攝像機實現了場景的實時渲染功能。
Unity 采用C#編程語言來編寫腳本程序,在實現具體功能時,只需在物體上添加一個腳本程序,當程序運行時。物體會發生相應的變化。常用函數有: Awake()、Start()、Update()、FixedUpdate()、OnEnable()、OnDisable()、OnDestroy()。Unity 常用的API接口是Transform 類,用于描述和控制物體的三維或二維位置、旋轉、縮放屬性[11]。
2 三維場景的建立
2.1三維地形的建立
采用無人機傾斜攝影三維建模技術來建立刀勞慶示范區的三維地形,利用無人機對刀勞慶示范區進行多角度拍攝采集影像數據,再使用GlobalMapper進行影像數據處理,輸出格式為RAW的三維地形文件。在Unity3D中新建一個三維地形Terrain,導入處理好的RAW文件,設置地形的尺寸大小,無須其他復雜設置即完成了三維地形的創建。Terrain 地形工具主要有: 地面高度的提升與降低,地形的平滑、給地形添加紋理,在地面上種樹、種草等。利用Terrain工具對創建的地形進一步修改美化,給地形加上預先處理好的貼圖,完成虛擬三維場景中三維地形的建立。使用該方法能夠在短期內生成大范圍、高精度的三維地形,與傳統手動建立三維地形相比,不僅大大提高了效率,而且模擬的效果更加真實。
2.2 三維地物的建模
創建臥管、排水管、蓄水池、截流渠等淤地壩系建筑物,需要采集相關的建筑信息。首先對需要三維建模的建筑物尺寸進行測量,記錄相應組件的測量數據,然后利用相機等設備拍攝淤地壩的照片,利用圖像編輯軟件Photoshop對拍攝的照片進一步處理,經修改后得到相關模型的材質貼圖,最后利用三維建模軟件3DsMax根據場景中物體的大小按比例創建對應的三維模型,并為模型添加材質貼圖。將建立好的三維模型導入在Unity3D已經建立的Terrain中,通過旋轉、移動、縮放等將各建筑物模型擺放到合適的位置。
樹木、玉米、野草等三維植物采用3DsMax 建立三維模型,表現出各種植被的形態,并利用處理好的圖片進行紋理貼圖,建立的植物模型越精細,數據量就會越大,當場景中同時存在大量植物時,可能會造成系統的卡頓。在Unity中利用預制體,每一種植物只保留一個,防止數據量太大引起卡頓,以便實現實時動態仿真。
2.3 降雨效果模擬
為了能逼真地模擬出示范區的降雨過程,使用了粒子系統來進行仿真,大部分三維仿真軟件為了實現復雜的動態特效都會使用粒子系統,常見的特效包括雨、云、霧、爆炸、雪花等。粒子系統的仿真步驟一般如下:
(1)粒子的生成。粒子生成的位置,時間以及數量都需要根據仿真對象的不同來具體設置。
(2)粒子的屬性。粒子的屬性一般包括:形狀,大小,顏色,生命周期等等,通過設置粒子的屬性,可以模擬不同的仿真對象。
(3)粒子的運動。新的粒子產生后,粒子會根據初始化時的速度和方向運動,粒子的相關屬性也會處于動態的變化中,粒子的空間位置主要由粒子的前一位置、速度和加速度來決定。
(4)粒子的消亡。生命周期結束的粒子會被系統除去。
(5)粒子的渲染。當某一幀的粒子狀態全部確定后,繪制并顯示由有生命的粒子組成的圖形。
Unity3D中的粒子系統檢視器用來控制粒子系統,其中的一些參數如圖3所示,用于控制粒子系統的參數眾多,通過對各個參數進行調整可以得到各種不同的效果。
首先新建一個材質球New Material 賦給粒子系統Render下面的Material ,修改粒子系統的Shape,使其變為圓柱形,調節參數Emission下的Rate,調整雨滴密度,Rotate by Speed下的Angular Velocity可改變雨滴的下落方向。Prewarm表示預熱系統,先讓粒子充滿相應的場景中,然后繼續發射粒子,這樣做的好處是更加真實,不會因為粒子發射太慢而顯得呆板。Start Speed設置粒子發射時的初始速度,Start Size設置粒子的初始大小。Start Lifetime表示粒子的生命周期,當粒子的生命周期結束時,粒子會自動消失。如圖4所示為粒子系統模擬的降雨效果。
3 水資源收集與利用過程仿真
3.1 水資源的收集仿真算法
在發生大規模降雨時,淤地壩壩前的雨水會通過坡面漫流和地表匯流的形式匯集。在降雨結束后,壩前收集的雨水中的泥沙會慢慢沉淀,水逐漸變清,沉淀后的清水通過臥管自上而下逐級排放到壩后的蓄水池中被收集起來備用。為了重現雨水資源的收集過程,研究了水資源收集仿真算法,實現了雨水資源收集的動畫效果。水資源收集仿真算法如圖5所示。
3.2水資源收集仿真算法的代碼實現
根據水資源收集仿真算法,三個主要函數的代碼實現及解釋如下:
(1)水面上漲函數WaterRise( )
public class WaterRise : MonoBehaviour
{public Transform transformWater;
public float addHeight = 5;
IEnumerator Start()
{? ?yield return new WaitForSeconds(1);
float waterY = transformWater.position.y;
transformWater.DOMoveY(waterY + addHeight, 5);}
void Update()
{}}
該函數通過調整水面的高度以及水面上漲的時間來實現水面的上漲效果,模擬出在經過降雨后水面不斷上漲的一個過程。
(2)水變色函數ColorChange( )
public class ColorChange : MonoBehaviour
{ public Material material;
public Color waterColor;
IEnumerator Start()
{? ?yield return new WaitForSeconds(1);
material.DOColor(waterColor, "_BaseColor", 6); }
void Update()
{? }}
該函數通過改變水面的材質來改變水面的顏色,模擬出收集到渾濁的雨水經過沉淀后慢慢變清澈的過程。
(3)排水函數PourWater( )
public class PourWater : MonoBehaviour
{? ? public Transform[] transformGaizi;
public Transform transformWater;
IEnumerator Start()
{ yield return new WaitForSeconds(1);
float waterY = transformWater.position.y;
for (int i = 0; i < transformGaizi.Length; i++)
{? Transform _transform = transformGaizi[i];
float y = _transform.position.y;
_transform.DOMoveY(y + 1, 1);
yield return new WaitForSeconds(1);
waterY -= 0.44f;
transformWater.DOMoveY(waterY, 3);
yield return new WaitForSeconds(3);
_transform.DOMoveY(y, 1);
yield return new WaitForSeconds(1);? }? }
void Update()
{? }}
該函數通過獲取蓋子的位置和水面的高度,計算每打開一個蓋子水面下降的高度,不斷更新水面的位置,模擬出了打開臥管蓋子排放淤地壩壩前所收集清水的過程。模擬的排水效果如圖6所示。
4 系統總體設計
在綜合考慮目前虛擬現實仿真系統各種功能及優缺點的前提下,具體到淤地壩水資源調控虛擬仿真的特點和要求,設計出了淤地壩水資源調控虛擬仿真系統,如圖7所示。
各模塊功能簡介如下:
(1)UI界面:在展示淤地壩水資源調控仿真場景時,通過人機交互,可以查看目標信息,具有"點擊、縮放、旋轉、移動"等功能。
(2)現場采集圖庫:無人機拍攝示范區地形圖片、相機拍攝淤地壩系組件照片、處理采集的圖片信息、生成資源庫。
(3)水資源收集利用場景再現:刀勞慶示范區三維地形重建、創建淤地壩系組件三維模型、創建樹木、玉米等植被LOD模型。
(4)VR核心模塊:刀勞慶示范區數據庫管理、植被LOD算法、視角移動旋轉算法、降雨粒子特效算法、水面上漲變色仿真特效算法。
(5)實時仿真:淤地壩水資源調控三維場景實時展示,水資源收集利用模式效果展示。
5 結語
降雨過程和淤地壩對水資源調控過程周期較長且具有不確定性,對于研究人員來說,不便現場觀測,而且通過文字描述無法給研究人員形象直觀的展示。因此本文研究了一種基于Unity3D的降雨過程與淤地壩系調控水資源過程的模擬方法,設計了淤地壩水資源調控虛擬再現系統、描述了開發流程及相關技術解決方案,探討了三維場景重建技術、三維地物重建技術等關鍵技術,完成了淤地壩水資源調控虛擬再現相關功能的設計,最終實現了淤地壩水資源調控虛擬仿真系統的開發。實例表明,該方法可以形象、逼真的再現淤地壩水資源調控仿真情境,解決降雨過程和淤地壩對水資源調控過程不便觀測等問題,為研究人員提供了一種形象逼真的虛擬再現方法,也可以用于水文水資源的教學案例中。
參考文獻:
[1] 王麗云,馬振剛,高云飛,等.近10年來十大孔兌現狀淤地壩攔沙作用分析[J].人民黃河,2018,40(9):89-92.
[2] 高雅玉,田晉華,李嘉楠.基于水土資源高效利用的淤地壩建設潛力分析[J].人民黃河,2019,41(9):102-105,109.
[3] 黨維勤,黨恬敏,高璐媛,等.黃土高原淤地壩及其壩系試驗研究進展[J].人民黃河,2020,42(9):141-145,160.
[4] 劉宇.基于三維可視化平臺的場景管理的設計與實現[D].北京:中國科學院大學(中國科學院沈陽計算技術研究所),2020.
[5] 何雋,金志泉.Unity 3D船舶虛擬消防訓練系統滅火功能設計與實現[J].軟件,2019,40(5):47-52.
[6] 劉標,王大虎,徐炎軍.基于Unity3D的電力仿真教學系統[J].軟件,2019,40(6):164-168.
[7] 嚴雨靈,陳閔葉,劉同強.基于Unity3D的虛擬維修教學系統設計與實現[J].軟件,2019,40(11):128-130.
[8] 劉劍超,林亞軍,王述運,等.基于粒子系統的雨天實時仿真方法[J].指揮控制與仿真,2020,42(5):70-75.
[9] 王普慶,侯素珍.西柳溝丘陵區土壤組成及對流域產沙的影響[J].人民黃河,2020,42(2):1-4,17.
[10] 李星,傅妍芳,王亮,等.基于射線檢測的動態碰撞優化算法[J].系統仿真學報,2019,31(11):2393-2401.
[11] 苗藝楠,申閆春.基于Unity3D的交通事故虛擬再現系統研究[J].計算機仿真,2018,35(12):122-126.
【通聯編輯:梁書】