pep8代碼格式化 可使用yapfhtml
導出gif文件spring
節點隨着材質一塊兒動,每一個節點是一個sensor數據結構
通常是粒子app
每一個節點都是固定不動的,是still sensor that never moveide
穿過個人材料速度是多少函數
歐拉里的格點的位置是不用記的,而歐拉的點位置要記錄oop
stiffness 硬度 對抗變形的能力,胡克定律的k優化
damping 阻尼 小了會不停的晃動 通常是給彈簧加dampingui
胡克定律 + 牛頓第二定律spa
常微分方程
計算機的積分,時間是離散的,須要取一個dt ,大一點算的快可是會有不穩定的問題
dt內速度和質量都是常數,前兩個的區別是預測位移時使用的速度不同,後者有一些守恆的性質
back Euler+牛頓方法 獲得隱式歐拉
一、計算力和速度
二、處理碰撞
三、處理位移
顯式積分的將來只取決於過去,
易於實現,容易爆炸(對dt),對比較硬的材料不是很適合
爆炸:計算偏差沒法隨時間衰減,而是隨時間爆炸性增加
有數值穩定性的約束
後向歐拉 隱式時間積分,將來取決於過去和將來,雞蛋問題,每個timestep變昂貴,難實現,難優化,timestep能夠更大
有好處也有壞處
f(x)通常是非線性的,若是有非線性方程就比較難解,轉換成線性的方程
線性化用到了一階泰勒展開
解線性系統
jacobi 迭代 最簡單
gauss-seidel 迭代 更快
共軛梯度
最後一個錯了 B = 1
求矩陣的逆是很是昂貴的操做,大的矩陣不推薦求逆
有很是多的粒子怎麼辦?
一堆粒子攜帶物理量,使用核函數近似一個連續的場
在x這一點,物理場的值用核函數去求周圍的粒子的做用,接近這個粒子的貢獻的多,遠離這個粒子的貢獻少
速度、density、pressure
一開始是用來模擬天體物理
優勢:不須要mesh,自由表面(水和空氣的有明確的表面,煙霧是分散於空氣中的沒有明確的表面),每個粒子是一滴水,而後被其餘水滴做用
WCSPH weekly compressible SPH 可壓縮的流體模擬(入門)
Dv稱爲材料倒數,跟着粒子動的倒數,和小d不一樣
壓強梯度除密度爲內力,g爲外力,v就是速度了
壓強的表示,狀態方程
B:bulk modulus \(\rho_0\)是一個理想密度,密度很大壓強就很大,壓強很高就會嘗試推着周圍的粒子離開本身
粒子的\(\rho\)是就算周圍的粒子的質量加權來算的
A計算每個粒子的所在位置的物理量的多少,任意的粒子物理屬性,一個加權平均,應該把它看作一條公式
算梯度的多方法,sph作的不是很好
計算通用屬性的公式:
SPH也能夠比較方便的加表面張力加粘度
SPH計算:
一、對每一個粒子計算它所在位置的密度
二、對每一個粒子計算它的壓強梯度,進而獲得它的Dv/Dt
三、Symplectic Euler Step
有不少的變種
PCI - SPH 有隱式的SPH,但不徹底是隱式的,有預測的作法,不斷的校訂
Position-based fluid PBF 實時的PBD + SPH 的模擬流體的方法
Divergence-free SPH 指的是速度場無分離,接近一種不可壓縮流體的方法
顯示時間積分的條件
從材料剛度有考慮時間步長限制
從粒子運動速度來考慮時間步長限制
各模擬都要遵循這個條件,咱們要取這個Cmax
須要加速SPH,時間複雜度O(n^2)n可能達到百萬
實際中咱們會使用一些特殊的數據結構(voxel grid)來加速對相鄰的粒子的search達到複雜度O(n)
對每個粒子要精確的找到和他比較近的全部粒子 只要loop比較近的粒子,維護一個grid,每個格子維護本身內部有哪些粒子,每次咱們要尋找周圍的粒子時先找本身格子和本身周圍必定距離格子,而後遍歷這些格子維護的粒子
還有不少其餘的加速方法
SPH論文:
R. A. Gingold and J. J. Monaghan (1977). 「Smoothed particle hydrodynamics: theory and application to non-spherical stars」. In: Monthly notices of the royal astronomical society 181.3, pp. 375–389.
J. J. Monaghan (1994). 「Simulating free surface flows with SPH」. In: Journal of computational physics 110.2, pp. 399–406.
其餘的粒子法:
DEM discrete element method 每個粒子都是一個剛體小球,能夠模擬沙子
MPS moveing particle semi-implicit
PP power particle
https://taichi.readthedocs.io/en/latest/export_results.html#export-your-results
解線性系統聯立求解就是強耦合
先解流體而後把流體做爲剛體的邊界條件解剛體,而後把解出來的剛體做爲邊界條件解流體
SPH有一個很好模擬各類介質的耦合,流體、彈性物體、剛體
marching cube
隊伍格子上面的點去算一下他的密度,而後嘗試畫出他的值爲0的一個等勢面,等勢面就是用三角網格去近似的
有不少種狀況,這裏給了14種
marching cube 有 不少的預處理 smooth操做
openVDB 有smooth operator
先把粒子光柵化到一個背景網格上,而後背景網格上作一個根據距離場的圓滑或者尖銳,獲得一個density field而後就可使用marching cube
實時應用:屏幕空間渲染,一種近似,但鏡頭動的比較大就比較麻煩