🏎️

3D Animation Techniques in Games

DoF(Degrees of Freedom)

notion image
📖
Degrees of Freedom 自由度 指的就是说一个物体有多少个自由度,也就是物体可以在多少个维度去变化。
notion image
6 DoF:对一个刚体来讲,它能动的就六个自由度:
  • 平移的三个自由度:沿着 x、y、z 轴平移
  • 旋转的三个自由度:刚体还能旋转。可以沿着 X 轴去,以 X 轴为中心绕着转。Y、Z 轴同理。
💡
其实整个游戏动画,核心就是基于对自由度的表达,也就是这刚体的运动的一个表达。

Rigid Hierarchical Animation 刚性层阶式动画

notion image
做 3D 动画的时候,其实最基础的就是一个基于一个层次结构的刚体的动画。
它其实非常像我们小时候看的皮影戏。我们把角色的每个关节做成一个可动的东西,当我去动它的时候,角色整个就动起来了。实际上这个关节它本身会有一个树状结构(上图左下),所以我们也将其叫做 hierarchy。
Resident Evil 游戏就能看到这种基础的 3D 动画系统。
📖
Rigid Hierarchical Animation 的问题就是,骨骼动的时候,关节之间会互相穿插。

Per-vertex Animation 顶点动画

notion image
这个技术可能会注意不到。但实际上我们玩的所有的 3A 游戏里面,基本上应该都用了这个技术。
比如上图右上的旗帜,在游戏中,如果一个旗帜表现得特别好的话,要么用的是物理的动画,要么用的是顶点动画。因为如果想表达一个风吹过布料的这个效果的话,如果想放骨骼来实现,都不知道要放多少层骨骼。
我们可以把它每一个顶点的位置随着时间的变化存下来,一般会存两个 texture:
  • 第一个 texture 它的横向轴就是每一个顶点。假设你有一万个顶点,那就有一万个。假设你这个动画有 100 帧,那 texture 的竖轴就是 100 帧,把每个顶点的 offset(平移)存下来。
  • 第二个 texture 的竖轴存的是法向。上一节课里面讲过,如果直接用顶点的位置算法向,有时候会算出问题。因此为了效率,我们就直接把每一帧每个顶点的法向也存下来。
 
💡
一般我们用物理引擎模拟出来。先离线地把这东西模拟好,然后存储成 vertex animation 的这个 texture,这样在引擎中就能够展现出非常真实的旗帜的效果。水流的效果,也可以用顶点动画做。

参考

  • Vertex Offset Texture: 8 bytes per vertex per frame (each pixel)
  • Normal Texture: 4 bytes per vertex per frame (each pixel)
 

Morph Target Animation 变形目标动画

notion image
Morph Target Animation 实际上也是一种顶点动画。但是跟传统的顶点动画不太一样,它顶点有权重,会在几个顶点的 key frame 之间去插值。
💡
如果用埋骨骼的方式实现捏脸,会发现当我们捏的变形过大,五官看上去就不自然了。在下一节课讲 face animation 的时候会详细讲。
捏脸的时候,实际上我们是在各个不同的 Morph Target 之间进行插值,

3D Skinned Animation 蒙皮动画

重点!
notion image
💡
我们在游戏中最多出现的对象是是人、动物。人和动物最大的特点是我们表面有一层皮肤。
身体动的时候,皮肤之间不会穿插,身体里面其实是一个刚体的骨骼。
为什么刚体骨骼在驱动的时候,皮跟着动,看上去也很自然?
核心的思想就是每个顶点受不止一个骨骼影响,由多根骨骼在一起同时作用。这样的话就能保证当这个对象运动的时候,它是水密性的(watertide ,不会互相穿插)。
💡
它比早期的那种刚体的 skeleton 动画要做得更好,这是我们现代游戏引擎最常见的动画模型。

2D Skinned Animation

notion image
蒙皮动画 2D 也在用,人动的时候,身体会相对自然地变形,技术原理是一致的。
在 2D 动画里面,现在也有很多人在用。
因为如果只是用骨骼驱动一个个的小图片运动的话,那这些图片之间彼此肯定会有穿插。所有的角色看起来就像机器人一样。
如果用同样的原理,把 2D 的角色也用蒙皮动画的方法来做的话,你能看到这个人动的时候,它整个身体会相对自然地去变形。因此他们的技术的原理是一致的,在 3D 的里面的数学运算,在 2D 里面也是完全起作用的。

Physics-based Animation

notion image
动画非常重要的一个分支方向。

角色

角色一旦受击了或者它死亡的时候,它就会进入 ragdoll(布娃娃系统)。
早期的时候布娃娃系统把人做得跟沙袋一样。但现在的布娃娃系统,既有一部分设计师设计的这种 animation 的感觉,又有整个人摔在地上的感觉。

衣料

物理模拟的动画用的最多的地方在衣料。玩游戏的时候,我们会在意这个衣料表达得好不好。
衣料模拟其实是游戏动画或者游戏物理里面最难的一个东西,包括像流体的模拟也是。
 

IK

Animation Content Creation

notion image
animation creator 如何去创造 animation ?
传统的方法有两种:
  • 在编辑器里面由动画师手 K 动画。K 就是 K frame,就是通过一个个的 Key frame 来 K 这个动画。后面会详细地讲。
  • motion capture 动捕。现在基本上无论在电影还是游戏中用的已经是非常非常的广泛了。