首页> 中国专利> 一种基于命令流三维角色的动画合成方法

一种基于命令流三维角色的动画合成方法

摘要

本发明公开了一种基于命令流的三维角色动画合成方法,该方法首先将角色动作模型依据移动状态、全身姿态和上身姿态分类描述;并根据动作分类的组合关系表,预制作具体的三维动画文件;搭建分布式客户机/服务器网络模型,制定数据报传输的协议规范;客户机解析服务器传来的命令数据流后,查找动作分类的组合关系表,获得相关的动作文件,运动混合且对角色的位置朝向插值后合成新的动画序列。本发明能够逼真的再现虚拟战场环境种虚拟士兵不同动作间的自动转换,同时支持虚拟角色的位置和朝向的平滑插值更新,避免了繁琐的命令控制过程和动作之间的组合爆炸问题,动作切换平滑、自然,可广泛用于各虚拟战场中,因此本发明具有一定的应用价值。

著录项

  • 公开/公告号CN106548503A

    专利类型发明专利

  • 公开/公告日2017-03-29

    原文格式PDF

  • 申请/专利权人 华东师范大学;

    申请/专利号CN201610910423.6

  • 发明设计人 高岩;张健;

    申请日2016-10-19

  • 分类号G06T13/40(20110101);

  • 代理机构上海蓝迪专利商标事务所(普通合伙);

  • 代理人徐筱梅;张翔

  • 地址 200241 上海市闵行区东川路500号

  • 入库时间 2023-06-19 01:51:07

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-07-05

    授权

    授权

  • 2017-04-26

    实质审查的生效 IPC(主分类):G06T13/40 申请日:20161019

    实质审查的生效

  • 2017-03-29

    公开

    公开

说明书

技术领域

本发明涉及计算机虚拟现实技术领域,特别是涉及一种基于命令流三维角色的动画合成方法。

背景技术

虚拟现实技术起源于航天和军事部门,随着世纪以信息化为核心的新军事变革迅速发展,军事领域的应用需求对虚拟现实技术提出了更高要求,推动和促进着该技术逐步成熟。与此同时,网络与虚拟现实技术的发展,使得军事演习和作战样式在理念和方法上都有别于传统战争,得到越来越广泛的应用。虚拟现实技术以其安全无破坏、较实战演习耗费资源少、不受时间空间场地和气候等自然条件限制、应对各种复杂情况的良好可控性等诸多优点,为军事教育训练、实施战略战术构想、多兵种模拟作战演习等提供全方位的虚拟战场环境。

计算机生成兵力是分布式虚拟战场环境的重要组成部分之一,逼真的模拟士兵战术动作将对三维战场可视化提供有力支撑。目前,国内外对虚拟人运动控制的方法主要采用关键帧插补技术、动力学技术、运动学技术和运动捕捉技术。关键帧技术是虚拟人运动控制的早期方法,该方法简单直观,但过程繁琐。运动学和动力学技术都是通过人体运动规律,利用运动学或动力学方程求解,但因模型计算复杂,实现比较困难,且实时性和逼真度也不够。运动捕捉技术是利用专门的硬件设备通过光或磁传感器直接采集真实人体的运动数据,记录人体的运动信息,然后利用收集的数据重新驱动虚拟环境中的角色,虽效果非常逼真,但是受昂贵的硬件限制,成本较高。

国外最著名的虚拟士兵系统是美国Boston Dynamics公司的DI-GUY。该系统可以在实时虚拟环境中嵌入逼真虚拟士兵,虚拟士兵可以做出各种动作,响应用户的命令,并能根据指定的路线在虚拟环境中漫游。但是DI-GUY仅限于商用,价格昂贵。

发明内容

本发明为克服上述现有技术的缺点和不足,提供一种高效、灵活的基于命令流的三维角色动画合成方法,支持在分布式平台基于位置、朝向、移动状态、全身状态和上身姿态等命令流信息来控制虚拟角色的动画合成,实现具有各种逼真战术动作的虚拟士兵。

本发明采用的具体技术方案是:

(1)首先将角色动作模型按移动状态、全身姿态和上身姿态分类描述;

(2)构建动作分类的组合关系表,并制作具体的三维动画文件,要求动画之间共享同一骨架、模型;

(3)搭建socket通信的客户机和服务器模型,并制定数据传输的协议规范;

(4)客户机解析服务器传来的命令数据流,得到角色ID、时间戳、移动状态索引、全身状态索引和上身姿态索引;

(5)根据角色ID,查找到相应的角色;根据命令中的运动类型,查找动作分类的组合关系表,获得相关的运动文件序列;

(6)对步骤五所确定角色的运动文件序列作运动混合;

(7)根据时间戳和刷新帧率,对运动混合的结果姿态插值播放。

