现在的位置: 首页 > 综合 > 正文

动画系统的一些功能

2012年01月11日 ⁄ 综合 ⁄ 共 1829字 ⁄ 字号 评论关闭

最近在做动画系统的一些重构工作, 顺便就看了下成熟的引擎的动画部分. 之前做过一个动作游戏的预研, 所以对这部分感触比较大, 因为相比业界一流的厂商, 动画技术可以说是国内游戏开发最落后的的一部分了

在我看来, 动画系统分成这么几个级别吧:

  1. 可以把DCC中制作的动作导入播放, 有Play/Stop/Pause之类的接口. 开源或者自研的引擎多停留在这一阶段
  2. 在多个动画之间可以定义混合转换方式, 可以很好地处理不动动作之间的衔接过渡. 如GameBryo, Vision等
  3. 有动画状态机和BlendTree, 可以使用参数控制播放不同的动作, 如Unity, Unreal, Havok, Morpheme等
  4. 把动画与物理系统结合, 实现环境交互, IK, 碰撞反应, Ragdoll等. 通常实现了3的也会把4顺便做了
  5. 把动画与行为系统结合, 做出真实的人物行为表现. 这部分就上升到AI层次了, 这方面NaturalMotion业界领先
苦逼的我们还在2挣扎. 引入动画中间件可以快速上升到4, 5的话目前游戏应用比较少
下面是一些最近阅读文档遇到的一些技术名词, 来源于Unity, Vision, Havok:
  • Animation Clip(同Animation Sequence)
    • 动画数据单位, 如一个"Idle" Clip, 一个"Run" Clip, 一个"Walk" Clip等
  • Body Mask(同Skeleton Partitioning)
    • 用于标记身体哪些部分包含或者从骨架中排除
  • Animation Retargeting
    • 把一个模型的动画应用到另一个模型上, 动画师就不用为每个角色重复做类似的动画了
  • T-Pose
    • 原始骨架在没有动画时通常是"T"型的
    • 在强动作交互游戏中使用动画控制角色位移朝向, 而不是靠程序
  • Root Motion(同Motion Extraction)
    • 角色的"根"的运动, 可能由动画自己控制或者外部控制
  • Animation Layer
    • 控制模型动画或者局部动画的状态机. 通过与Body Mask一起用作肢体动画, 半身动画等
  • Animation State Machine
    • 控制动画交互状态
  • Animation Blend Tree
    • 根据浮点数参数在相似的Animation Clip之间进行连续混合, 比如设置一个方向值, 在前后左右4个行走动画之间进行平滑过渡
  • Inverse Kinematics(IK)
    • 根据世界空间的物体反向控制角色身体部位的变换, 如以应用:
      • 两脚根据地表斜率放置到不同高度
      • 头部锁定朝向目标
  • Wrap Mode
    • 动画的播放方式: 单次播放, 循环播放, 单次播放停在最后
  • Transition
    • 从一个动画到另一个动画的转换方式, 以Vision为例:
      • Immediate: 在Source和Target之间直接进行插值, 期间不处理动画数据(不播放)
      • CrossFade: 在Source和Target之间进行平滑过渡, 期间处理动画数据(进行播放)
      • Intermediate: 使用一个Animation Sequence在两个动画之间进行混合
  • Transition Table
    • 定义每两个动画之间Transition方式的二维表(见Gamebryo, Vision)
  • Animation Event
    • 动画时间轴上的事件定义, 比如左右脚的落地时间点可以用于触发脚步声
  • Animation Compression
    • 在动画数据量比较大的情况下内存和磁盘占用会比较高, 所以需要进行压缩
  • Animation Blending
    • 把多个动画的Pose混合到一个Pose上渲染
    • Normal Blending
      • 通常在多个AnimationTrack间根据权重进行平均
    • Additive Blending
      • 一细节动画可以叠加到已有的Pose上, 通常做法是把动画的当前Pose减去第一帧的Pose得到相对变换, 再加到目标Pose上
  • Animation Job
    • 一些计算密集的操作会封装成任务扔进线程池里去计算, 如采样, 混合, 解压缩等
  • Skeleton Mapping
    • 把一个骨架的Pose转换到另一个, 一般有两种情况:
      • 把简化的骨架映射到正常骨架上, 用于"Ragdoll Mapping"(角色物理中使用)
      • 在两个不同角色骨架之间转换, 用于"Animation Retargeting"
  • Local Hit Reaction
    • 角色对身体局部的撞击产生相应的动作. 这是由Ragdoll驱动的, 可以代替受击动画之类
  • Animation Driven Ragdoll Death
    • 由Ragdoll驱动模拟死亡/击飞的动作. 由物理实时运算, 不需要动画师进行数据制作
  • 待补充...

抱歉!评论已关闭.