基于动画的布料模拟
在布料中埋几根骨骼,由动画驱动,角色移动时通过插值;
在移动端游戏中较为泛用;
基于RigidBody的布料模拟
通过几根动力学骨骼实现;
基于Mesh-based的布料模拟
不同于渲染Mesh,一般布料模拟会另外做一个PhysicalMesh,密度更低;
为了不让如风一吹整个布料就飞了一类情况出现,一般会给每个部分加上权重,通常越靠近身体(固定点)的部分权重越低,如披风的根部活动范围就比较小;
布料怎么模拟?
弹簧质点模型
构建弹簧系统
按照不同材质的布料,弹簧的疏密程度也会不一样;一般对于比较硬的布料。会给予更多的bend。
本质上,构建布料的弹簧系统是一个经验工作;
弹簧点的受力
对于图中红色的点,受到的力有:
- 重力
- 风力
- 空气阻力:通常简单模拟成线性
- 弹力与弹力damping(阻尼)
拉格朗日数学
拉格朗日数学把所有的力学关系描述成了一堆数学约束,认为所有的力学过程必须符合约束,直接通过约束(Constraint)解出位置,而不关心速度;
好处:
- 可以处理更复杂的情况
- 更快
自穿插(Self Collision)
多层布料模拟时可能会出现穿插
解决方法:
- 把物理模拟模型加厚,即便穿透了也不够深就不那么明显(土嗨方法)
- 把物理仿真的步伐变得更细,拆成多个sub step,保证在解的时候不会过深地穿过布料;
- Enforce maximal velocity:添加反向力场,在布料穿过的时候强行弹回来;