APP下载

基于贪心策略的快速自适应角色动画合成算法

2020-06-19张迎凯张欣天刘晓平

关键词:碰撞检测骨骼手臂

张迎凯,张欣天,刘晓平

(合肥工业大学 计算机与信息学院,安徽 合肥 230601)

随着计算机动画技术的不断发展,3D游戏动漫、电影特效制作等产业呈现蓬勃的发展趋势,角色动画合成作为这些产业中的主要研究内容,已引起了科研人员的广泛关注[1]。

一般地,角色动画是由表示外形的网格、描述运动的骨骼和联系两者的蒙皮构成的,动画角色造型塑造对于一部动画影片有着重要意义,直接影响动画影片的制作质量[2]。不同的动画角色外形通常被赋予典型的风格,诸如夸张的肚子、扁平的双脚等。然而,在运动数据进行复用时,普通动画角色的运动通过从定向作用到怪异角色时会产生模型穿透、自相交等问题。三维角色是主流动画游戏作品的灵魂,其制作效率和质量对作品的成败起关键作用。如何解决这种自相交和对运动进行调整是一个亟待解决的问题。因此,本文提出一种基于贪心策略的快速自适应角色动画合成算法。该算法首先使用基于Sphere-OBB(sphere-oriented bounding box)的混合包围盒分别包裹蒙皮部件分割后的关节和刚体,再利用目标函数计算得到最优的调整角度,并采用四元数球面插值得到光滑运动。该算法框架如图1所示。

图1 算法框架

1 相关工作

运动自适应的方法主要有信号处理、约束建模和几何约束等方法。在运动编辑研究领域,文献[3]提出了一种基于插值和小波分解的方法来编辑运动片段。后来有学者尝试利用物理方法对运动进行修正,文献[4-5]通过变化骨骼长度或外形等来改变相关物理属性,从而重新计算约束,据此求解新属性下的目标运动。但是以上相关研究只考虑骨架结构,并未引入网格模型参数。文献[6]在角色包裹封套的基础上,将动作与模型综合考虑进行碰撞检测,通过构建目标函数并利用时空约束获得最优解,从而修正运动,但该研究时空求解复杂度过高,无法达到实时;文献[7]引入数值化的逆向运动学(inverse kinematics,IK)方法来移除自相交,但是该方法要求对每帧的动画进行求解,并不适用于大段时间发生碰撞的运动;文献[8]利用基于关系的空间描述方法对运动进行调整,可以让角色适应外界环境地形的改变,并不与外界进行碰撞,然而该方法并未涉及到模型的自相交工作,仅仅解决了模型与环境的交互。此外,文献[9]基于统计模型并依靠学习运动库中的数据来生成自然的运动;文献[10]利用基于点的图像碰撞检测与利用物理中补偿力来避免自相交。然而,上述研究大多存在自相交与运动自适应花销大的问题,不适宜快速求解。

2 蒙皮部件分割与碰撞检测

2.1 部件分割

在运动自适应算法中,为了快速地进行碰撞检测,本文借鉴文献[11]提出的方法,对蒙皮网格采用基于骨骼的分割方法并利用混合包围盒进行碰撞检测。首先按照蒙皮网格中顶点受骨骼影响的数量将其分为关节和刚体2个部分。其中刚体的顶点只受单根骨骼影响,关节中的顶点则受多根骨骼影响。刚体部分采用OBB 进行包裹,关节则采用包围球包裹。有关对非相邻关节进行碰撞检测和对动画角色采用混合包围盒包裹如图2所示。

图2 动画角色采用混合包围盒包裹

图2a所示为正常的模型;图2c所示为第1层的包围盒,此包围盒只有1个Sphere包围盒构成,主要用于快速检测模型是否与外界进行碰撞;继续往下一层将模型细化,具体如图2b所示,主要是针对模型每1块采用Sphere包围盒和OBB包围盒进行包裹。

2.2 碰撞检测对象

拟人动画角色外形夸张,经过传统运动编辑后,容易发生角色模型自相交等现象。本文发现大部分的自相交发生在手臂与躯干,以及腿部关节之间,因此需要进行的碰撞检测具体如下:

(1) 检测手臂关节(肩关节链)与躯干关节之间碰撞情况。

(2) 检测左右手臂关节之间碰撞情况。

