本發明屬于計算機圖形學和計算流體力學,尤其涉及一種基于網格的實時流體模擬特效生成方法和系統。
背景技術:
1、近年來,特效在影視動畫與游戲中的應用變得越來越廣泛且專業化,同時流體模擬特效逐漸嶄露頭角,成為備受關注的熱門研究領域。作為自然界中常見且重要的組成部分,流體模擬特效在影視動畫與游戲的運用日益增加。通過流體模擬生成的流體行為和粒子特效,不僅能夠為虛擬場景增添逼真的細節,還能夠更生動地渲染環境氛圍,提升整體視覺效果和沉浸感。
2、基于物理模擬的流體按照其空間離散化的不同方式主要分為兩大類:歐拉法與拉格朗日法。歐拉法將流體空間離散化為網格,通過求解控制方程對網格上的物理量進行計算,來模擬流體的運動;拉格朗日法將流體看作由大量粒子組成的系統,通過計算每個粒子的運動狀態和受力情況來模擬流體的運動。但是基于物理的流體模擬特效有著巨大的計算成本,因此它一直是高質量離線渲染的領域,在游戲等實時渲染領域很難看到。因此設計運算效率更高的算法是非常有必要的。
3、同時,流體模擬特效的實際應用除了在外觀上要逼真外,還需要模擬出復雜流體特效的一些交互行為,自然界中的流體現象往往具有極其復雜且多樣化的運動規律。歐拉法通過對流體所在的空間進行網格化,將流體的基本單元定義為每個網格上的固定點。在這種方法中,流體的速度、壓強和密度等物理參數定義在這些固定點上,并隨著時間的變化體現流體的整體運動;而拉格朗日法則將流體看作由多個微小的流體單元(微團)構成,每個微團都具有隨著時間變化的速度、壓強和密度等特性。當一個微團移動到其他位置時,其屬性也隨之發生變化,表現出流體的動態變化。雖然拉格朗日法的表達方式較為直觀,不需要處理整個空間,容易保證質量守恒,但隨著粒子數量的增加,計算量會迅速增長,且需要復雜的算法來構建表面。而歐拉法的推導過程較為嚴謹,能夠提供較高的求解精度,且參數的物理意義清晰,在模擬煙霧、火焰等特效時,效果更好。但歐拉法的迭代計算會影響算法的并行性,降低運算效率。
4、基于歐拉網格的流體模擬特效通常使用三維紋理存儲空間來表示流體的速度場與密度場,盡管這種方法能夠實現較為精確的流體效果,但在移動端這種帶寬有限的設備上,三維紋理的采樣會對性能造成較大壓力。同時,流體模擬過程中需要使用計算著色器(compute?shader)來對三維紋理進行操作,而安卓平臺對于計算著色器的支持存在差異,部分設備的兼容性較差,這也成為了一個需要關注的不穩定因素。
5、綜上所述,一方面,傳統的流體特效制作依賴于特效師的逐幀手繪,這不僅工作量巨大,還難以實現高精度的效果。
6、另一方面,基于物理的流體模擬特效有著巨大的計算成本,在離線渲染領域非常突出,但在游戲等實時領域缺乏應用。同時,相較于拉格朗日法在模擬特效時表現更好的歐拉網格法存在迭代計算影響算法的并行性等問題,且傳統的歐拉網格流體模擬特效的實現方法在移動端存在著性能與兼容性問題。
技術實現思路
1、針對上述現有技術的不足,本發明提供一種基于網格的實時流體模擬特效生成方法和系統,能夠提供一種高性能的流體模擬特效,提升整體的視覺效果,滿足在移動端的實時應用。
2、本發明第一方面提供一種基于網格的實時流體模擬特效生成方法,包括如下步驟:
3、構建存儲資產;所述存儲資產用于創建紋理,并執行紋理內存的實際分配和管理;所述紋理存儲流體狀態;
4、構建容器并指定容器的朝向方向;所述容器用于設置流體的物理特性并將物理特性的值傳入到流體求解器中進行計算;
5、基于構建的存儲資產和容器,進行基于網格法的流體模擬,得到更新的流體的速度和密度;
6、根據更新的流體的速度和密度,實現流體特效的渲染。
7、進一步地,所述紋理包括密度紋理與速度紋理,所述密度紋理存儲單通道的密度值,所述速度紋理存儲速度的x分量和y分量、散度和壓力;
8、所述構建存儲資產的方法,具體為:創建一個配置文件,定義存儲資產可分配的最大紋理內存容量以及密度紋理和速度紋理的格式,構建得到存儲資產,確保使用此存儲資產的所有流體求解器的內存總消耗量不會超過用戶定義的存儲資產可分配的最大紋理內存容量,同時在超出存儲資產可分配的最大紋理內存容量時重新創建密度紋理與速度紋理。
9、進一步地,所述流體的物理特性包括外力、湍流、粘度、浮力、重力和流體的邊界情況;
10、所述流體的邊界情況有三種,包括:
11、允許流體流過容器邊界但不允許從對邊流出、不允許流體流過容器邊界和允許流體流過容器邊界,并允許從對邊流出。
12、進一步地,所述基于構建的存儲資產和容器,進行基于網格法的流體模擬,得到更新的流體的速度和密度,具體為:
13、a1:獲取流體初始的速度值和密度值,并利用獲取的流體初始的速度值和密度值更新存儲資產的密度紋理和速度紋理中的速度和密度;
14、a2:計算流體的每個像素點的耗散、旋轉度與密度的梯度,并根據耗散更新存儲資產的密度紋理中的密度;
15、計算旋轉度,首先根據用戶定義的邊界情況來采樣鄰居像素的速度:
16、對于允許流體流過容器邊界但不允許從對邊流出這種情況,采樣時不考慮對邊流過來的流體,只采樣鄰居像素的速度;
17、對于不允許流體流過容器邊界這種情況采樣時考慮在邊界的流體由于無法通過邊界對自身造成的影響,即在采樣時,對于位于邊界的像素采樣自身速度的反轉及其鄰居像素的速度;
18、對于允許流體流過容器邊界,并允許從對邊流出,采樣時考慮對邊流過來的流體對自身造成的影響,即采樣鄰居像素的速度及位于相同行或列的對邊的第一個像素的速度;
19、然后,根據采樣的速度,計算旋轉度:
20、
21、其中,表示旋轉度,代表梯度,代表二維速度場,u是流體在x方向的速度分量,v是流體在y方向的速度分量,是v在x方向上的變化率,是u在y方向上的變化率;
22、所述密度的梯度通過采樣鄰居像素的密度值來進行計算;
23、a3:根據旋轉度與密度的梯度,確定每個像素點所受外力,并根據所受外力對存儲資產的速度紋理中的速度進行更新;所述外力包括表面張力、旋轉力、流體的內摩擦力、浮力和重力;
24、a4:計算每個像素點的散度;
25、首先根據用戶定義的邊界情況采樣鄰居像素的速度,然后根據采樣的鄰居像素的速度,計算散度:
26、
27、其中,表示散度;
28、a5:根據散度,利用可分離泊松求解器計算當前的壓力場;
29、所述可分離泊松求解器,根據給定的一個迭代次數,離線展開壓力遞推公式得到卷積核矩陣,采用矩陣的奇異值分解壓縮卷積核矩陣,將卷積核矩陣分解為一個行向量與一個列向量的外積,最后用分解得到的列向量和行向量作為濾波核,對存儲散度的速度紋理進行垂直和水平兩個方向的可分離濾波,得到壓力場;
30、對于可分離泊松求解器,其作為默認求解器或迭代求解器;
31、當可分離泊松求解器作為默認求解器時,直接用散度作為壓力的初始值,其次僅通過對鄰居像素的壓力值進行加權求和來計算壓力場,即離線展開壓力遞推公式(4)得到卷積核矩陣;
32、
33、其中,表示第k+1次迭代后,位于像素點(i,j)的壓力值;和表示在第k次迭代中,像素點(i,j)左右相鄰的像素點的壓力值;和表示在第k次迭代中,像素點(i,j)上下相鄰的像素點的壓力值;
34、當可分離泊松求解器作為迭代求解器時,使用上一幀的壓力值作為當前幀的壓力采樣值,然后對周圍像素的壓力采樣值進行加權求和,同時加入散度的影響來計算壓力場,即離線展開壓力遞推公式(5)得到卷積核矩陣;
35、
36、其中,l表示像素的寬度;divi,j表示速度場在像素點(i,j)處的散度;
37、a6:通過在當前的速度場上疊加得到的壓力場,更新流體的速度,得到當前幀更新的速度紋理與密度紋理。
38、進一步地,所述根據更新的流體的速度和密度,實現流體特效的渲染,具體為:
39、b1:采樣每幀流體模擬結束后得到的密度紋理與速度紋理,在容器上實現流體特效的可視化;
40、b2:為流體添加細節,同時把流體密度映射到漸變紋理上,通過漸變紋理結合不同的混合模式實現不同的效果。
41、本發明第二方面提供一種基于網格的實時流體模擬特效生成系統,用于實現所述的一種基于網格的實時流體模擬特效生成方法,包括:
42、存儲資產,用于創建紋理,并執行紋理內存的實際分配和管理;
43、容器,用于設置流體的物理特性并將這些物理特性的值傳入到流體求解器中進行計算,所述流體的物理特性包括外力、湍流、粘度、浮力、重力和流體的邊界情況;
44、流體模擬模塊,基于存儲資產,進行基于網格法的流體模擬,得到更新的流體的速度和密度;
45、渲染模塊,根據更新的流體的速度和密度,實現流體特效的渲染。
46、本發明第三方面提供一種電子設備,包括:處理器、存儲器和總線,所述存儲器存儲有所述處理器可執行的機器可讀指令,當電子設備運行時,所述處理器與所述存儲器之間通過總線通信,所述機器可讀指令被所述處理器執行時執行所述的一種基于網格的實時流體模擬特效生成方法的步驟。
47、本發明第四方面提供一種計算機可讀存儲介質,該計算機可讀存儲介質中存儲有計算機程序,該計算機程序被處理器運行時執行如所述的一種基于網格的實時流體模擬特效生成方法的步驟。
48、與現有技術相比較,本發明的有益效果為:
49、本發明以流體模擬算法為基礎,實現了在gpu上運行的流體模擬特效,同時流體模擬完全是在2d中進行,相較于傳統的特效實現方法有著顯著的運算速率提升,能夠滿足移動端產品的運行速率要求;求解壓力項時通過使用可分離泊松求解器來減少壓力項的迭代次數,加速流體模擬的投影步驟;通過實現三維外觀,再結合不同的混合模式實現火焰、拖尾等不同的效果,提升整體視覺效果。最終實現的流體模擬特效可以廣泛應用于電子游戲等領域;最后,通過自動更新紋理緩沖區來滿足流體模擬特效的內存預算。