反向动力学在计算机动画中的应用,基于3D反向动力学IK算法的研究

摘  要:反向动力学中CCD算法具有局限性,分析几何法应用于多自由度骨骼具有不可收敛性,而微分求解主要运用于小幅度的变化, 因此利用雅可比矩阵使骨骼具有收敛性,将分析几何法与微分求解法融合,实验结果表明,IK反向动力学算法的改进很有意义。

关键词: 3D图形学; IK反向动力学; 微分求解算法

肢体运动学的研究往往混略掉人们自身运动的特性或者引起运动的真正原因。参考文献[1]综述了随着计算机的发展,虚拟人技术不断改进,新兴的3D场景图建模是计算机图形学处理三维世界发展的多层次数据结构,但由于机器人等运动学模型受外部约束以及内部节点的限制,很难实现一些舒服的姿势和动作。参考文献[2]主要对虚拟人技术的运动算法实现进行了研究;参考文献[3]也对虚拟人技术运动算法做了研究,并提出反向动力学的思想,但都未对反向动力学算法带来的问题进行解决。反向动力学是被开发来解决这些运动约束的图形处理方法的分支,以模型叶节点为起点来计算根节点信息的方法[4]。

简单地说,IK(Inverse Kinematics)算法就是首先确定末端骨骼的位置信息,根据末端骨骼的位置信息反向推导出该骨骼继承链上N级父亲骨骼的位置信息。通过这种方法指定角色的“姿势”,即首先把渲染的角色表示成骨骼关节结构,所谓的姿势表示成由此构成的夹角,包括状态向量θ以及节点的方向向量和位置。对于IK算法,基本公式是:

θ=f-1(X)                    (1)

其中,X通常是最末端骨骼位置信息,用此算法来计算满足条件的θ。

参考文献[5]阐述了IK算法在计算机动画中的应用,并重点研究了7个自由度骨骼的运动,但对奇异点病态方程的问题没有提出有效的解决方法。

当前的计算机图形学中,所有角色动画简单地由正向动力学算法计算已经不能满足动画逼真性的需求,一些游戏中正向动力学遇到很多问题,即使花大量时间也是很难去消除或协调的[6]。针对时效的问题,参考文献[6]对反向动力学算法应用在多处理器中进行了研究,对速降法也提供了一些支持。近些年,随着实时算法的发展,反向动力学越来越显得不可缺少。本文主要通过几何分析法与微分求解法的融合,使IK反向动力学算法有效摒弃CCD速降法带来的算法不收敛性。CCD速降法对每个关节的限制会造成关节限制的制约束的合并,尤其是末端链仅仅产生移动,使画面产生不自然的感觉。针对这一问题,首先通过几何分析法来确定关节位置,局部采用微分求解法,并且在微分求解过程中引入稀疏矩阵来寻找并处理奇异点的问题。参考文献[7]、[8]提及的渲染技术,利用HLSL语言进行画面的模拟。

1 几何分析法算法的研究

实现IK算法,目前应用最多的是CCD(Cyclic Coordinate Descent)。这是一个迭代算法,通过多次迭代向目标解逐步接近,通常5~10次就会得到很好的效果,绝大多数情况下骨骼的目标位置都会收敛到理想位置。但通常CCD算法的每一步都需要启发式的构造,并且骨骼之间的关节不能任意角度旋转。另一个问题是,当所有骨骼在一条直线上时,每一个骨骼都会认为自身不再需要旋转,CCD的迭代算法会失效。相对于CCD算法,常用到的几何分析法能够很快地得到骨骼的目标位置信息,可以一步算出目标位置,有效地摒弃了CCD算法迭代的效率问题。但是几何分析法也存在不足,即对于结构稍微比较复杂的框架骨骼,会得到无数多的解。

在IK反向动力学算法中,对于一个N级骨骼链,其N级父亲骨骼信息T是相对于N-1级子骨骼信息T相对运动,相对于末端骨骼信息,可简单表示为:

747e5208455ad36bb9034de558bc5313.gif

d03224fecd3c4e36e011cb130e435ca6.gif

