【計算機圖形】Physics-Based Animation-小8君的專欄
使用粒子法模擬水流時,水流表面的生成主要分成如下兩部分。
表面隱函式
- Muller的色彩函式 [1]
- Zhu and Bridson的方法 [2]
- Adams等的方法 [3]
- Anisotropic Kernel [4]
- Upsampling法 [5]
生成網格(Mesh)
- Marching Cubes(MC) [6]
- Regularised marching tetrahedra(RMT) [7]
- Screen Space Mesh [8], [9]
各向異性核心函式(Anisotropic kernel)
從粒子中生成隱函式的時候,使用下式這樣的平滑化核心函式。
其中,是換算係數,是模擬的次元數, 是local support(距離變遠時值平滑減小)的對稱函式。 這個定義類似於所謂的元球技術(Metaball), 生成的表面呈凹凸不平狀(下圖左)。像這樣的表面我們稱為blobby面。
為了改進blobby的表面形狀,Yu等人[10] 匯入了各向異性核心(anisotropic kernel)來取代之前的各向同性核心。 也就是,使用正定矩陣來代替,
此時,矩陣中包含了旋轉和伸縮變換,並且使用橢圓來取代球形狀。通過把法線方向設定成橢圓短軸所在的方向,可以得到下圖右側這樣平滑且邊緣清晰的表面。另外,為了消除靠近表面粒子的不規則分佈,也將粒子位置的關聯函式進行平滑化處理,計算更新後位置
(左) 各向同性核心,(右)各向異性核心的表面 |
下面我們對參考文獻[10]的,的計算方法進行詳細說明。
粒子位置的更新
為了修正不規則的粒子的位置,使用下面的Laplacian平滑處理來更新粒子的中心座標。
是常數項,[10]中推薦使用0.9~1之間的值。這裡的 是加權函式,計算如下
這裡的加權函式通過計算協方差矩陣來計算各向異性。 為了能較為準確的計算各向異性,需要包含較多的流體粒子,因此上式中的有效半徑設定為流體模擬用的有效半徑的2倍大小。
另外,這裡的僅用於表面的生成,而非流體模擬處理。
因此,更新前的位置
協方差矩陣的計算
為了得到,這裡使用加權主成分分析法(WPCA:Weighted Principal Component Analysis)[11]進行計算。 主成分分析(PCA)是一種常用於影象識別領域的資料解析手法,可以根據分散資料的特徵值生成新的座標軸(主軸)以減少資料量。WPCA是在PCA中增加了各個資料的加權,可以更好的處理異常點(outlier)或噪音。
在WPCA法中,我們首先計算各資料點的權重,然後根據權重求出其協方差矩陣(covariance matrix), 最後,對進行特徵值分析求得特徵值,並把具有較大特徵值所在的特徵向量設定為新的主軸。最後,從WPCA所得結果中計算。
首先,計算加權後的平均位置。
指粒子的臨近粒子的中心。 通過使用權重,可以極大的減少距離很遠的異常點的影響。
通過從到周圍的各臨近粒子的位置的向量的積,計算協方差矩陣。
這裡使用的加權函式與粒子位置更新時所使用的相同。
協方差矩陣特徵值分解
為了得到橢圓的伸縮方向,我們將協方差矩陣進行特徵值分解,計算特徵值和特徵向量。
是各列特徵向量的旋轉矩陣,是對角矩陣。為了應對大幅度變形或者臨近粒子很少的孤立粒子等情況,我們進行如下處理來修正。
- 檢查特徵值防止大幅度變形發生。先把特徵值從大到小排列, 當出現滿足的時,使用替換()。
- 檢查臨近粒子數,找出孤立粒子。如果臨近粒子數比小時,讓。這裡的是單位矩陣,是控制核心大小的引數。
- 臨近粒子全在的情況下,為了保持體積一定, 匯入滿足的。 此時,修正後的協方差矩陣如下所示。
這裡的。參考文獻[11]中,使用的。
計算G
是的逆矩陣乘以後的結果。
結果圖
這裡使用和【CG物理模擬系列】流體模擬--粒子法之SPH(實現)中類似場景,粒子數約25,000,網格化(MC法)的網格解析度是256x103x103。
首先,應用協方差矩陣,把粒子當作橢圓體的繪圖結果如下。
左是各向異性核心,右是各向同性核心的結果 |
去掉網格面,使用GLSL繪製的折射面結果如下。
左是各向異性核心,右是各向同性核心的結果 |
使用各向異性核心後的表面,不僅表面變得更加圓滑,也很好的再現了黏附在兩側牆壁上的薄層水膜。具體如下所示。
左是各向異性核心,右是各向同性核心的結果 |
放大後如下。
左是各向異性核心,右是各向同性核心的結果 |
去掉網格面,使用GLSL繪製的折射面結果如下。
左是各向異性核心,右是各向同性核心的結果 |
大致計算時間,SPH計算:5ms/frame,各向異性核心中G的計算:10ms/frame,應用各向異性後網格化耗時:145ms/frame(以前的各向同性核心是15ms/frame)。這裡的SPH的計算,各向異性核心的計算,和MC法網格化都是在GeForceGTX580顯示卡上,使用CUDA在GPU上測試得出的結果。
直接繪製粒子時,各向同性核心使用了Point Sprite,而各向異性核心則使用glutSolidSphere繪製橢圓。因此,繪製時間較久(我的環境下各向同性核心耗時85ms/frame,Point Sprite各向同性核心15ms/frame)。
參考文獻
[1]M. Muller, D. Charypar and M. Gross, Particle-based Fluid Simulation for Interactive Applications, Proc. SCA2003, pp.154-159, 2003.
[2]Y. Zhu and R. Bridson, Animating sand as a fluid, Proc. SIGGRAPH 2005, pp.965-971, 2005.
[3] B. Adams, M. Pauly, R. Keiser and L. J. Guibas, Adaptively sampled particle fluids, Proc. SIGGRAPH2007, 48, 2007.
[4] J. Yu and G. Turk, Reconstructing Surfaces of Particle-Based Fluids Using Anisotropic Kernels, In Proceedings of the 2010 ACM SIGGRAPH/Eurographics symposium on Computer animation, 2010.
[5] B. Solenthaler, Y. Zhang and R. Pajarola, Efficient Refinement of Dynamic Point Data, Proc. Eurographics/IEEE VGTC Symposium on Point-Based Graphics, 2007.
[6] W. E. Lorensen and H. E. Cline, Marching cubes: a high resolution 3D surface construction algorithm, Computer Graphics (Proc. SIGGRAPH '87), 21, 163-169, 1987.
[7] G. M. Treece, R. W. Prager and A. H. Gee, Regularised marching tetrahedra: improved isosurface extraction, Computers and Graphics, 23, pp.583-598, 1999.
[8] M. Muller, S. Schirm and S. Duthaler, Screen space meshes, Proc. SCA2007, pp.9-15, 2007.
[9] W. J. van der Laan, S. Green and M. Sainz, Screen space fluid rendering with curvature flow, Proc. 2009 symposium on Interactive 3D graphics and games, pp.91-98, 2009.
[10] J. Yu and G. Turk, Reconstructing Surfaces of Particle-Based Fluids Using Anisotropic Kernels, In Proceedings of the 2010 ACM SIGGRAPH/Eurographics symposium on Computer animation, 2010.
[11] Y. Koren and L. Carmel, Visualization of labeled data using linear transformations, In Proceedings of IEEE Information Visualization, 2003.