所述的角色动作模型分类描述方法是指角色动作按照移动状态、全身姿态和上身姿态来进行分类,其中移动状态包括静止、移动、加速、减速四种状态;全身姿态包括站姿、跪姿和卧姿三种状态;上身姿态包括空手、瞄准、执枪、投掷、工程作业、攀爬和死亡七种状态。

所述的角色三维动画文件制作方法是指利用Maya软件制作基本的角色动作文件,要求所有的动作之间共享同一骨架、模型,包含的动画文件如下表所示:

动画文件表

所述的动作分类的组合关系表是指描述动作分类与三维动画文件之间的映射关系,包括周期动作分类组合关系表、action动作分类组合关系表和辅助action动作表。

周期动作分类组合关系表

action动作分类组合关系表

序号全身姿态上身姿态结果动画文件1站姿瞄准或持枪站立瞄准动作2跪姿瞄准或持枪半蹲瞄准动作3卧姿瞄准或执枪卧姿瞄准动作4站姿投掷站立投掷动作5跪姿投掷半蹲投掷动作6卧姿投掷卧姿投掷动作7跪姿工程作业半蹲工程作业动作8卧姿工程作业卧姿工程作业动作9站姿攀爬站立攀爬动作10-不限死亡死亡动作

辅助action动作表

序号前置条件结果动画文件1立姿情况上身姿态从非持枪切换为持枪站立取出武器动作2立姿情况上身姿态从持枪切换为非持枪站立放回武器动作3跪姿情况上身姿态从非持枪切换为持枪半蹲取出武器动作4跪姿情况上身姿态从持枪切换为非持枪半蹲放回武器动作5卧姿情况上身姿态从非持枪切换为持枪卧姿取出武器动作6卧姿情况上身姿态从持枪切换为非持枪卧姿放回武器动作

所述的角色命令流解析与运动文件序列生成方法主要包含以下几个步骤:

(1)客户机和服务器之间通过Socket通信,服务器采用UDP协议向客户机传输数据,且数据包格式协议规范描述如下表:

数据包格式

(2)客户机根据数据包格式规范,解析服务器传来的命令数据流,获得角色ID,记录当前时间戳(T1时刻)角色所在的位置P1、朝向D1、移动状态索引Move1、全身状态索引Pose1和上身姿态索引ArmPose1,并保存下一时间戳(T2时刻)角色所在的位置P2、朝向D2、移动状态索引Move2、全身状态索引Pose2和上身姿态索引ArmPose2

(3)判断Move1与Move2是否相同,是则转步骤(5);否则,进行下一步;

(4)根据状态Move2查询周期动作分类组合关系表输出相应的动画文件到CycleAnimList中;

(5)判断ArmPose1与ArmPose2是否相同,是则转步骤(10);否则,进行下一步;

(6)判断ArmPose1是否为持枪状态,且ArmPose2是否为空手、瞄准、投掷、工程作业、攀爬等五种状态,是则转下一步;否则,转步骤(8);

(7)根据Pose2的状态(姿、跪姿或卧姿)分别从辅助动作表输出动画文件-站立放回武器动作、半蹲放回武器动作或卧姿放回武器动作到ActionAnimList中。转步骤(10);

(8)判断ArmPose2是否为持枪状态,且ArmPose1是否为空手、瞄准、投掷、工程作业、攀爬等五种状态,是则转下一步;否则,转步骤(10);

(9)根据Pose2的状态(姿、跪姿或卧姿)分别从辅助动作表输出动画文件-站立取出武器动作、半蹲取出武器动作或卧姿取出武器动作到ActionAnimList中;

(10)根据状态Move2、Pose2、ArmPose2查询action动作分类组合关系表输出相应的动画文件到ActionAnimList中。

所述的角色运动文件序列运动混合方法主要包含以下几个步骤:

(1)对ActionAnimList中的所有动作采用直接过渡的方式连接,连接结果记为Anim1,采用淡入淡出的过渡函数对前后两个运动片断进行融合;

(2)采用单调递减函数α=cos(t/T)对前一个运动片断作淡出处理,其中t∈[0,T],T为用户指定的过渡时间;

(3)采用单调递增函数β=1-cos(t/T)对后一个运动片断作淡入处理,其中t∈[0,T],T为用户指定的过渡时间;

(4)对CycleAnimList中的所有动作采用加权平均的方式融合,连接结果记为Anim2,加权平均公式为:

其中Animi为CycleAnimList中的第i个周期动作,wi为它的权重系数;

(5)对Anim1和Anim2采用加权平均的方式融合,得到结果Anim,加权平均公式为:Anim=(Anim1+Anim2)/2。

