Babybus-u3d技術交流-基于Unity3D的虛擬水流墻系統(tǒng)的設計研究
來源:[第三維度
作者:張錫英,韓吉燁
單位:東北林業(yè)大學信息學院
** 摘要
針對現(xiàn)有水流墻系統(tǒng)中水流真實性不高、可移植性不好等問題,開發(fā)一套新的基于[Unity
3D虛擬水流墻系統(tǒng)。該系統(tǒng)采用SPH算法對水流墻系統(tǒng)中的水流加以優(yōu)化,使其能夠達到模擬真實水流的效果,真實地模擬了水流的視覺效果和物理特性。利用C#語言編寫的畫線代碼可以完美地在屏幕上畫線改變水流的路線。同時采用了以線段代替點的全新存儲結(jié)構,減小存儲壓力,從而提高性能。
該項目成果可大量發(fā)布于Windows、Android、IOS、Linux等多系統(tǒng)中供用戶進行體驗,并且對硬件需求不高,無需綁定硬件,一般配置都可以完美運行,支持發(fā)布到多種操作平臺,以便滿足多平臺的需求,使用戶可以得到更真實、更全面、更方便的體驗效果。
虛擬水流墻系統(tǒng)是一款對現(xiàn)實中水流的各種物理特性進行模擬的[虛擬現(xiàn)實
系統(tǒng)
。隨著[虛擬現(xiàn)實
技術在各領域的廣泛應用,基于[Unity
3D的[虛擬現(xiàn)實
研究已經(jīng)成為當前研究的熱點。初級版本的虛擬水流墻系統(tǒng)現(xiàn)在已存在于許多城市科技館、科技主題公園等公眾場所用于展示與用戶體驗,但這些初級版本的虛擬水流墻系統(tǒng)中存在著許多缺點和不足。針對這些問題,筆者開發(fā)了一款全新的虛擬水流墻系統(tǒng)。
** 1 水流墻的設計與實現(xiàn)
在水流墻項目系統(tǒng)中,水流是項目的主體。在程序啟動時,會有虛擬的水流從屏幕頂端流出。
** 1.1 [Unity3D [Unity3D是一款基于.NET的游戲開發(fā)引擎。作為一款成熟的3D游戲擎,[Unity
3D為游戲設計者提供了許多游戲開發(fā)所必要的功能。這些強大的功能為開發(fā)該水流墻項目提供了可行性保障。同時大大降低了開發(fā)成本,縮短了開發(fā)周期并降低了風險。
由于[Unity
3D可以充分、實時地處理大量的三維模型和數(shù)據(jù),并能夠提供高效的性能和高質(zhì)量的保證等特點,長期被用于三維顯示、
實時交互的項目開發(fā)設計項目中。Uni-ty3D還有一個很重要的特點是跨平臺開發(fā),它實現(xiàn)了一次開發(fā)、一鍵式發(fā)布的方式發(fā)布到多種平臺的功能,目前支持發(fā)布到Android、Windows、Linux、Mac、IOS、Web和Flash等平臺。這個特點為在多平臺發(fā)布和項目實現(xiàn)可移植性提供保障。
** 1.2 粒子系統(tǒng)
粒子系統(tǒng)是一種用于模擬不規(guī)則物體或自然場景的方法,這些不規(guī)則物體的特點是動態(tài)性和隨機性。粒子系統(tǒng)中的每個粒子都具有形狀、大小、顏色、透明
度、運動速度、運動方向、生命周期等多種屬性,而且這些粒子隨時間的推移不斷變化,在時間和空間上具有動態(tài)分布特性,從而盡可能真實地模擬出具有復雜運動規(guī)律的動態(tài)特效。粒子系統(tǒng)的基本開發(fā)流程包括以下幾個步驟。
1.2.1 確定模擬對象的粒子模型。
在利用粒子系統(tǒng)進行模擬之前,首先要對待模擬對象的運動規(guī)律進行分析,從而選擇合適的粒子模型進行模擬。
1.2.2 初始化粒子系統(tǒng)。
根據(jù)上一步驟確定的粒子模型對粒子系統(tǒng)進行初始化,包括設置粒子數(shù)量、大小、形狀、顏色、初始位置等屬性。
1.2.3 設置粒子運動規(guī)律。基于要模擬的對象設置粒子的運動規(guī)律及相關公式。通過粒子的協(xié)同運動模擬對象的運動。
1.2.4 粒子狀態(tài)更新。
粒子系統(tǒng)開始運行之后,需要根據(jù)粒子的運動規(guī)律按一定頻率更新粒子狀態(tài)。
1.2.5粒子的消亡。
每個粒子完成一個生命周期的所有活動之后便會進入消亡階段,此時需要將消亡的粒子及時刪除,以免耗費過多的系統(tǒng)資源。
** 1.3 SPH算法
SPH算法是典型的拉格朗日視角,基本原理是通過粒子模擬流體的運動規(guī)律,然后轉(zhuǎn)化成網(wǎng)格進行流體渲染。SPH算法的基本思想是將連續(xù)的流體分解為無數(shù)個細小的顆粒,這些顆粒相互影響,共同形成復雜的流體運動,其中每個單獨的流體粒子都遵循牛頓第二定律。
SPH算法的基本運算流程包括以下幾個步驟。
(1)初始化粒子,為每個粒子添加初始值。包括粒子的初始位置、初始速度等。
(2)根據(jù)公式[圖片上傳中。。。(1)]計算出每個粒子的密度。其中,m為每個粒子的質(zhì)量,h為相互作用的兩粒子間的距離,ri、rj分別為兩粒子的位置,ρ(ri)即為ri點處粒子的密度。
(3)根據(jù)公式P=K(ρ-ρ0)計算出每個粒子的壓強。其中,ρ0是流體的靜態(tài)密度,K是和流體相關的常數(shù),只跟溫度有關。計算結(jié)果P即為所有粒子壓強。
(4)根據(jù)公式計算每個粒子的加速度。

(5)根據(jù)臨界條件來調(diào)整加速度。
(6)根據(jù)加速度計算每個位置的速度變化。
(7)根據(jù)速度計算粒子的位置變化。
(8)重新繪制粒子位置。
(9)返回到步驟2重新計算粒子密度,直到粒子加速度為0,位置不再發(fā)生變化為止。
** 2 畫線的設計與實現(xiàn)
該項目的基本目的是用戶可以在一個虛擬的有水流的環(huán)境下進行畫線、刪除等操作,所畫的線會與虛擬水流中的水滴發(fā)生碰撞,改變水流的流動路徑。基本思想是基于C#語言進行編碼實現(xiàn)畫線部分,使得畫出的線具有碰撞盒,可以實現(xiàn)剛體碰撞。
** 2.1 畫線操作的設計
開發(fā)過程中發(fā)現(xiàn),實際操作中并非需要對每個點都進行存儲,因為項目實際運行時應該是在觸摸屏幕上運行的,而此時所需要的最小的長度單位應該是手指的寬度,而非屏幕像素中的每個點。所以在畫線過程中并沒有存儲鼠標動作的每一個點,而是采用線段代替點作為畫線過程中的最小長度單位,不需要將鼠標遍歷過的所有的點都進行存儲,而是僅僅存儲滿足條件的線段的起點和終點,并存儲在結(jié)構體內(nèi),建立與之相對應的對象并將結(jié)構體存儲在鏈表中。這樣做有幾個好處。
(1)由存儲點變?yōu)榇鎯€段,顯然是減小了存儲的壓力,提升了程序性能。
(2)方便管理。并非將每個點都存進鏈表,而是利用有限的線段代替,每個線段對應一個對象,根據(jù)對象添加碰撞盒,減小了添加碰撞盒的難度。
(3)方便刪除。在刪除操作時,并不需要考慮每次刪除的點在鏈表中的什么位置,
而是僅僅知道刪除的點在哪條線段上,直接將該線段刪除,并刪除對象即可。
(4)設計的常量可以隨時變更,更加靈活,以便適應更多的環(huán)境要求。這種用線段代替點的算法是項目相對于已有的系統(tǒng)的創(chuàng)新點之一。
畫線算法基本流程如圖1所示。

圖1 畫線算法基本流程
** 2.2 刪除操作的實現(xiàn)
刪除操作是該項目中的又一個重點,也是難點。項目在實際運行中,不可能因為某次畫線出現(xiàn)錯誤而重新啟動項目并且重新畫線。作為娛樂、展示的項目的,其操作人員并非都是專業(yè)人士,所以一定要有類似刪除、重做等容錯功能。這就使得刪除操作必須存在。
在刪除操作時,首先需要尋找要刪除的點在哪個對象中,這部分是調(diào)用C#內(nèi)部函數(shù)處理的。
刪除操作算法流程如圖2所示。
[圖片上傳中。。。(4)]
** 2.3 碰撞設計
碰撞由碰撞檢測、速度調(diào)整、位置調(diào)整3個部分組成。該研究中碰撞分為粒子間碰撞、粒子和所畫線段之間的碰撞兩部分。對于粒子間的碰撞,需要進行碰撞檢測,根據(jù)牛頓第二定律調(diào)整速度,進而調(diào)整粒子位置。而對于粒子和所畫線段的對象之間的碰撞,僅需要在檢測之后調(diào)整粒子的速度和位置即可,線段對象不發(fā)生形變和位移。實現(xiàn)方法是實現(xiàn)水流的同時為粒子系統(tǒng)中的所有粒子添加碰撞盒,使其能夠具有真實水流的物理特性。畫線的同時為所畫的線段添加碰撞盒。使其在與水滴碰撞的同時發(fā)生剛體碰撞,實現(xiàn)阻擋、改變水流流向的目的。碰撞盒的大小是根據(jù)畫線過程中每個對象的長短來確定的,以保證運行時所畫的線可以完全阻擋水流。
** 2.4 成果展示
基于[Unity
3D的水流墻系統(tǒng)已經(jīng)實現(xiàn),圖3分別為系統(tǒng)運行時的靜態(tài)圖、系統(tǒng)開始時水流流出圖、采用畫筆畫線改變水流流向圖、采用橡皮擦擦除線段圖。如圖3所示,系統(tǒng)要求已經(jīng)基本達到,并可以隨時進行發(fā)布。
[圖片上傳中。。。(5)]
** 3 結(jié)語
基于[Unity
3D的水流墻系統(tǒng)的設計,采用SPH算法對粒子系統(tǒng)加以控制,使其能夠達到模擬真實水流的效果。真實地模擬了水流的視覺效果和物理特性。利用C#語言編寫的畫線代碼可以完美地在屏幕上畫線改變水流的路線。該項目成果可大量發(fā)布于Windows、Android、IOS、Linux等多系統(tǒng)中供用戶進行體驗,并且對硬件需求不高,一般配置都可以完美運行,無需綁定硬件,使用戶可以得到更真實、更全面、更方便的體驗效果。
** 參考文獻
[1]趙沁平.[虛擬現(xiàn)實
綜述[J].中國科學F輯:信息科學,2009,39(1):2,46.
[2]邱建松.基于[Unity
3D的實時虛擬仿真系統(tǒng)的研究與實現(xiàn)[J].電子制作,2012(12):15
[3]倪樂波,戚鵬,遇麗娜,等.[Unity
3d產(chǎn)品虛擬展示技術的研究與應用[J].數(shù)字技術與應用,2010(9):54-55.
[4]陳曉青,王少偉.基于[Unity
的[虛擬現(xiàn)實
技術在教育中的應用[J].軟件導刊(教育技術),2012(12):76-78.
[5]吳繼承,江南.[虛擬現(xiàn)實
中粒子系統(tǒng)的設計與應用[J].計算機仿真,2005,21(11):137-140.
[6]王功明,郭新宇,趙春江.粒子系統(tǒng)的優(yōu)化技術研究[J].計算機應用研究,2008,25(2):495-497,500.
[7]熊耀.基于[Unity
3D粒子系統(tǒng)的三維影視特效開發(fā)研究[J].軟件導刊,2012,11(11):134-136.
[8]金阿芳,買買提明·艾尼.論光滑粒子流體動力學(SPH)方法[J].新疆大學學報:自然科學版,2006,23(2):188-193.
[9]李會珍.采用SPH方法的拉格朗日方式流體運動模擬[D].合肥:安徽大學,2013.
[10]鄭興.光滑質(zhì)點流體動力學(SPH)算法研究[D].哈爾濱:哈爾濱工程大學,2005.
[11]何水艷,丁沂.粒子系統(tǒng)與碰撞檢測的研究[J].輕工科技,2012(6)