游戏中动画的实现有很多不同方法,帧动画、骨骼动画、基于物理的动画、基于Shader的动画、粒子等。

在这篇文章中,列出了我最近读到过的不同种类动画入门级的文章、视频。关于Unity动画状态机这一类太常见的,这里不再赘述。

所分享的内容都亲自品尝,保证无毒无害,营养价值极高!在互联网上我们缺少的不是内容,而是索引。

1. 基于物理的动画

与其他的动画相比,基于物理动画最大的好处是交互时更真实。


这篇文章非常详细的介绍了Verlet Integration,基本不需要什么数学基础。并且有大量示例直接在浏览器运行。最后两个示例可以说非常酷炫了。

一个示例是rag-doll(布娃娃)。虽说这里只是2D模型,很多AAA游戏中,尸体也是用类似的方法在3D中模拟的。

另一个示例是Fabric(布)。


用上面学到的Verlet Integration或者别的方法,可以简单的实现Spring(弹簧)的效果。利用Spring,可以实现头发、丝带、裙子等真实物理效果。这里提供两种效果抛砖引玉。

第一篇文章更加具体,从如何写Mesh讲起,第二篇只讲了大体思想。如果觉得第一篇中的Mesh编程还不够入门,推荐《Unity实现欢乐球球(上)Mesh生成》

第二篇文章的作者也写过Spring实现2D水面的文章,仍然非常简洁,感兴趣也可以看一看:

2. 骨骼动画

我本身3D动画实践得非常少,而且传统骨骼动画值得阅读的材料非常容易找,这里不再推荐。


Unity有一个免费的插件叫做Anima2D,提供了非常好的2D动画开发流程。其中的一些原理与3D动画是相同的(例如骨骼、IK等)。一套基本使用教程:


提到骨骼动画,有一个不得不提的东西,就是Inverse Kinematics(IK)。如果对其原理感兴趣推荐几篇博文:

又是Alan Zucconi的博文,这位老哥每次都写得具体、全面。这一系列中为了避免通过数学推导求解IK,直接使用Gradient Descent(梯度下降)求解,如果了解过机器学习的话,应该不陌生。

但梯度下降是个迭代算法,效率比较低。之后他又写过在只有两个自由度下2D机械臂IK的数学推导:

3.物理与骨骼动画的结合

前面基于物理的动画中已经提到了Ragdoll、Spring。基于物理的动画和帧动画、骨骼动画各有优劣,很多时候能够组合在一起。


Unity中,Springs与骨骼动画的结合:


EA的一些体育游戏中,Ragdoll与骨骼动画结合:

这是18年GDC的一个talk,可惜youtube上还没有对应视频。

4. 粒子

使用粒子,能够实现技能特效、火焰、天气等效果。


这是我见过最好的Unity粒子系统入门的视频。

5. 其他


在动画资源非常少的情况下,将IK、Ragdolls等方法发挥到极致来做出非常好的游戏动画。很有乐趣的一个分享。


Motion Matching是比较现代化的游戏动画技术,在《For Honor》、《The Last of Us Part II》等游戏中已经使用。但由于他要求捕捉一套完备的动画,在很多种类的动作中仍然是不可行的。在《For Honor》中,也几乎只应用在了脚部动作。