平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

Animation Blending and transitioning

在魔兽世界中,在人物奔跑的同时,使用挥手等表情命令,人物会在奔跑的同时作出其他动作,这是骨骼动作混合.
猎人中奔跑时开始拉弓时,身体会过渡到拉弓的动作,而不是瞬间变换为拉弓姿势,这是骨骼动作transitioning.

骨骼动作混合是作动作过渡的技术基础,目前看到有两种方案,一种简单,一种复杂.
简单的方案应该是起源于Quake,魔兽世界亦采用该方案,即,在骨架数据中预先标识某ID骨骼为上半身的根骨骼,依此标识下半身的根骨骼,手臂的根骨骼,腿的根骨骼.
使用骨骼动画架构可以很容易地,让奔跑的动作帧数据只作用于下本身的骨骼层次,即只作用于整个骨骼层次的子骨骼体系.让挥手或开枪的动作只作用上本身骨骼,最终的结果形成了动作混合.
复杂的方案是Weighted animation blending,为每个动作的每根骨骼标识它的权重,即标识每根骨骼在每个动作中的重要性,可以用1.0标识腿部骨骼在奔跑动作中的权重,用0.0标识上半身在奔跑动作中的权重.
与另一动作混合时,两个动作骨骼分别计算自身当前的骨骼帧运动数据,然后依据动作权重进行插值混合两者的运动数据,Jupiter,Nebula使用了该方案.其复杂不在程序上,而在美工制作上,程序代码上更优雅简单.

奔跑时拉弓就要让下半身保持奔跑动作,上本身从奔跑时的姿势过渡到拉弓姿势.Animation transitioning是要解决两个骨架姿势之间的过渡问题,从一个姿势过渡到另一个姿势,即从一个骨架数据渐转到另一个骨架数据,即在过渡间的人物骨架姿势由两个动作的骨架数据混合而成,一个数据渐增0->1,一个数据渐减1->0,这里的权重作用于整个骨架,称Weighted animation blending.这样的过渡是数据计算出来的,而不是美工设计出来的,有时会有变形出现.

这些方案都基于骨架层次体系,适合组合任意个骨骼动作.帧数据插值混合时,若姿势间相差过大,旋转超过180度,slerp计算会出现混乱.

References:
Quake3 source code
WowModelViewer's animation blending source code
http://www.circlesoft.org/DirectMesh2/DM2Spec/pages/Features.htm
Realtime Character Animation Blending Using Weighted Skeleton Hierarchies (该问题最好的论文)

posted on 2006-08-21 12:43 linghuye 阅读(2147) 评论(3)  编辑 收藏 引用 所属分类: 3D图形学研究MyWarCraftStudio

评论

# re: Animation Blending and transitioning  回复  更多评论   

写的挺清楚的,很好。
2006-08-22 17:09 | yan

# re: Animation Blending and transitioning  回复  更多评论   

一定要顶!
2006-12-05 20:14 | BYEDOG

# re: Animation Blending and transitioning[未登录]  回复  更多评论   

依此标识下半身的根骨骼... 依此?以此?依次?不解!!!
2009-11-09 17:06 | martin
只有注册用户登录后才能发表评论。