所述的角色运动混合的结果按位置和朝向插值后动画播放方法主要包含以下几个步骤:

(1)利用角色当前时间戳T1所在位置P1和下一时间戳T2所在位置P2,采用线性插值函数计算下一帧角色所在位置P;

(2)计算位置所采用的线性插值函数为:

其中f为运行帧率,n为当前时刻所在帧号;当P到达P2位置后,n重新清零;

(3)利用角色当前时间戳T1的朝向D1和下一时间戳T2的朝向D2,采用线性插值函数计算下一帧角色的朝向D;

(4)计算朝向所采用的线性插值函数为:

其中f为运行帧率,n为当前时刻所在帧号,Tdur为用户设置的旋转过渡时间;当D到达D2朝向后,n重新清零。

本发明应用于虚拟战场环境或战争类游戏中,提供虚拟士兵的行为控制和动作播放。本发明将复杂的战术动作分解为简单高级控制指令的组合,服务器采用广播的方式将控制指令数据发布于网络中的全部客户机,控制客户机实现如投掷、匍匐、射击等一系列的战术行为,并能逼真地再现不同动作间的自动转换,同时支持角色的位置和朝向的平滑插值更新,避免了繁琐的命令控制过程和动作之间的组合爆炸问题,动作切换平滑、自然,可广泛用于各虚拟战场中,因此本发明具有一定的应用价值。

附图说明

图1为实施本发明的系统总体结构示意图;

图2为本发明所采用的动作骨架层级结构遍历的示意图;

图3为本发明所采用的当前运动状态从(静止、跪姿、持枪)变为目标运动状态(移动、站立、投掷)时所输出的运动序列的示意图。

具体实施方式

下面结合附图与实例对本发明做进一步详细描述:

本发明应用于虚拟战场环境中虚拟士兵的可视化仿真中,客户机系统最底层为数据层,提供支持虚拟士兵行为动作的基本行为动作库;第二层为动画合成引擎层,接受并解析服务器传来的命令流,利用动画过渡和混合算法生成虚拟士兵的动作;第三层为OpenGL图形渲染层,显示虚拟士兵的三维几何模型渲染结果并输出在屏幕上。

本发明实施过程包括四个主要步骤:构建运动组合关系表、命令流解析与运动文件序列生成、运动数据混合和动画插值播放。

步骤一:运动文件分类与制作

第一阶段:运动分类描述

按照命令流的协议规范,将动作按移动状态、全身姿态和上身姿态来进行分类描述,其中移动状态包括静止、移动、加速、减速四种状态;全身姿态包括站姿、跪姿和卧姿三种状态;上身姿态包括空手、瞄准、执枪、投掷、工程作业、攀爬和死亡七种状态。

第二阶段:基本运动文件制作

利用Maya软件制作基本的角色动作文件,要求所有的动作之间共享同一骨架、模型,动作的骨架层级结构信息如图2所示。基本运动文件分为两大类:Action运动和周期运动。Action运动包括站立瞄准动作、半蹲瞄准动作、卧姿瞄准动作、站立投掷动作、半蹲投掷动作、卧姿投掷动作、站立工程作业动作、半蹲工程作业动作、站立攀爬动作、死亡动作、站立取出武器动作、站立放回武器动作、半蹲取出武器动作、半蹲放回武器动作、卧姿取出武器动作、卧姿放回武器动作,Action运动的特点是只执行一次,执行结束即从当前动作集合里自动删除,命令流输出的Action运动将保存在ActionAnimList中;周期运动包括空闲站立动作、空闲半蹲动作、空闲卧姿动作、向前行走动作、向左行走动作、向右行走动作、后退行走动作、向前匍匐动作、向左匍匐动作、向右匍匐动作、后退匍匐动作、向前跑步动作、向左跑步动作、向右跑步动作、后退跑步动作,周期运动的特点是执行后不停循环,直到用户显式停止它为止,命令流输出的周期运动将保存在CycleAnimList中。

运动文件中角色由骨架驱动,骨架按照父子关系是以树状结构层级组织,每根骨骼存储着该骨骼在父骨骼坐标系空间中的位置和朝向。对骨骼状态信息的计算方式是:从根关节为起点,对骨架层次结构进行遍历,递归计算每一块骨骼相对于身体坐标的全局变换信息。

第三阶段:建立运动组合关系表

运动组合关系表用于描述动作分类与三维动画文件之间的映射关系,包括周期动作分类组合关系表、action动作分类组合关系表和辅助action动作表。其中周期动作分类组合关系表主要描述移动状态、全身姿态与周期运动的关系;action动作分类组合关系表主要描述全身姿态、上身姿态与Action运动的关系;辅助action动作表主要描述上身姿态在持枪及非持枪切换状况下所需生成的辅助action动作关系。

