经过多年的研究, 计算机图形学在静态成像方面已经相当完善. 在当今普通的PC上, 我们就能实时制造出令人震撼的效果. 但对具有运动物体的场景, 怎样使物体以令人信服的方式移动还是一个难题. 对需要实时模拟大量运动物体的游戏来说尤其是这样. 这里是关于游戏中角色动画 (character animation) 系列文章的第一篇. 将对角色动画作一个简要的介绍. 这个系列的文章不仅牵涉到计算机图形学, 它也涉及到一些简单的机械学, 牛顿力学和一些其他方面的知识.
从最早的三维游戏开始, 你就能观察到角色动画的应用, 这是玩家对游戏的基本要求. 在idSoftware的经典作品DOOM里, 一群冲向你的怪物是吸引玩家的卖点之一. 在这个时期角色动画实际上利用的还是二维技术. 这些怪物实际上是利用一系列二维的图片来表示的. 通过对这些二维图片巧妙的组织和旋转, 早期的三维游戏利用较少的系统资源就实现了相当逼真的三维动画效果.
随着电脑能力的迅速增强和玩家对游戏越来越高的要求, 新出现的游戏开始采用真正的三维动画模型. 一个著名的例子是idSoftware的MD2 动画模型. MD2 动画模型被应用在Quake2中. MD2 文件保存了角色动画关键帧的顶点信息. 游戏运行时, 根据时间对两个关键帧 (Keyframe) 的信息进行插值计算以得到对应时间的动画数据. 这种动画通常被称为顶点动画 (vertex animation). 它的优点是实现简单, 所需的计算量也很少. 但它同时具有一些问题. 象是需要大量的内存, 插值计算时动画容易产生变形, 以及不能实现游戏角色与游戏环境的交互. 图一显示的是一个MD2 顶点动画的模型.
由于顶点动画的种种问题, 研究人员又设计出了新的方法: 骨胳动画 (Skeletal Animation). 骨胳动画是一种计算机动画技术, 它特别适合于人物和其他的脊椎动物的动画模拟. 一般来说, 被模拟的角色由两个部分来表示. 一个部分是形成层次的一系列骨胳, 我们通常称它为骨架(skeleton). 另一个部分是蒙在骨架上的皮肤(skin). 通过对骨架进行动画模拟, 再利用骨胳控制皮肤变形就达到了角色动画模拟的目的. 图二和图三分别是Cal3D提供的一个骨胳动画模型的骨架结构显示和最终动画显示. 骨胳动画带来了许多好处: 较少的内存需求, 与游戏环境更好地交互等等.
需要注意的是骨胳动画的这些好处不是没有代价的. 与较少的内存消耗对应的是更大的计算量. 但由于现代CPU 的超强运算能力, 这似乎不是一个大问题. 我们甚至可以把一部分计算转移到图形处理器 (GPU)上去, 以保留更多的CPU计算能力给其它的模块. 与顶点动画相比, 骨胳动画的复杂性大大地提升了. 它虽然提供了与环境交互的途径, 但这是通过复杂的运算实现的.
骨胳动画在游戏中的应用越来越普遍. 它的标准模式是利用正向运动学(Forward Kinematics). 一般来说, 美工利用动画生成软件事先制作好需要的一系列动画. 在游戏运行时, 程序要根据逻辑决定显示哪一个动画, 并根据时间计算出具体的显示. 这种事先制作动画片段的方式带来了一个很大的问题: 所有的动画片段都是一成不变的. 为了使游戏尽可能的真实, 我们的游戏可能需要的动画是丰富多彩的. 制作所有的这些动画可能在成本和时间上难以接受. 为了克服这个问题, 游戏业者引进了运动捕捉 (Motion Capture) 的技术. 运动捕捉技术最早应该是应用在电影业里, 但到现在可能没有任何其它行业比游戏业应用这项技术更为普遍了. idSoftware的最新产品DOOM3 就是应用了运动捕捉来生成人物的动画. 运动捕捉技术并没有解决所有的问题. 我们不能考虑到并预先制作所有可能的动画. 这不仅有成本上的考虑, 而且有技术上的原因: 虽然骨胳动画对内存的需求相比顶点动画大大下降了, 用过多的动画片段还是会耗尽我们的内存资源, 特别是对电视游戏机(Game Console, 象是PS2或是XBOX) 来说. 相比个人电脑, 这些游戏机拥有的内存资源十分有限. 在这种情况下, 一个解决的办法就是利用动画合成技术(Animation Blending). 顾名思义, 动画合成就是把几个动画片段动态合成为一个新的, 不同于其他动画片段的技术. 动画合成技术也已广泛应用于游戏领域, 它不仅用于合成新的动态的动画片段, 而且被用来光滑地连接两段不同的动画片段.
正向运动学为电脑游戏提供了很好的动画解决方案, 但是它依然没有解决一个极大的问题: 游戏人物与周围环境的交互. 游戏人物经常需要从游戏世界里获取各种物品. 如果只是利用正向运动学, 一个收集物品的动画片段只能在获取一定高度的物品时给出令人信服的动作. 然而, 在游戏世界中, 物品通常都被放置在任意的位置. 我们不可能对每一个位置的物体预先制作一个动画片段. 另外, 游戏人物行走的动作通常也需要根据不同的地形作出调整以防止一些令玩家不愉快的效果. 象是人物的脚穿透了地面或是人物在地面上滑动. 所有这些都是正向运动学不能对付的. 在这时, 反向运动学 (Inverse Kinematics or IK) 就能动态地提供合理的解决方案. 反向运动学来源于机器人学. 它在机器人领域中已经被研究了相当长一段时间. 最初它在计算机动画中被应用于动画生成软件非实时地计算合适的骨胳方向. 随着硬件能力的迅速提高和高性能算法的面世, IK也逐渐被应用于实时的应用程序, 包括电脑游戏.
最近几年, 一些公司已经开始研究和制作动态引擎 (Dynamic Engine 或 Physics Engine) 用于游戏中. 这又提供了游戏动画的一种新的方式: 动力学(Dynamics) 方式. 动力学的人物动画模拟还处于研究阶段. 通常它把生物体视为一个纯粹的刚架结构来进行牛顿力学计算. 通过对各个关节作用合适的力使生物体产生相应的运动. 这种方法的一个问题是生物体并非纯粹的刚架结构, 这样产生的动画通常都非常的机械化, 不象是生物体的运动. 另外一个问题是动力学效率还太低. 据我所知, 动力学产生的动画在电脑游戏中还只应用在人物死去时的动作模拟. 我们通常称这为Ragdoll.