Introduction
读这篇论文的机缘巧合很有趣,我在Unity3D的Asset Store上看到一个叫做Dyanmic
Bones的项目,使用物理动画真实地模拟了角色的躯干动作,20$还是个不小的数目,就发了封邮件给项目作者,作者很热心地回答该项目并没有使用Unity3D的物理引擎,而是根据Advanced
Character Physics这篇论文的思想复现而成的。本着对当今工业界黑科技的膜拜之情,我读了一下这篇文章。
这篇论文并不是一篇学术论文,应该可以说是一篇关于工业界实现技巧的Gems类专著,论文中的技巧被用于实现Hitman:
Codename
47这个游戏的物理交互系统(包括刚体和软体,甚至是连接体),读完全文的直接感受就是:艹,为了实现起来简单并达到实时交互级,原来还可以这么搞。
Verlet integration
一般做物理模拟是经常使用到如下的两个运动学公式来进行运动信息的更新:
$$x^\prime=x+v\cdot{\bigtriangleup{t}}$$$$v^\prime=v+a\cdot{\bigtriangleup{t}}$$
论文指出可以使用一种排除速度因素的模式来做运动信息更新:
$$x^\prime=2x-x^\star+a\cdot{t^2}$$$$x^\star=x$$每隔固定的时间步对运动信息进行更新。
这是一种叫做Verlet integration的方案,对应上面的Euler
integration。公式的正确性由$2x-x^\star=x+(x-x^\star)$及$x-x^\star$作为当前的速度估计值易得。
Collision and contact handling by projection
论文中为了处理避免Penalty
method带来的stiffness问题,使用了一种看起来非常简陋的方法来处理碰撞。(未完待续)
Advanced Character Physics,布布扣,bubuko.com