步骤二:命令流解析与运动文件序列生成

第一阶段:命令流解析

系统采用客户机和服务器模式的网络架构,客户机和服务器之间通过Socket通信,采用UDP协议。服务器对人机交互接口进行控制,并通过网络将数据传递给客户机。服务器与客户机间传输数据包括角色ID、时间戳、单兵位置和朝向信息(6自由度)、移动状态、全身状态和上身姿态。客户机接受到传输来的数据后,根据数据包格式规范,解析服务器传来的命令数据流,获得角色ID,记录当前时间戳(T1时刻)角色所在的位置P1、朝向D1、移动状态索引Move1、全身状态索引Pose1和上身姿态索引ArmPose1,并保存下一时间戳(T2时刻)角色所在的位置P2、朝向D2、移动状态索引Move2、全身状态索引Pose2和上身姿态索引ArmPose2

第二阶段:运动文件序列生成

系统按照预设的时间步长推进,客户端在每一时间步接收服务器端的数据,解析后按如下规则输出运动文件序列:

(1)利用角色ID找到对应角色,如果角色的当前运动状态与下一时间戳的目标运动状态无差异,则不产生输出;

(2)首先处理周期运动的输出。如果角色当前的移动状态与下一时间戳的目标移动状态无差异,则不产生新的周期运动输出;否则根据目标移动状态查询周期动作分类组合关系表输出相应的动画文件到CycleAnimList中;

(3)然后处理Action动作的输出。如果角色当前的上身姿态、全身状态与下一时间戳的目标上身姿态、全身状态无差异,则不产生新的Action运动输出;如果角色当前的上身姿态为持枪状态,且下一时间戳的目标上身姿态为非持枪状态(空手、瞄准、投掷、工程作业、攀爬),则查找辅助动作表输出动画文件(站立放回武器动作、半蹲放回武器动作或卧姿放回武器动作)到ActionAnimList中;如果角色当前的上身姿态为非持枪状态(空手、瞄准、投掷、工程作业、攀爬),且下一时间戳的目标上身姿态为持枪状态,则查找辅助动作表输出动画文件(站立取出武器动作、半蹲取出武器动作或卧姿取出武器动作)到ActionAnimList中;进一步查询action动作分类组合关系表输出相应的动画文件到ActionAnimList中。

以角色的当前运动状态为(静止、跪姿、持枪)变为下一时间戳的目标运动状态为(移动、站立、投掷),按照本发明的规则,将输出向前行走动作到CycleAnimList中,输出立姿放回武器动作和立姿投掷动作到ActionAnimList中。图3给出了输出的运动序列的示意图。

步骤三:运动数据混合

首先对ActionAnimList中的所有运动序列采用直接过渡的方式做拼接处理,采用淡入淡出的过渡函数对前后两个运动片断进行融合,其中对前一个运动片断做淡出处理的过渡函数为α=cos(t/T),t∈[0,T];对后一个运动片断做淡入处理的过渡函数为β=1-cos(t/T),t∈[0,T],这里T为用户指定的过渡时间。将拼接混合的动画结果记为Anim1。

然后对CycleAnimList中的所有运动序列采用加权平均的方式进行融合,混合结果记为Anim2,加权平均公式为:其中Animi为CycleAnimList中的第i个周期动作,wi为它的权重系数;

最后,对Anim1和Anim2采用加权平均的方式融合,得到混合结果Anim,加权平均公式为:Anim=(Anim1+Anim2)/2。

这里动画的加权平均是指对动画的所有骨骼信息(平移和旋转信息)的加权平均。

步骤四:动画插值播放

动画插值播放是指对混合后的最终结果动画Anim放置在虚拟场景中更新状态并绘制。假设结果动画Anim的周期为T,角色在当前时间戳T1时所在位置为P1和下一时间戳T2所在位置为P2,角色当前时间戳T1的朝向D1和下一时间戳T2的朝向D2,且结果动画Anim的起始播放时间为Ts,首先计算下一帧角色所在位置P,采用如下线性插值函数:

其中f为运行帧率,n为当前时刻所在帧号;当P到达P2位置后,n重新清零;

然后计算下一帧角色的朝向D,采用如下线性插值函数;

其中f为运行帧率,n为当前时刻所在帧号,Tdur为用户设置的旋转过渡时间;当D到达D2朝向后,n重新清零;

最后,在位置P,以朝向D对角色的骨架信息进行更新。根据当前逝去时间(当前系统时间与动画开始时系统时间的差值,即T1-Ts),和动画周期T,计算当前动画时刻为(T1-Ts)%T;从结果动画Anim中取出当前动画时刻的姿态将其平移到位置P,旋转为朝向D,用更新的结果绘制出角色。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号