HMS Core 3D流體模擬技術,打造移動端PC級流體動效

語言: CN / TW / HK

移動裝置硬體的高速發展,讓遊戲行業發生翻天覆地的變化,許多酷炫的遊戲效果不再侷限於電腦端,玩家在移動端就能享受到場景更逼真、畫質更清晰、體驗更流暢的遊戲服務。但由於移動裝置算力不足,為了實現真實感的水體效果,很多遊戲廠商採用預計算的方法減少實時模擬的計算開銷,但水體場景在移動端的流體效果仍然不佳。

真實感水體的模擬一直是圖形學和遊戲開發領域的難點問題,對硬體算力要求也很高,因此大多數真實的水體模擬場景只出現在PC和主機遊戲中。為了解決移動端水體流動真實感的問題,提升開發者應用開發的效率,HMS Core圖形引擎服務(Scene Kit)推出了3D流體模擬技術,有效解決3D流體動效在移動裝置上的實時性和功耗的問題。

%E5%B1%B1%E6%B0%B4%E5%8A%A8%E5%9B%BEgif.gif

3D流體模擬技術

流體力學中流體的運動可以用偏微分方程表示,該方程稱為納維-斯托克斯(NS)方程,如公式(1)所示

1.png

(1)該方程描述了流體動量變化與流體內部的壓力(1ρ∇p)、粘滯力(ν∇⋅∇u)以及重力( g)之間的關係。流體力學中對流體運動有拉格朗日和尤拉兩種描述方法,拉格朗日描述用粒子方式對流體建模,每個粒子上攜帶流體的狀態資訊在空間中流動;尤拉描述把模擬區域劃為空間中的網格,每個網格上儲存流過該位置的流體的狀態資訊。如圖2所示。

%E5%9B%BE2-%E6%AC%A7%E6%8B%89%E6%8F%8F%E8%BF%B0%E4%B8%8E%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E6%8F%8F%E8%BF%B0.png

圖2 尤拉描述與拉格朗日描述

模擬真實的流體效果需要大量的粒子或者網格,數量可達到十萬、百萬級別,但使用CPU序列計算的方式模擬需要幾秒才能完成一幀資料的計算,無法滿足實時性要求。而GPU在高效能平行計算領域有著巨大優勢,因此在HMS Core圖形引擎服務中,我們利用GPU加速技術在移動裝置上實現流體模擬。

不過,僅通過GPU硬體加速不能完全滿足移動裝置上流體實時模擬的要求,還需要提升GPU的執行效率,以及減少模擬的計算量,從而降低GPU的負載以及頻寬的使用,避免高負荷高頻寬執行導致的裝置發燙等體驗問題。在流體運動的兩種描述方法中,拉格朗日方法由於粒子狀態受周圍其它粒子的影響,計算時需要先搜尋鄰域粒子,這個過程對平行計算不夠友好,難以發揮平行計算的優勢。而尤拉描述中的每個網格狀態資料的計算過程都是相同的,更適合平行計算。因此為了提升GPU的並行效率,HMS Core圖形引擎服務採用尤拉方法進行流體模擬。

採用尤拉方法構建流體模型,先將模擬區域劃分成均勻的網格,構造出流體的速度場、密度場等資料。如圖3所示。

%E5%9B%BE3-%E7%BA%A2%E7%82%B9%E8%A1%A8%E7%A4%BA%E2%80%A6%E2%80%A6%E6%95%B0%E6%8D%AE.png

圖3 紅點表示密度、壓強資料的儲存位置,紅色箭頭表示速度場資料

黑色網格是密度場網格,速度場網格在密度場網格基礎上沿x、y方向進行半個網格偏移(藍色網格),密度儲存在密度場網格中心點,速度場資料儲存在密度場網格頂點上,同時也是速度場網格中心點,這種形式可以很方便的實現中心差分計算,實際計算時需要將速度場按維度拆分。再引入有向距離場(SDF)資料描述流體的邊界,實現流體與邊界的碰撞效果。如圖4所示。

%E5%9B%BE4-%E5%AF%86%E5%BA%A6%E5%9C%BA%E2%80%A6%E2%80%A6.png

圖4 密度場網格,棕色區域表示固體邊界,藍色區域表示流體,白色區域表示空氣。

在流體模型構建完成後,再利用前面提到的納維-斯托克斯(NS)方程進行模擬計算,計算過程包括求解重力、壓強、粘度、對流4步,分別對應公式(1)中等號右邊的四項。

壓強和粘度求解過程複雜,通過大量優化將求解過程簡化為線性方程組的求解,從而降低計算複雜度,減少計算量。方程組求解採用快速收斂的解法,同時進行精度取捨從而降低計算開銷。資料儲存格式的優化,也達到降低GPU頻寬使用、提高GPU cache命中率的效果。

求解對流項時,需要考慮流體與固體邊界的碰撞,圖形引擎服務採用一種統一建模的方式描述空氣、流體、固體網格,如圖5所示。

%E5%9B%BE5-%E7%BA%A2%E8%89%B2%25.png

圖5紅色表示在邊界外部,灰色區域表示邊界,綠色區域表示邊界內部

這樣在計算時可以統一處理全部網格,無需對流體、固體區域分別計算,可以減少計算邏輯,提升GPU執行緒的執行效率。

通過以上多種技術方法,HMS Core圖形引擎服務實現了GPU執行效率的提升以及流體模擬計算量的降低,從而在移動裝置上實現了較低功耗的3D流體實時模擬。再結合圖形渲染的其他能力,最終在移動裝置上能夠實現3D流體的流動、飛濺、反射、折射等效果,讓使用者手機不發燙,還能擁有實時流暢的流體體驗。

3D流體模擬技術來自華為2012實驗室,通過HMS Core圖形引擎服務向開發者開放。HMS Core圖形引擎服務致力於為開發者提供高效能、低功耗的引擎服務,幫助開發者製作高品質的3D應用,賦能更多應用走入數字世界。

其他更多關於HMS Core圖形引擎服務的資訊,請訪問華為開發者聯盟-HMS Core圖形引擎服務官網