PBD粒子构造
PBD算法的第一步就是需要考虑如何根据目标的形态去构建粒子,在考虑目标形态构建的第一步,则需要思考,本算法应该如何去运行,一般来说运行方式有如下几种模式
- GPU运行:并行效率最高,但是要考虑回调消耗
- CPU并行:并行效率次高,但是要考虑如何合适的任务分配,以及回调
- 单线程处理:编写效率最编写,这样可以考虑利用高级语言增加粒子扩展性,粒子数大则运行效率低下
此外根据目标的形态(如布料Cloth、柔体Softbody、绳索Rope)以及效果目标(考虑碰撞Collider、稳定性(考虑运行积分)),也会拥有不同的参数去实现,
基本粒子参数
回顾前文对运行逻辑的分析,https://www.mustenaka.cn/index.php/2023/09/14/pbd-method-learn-02/,一般来说,构造一个稳定的粒子系统,最适合是使用Verlet积分进行迭代,verlet积分则需要考虑,上一时刻位置、当前位置、下一时刻位置。当前局部粒子的质量、局部粒子的受力情况,是否有一些特殊处理(比如附着Pin/Attachement),如下,是一段粒子核心参考代码实现。
/// <summary>
/// The base type of the particle type,
/// if you need to extend the build, please inherit this module
/// </summary>
[System.Serializable]
public class ApexParticleBase
{
/* position, serialize nowPosition */
public Vector3 previousPosition;
public Vector3 nowPosition;
public Vector3 nextPosition;
/* scale equal transform.TransLocalScale */
public Vector3 scale;
/* Index of the particle array */
public int index;
/* True - this particle nextPosition will not apply nowPosition */
public bool isStatic;
/* physic param */
public Vector3 forceExt; // calc physic
public Vector3 forceApply; // apply physic
public float mass;
}
在这段代码中,虽然粒子的组成使用数组活着列表组装,但是我还是认为需要给粒子的索引进行一个编号(index),以及粒子的缩放情况需要和引擎的localScale进行对齐,顾额外考虑了Scale和index参数。
Rope(绳索)
Rope的构建方式,首先需要分析绳索的特点,一般而言,绳索的模拟,是有一个粒子直接相邻另一个粒子的构成的一个较为有序的链式结构
MutilRope(多叉式绳索)
Cloth(布料)
Softbody(柔体)
【未完待续】
0 条评论