这篇博客介绍了我在近期针对于Unity的DynamicBone插件进行迭代,从而实现近布料模拟的方法。
由于部分涉及到工作内容,因此询问了部门老大后决定本博客将只介绍迭代思路,不涉及到具体实现,也不会放出对应图片。
背景
来上海也有近两个月了,近来也差不多安定了下来,也是时候恢复写博客的习惯了。
最近的任务就是针对于Unity下的DynamicBone的迭代,让其能够更加适配于我们自己的项目(主要是布料的模拟)。
关于原生的DynamicBone
原生DynamicBone介绍
DynamicBone是一个Unity的插件,可以用于针对骨骼进行物理模拟。由于开放源码并且工具链集成方便,因此颇受项目青睐 —— 我也是通过直接阅读该插件的源码来逐渐接触Unity开发的。
DynamicBone开放了Damping,Elasticity,Stiffness,Inert等物理属性接口,并且开发者可以通过配置DynamicBoneCollider来配置相应的碰撞体,来进行碰撞结算。
DynamicBone允许开发者指定对应的根骨骼,从而允许该骨骼的子骨骼进行物理结算,而根骨骼将不进行物理结算。换句话说,这样的物理模型更加适用于例如尾巴、马尾、Ragdoll等带有明显层级结构的物理模拟。
直到我入职为止,DynamicBone已经更新到了1.1.7版本。需要吐槽的是……在阅读源码之后,我个人认为对应的物理模型和结算逻辑经过作者的多次改动后,似乎已经比较混乱了。例如对应的Force和Gravity结算、外力结算的Integration都不太好阅读。

本文探讨了如何通过迭代Unity的DynamicBone插件,实现更真实的布料模拟。详细介绍了原生DynamicBone的工作原理,包括Verlet Integration、Shape Keeping等,并提出新的需求,如弹簧-质心系统、弯曲弹性、风力系统和定制化弹性约束。通过性能分析,提出优化方案,包括胶囊体优化、粒子懒惰程度评估和多线程优化,实现了在红米3s上支持300+动态骨骼的实时结算。

1325

被折叠的 条评论
为什么被折叠?