(3) 检测腿部(股关节链)之间的碰撞情况。

若上述3种情况之一发生相交,则需要进行下一步碰撞响应,即运动调整。

3 运动调整

运动调整算法主要包含信号处理、约束求解和几何约束3类算法。信号处理算法中参数不具备几何意义[12],因此对于普通用户操作来说存在盲目性。几何约束中逆向运动学不适用于含有长时间自相交的运动序列。因此,本文借鉴文献[13]中的算法,通过构造目标函数求解最优解。文献[13]采用序列二次规划法(sequence quadratic program,SQP)来解决运动自适应问题,然而SQP算法需多次迭代进行求解,会导致计算量大,很难满足实时性的要求。为了解决该问题,本文采用贪心算法思想,在满足求解精度的要求下,能提高运动自适应求解速度。

本文提出的贪心算法思想具体如下:针对人体发生自相交常见问题,采用针对部分关节进行调整,将这些关节朝设定方向进行贪心调整,目的是保证人体内部不发生碰撞,且调整后的人体姿态与调整前的姿态尽可能相似,不发生大的改变。为了快速地调整运动,本文通过间隔2~3帧单独进行求解;对于其他帧,则采取插值算法获得。本文的运动调整分为手臂调整与腿部调整2个部分。

3.1 手臂调整算法

手臂调整算法涉及2个关节:① 肩关节和肘关节,在冠状面上进行调整,具体如图3所示,通过调整肩关节的角度,保证手臂与躯体不发生相交;② 同时调整肘关节,使其下部关节尽量接近原来的位置。选取手腕关节点为参考点,p1为调整前的位置坐标,p2为调整后的位置坐标,p为肘关节点的位置坐标,则该上述算法的目标函数为:

(1)

其中,约束条件为小臂不与躯干相交,dp(p1,p2)为p1、p22点之间的距离;α、β分别为权重系数,本文取-5、1,目的是为调整后的手臂姿态与原始姿态尽可能地相似。

图3 冠状面示意图

设原始运动序列为Min,调整后运动序列为Mout;当前进行求解的帧数为i,初始值为0;μ、v为调整步长,分别为5°、1°。第i帧肩关节需要调整的角度为σi。

(1) 输入原始运动第i帧Min(i),判断左(右)手臂与躯干相交情况。若发生碰撞,则转步骤(2)。

(2) 作用肩关节,在冠状面向远离躯干方向,每次叠加μ,直至手臂与躯干不相交。转步骤(3)。

(3) 在步骤(2)基础上,向靠近身体方向调整角度,每次调整v,直到发生碰撞,取上一次调整角度σi,为了使手臂偏离躯干一定角度,保证角色姿态相对自然,取σi=σi+10,转步骤(4)。

(4) 作用肘关节,在冠平面向躯干方向调整角度(同步骤(2)、步骤(3)),使用目标函数f,取最小值,得到最终调整角度。转步骤(5)。

(5) 令i=i+3,若i不是最后一帧,则转步骤(1);否则,转步骤(6)。

(6) 对其他未调整的运动帧数据,采用四元数球面插值,得到最终运动Mout时,则算法结束。

手臂关节调整示意图如图4所示,其中,实线为调整前手臂骨骼位置;虚线为调整后的手臂骨骼位置。

图4 手臂关节调整示意图

3.2 腿(脚)部调整算法

相对手臂关节调整,腿部相交发生在两腿、两脚之间的碰撞。因此本文通过调整股关节、脚踝关节角度达到自适应目标。

设原始运动序列为Min,调整后运动序列为Mout;当前进行求解的帧数为i,初始值为0;μ和v为调整步长,分别为5°和1°。第i帧股关节需要调整的角度为σi,则腿(脚)部之间调整算法为:

(1) 输入原始运动第i帧Min(i),判断左右腿(脚)相交情况。若发生碰撞,则转步骤(2)。

(2) 作用股(脚踝)关节,在冠状面向远离根节点方向,每次叠加μ,直至双腿(脚)不相交。转步骤(3)。

(3) 在步骤(2)基础上,在冠状面内指向根节点方向,每次调整v,直到发生碰撞,取上一次调整为最终调整角度,转步骤(4)。

(4) 令i=i+3,若i不是最后一帧,则转步骤(1);否则,转步骤(5)。

