UE4Niagara製作動態亮片
亮片的動態
https://www。zhihu。com/video/1527598995437842433
最近做了個這樣的東西,記錄一下自己的思路,順便分享一下。
取樣的骨骼網格點位置作為不動的位置,
沿副法線方向出去亮片的長度記錄亮片的位置,
加上重力和繩子拉力,
再根據位置判斷和本體網格碰撞的反作用力,
最後根據上面的各種情況解算下亮片的法線和朝向就行了。
niagara
在一開始,我預想中應該是單個片的行為,
所以嘗試透過根據重力和碰撞直接算出這單個片的法線和朝向,
而不是去做物理,應該能做到非常省效能。
後來算了半天
難度超乎想象
最後還是決定模擬一個位置,再用這個位置去結算片的朝向的法向。
Sample Mesh
spawn階段記錄下原位置,預設亮片的位置(先沿法線出來一些,紀錄下亮片上繩子的端點,不要跟網格面重疊了,再順切線移動一個長度距離),法線為亮片法向,切線為朝向。(這裡的副法線和切線可能需要根據不同模型的頂點座標去調整)。
Sample Mesh Updata
每幀更新粒子的位置和速度
Solver Gravity And Tension
粒子收到的重力和拉力
Mesh Collision
迴圈檢查模型碰撞
下面偷偷加了0。1是為了讓碰撞檢測範圍大點,不然上面的亮片一直會彈起
用一個值記錄是否在模型內部,如果點的位置發生改變就損失速度,達成趴在表面上的粒子就老老實實趴著的效果,但模型運動時又會恢復到正常運動的狀態。
順便在碰撞的時候把亮片的法線設定跟模型法線一致,避免出現穿模
Fix Physics
第一幀的時候不計算,把力量給到零,避免出現一開始就亂飛的效果
如果粒子位置被甩的太遠,超過了設定的閾值,就直接就近重新設定粒子的位置。
Solve Particle Facing
最後把兩個位置解算成粒子的朝向和法向就完成了。
材質沒啥好說的
比較強的反射光用假反射來實現
反射的圖