这里的α是斜率。对于关节权重的αi取值为一确定值矩阵的一列,并且值∈(0,1),确保?驻H的收敛性。然而,并非所有骨骼都可以旋转无限制角度,以三链臂为例,θ1∈[-90,90],θ2∈[0,110],θ3∈[-20,20]。对每个不同位置的关节控制在可允许的范围内,这样,计算出的位置幅度范围小,得出值的过程较快,并且同时确保了骨架姿势的逼真性。

4 实验结果

利用C#代码、Direct9.0和HLSL渲染技术,在Visual Studio 2010环境下进行实验,部分代码如下(包括位置信息、骨骼权重和法线位置等)。

VS_OUTPUT Transform(

float4 inputPosition : POSITION,

float3 inputNormal : NORMAL,

float2 inputTexCoord :TEXCOORD0,

float4 weights : TEXCOORD1,

float4 bones : TEXCOORD2

)

{

VS_OUTPUT Out = (VS_OUTPUT)0;

float4 pos=mul(inputPosition, Local);

pos=mul(pos,BoneMatrices[(int)bones.x])*weights.x+

mul(pos,BoneMatrices[(int)bones.y])*weights.y+

mul(pos, BoneMatrices[(int)bones.z])*weights.z+

mul(pos,BoneMatrices[(int)bones.w])*weights.w;

Out.Pos = mul(pos, WorldViewProjection);

Out.Normal =mul(inputNormal,World);

Out.Texcoord = inputTexCoord;

Out.EyeDir = EyePosition - Out.Pos;

Out.Direction = LightPosition -Out.Pos;

return Out;

}

实验结果如图1所示。

7f32fa5188f5af64f77fb9ffca1cfea1.gif

表1为算法改进前后的实验结果的对比。

aad0688d9439ab3f826ce92240c83245.gif

由表1可以看出,本文算法具有很大的改进。然而,这些数据不是每次实验都是这样的,在实际操作中会有许多其他客观因素加入,但只要能够得出更好的实验结果,证明改进还是正确的。由实验分析可知,CCD速降法会得出更多错误位置,这是由于计算角度位置的幅度范围太大造成的,而几何分析法和微分求解法完美地融合就可以大幅度减小这些错误。此外,对中值期望角的改进求法在摒弃了复杂计算过程的同时,在小范围内的求解计算并没有增加过多的错误位置信息,还减少了计算时间,因此,改进算法很有意义。

在很多应用中,IK算法只是算取骨架的部分骨骼,主骨架位置还是由正向动力学算法求出。随着3D图像学的不断进步以及实时算法的发展和改进,IK反向动力学会得到越来越广的方面应用,也极大地推进了虚拟场景的动画研究。分析几何法可以快速地确定关节角度的大致位置,微分求解法可以小范围内确保关节角度的最优,二者的结合可以达到扬长避短的效果,也使反向动力学算法更优化。

参考文献

[1] 王兆其.虚拟人合成研究综述[J]. 中国科学院研究生院报,2000,17(2):89-98.

[2] 洪炳熔, 贺怀清. 虚拟人的步行和跑步运动方法的实现[J]. 计算机应用研究,2000(11):15-19.

[3] 徐孟,孙守迁,潘云鹤.虚拟人运动控制技术的研究[J].  系统仿真学报,2003,15(3):338-342.

[4] TOLANI D, GOSWANMI A, BALDER N I. Real-time  inverse kinematics techniques for anthropomorphic limbs[J]. Graphical Models,2000,62(5):353-88.

[5] MACIEJEWSKI A A. Dealing with the ill-conditioned  equations of motion for articulated figures[J]. Computer Graphics and Applications,2002,10(3):63-71.

[6] Chen Chun. Efficient scheduling algorithms for robot inverse dynamics computation on a multiprocessor system[J].Systems,Man and Cybernetics, 2002,18(5):729-743.

[7] DRIEMYER T, RAY M. 渲染技术超级手册[M].费广正,译.北京:人民邮电出版社,2007.

[8] 向世明.Visual C++数字图像与图形处理[M].北京:电子工业出版社,2002.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值