(5) 对其他未调整的运动帧数据,采用四元数球面插值,得到最终运动Mout。

腿(脚)关节调整示意图如图5所示,其中,实线为调整前腿部骨骼位置;虚线为调整后的腿部骨骼位置。

图5 腿部关节调整示意图

为了快速地生成自适应运动,需针对离散帧进行调整,因此本文进行插值编辑操作。为了避免欧拉角操作导致的万向节死锁问题,本文借鉴文献[14]的算法,在旋转角度上采用四元数球面插值算法为:

(2)

其中,q1=[ω1,x1,y1,z1],q2=[ω2,x2,y2,z2],分别为2个单位四元数;t为插值系数;θ为四元数之间q1、q2的夹角,即

θ=arccos(ω1ω2+x1x2+y1y2+z1z2)

(3)

4 实验结果与分析

本文实验的硬件环境为CPU Core i7-2600 3.40 GHz四核、8.0 GB内存、GeForce GTX560 Ti 显卡。有关碰撞检测与运动调整实验分析说明如下。

4.1 蒙皮分割与碰撞检测

本文依据蒙皮网格顶点受骨骼影响数量的不同,将蒙皮网格分为刚体与关节。刚体顶点只受一根骨骼影响,关节则受多根骨骼影响。刚体由OBB进行包裹,关节由包围球进行包裹。对正常角色进行分割后的结果如图6所示。图6a为原始模型,图6b为T-Pose下的蒙皮分割与包裹,图6c为f=400帧下的分割与包裹。

图6 蒙皮分割与混合包围盒

由于在角色运动过程中,刚体不会发生形变,而关节受多根骨骼影响,会发生形变。因此OBB不需要每次更新,只需对其作用骨骼仿射变换矩阵即可;包围球包裹的关节随着角色动画姿态的变化时时改变,需要对其进行更新。因为模型碰撞检测的时间与姿态有关,所以不需要对包围盒和与三角面片的检测进行比较,只需要对更新时间进行对比,更新的平均时间见表1所列,模型分割示意图如图7所示。由此可以看出,本文提出具体的混合包围盒算法与经典的AABB、OBB相比,能够较高提升时间效率。

图7 部分模型分割示意图

4.2 运动调整

特殊角色外形在传统运动编辑中会发生自相交问题,因此本文针对特定并常见的自相交进行分析,通过调整特殊关节,并结合目标函数方法达到自适应效果。调整前后的对比示意图如图8所示。

图8a所示为原始的角色动画,其中红色方框标注的地方为发生碰撞的位置,即需要调整运动避免自相交;图8b所示为经过本文算法调整后的效果。由此可见,利用本文提出算法对手臂和腿部关节进行调整,能够移除自相交。

因为运动自适应算法对不同的模型和运动花费时间不同,所以不易进行比较。本文通过运动调整,经四元数插值后(15~20帧/s)基本可以满足实时需要。同时,本文算法也存在一定的局限性,如在实验开始时需要对标准姿态进行校准,即要求为T-Pose,并且脊柱方向为y轴,另外本文只是针对特定关节进行调整,有关多关节进行调整问题将是下一步研究的方向。

图8 调整前后的运动对比

5 结 论

本文针对造型特征鲜明的三维拟人角色经过一种运动编辑后造成的自身碰撞、穿透等问题,提出了基于贪心策略解决角色动画运动自适应的算法。首先使用基于Sphere-OBB的混合包围盒分别包裹部件分割后模型的关节和刚体;然后调整特定关节角度,通过设计目标函数,优化求解得到最优的调整角度;最后采用四元数球面插值得到光滑运动。该算法能够提高运算速度,然而,由于在几何层面进行运动调整会导致滑步或者不平衡等问题,研究如何采用物理模型的方法对其进行调整,以及如何采用并行计算进行加速[15],将是下一步要进行的研究工作。

猜你喜欢

碰撞检测骨骼手臂
基于动力学补偿的机器人电机力矩误差碰撞检测
全新预测碰撞检测系统
做家务的女性骨骼更强壮
三减三健全民行动——健康骨骼
手臂上的抓痕
基于BIM的铁路信号室外设备布置与碰撞检测方法
基于Virtools的虚拟灭火系统碰撞检测设计与实现
完美的手臂
大树为什么有那么多手臂
7个动作,还原纤细手臂