Przeglądaj źródła

feat: 新增带场的粒子模拟

liucong5 2 lat temu
rodzic
commit
ee9ad04164

BIN
UE5/Niagara/Gif/_006.gif


BIN
UE5/Niagara/Gif/_007.gif


BIN
UE5/Niagara/Image/031.png


BIN
UE5/Niagara/Image/032.png


BIN
UE5/Niagara/Image/033.png


BIN
UE5/Niagara/Image/034.png


BIN
UE5/Niagara/Image/035.png


BIN
UE5/Niagara/Image/036.png


BIN
UE5/Niagara/Image/037.png


BIN
UE5/Niagara/Image/038.png


BIN
UE5/Niagara/Image/039.png


BIN
UE5/Niagara/Image/040.png


BIN
UE5/Niagara/Image/041.png


BIN
UE5/Niagara/Image/042.png


BIN
UE5/Niagara/Image/043.png


+ 78 - 0
UE5/Niagara/README.md

@@ -248,3 +248,81 @@ GPU 模拟需要设置 `Fixed Bounds` 的原因是,由于粒子模拟是在 GP
 
 从上面的表现来过,伪随机每次得到的表现效果相同,真随机每次表现都不相同
 
+![](Gif/_006.gif)
+
+接下来要实现入上图所示的粒子效果
+
+这里要用到一个重要的节点 `Curl Noise Force`
+
+`Curl Noise Force` 是一个用来给粒子添加随机扰动力的模块,它可以模拟流体、烟雾、火焰等效果。`Curl Noise Force` 的原理是使用卷曲噪声场(`Curl Noise Field`)来计算粒子的加速度,卷曲噪声场是一种具有无散性和无旋性的噪声场,它可以避免粒子聚集或分散,保持流体的连续性
+
+![](Image/031.png)
+
+| 参数 | 作用 |
+| --- | --- |
+| Noise Frequency | 此参数决定卷曲噪声场的频率,值越大,噪声场的频率越高,粒子的扰动力越强 | 
+| Noise Strength | 此参数决定卷曲噪声场的强度,值越大,粒子的加速度越大,运动越快 | 
+| Pan Noise Field | 此参数决定卷曲噪声场是否随时间变化,值越大,噪声场的变化速度越快,粒子的运动越不规则 | 
+| Randomization Vector | 此参数决定卷曲噪声场的随机向量,它会与随机种子相乘,影响噪声场的方向和形状 | 
+| Random Seed | 此参数决定卷曲噪声场的随机种子,它会与随机向量相乘,影响噪声场的方向和形状 | 
+
+`Curl Noise Force` 是一个向量场,就是所有的粒子都有一个特定的力的方向,只要在这个场的区域内
+
+> 具体概念只能自行了解,解释不清…
+
+因为生成粒子要在一个球形范围内,所以需要添加 `Shape Location`,表示在一个 `Shape` 的范围内生成
+
+![](Image/032.png)
+
+通过上图设置,粒子会在一个半径为 10 的球形范围内生成
+
+| 添加前 | 添加后 |
+| --- | --- |
+| ![](Image/034.png) | ![](Image/035.png) |
+
+由于单纯应用向量场导致最后粒子飘的过于散开,可以添加 `Drag` 节点来给粒子添加一个阻力
+
+![](Image/033.png)
+
+> 将**阻力**直接应用于粒子速度和/或旋转速度,而与**质量**无关
+
+| 添加前 | 添加后 |
+| --- | --- |
+| ![](Image/036.png) | ![](Image/037.png) |
+
+**生成粒子** 除了使用 `Spawn Rate` 之外还可以使用 `Spawn Burst Instantaneous` 来瞬间爆发性产生指定数量的粒子
+
+![](Image/038.png)
+
+上图表示在一开始第 0 秒的时候直接生成 3600 个粒子
+
+![](Image/039.png)
+
+最后给粒子添加上一个随时间变化的颜色曲线
+
+此时得到的效果与目标效果还是存在一定差距,因为此时粒子最后会四散分开,而目标效果的粒子似乎被**某个点吸引**会有一个返回的效果
+
+所以此时需要添加一个 `Point Attraction Force` 
+
+![](Image/040.png)
+
+`Point Attraction Force` 是一个用来给粒子添加一个指向某个点的吸引力的模块,它可以模拟重力、磁力、吸引或排斥等效果
+
+| 属性 | 作用 |
+| --- | --- | 
+| Attraction Strength |  此参数决定吸引力的强度,值越大,粒子受到的吸引力越大,运动越快| 
+| Attraction Radius |  此参数决定吸引力的有效半径,只有在这个半径内的粒子才会受到吸引力的影响| 
+| Falloff Exponent |  可以调节粒子受到的吸引力的大小和分布,影响粒子的运动轨迹和形态。值越大,吸引力随着距离的增加而下降得越快,粒子越容易聚集在吸引点附近;值越小,吸引力随着距离的增加而下降得越慢,粒子越容易分散在吸引点周围| 
+| Kill Radius |  用来限制粒子生存范围的属性,它表示粒子距离吸引点的最小距离,如果粒子进入这个距离内,就会被杀死,可以控制粒子的数量和分布,避免粒子过多或过密地聚集在吸引点附近,造成性能下降或视觉效果不佳 | 
+| Attractor Position | 吸引的点的坐标 |
+| Attractor Position Offset |  吸引的位置偏移 | 
+
+最后就可以得到目标效果了
+
+![](Gif/_007.gif)
+
+| 使用 CPU 模拟 | 使用 GPU 模拟 |
+| --- | --- |
+| ![](Image/042.png) | ![](Image/043.png) |
+| 更新平均耗时 1.04ms | 更新平均耗时 0.04ms |
+