CN112669194A - 虚拟场景中的动画处理方法、装置、设备及存储介质 - Google Patents

虚拟场景中的动画处理方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112669194A
CN112669194A CN202110011790.3A CN202110011790A CN112669194A CN 112669194 A CN112669194 A CN 112669194A CN 202110011790 A CN202110011790 A CN 202110011790A CN 112669194 A CN112669194 A CN 112669194A
Authority
CN
China
Prior art keywords
animation
virtual scene
processing
state
virtual
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110011790.3A
Other languages
English (en)
Other versions
CN112669194B (zh
Inventor
刘智洪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202110011790.3A priority Critical patent/CN112669194B/zh
Publication of CN112669194A publication Critical patent/CN112669194A/zh
Application granted granted Critical
Publication of CN112669194B publication Critical patent/CN112669194B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Processing Or Creating Images (AREA)

Abstract

本申请提供了一种虚拟场景中的动画处理方法、装置、设备及计算机可读存储介质;方法包括:采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对所述虚拟场景的动画数据进行采样;当所述业务逻辑处理完成、且动画数据采样完成时,触发动画状态机的回调,以获取动画状态;采用并行的处理方式,基于所述动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,并建立所述骨骼节点与所述动画数据之间的关联关系;基于所述虚拟对象的各骨骼节点的目标位置及所述动画数据,生成对应所述虚拟场景的包含所述虚拟对象的动画。通过本申请,能够提高虚拟场景中的动画处理的效率。

Description

虚拟场景中的动画处理方法、装置、设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种虚拟场景中的动画处理方法、装置、设备及计算机可读存储介质。
背景技术
基于图形处理硬件的显示技术,扩展了感知环境以及获取信息的渠道,尤其是虚拟场景的显示技术,能够根据实际应用需求实现受控于用户或人工智能的虚拟对象之间的多样化的交互,具有各种典型的应用场景,例如在军事演习仿真、以及游戏等的虚拟场景中,能够模拟虚拟对象之间的真实的对战过程。
在对虚拟场景中的动画进行处理时,需要依次执行很多任务,如更新虚拟场景的状态、执行脚本等,对于大地图的虚拟场景,性能消耗非常高,会导致虚拟场景呈现过程中出现缓慢、卡顿、掉帧甚至直接闪退等现象。
发明内容
本申请实施例提供一种虚拟场景中的动画方法、装置、设备及计算机可读存储介质,能够提高虚拟场景中的动画处理的效率。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种虚拟场景中的动画处理方法,包括:
采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对所述虚拟场景的动画数据进行采样;
当所述业务逻辑处理完成、且动画数据采样完成时,触发动画状态机的回调,以获取动画状态;
采用并行的处理方式,基于所述动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,并建立所述骨骼节点与所述动画数据之间的关联关系;
基于所述虚拟对象的各骨骼节点的目标位置及所述动画数据,生成对应所述虚拟场景的包含所述虚拟对象的动画。
本申请实施例提供一种虚拟场景中的动画处理装置,包括:
第一处理模块,用于采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对所述虚拟场景的动画数据进行采样;
回调模块,用于当所述业务逻辑处理完成、且动画数据采样完成时,触发动画状态机的回调,以获取动画状态;
第二处理模块,用于采用并行的处理方式,基于所述动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,并建立所述骨骼节点与所述动画数据之间的关联关系;
生成模块,用于基于所述虚拟对象的各骨骼节点的目标位置及所述动画数据,生成对应所述虚拟场景的包含所述虚拟对象的动画。
上述方案中,所述第一处理模块,还用于当存在多核中央处理器时,从所述多核中央处理器中确定第一处理器核心及第二处理器核心;
创建对应所述第一处理器核心的第一线程,以及对应所述第二处理器核心的第二线程;
通过所述第一线程,对虚拟场景中的业务逻辑进行处理,并通过与所述第一线程并行的第二线程,对所述虚拟场景的动画数据进行采样。
上述方案中,所述第一处理模块,还用于获取任务与多核中央处理器中各处理器核心之间的映射关系;
基于所述映射关系,确定与第一任务对应的第三处理器核心及与第二任务对应的第四处理器核心;其中,所述第一任务为对虚拟场景中的业务逻辑进行处理,所述第二任务为对所述虚拟场景的动画数据进行采样;
采用并行的处理方式,通过第三处理器核心执行所述第一任务,并通过第四处理器核心执行所述第二任务。
上述方案中,所述回调模块,还用于在对虚拟场景中的业务逻辑进行处理及对所述虚拟场景的动画数据进行采样的过程中,
监测用于指示所述业务逻辑处理所对应的处理状态的第一状态标识、及用于指示所述动画数据采样的采样状态的第二状态标识;
当所述第一状态标识由指示正在处理的第一状态值切换至指示处理完成的第二状态值,且所述第二状态标识由指示正在采样的第三状态值切换至采样完成的第四状态值时,确定所述业务逻辑处理完成、且动画数据采样完成。
上述方案中,所述第一处理模块,还用于接收到虚拟场景中的业务请求,所述业务请求用于请求切换所述虚拟场景的动画;
基于所述业务请求,对虚拟场景中的业务逻辑进行处理,得到请求切换的第二动画的动画参数,并
当需要进行动画过渡时,基于第一动画的动画参数及第二动画的动画参数,得到由第一动画过渡至对应所述第二动画的过渡参数、及动画过渡过程中第一动画与第二动画的权重;
当得到第二动画时,基于所述过渡参数、及所述权重,将所述第一动画与所述第二动画进行融合,并在融合完成后,由第一动画切换至第二动画。
上述方案中,所述第一处理模块,还用于获取所述虚拟场景的动画资源、及至少一个采样时间点;
从所述虚拟场景的动画资源中,获取与所述至少一个采样时间点对应的动画数据。
上述方案中,所述回调模块,还用于获取所述业务逻辑处理完成所对应的处理结果;
基于所述业务逻辑的处理结果,确定动画状态机所处的状态,所述状态为所述处理结果所指示的状态;
基于所述动画状态机所处的状态,触发与所述状态相对应的回调。
上述方案中,所述第二处理模块,还用于获取所述虚拟场景中虚拟对象的各骨骼节点在初始状态下的位置;
基于所述动画状态,获取所述虚拟场景中虚拟对象的末梢骨骼节点的目标位置;
根据所述末梢骨骼节点的目标位置、相邻骨骼节点间的距离及各骨骼节点的初始状态下的位置,确定所述虚拟对象的其它骨骼节点的目标位置,以使所述骨骼节点处于目标位置时,相邻骨骼节点间的距离与初始状态下的距离相同。
上述方案中,所述第二处理模块,还用于根据所述末梢骨骼节点的目标位置,对所述虚拟对象的骨骼节点链进行前向遍历,依次调整虚拟对象的各骨骼节点位置;
根据所述虚拟对象的根骨骼节点在初始状态下的位置,对所述虚拟对象的骨骼节点链进行向后遍历,依次调整虚拟对象的各骨骼节点位置;
当骨骼节点链中相邻两个骨骼节点调整后的距离与初始状态下的距离相同时,确定各骨骼节点调整后的位置为目标位置。
上述方案中,所述第二处理模块,还用于从所述动画数据中,获取所述虚拟对象对应的蒙皮网格数据;
基于所述蒙皮网格数据,将蒙皮网格顶点与所述虚拟对象的骨骼节点进行关联,以建立所述骨骼节点与所述动画数据之间的关联关系。
上述方案中,所述生成模块,还用于获取当前播放动画的播放进度;
基于所述播放进度,确定当前属性值改变的比例;
基于当前属性值改变的比例、所述各骨骼节点的目标位置及所述动画数据,进行插值处理,以生成对应所述虚拟场景的包含所述虚拟对象的动画。
上述方案中,所述生成模块,还用于调用用于计算所述虚拟对象的各骨骼节点位置的脚本,基于所述脚本中的计算逻辑,确定所述虚拟对象的各骨骼节点的位置;
当确定的各骨骼节点的位置与各骨骼节点的目标位置不同时,基于确定的所述的各骨骼节点的位置,调整所述虚拟对象的各骨骼节点的目标位置。
本申请实施例提供一种计算机设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的虚拟场景中的动画处理方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的虚拟场景中的动画处理方法。
本申请实施例具有以下有益效果:
应用本申请上述实施例,能够通过并行的处理方式实现虚拟场景中的业务逻辑的处理及虚拟场景的动画数据的采样,而且能够通过并行的处理方式实现虚拟对象各骨骼节点的目标位置的确定、及骨骼节点与动画数据之间关联关系的建立;基于对这些任务并行的处理所生成的动画,提升了中央处理器的执行效率,提高了虚拟场景中的动画的生成效率。
附图说明
图1是本申请实施例提供的系统架构的一个可选的结构示意图;
图2是本申请实施例提供的计算机设备500的结构示意图;
图3是本申请实施例提供的虚拟场景中的动画处理方法的流程示意图;
图4是相关技术提供的unity引擎中的任务执行顺序示意图;
图5是本申请提供的任务执行顺序的示意图;
图6是本申请实施例提供的虚拟场景中的动画处理方法;
图7是本申请实施例提供的线程示意图;
图8A是采用相关技术中的方案的CPU使用情况示意图;
图8B是采用本申请实施例提供的方法的CPU使用情况示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)客户端,终端中运行的用于提供各种服务的应用程序,例如视频播放客户端、游戏客户端等。
2)虚拟场景,是应用程序在终端上运行时显示(或提供)的虚拟场景。该虚拟场景可以是对真实世界的仿真环境,也可以是半仿真半虚构的虚拟环境,还可以是纯虚构的虚拟环境。虚拟场景可以是二维虚拟场景、2.5维虚拟场景或者三维虚拟场景中的任意一种,本申请实施例对虚拟场景的维度不加以限定。例如,虚拟场景可以包括天空、陆地、海洋等,该陆地可以包括沙漠、城市等环境元素,用户可以控制虚拟对象在该虚拟场景中进行移动。
3)虚拟对象,虚拟场景中可以进行交互的各种人和物的形象,或在虚拟场景中的可活动对象。该可活动对象可以是虚拟人物、虚拟动物、动漫人物等,比如:在虚拟场景中显示的人物、动物、植物、油桶、墙壁、石块等。该虚拟对象可以是该虚拟场景中的一个虚拟的用于代表用户的虚拟形象。虚拟场景中可以包括多个虚拟对象,每个虚拟对象在虚拟场景中具有自身的形状和体积,占据虚拟场景中的一部分空间。
可选地,该虚拟对象可以是通过客户端上的操作进行控制的用户角色,也可以是通过训练设置在虚拟场景对战中的人工智能(AI,Artificial Intelligence),还可以是设置在虚拟场景互动中的非用户角色(NPC,Non-Player Character)。可选地,该虚拟对象可以是在虚拟场景中进行对抗式交互的虚拟人物。可选地,该虚拟场景中参与互动的虚拟对象的数量可以是预先设置的,也可以是根据加入互动的客户端的数量动态确定的。
参见图1,图1为本申请实施例提供的虚拟场景中的动画处理方法的一个可选的实施场景示意图,为实现支撑一个示例性应用,终端400(示例性示出了终端400-1和终端400-2)通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合,使用无线链路实现数据传输。
在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(CDN,ContentDelivery Network)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
在实际实施时,虚拟场景可以是游戏场景、室内设计模拟场景等,终端安装和运行有支持虚拟场景的应用程序。该应用程序可以是第一人称射击游戏(FPS,First-PersonShooting game)、第三人称射击游戏、多人在线战术竞技游戏(MOBA,Multiplayer OnlineBattle Arena games)、虚拟现实应用程序、三维地图程序、军事仿真程序或者三维设计程序中的任意一种。终端可以通过上述应用程序,呈现虚拟场景的动画,用户可以通过该应用程序对呈现的动画状态进行调整,如控制虚拟场景的的虚拟对象移动,以实现动画状态的调整;相应的,服务器可以生成相应的动画,并发送给终端,终端呈现接收到动画,以实现动画状态的更新。
在一个示例性的场景中,终端400-1控制的虚拟对象(第一虚拟对象)和其他终端400-2控制的虚拟对象(第二虚拟对象)处于同一虚拟场景中,此时第一虚拟对象可以在虚拟场景中与第二虚拟对象进行互动。在一些实施例中,第一虚拟对象与第二虚拟对象可以为敌对关系,例如,第一虚拟对象与第二虚拟对象属于不同的队伍和组织,敌对关系的虚拟对象之间,可以在陆地上以互相射击的方式进行对抗式交互。
在实际实施时,服务器200进行虚拟场景中场景数据的计算并发送到终端,终端依赖于图形计算硬件完成计算显示数据的加载、解析和渲染,依赖于图形输出硬件输出虚拟场景以形成视觉感知,例如可以在智能手机的显示屏幕呈现二维的视频帧,或者,在增强现实/虚拟现实眼镜的镜片上投射实现三维显示效果的视频帧;对于虚拟场景的形式的感知而言,可以理解,可以借助于终端的相应硬件输出,例如使用麦克风输出形成听觉感知,使用振动器输出形成触觉感知等等。
终端运行客户端(例如网络版的游戏应用),通过连接服务器与其他用户进行游戏互动,终端输出虚拟场景的画面,画面中包括虚拟对象,这里的虚拟对象是受用户控制的游戏角色,也即第一虚拟对象受控于真实用户,将响应于真实用户针对控制器(包括触控屏、声控开关、键盘、鼠标和摇杆等)的操作而在虚拟场景中运动,例如当真实用户向左移动摇杆时,虚拟对象将在虚拟场景中向左部移动,还可以保持原地静止、跳跃以及使用各种功能(如技能和道具)。
这里,用户在控制虚拟对象的过程中,终端会执行虚拟场景中的动画处理,以生成对应虚拟场景的包含虚拟对象的动画,具体的,终端采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对虚拟场景的动画数据进行采样;当业务逻辑处理完成、且动画数据采样完成时,触发动画状态机的回调,以获取动画状态;采用并行的处理方式,基于动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,并建立骨骼节点与所述动画数据之间的关联关系;基于虚拟对象的各骨骼节点的目标位置及动画数据,生成对应虚拟场景的包含虚拟对象的动画。
在一个示例性场景中,在军事虚拟仿真应用中,采用虚拟场景技术使受训者在视觉和听觉上真实体验战场环境、熟悉将作战区域的环境特征,通过必要的设备与虚拟环境中的对象进行交互作用,虚拟战场环境的实现方法可通过相应的三维战场环境图形图像库,包括作战背景、战地场景、各种武器装备和作战人员等,通过背景生成与图像合成创造一种险象环生、几近真实的立体战场环境。
在实际实施时,终端400运行客户端(军事仿真程序),通过连接服务器200与其他用户进行军事演习,终端400输出虚拟场景的画面,画面中包括虚拟对象,这里的虚拟对象是受用户控制的模拟作战人员。用户在控制虚拟对象的过程中,终端会执行虚拟场景中的动画处理,以生成对应虚拟场景的包含虚拟对象的动画,具体的,终端采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对虚拟场景的动画数据进行采样;当业务逻辑处理完成、且动画数据采样完成时,触发动画状态机的回调,以获取动画状态;采用并行的处理方式,基于动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,并建立骨骼节点与所述动画数据之间的关联关系;基于虚拟对象的各骨骼节点的目标位置及动画数据,生成对应虚拟场景的包含虚拟对象的动画。
参见图2,图2是本申请实施例提供的计算机设备500的结构示意图,在实际应用中,计算机设备500可以为图1中的终端(如400-1)或服务器200,以计算机设备为图1所示的终端为例,对实施本申请实施例的虚拟场景中的动画处理方法的计算机设备进行说明。图2所示的计算机设备500包括:至少一个处理器510、存储器550、至少一个网络接口520和用户接口530。计算机设备500中的各个组件通过总线系统540耦合在一起。可理解,总线系统540用于实现这些组件之间的连接通信。总线系统540除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统540。
处理器510可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口530包括使得能够呈现媒体内容的一个或多个输出装置531,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口530还包括一个或多个输入装置532,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器550可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器550可选地包括在物理位置上远离处理器510的一个或多个存储设备。
存储器550包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器550旨在包括任意适合类型的存储器。
在一些实施例中,存储器550能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统551,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块552,用于经由一个或多个(有线或无线)网络接口520到达其他计算设备,示例性的网络接口520包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块553,用于经由一个或多个与用户接口530相关联的输出装置531(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块554,用于对一个或多个来自一个或多个输入装置532之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的虚拟场景中的动画处理装置可以采用软件方式实现,图2示出了存储在存储器550中的虚拟场景中的动画处理装置555,其可以是程序和插件等形式的软件,包括以下软件模块:第一处理模块5551、回调模块5552、第二处理模块5553和生成模块5554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。
将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的虚拟场景中的动画处理装置可以采用硬件方式实现,作为示例,本申请实施例提供的虚拟场景中的动画处理装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的虚拟场景中的动画处理方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,ProgrammableLogic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
将结合本申请实施例提供的终端的示例性应用和实施,说明本申请实施例提供的虚拟场景中的动画处理方法。
参见图3,图3是本申请实施例提供的虚拟场景中的动画处理方法的流程示意图,将结合图3示出的步骤进行说明。
步骤301:终端采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对虚拟场景的动画数据进行采样。
在实际应用中,虚拟场景可以是游戏场景、室内设计模拟场景等,终端安装和运行有支持虚拟场景的应用程序,服务器为对应应用程序的服务器,用于实现虚拟场景数据的计算,并将虚拟场景数据发送至终端,以使终端基于该虚拟场景数据,实现相应的动画处理。
其中,应用程序可以是第一人称射击游戏(FPS,First-Person Shooting game)、第三人称射击游戏、多人在线战术竞技游戏(MOBA,Multiplayer Online Battle Arenagames)、虚拟现实应用程序、三维地图程序、军事仿真程序或者三维设计程序中的任意一种。
这里,本申请采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对虚拟场景的动画数据进行采样,如此,相对于相关技术中先执行对虚拟场景中的业务逻辑进行处理,等业务逻辑处理完成后,再执行动画方面的处理,本申请提高了处理效率。
在实际实施时,虚拟场景中的业务逻辑的处理可以通过MonoBehaviour.Update,该MonoBehaviour.Update在虚拟场景的动画的每一帧调用,用于更新虚拟场景;对虚拟场景的动画数据进行采样,指的是定位动画的某时间点的状态,还原该状态的位置旋转等相关属性。
在一些实施例中,可以通过以下方式采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对虚拟场景的动画数据进行采样:当存在多核中央处理器时,从多核中央处理器中确定第一处理器核心及第二处理器核心;创建对应第一处理器核心的第一线程,以及对应第二处理器核心的第二线程;通过第一线程,对虚拟场景中的业务逻辑进行处理,并通过与第一线程并行的第二线程,对虚拟场景的动画数据进行采样。
在实际实施时,终端可以包含多核中央处理器,每个处理器核心都能够创建一个线程,在同一时间每个线程能够处理一个任务,在需要并行处理两个任务时,可以从多核中央处理器,选择两个空闲的处理器核心,创建相应的线程,即第一线程和第二线程,以通过第一线程,对虚拟场景中的业务逻辑进行处理,并通过与第一线程并行的第二线程,对虚拟场景的动画数据进行采样。
这里,第一线程和第二线程可以同时开始执行,也可以是先执行其中一个线程,在该线程执行的过程中,开始执行另一个线程,例如,先创建第一线程,通过第一线程,对虚拟场景中的业务逻辑进行处理,在业务逻辑处理的过程中,当确定需要对虚拟场景的动画数据进行采样时,创建第二线程,通过与第一线程并行的第二线程,对虚拟场景的动画数据进行采样,以在对虚拟场景中的业务逻辑进行处理的同时,对虚拟场景的动画数据进行采样。
在一些实施例中,可以通过以下方式采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对虚拟场景的动画数据进行采样:获取任务与多核中央处理器中各处理器核心之间的映射关系;基于映射关系,确定与第一任务对应的第三处理器核心及与第二任务对应的第四处理器核心;其中,第一任务为对虚拟场景中的业务逻辑进行处理,第二任务为对虚拟场景的动画数据进行采样;采用并行的处理方式,通过第三处理器核心执行第一任务,并通过第四处理器核心执行第二任务。
在实际实施时,终端可以包含多核中央处理器,并预先设置各任务与中央处理器中处理器核心之间的映射关系,也即处理器核心仅仅负责处理与其建立了映射关系的任务,那么在需要采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对虚拟场景的动画数据进行采样时,获取预先设置的任务与多核中央处理器中各处理器核心之间的映射关系,并基于该映射关系,确定对虚拟场景中的业务逻辑进行处理的第三处理器核心、及对虚拟场景的动画数据进行采样的第四处理器核心;然后基于确定的处理器核心,对相应的任务进行处理。
本申请通过预先设置任务与中央处理器中处理器核心之间的映射关系,使得处理器核心仅仅负责处理和他建立对应关系的任务,而对单个处理机而已仅仅是一个串行的任务处理机,使整个并发模型的构建具有很强的灵活性和稳定性。
在一些实施例中,可以通过以下方式对虚拟场景中的业务逻辑进行处理:接收到虚拟场景中的业务请求,业务请求用于请求切换虚拟场景的动画;基于业务请求,对虚拟场景中的业务逻辑进行处理,得到请求切换的第二动画的动画参数,并当需要进行动画过渡时,基于第一动画的动画参数及第二动画的动画参数,得到由第一动画过渡至对应第二动画的过渡参数、及动画过渡过程中第一动画与第二动画的权重;当得到第二动画时,基于过渡参数、及权重,将第一动画与第二动画进行融合,并在融合完成后,由第一动画切换至第二动画。
在实际实施时,一个动画的播放是从上一动画过渡来的,在播放下一动画的时候,需要计算上一动画过渡到当前动画的一些计算,比如说上一个动画并不是完整的播放到结束才会去播放下一个动画,而是可能播放到一定比例的时候就会开始播放下一个动画,这个重叠的动画播放部分叫做融合,此时就会同时播放两个动画,使得动画切换的更加顺滑。
在一些实施例中,可以通过以下方式对虚拟场景的动画数据进行采样:获取虚拟场景的动画资源、及至少一个采样时间点;从虚拟场景的动画资源中,获取与至少一个采样时间点对应的动画数据。
这里,由于存储空间的限制,不可能将连续动画所有帧的动画数据全部存储下来,因此需要对动画数据进行采样,以尽可能模拟动画。在实际实施时,可以预先设置多个采样时间点,采样时间点之间的时间间隔可以是相同的,也可以是不同的,然后基于该采样时间点,获取该采样时间点对应的动画数据。
步骤302:当业务逻辑处理完成、且动画数据采样完成时,触发动画状态机的回调,以获取动画状态。
在实际实施时,发明人在实施本申请实施例的过程中发现,触发动画状态机的回调过程不能与其它处理并行处理,而只能与其它处理串行处理,因此,需要等待其它任务都完成后再执行,也即,无论业务逻辑的处理和动画数据的采样中哪个先完成,都要等到业务逻辑处理和动画数据采样均完成,再动画状态机的回调。
这里,在业务逻辑处理完成、且动画数据采样完成时,将动画事件回调到C#,触发动画状态机(State Machine Behaviours)的回调,将逻辑处理结果回调到动画处理中,以获取动画状态。这里,动画状态机的行为在动画控制器(Animator Controller)的脚本中是可以附加到动画状态或子状态机。每当进入一种状态,就可以对其添加各种各样的状态依赖,例如播放声音等行为,甚至可以独立于动画。
在一些实施例中,服务器在触发动画状态机的回调之前,还可以在对虚拟场景中的业务逻辑进行处理及对虚拟场景的动画数据进行采样的过程中,监测用于指示业务逻辑处理所对应的处理状态的第一状态标识、及用于指示动画数据采样的采样状态的第二状态标识;当第一状态标识由指示正在处理的第一状态值切换至指示处理完成的第二状态值,且第二状态标识由指示正在采样的第三状态值切换至采样完成的第四状态值时,确定业务逻辑处理完成、且动画数据采样完成。
这里,为实现任务的并行与串行处理,为每个任务都会设置一个状态标识,例如,对于任务a、b、c、d、e、f、g,为每个任务设置一个bool值,bool值为ture或者false,ture表示该任务已完成,false表示该任务未完成,如a、b任务可以并行执行,,那么c任务就必需等待a、b任务的标识信息都设置为true之后,才能执行,同理d任务必需等待c设置为true才能执行,如此就能保证顺序不会错。
在实际实施时,为业务逻辑处理任务和动画数据采样任务分别设置一个状态标识,如bool值,那么,当第一状态标识为ture时,表示业务逻辑处理所对应的处理状态为处理完成,当第一状态标识为false时,表示业务逻辑处理所对应的处理状态为正在处理;相应的,当第二状态标识为ture时,表示业务逻辑处理所对应的处理状态为采样完成,当第一状态标识为false时,表示业务逻辑处理所对应的处理状态为正在采样;在对虚拟场景中的业务逻辑进行处理及对虚拟场景的动画数据进行采样的过程中,对该状态标识进行监测,如对第一状态标识和第二状态标志进行监测,当第一状态标识由ture切换至false、且第二状态标识由ture切换至false,那么,确定业务逻辑处理完成、且动画数据采样完成。
在一些实施例中,可以通过以下方式触发动画状态机的回调:获取业务逻辑处理完成所对应的处理结果;基于业务逻辑的处理结果,确定动画状态机所处的状态,状态为处理结果所指示的状态;基于动画状态机所处的状态,触发与状态相对应的回调。
在实际实施时,Unity使用StateMachineBehaviours类来描述状态机的行为,当状态机处于不同的状态时,会触发不同的回调;这里,获取业务逻辑的处理结果,以根据状态与回调的对应关系,触发与处理结果所指示的状态对应的回调。
步骤303:采用并行的处理方式,基于动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,并建立骨骼节点与动画数据之间的关联关系。
这里,动画状态包含虚拟对象的状态,如攻击状态、走路状态,例如虚拟对象的状态为走路状态时,可以根据走路状态来确定虚拟对象各骨骼节点的目标位置,这里的目标位置指的是下一帧动画中虚拟对象各骨骼节点的位置。
在实际应用中,可以采用正向运动学(FK,Forawrd kinematics)来虚拟对象各骨骼节点的目标位置,也即通过逐个设置每个骨骼节点的旋转来达到最终姿势;也可以采用逆向运动学(IK,Inverse Kinematics)允许给骨骼直接设置一个目标位置,基于该各个节点会计算其它骨骼的旋转和位置。
在一些实施例中,可以通过以下方式基于动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置:获取虚拟场景中虚拟对象的各骨骼节点在初始状态下的位置;基于动画状态,获取虚拟场景中虚拟对象的末梢骨骼节点的目标位置;根据末梢骨骼节点的目标位置、相邻骨骼节点间的距离及各骨骼节点的初始状态下的位置,确定虚拟对象的其它骨骼节点的目标位置,以使骨骼节点处于目标位置时,相邻骨骼节点间的距离与初始状态下的距离相同。
在实际实施时,虚拟对象的动作在改变的过程中,两个相邻骨骼节点间的距离应该是不变的,如手部骨骼节点与下手臂骨骼节点之间的距离是不变的,且根骨骼节点的位置也是不变的,如虚拟对象出拳时,肩部骨骼节点的位置时不变的,基于此,可以根据末梢骨骼节点的目标位置、相邻骨骼节点间的距离及根骨骼节点的位置,确定其它骨骼节点的目标位置。
在一些实施例中,当IK计算涉及3个骨骼节点时,包括末梢骨骼节点(End bone)、关节骨骼节点(joint bone)、根节点(root bone),其中,joint bone是end bone的父骨骼节点,root bone是joint bone的父骨骼节点;可以将末梢骨骼节点设置到目标位置,然后根据该末梢骨骼节点计算joint bone的目标位置,因为连接3个骨骼节点的线段长度是不变的;例如,对于虚拟对象的手臂,可以设置手部骨骼节点的目标位置,由于臂长是不变的,可以根据该手部骨骼节点的目标位置和上臂骨骼节点的位置,来计算下手臂骨骼节点的位置。
在一些实施例中,可以通过以下方式根据末梢骨骼节点的目标位置、相邻骨骼节点间的距离及各骨骼节点的初始位置,确定虚拟对象的其它骨骼节点的目标位置:根据末梢骨骼节点的目标位置,对虚拟对象的骨骼节点链进行前向遍历,依次调整虚拟对象的各骨骼节点位置;根据虚拟对象的根骨骼节点在初始状态下的位置,对虚拟对象的骨骼节点链进行向后遍历,依次调整虚拟对象的各骨骼节点位置;当骨骼节点链中相邻两个骨骼节点调整后的距离与初始状态下的距离相同时,确定各骨骼节点调整后的位置为目标位置。
在实际实施时,可以重复执行先前遍历、和向后遍历的过程,如可以迭代10次,以使骨骼节点链中相邻两个骨骼节点调整后的距离与初始状态下的距离相同;需要说明的是,这里的相同可以是不完全相同,也即调整后的距离与初始状态下的距离之间的差值达到预设精度后,则认为调整后的距离与初始状态下的距离相同。
例如,当骨骼节点链包括四个骨骼节点A、B、C、D时,当移动骨骼节点A(末梢骨骼节点)的位置到目标位置后,执行一次前向遍历:根据A的位置调整其它骨骨骼节点的位置。由于骨骼节点A与骨骼节点B的距离拉长,所以需要将骨骼节点B沿位置着B->A的方向拉回到与A原始距离相同的位置,同理B的移动也导致B到C的距离拉长,需要将C沿着C->B的方向将C拉回到与B原始距离相同的位置;接着,执行一次后向遍历:根据骨骼节点D(根骨骼节点)在初始状态下的位置调整其它骨骼的位置,即,将C沿着C->D的方向拉回与D原始距离相同的位置,将B沿着B->C的方向拉回与C原始距离相同的位置;默认遍历过程迭代10次。
在一些实施例中,可以通过以下方式建立骨骼节点与动画数据之间的关联关系:从动画数据中,获取虚拟对象对应的蒙皮网格数据;基于蒙皮网格数据,将蒙皮网格顶点与虚拟对象的骨骼节点进行关联,以建立骨骼节点与动画数据之间的关联关系。
在实际实施时,将蒙皮网格顶点绑定到一个骨骼层次上面,以将蒙皮网格顶点与虚拟对象的骨骼节点进行关联,当骨骼层次变化之后,可以根据绑定信息计算出新的网格顶点坐标,进而驱动该网格变形;一个完整的骨骼动画一般由骨架层次、绑定网格以及一系列关键帧组成,一个关键帧对应于骨架的一个新状态,两个关键帧之间的状态可以通过插值得到。
步骤304:基于虚拟对象的各骨骼节点的目标位置及动画数据,生成对应虚拟场景的包含虚拟对象的动画。
在实际实施时,若只是获取每帧的虚拟对象的各骨骼节点的目标位置及动画数据,会导致动画不连续,需要通过插值处理,确定动画变化的过程,进而生成对应虚拟场景的包含虚拟对象的动画。
在一些实施例中,可以通过以下方式生成对应虚拟场景的包含虚拟对象的动画:获取当前播放动画的播放进度;基于播放进度,确定当前属性值改变的比例;基于当前属性值改变的比例、各骨骼节点的目标位置及动画数据,进行插值处理,以生成对应虚拟场景的包含虚拟对象的动画。
在实际实施时,可以通过applyTranformation()方法来生成对应虚拟场景的包含虚拟对象的动画,这里,applyTranformation()方法是真正的处理动画变化的过程。在实际应用中,终端获取当前的时间,以得到播放动画的播放进度,比如,一个2000ms的动画,已经执行了1000ms了,那么进度就是0.5或者说50%;然后将该播放进度传入插值器,得到新的进度值,新的进度值用于确定当前属性值(如材质的颜色)改变的比例;将新的进度值和Transformation对象传入applyTranformation()方法中,便能够生成对应虚拟场景的包含虚拟对象的动画,这里Transformation对象携带有各骨骼节点的目标位置及动画数据。需要说明的是,属性值在播放过程的改变的比例可以是均匀的,也可以是不均匀的。
在一些实施例中,服务器还可以调用用于计算虚拟对象的各骨骼节点位置的脚本,基于脚本中的计算逻辑,确定虚拟对象的各骨骼节点的位置;当确定的各骨骼节点的位置与各骨骼节点的目标位置不同时,基于确定的的各骨骼节点的位置,调整虚拟对象的各骨骼节点的目标位置。
这里的脚本用于计算虚拟对象的各骨骼节点的位置,以得到骨骼节点的变化,该脚本由开发人员根据实际的虚拟场景编写。该脚本在MonoBehaior.LateUpdate执行,MonoBehaior.LateUpdate在虚拟场景的动画的每一帧调用,用于更新虚拟场景,与MonoBehaviour.Update不同的是,其在MonoBehaviour.Update中所有内容执行后执行。
这里,当脚本计算出的各骨骼节点的位置与之前计算出的各骨骼节点的目标位置不同时,使用脚本计算出的各骨骼节点的位置。
应用本申请上述实施例,通过采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对虚拟场景的动画数据进行采样;当业务逻辑处理完成、且动画数据采样完成时,触发动画状态机的回调,以获取动画状态;采用并行的处理方式,基于动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,并建立骨骼节点与动画数据之间的关联关系;基于虚拟对象的各骨骼节点的目标位置及动画数据,生成对应虚拟场景的包含虚拟对象的动画;如此,确定出能够并行处理的任务,并通过并行的方式对这些任务进行处理,提升了中央处理器的执行效率,提高了虚拟场景中的动画处理的效率。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。以虚拟场景为游戏场景为例进行说明,这里的游戏为基于unity引擎制作的游戏。
在相关技术中,只能按照unity引擎设计的方式来执行动画处理,本申请根据实际来修改引擎对动画的处理。图4是相关技术提供的unity引擎中的任务执行顺序示意图,参见图4,unity引擎中的任务是串行执行的,也即需要先执行游戏业务逻辑的任务(MonoBehaviour.Update),游戏业务逻辑的任务执行完毕后,才开始执行后面与动画有关的任务,包括正向过程(Forward Pass)、触发事件(FireEvent)、逆向运动学过程(IKPass)、写入步骤(WriteStep)、应用变化(Apply Transform)、晚于更新(MonoBehaviour.LateUpdate),其中与动画有关的任务也是依次执行的;由于现在的计算机设备都是多核中央处理器(CPU)计算,与动画有关的任务中,有一些任务不需要等待游戏业务逻辑的任务执行完毕才开始执行,而是可以与游戏业务逻辑的任务一起执行的。
由于unity引擎中的任务是串行执行的,导致执行效率不高,基于此,本申请从unity引擎中的任务中确定出能够并行处理的任务,将其从串行处理修改为并行处理。
上述任务中,MonoBehaviour.Update任务在动画的每一帧调用,一般用于更新场景和状态;MonoBehaviour.Update任务中的Prepare Pass任务主要是计算动画过渡参数、节点的权重、当前帧采样事件;一个动画的播放是从上一个动画过渡过来的,因而在播放下一个动画的时候需要计算上一个动画过渡到当前动画的过渡参数(如过渡时长),比如说上一个动画并不是完整的播放到结束才会去播放下一个动画,而是可能播放到一定比例的时候就会开始播放下一个动画,这个重叠的动画播放部分叫做融合,此时就会同时播放两个动画,使得动画切换的更加顺滑。
Forward Pass主要是进行动画数据的采样,而这个过程也是比较耗费时间的,但是这个过程可以进行并行处理,即将其与MonoBehaviour.Update的任务一起并行处理。
Fire Event用于将动画事件回调到C#及动画状态机(StateMachineBehavior)的回调,其不能与其它任务并行处理。
IK Pass用于执行引擎层的骨骼节点的位置变化的计算和重定向流程,可以与其它任务并行处理。
Write Step用于写入动画数据,即将动画数据与骨骼关联,可以与其它任务并行处理。
ApplyTransform用于计算属性值的变化,比如材质的颜色,其是C#对象的变量,不可以与其它任务并行处理
脚本层IK Script IK在晚于更新(Lateupdate)执行,通过读取引擎计算的结果计算骨骼节点的位置变化。
由此可知,Forward Pass可以与update并行处理,IK Pass可以与Write Step并行处理,图5是本申请提供的任务执行顺序的示意图,参见图5,Forward Pass与update并行执行,Forward Pass与update都执行完毕后,执行Fire Event;Fire Event执行完毕后,执行IK Pass与Write Step。
图6是本申请实施例提供的虚拟场景中的动画处理方法,参见图6,本申请实施例提供的虚拟场景中的动画处理包括:
步骤601:开始执行动画计算。
步骤602:判断是否执行到Forward Pass任务,若是,执行步骤603;否则,执行步骤601。
步骤603:增加一个线程,通过新增的线程执行Forward Pass任务,以使ForwardPass任务与MonoBehaviour.Update任务并行执行。
这里,由于每一个CPU仅能开启一个线程,每一个线程同一时间仅能处理一个任务,MonoBehaviour.Update任务需要占用一个线程来处理,基于此,Unity引擎原有的逻辑把Forward Pass任务放置在MonoBehaviour.Update任务后面来处理,也即必须等待MonoBehaviour.Update任务完成后才能执行Forward Pass任务。但现在的终端都是多核CPU,且Forward Pass任务并没有与MonoBehaviour.Update任务冲突,基于此,可以创建一个新的线程来执行Forward Pass任务。
作为示例,图7是本申请实施例提供的线程示意图,参见图7,当某个手机有4个CPU核心时,那么就可以开启四个线程ABCD,这个时候A负责处理MonoBehaviour.Update任务,由于相关技术中Unity引擎的执行是串行的,导致BCD一直空闲着没有进行任何的任务处理,基于此,将可以与MonoBehaviour.Update任务并行处理的任务提出来,放到BCD中的任意一个或者多个进行处理,图中的长方形条越长表示处理的时间越长。这里,无论哪个任务的处理时间需要多少,都必须等待最长的那个完成任务后才能继续后面的串行的任务。
这里,为实现任务的并行与串行处理,为每个任务都会设置一个状态标识,例如,对于任务a、b、c、d、e、f、g,为每个任务设置一个bool值,ture或者false,ture表示该任务已完成,false表示该任务未完成,如a、b任务可以并行执行,,那么c任务就必需等待a、b任务的标识信息都设置为true之后,才能执行,,同理d任务必需等待c设置为true才能执行,如此就能保证顺序不会错。
步骤604:判断MonoBehaviour.Update任务和Forward Pass任务是否均执行完毕,若是,执行步骤605;否则继续执行MonoBehaviour.Update任务和Forward Pass任务中未完成的任务。
步骤605:执行Fire Event任务。
步骤606:判断Fire Event任务是否执行完成,若是,执行步骤607;否则,执行步骤605。
步骤607:同时执行IK Pass任务与Write Step任务。
步骤608:判断是否执行完后续所有串行任务,若是,结束流程;否则,继续执行后续的串行任务。
图8A是采用相关技术中的方案的CPU使用情况示意图,图8B是采用本申请实施例提供的方法的CPU使用情况示意图,参见图8A、8B,相对于相关技术,采用本申请实施例提供的方法,cpu是用来主线程从14.1%降到了7.8%。
应用本申请上述实施例,能够提高CPU的执行效率,进而提升游戏的性能。
下面继续说明本申请实施例提供的虚拟场景中的动画处理装置555的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器540的虚拟场景中的动画处理装置555中的软件模块可以包括:
第一处理模块5551,用于采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对所述虚拟场景的动画数据进行采样;
回调模块5552,用于当所述业务逻辑处理完成、且动画数据采样完成时,触发动画状态机的回调,以获取动画状态;
第二处理模块5553,用于采用并行的处理方式,基于所述动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,并建立所述骨骼节点与所述动画数据之间的关联关系;
生成模块5554,用于基于所述虚拟对象的各骨骼节点的目标位置及所述动画数据,生成对应所述虚拟场景的包含所述虚拟对象的动画。
在一些实施例中,所述第一处理模块,还用于当存在多核中央处理器时,从所述多核中央处理器中确定第一处理器核心及第二处理器核心;
创建对应所述第一处理器核心的第一线程,以及对应所述第二处理器核心的第二线程;
通过所述第一线程,对虚拟场景中的业务逻辑进行处理,并通过与所述第一线程并行的第二线程,对所述虚拟场景的动画数据进行采样。
在一些实施例中,所述第一处理模块,还用于获取任务与多核中央处理器中各处理器核心之间的映射关系;
基于所述映射关系,确定与第一任务对应的第三处理器核心及与第二任务对应的第四处理器核心;其中,所述第一任务为对虚拟场景中的业务逻辑进行处理,所述第二任务为对所述虚拟场景的动画数据进行采样;
采用并行的处理方式,通过第三处理器核心执行所述第一任务,并通过第四处理器核心执行所述第二任务。
在一些实施例中,所述回调模块,还用于在对虚拟场景中的业务逻辑进行处理及对所述虚拟场景的动画数据进行采样的过程中,
监测用于指示所述业务逻辑处理所对应的处理状态的第一状态标识、及用于指示所述动画数据采样的采样状态的第二状态标识;
当所述第一状态标识由指示正在处理的第一状态值切换至指示处理完成的第二状态值,且所述第二状态标识由指示正在采样的第三状态值切换至采样完成的第四状态值时,确定所述业务逻辑处理完成、且动画数据采样完成。
在一些实施例中,所述第一处理模块,还用于接收到虚拟场景中的业务请求,所述业务请求用于请求切换所述虚拟场景的动画;
基于所述业务请求,对虚拟场景中的业务逻辑进行处理,得到请求切换的第二动画的动画参数,并
当需要进行动画过渡时,基于第一动画的动画参数及第二动画的动画参数,得到由第一动画过渡至对应所述第二动画的过渡参数、及动画过渡过程中第一动画与第二动画的权重;
当得到第二动画时,基于所述过渡参数、及所述权重,将所述第一动画与所述第二动画进行融合,并在融合完成后,由第一动画切换至第二动画。
在一些实施例中,所述第一处理模块,还用于获取所述虚拟场景的动画资源、及至少一个采样时间点;
从所述虚拟场景的动画资源中,获取与所述至少一个采样时间点对应的动画数据。
在一些实施例中,所述回调模块,还用于获取所述业务逻辑处理完成所对应的处理结果;
基于所述业务逻辑的处理结果,确定动画状态机所处的状态,所述状态为所述处理结果所指示的状态;
基于所述动画状态机所处的状态,触发与所述状态相对应的回调。
在一些实施例中,所述第二处理模块,还用于获取所述虚拟场景中虚拟对象的各骨骼节点在初始状态下的位置;
基于所述动画状态,获取所述虚拟场景中虚拟对象的末梢骨骼节点的目标位置;
根据所述末梢骨骼节点的目标位置、相邻骨骼节点间的距离及各骨骼节点的初始状态下的位置,确定所述虚拟对象的其它骨骼节点的目标位置,以使所述骨骼节点处于目标位置时,相邻骨骼节点间的距离与初始状态下的距离相同。
在一些实施例中,所述第二处理模块,还用于根据所述末梢骨骼节点的目标位置,对所述虚拟对象的骨骼节点链进行前向遍历,依次调整虚拟对象的各骨骼节点位置;
根据所述虚拟对象的根骨骼节点在初始状态下的位置,对所述虚拟对象的骨骼节点链进行向后遍历,依次调整虚拟对象的各骨骼节点位置;
当骨骼节点链中相邻两个骨骼节点调整后的距离与初始状态下的距离相同时,确定各骨骼节点调整后的位置为目标位置。
在一些实施例中,所述第二处理模块,还用于从所述动画数据中,获取所述虚拟对象对应的蒙皮网格数据;
基于所述蒙皮网格数据,将蒙皮网格顶点与所述虚拟对象的骨骼节点进行关联,以建立所述骨骼节点与所述动画数据之间的关联关系。
在一些实施例中,所述生成模块,还用于获取当前播放动画的播放进度;
基于所述播放进度,确定当前属性值改变的比例;
基于当前属性值改变的比例、所述各骨骼节点的目标位置及所述动画数据,进行插值处理,以生成对应所述虚拟场景的包含所述虚拟对象的动画。
在一些实施例中,所述生成模块,还用于调用用于计算所述虚拟对象的各骨骼节点位置的脚本,基于所述脚本中的计算逻辑,确定所述虚拟对象的各骨骼节点的位置;
当确定的各骨骼节点的位置与各骨骼节点的目标位置不同时,基于确定的所述的各骨骼节点的位置,调整所述虚拟对象的各骨骼节点的目标位置。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的虚拟场景中的动画处理方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的方法,例如,如图3示出的方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。

Claims (15)

1.一种虚拟场景中的动画处理方法,其特征在于,所述方法包括:
采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对所述虚拟场景的动画数据进行采样;
当所述业务逻辑处理完成、且动画数据采样完成时,触发动画状态机的回调,以获取动画状态;
采用并行的处理方式,基于所述动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,并建立所述骨骼节点与所述动画数据之间的关联关系;
基于所述虚拟对象的各骨骼节点的目标位置及所述动画数据,生成对应所述虚拟场景的包含所述虚拟对象的动画。
2.如权利要求1所述的方法,其特征在于,所述采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对所述虚拟场景的动画数据进行采样,包括:
当存在多核中央处理器时,从所述多核中央处理器中确定第一处理器核心及第二处理器核心;
创建对应所述第一处理器核心的第一线程,以及对应所述第二处理器核心的第二线程;
通过所述第一线程,对虚拟场景中的业务逻辑进行处理,并通过与所述第一线程并行的第二线程,对所述虚拟场景的动画数据进行采样。
3.如权利要求1所述的方法,其特征在于,所述采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对所述虚拟场景的动画数据进行采样,包括:
获取任务与多核中央处理器中各处理器核心之间的映射关系;
基于所述映射关系,确定与第一任务对应的第三处理器核心及与第二任务对应的第四处理器核心;其中,所述第一任务为对虚拟场景中的业务逻辑进行处理,所述第二任务为对所述虚拟场景的动画数据进行采样;
采用并行的处理方式,通过第三处理器核心执行所述第一任务,并通过第四处理器核心执行所述第二任务。
4.如权利要求1所述的方法,其特征在于,所述触发动画状态机的回调之前,包括:
在对虚拟场景中的业务逻辑进行处理及对所述虚拟场景的动画数据进行采样的过程中,
监测用于指示所述业务逻辑处理所对应的处理状态的第一状态标识、及用于指示所述动画数据采样的采样状态的第二状态标识;
当所述第一状态标识由指示正在处理的第一状态值切换至指示处理完成的第二状态值,且所述第二状态标识由指示正在采样的第三状态值切换至采样完成的第四状态值时,确定所述业务逻辑处理完成、且动画数据采样完成。
5.如权利要求1所述的方法,其特征在于,所述对虚拟场景中的业务逻辑进行处理,包括:
接收到虚拟场景中的业务请求,所述业务请求用于请求切换所述虚拟场景的动画;
基于所述业务请求,对虚拟场景中的业务逻辑进行处理,得到请求切换的第二动画的动画参数,并
当需要进行动画过渡时,基于第一动画的动画参数及第二动画的动画参数,得到由第一动画过渡至对应所述第二动画的过渡参数、及动画过渡过程中第一动画与第二动画的权重;
当得到第二动画时,基于所述过渡参数、及所述权重,将所述第一动画与所述第二动画进行融合,并在融合完成后,由第一动画切换至第二动画。
6.如权利要求1所述的方法,其特征在于,所述对所述虚拟场景的动画数据进行采样,包括:
获取所述虚拟场景的动画资源、及至少一个采样时间点;
从所述虚拟场景的动画资源中,获取与所述至少一个采样时间点对应的动画数据。
7.如权利要求1所述的方法,其特征在于,所述触发动画状态机的回调,包括:
获取所述业务逻辑处理完成所对应的处理结果;
基于所述业务逻辑的处理结果,确定动画状态机所处的状态,所述状态为所述处理结果所指示的状态;
基于所述动画状态机所处的状态,触发与所述状态相对应的回调。
8.如权利要求1所述的方法,其特征在于,所述基于所述动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,包括:
获取所述虚拟场景中虚拟对象的各骨骼节点在初始状态下的位置;
基于所述动画状态,获取所述虚拟场景中虚拟对象的末梢骨骼节点的目标位置;
根据所述末梢骨骼节点的目标位置、相邻骨骼节点间的距离及各骨骼节点的初始状态下的位置,确定所述虚拟对象的其它骨骼节点的目标位置,以使所述骨骼节点处于目标位置时,相邻骨骼节点间的距离与初始状态下的距离相同。
9.如权利要求8所述的方法,其特征在于,所述根据所述末梢骨骼节点的目标位置、相邻骨骼节点间的距离及各骨骼节点的初始位置,确定所述虚拟对象的其它骨骼节点的目标位置,包括:
根据所述末梢骨骼节点的目标位置,对所述虚拟对象的骨骼节点链进行前向遍历,依次调整虚拟对象的各骨骼节点位置;
根据所述虚拟对象的根骨骼节点在初始状态下的位置,对所述虚拟对象的骨骼节点链进行向后遍历,依次调整虚拟对象的各骨骼节点位置;
当骨骼节点链中相邻两个骨骼节点调整后的距离与初始状态下的距离相同时,确定各骨骼节点调整后的位置为目标位置。
10.如权利要求1所述的方法,其特征在于,所述建立所述骨骼节点与所述动画数据之间的关联关系,包括:
从所述动画数据中,获取所述虚拟对象对应的蒙皮网格数据;
基于所述蒙皮网格数据,将蒙皮网格顶点与所述虚拟对象的骨骼节点进行关联,以建立所述骨骼节点与所述动画数据之间的关联关系。
11.如权利要求1所述的方法,其特征在于,所述基于所述虚拟对象的各骨骼节点的目标位置及所述动画数据,生成对应所述虚拟场景的包含所述虚拟对象的动画,包括:
获取当前播放动画的播放进度;
基于所述播放进度,确定当前属性值改变的比例;
基于当前属性值改变的比例、所述各骨骼节点的目标位置及所述动画数据,进行插值处理,以生成对应所述虚拟场景的包含所述虚拟对象的动画。
12.如权利要求1所述的方法,其特征在于,所述生成对应所述虚拟场景的包含所述虚拟对象的动画之后,所述方法还包括:
调用用于计算所述虚拟对象的各骨骼节点位置的脚本,基于所述脚本中的计算逻辑,确定所述虚拟对象的各骨骼节点的位置;
当确定的各骨骼节点的位置与各骨骼节点的目标位置不同时,基于确定的所述的各骨骼节点的位置,调整所述虚拟对象的各骨骼节点的目标位置。
13.一种虚拟场景中的动画处理装置,其特征在于,所述装置包括:
第一处理模块,用于采用并行的处理方式,对虚拟场景中的业务逻辑进行处理,及对所述虚拟场景的动画数据进行采样;
回调模块,用于当所述业务逻辑处理完成、且动画数据采样完成时,触发动画状态机的回调,以获取动画状态;
第二处理模块,用于采用并行的处理方式,基于所述动画状态确定虚拟场景中虚拟对象各骨骼节点的目标位置,并建立所述骨骼节点与所述动画数据之间的关联关系;
生成模块,用于基于所述虚拟对象的各骨骼节点的目标位置及所述动画数据,生成对应所述虚拟场景的包含所述虚拟对象的动画。
14.一种计算机设备,其特征在于,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至12任一项所述的虚拟场景中的动画处理方法。
15.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于被处理器执行时,实现权利要求1至12任一项所述的虚拟场景中的动画处理方法。
CN202110011790.3A 2021-01-06 2021-01-06 虚拟场景中的动画处理方法、装置、设备及存储介质 Active CN112669194B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110011790.3A CN112669194B (zh) 2021-01-06 2021-01-06 虚拟场景中的动画处理方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110011790.3A CN112669194B (zh) 2021-01-06 2021-01-06 虚拟场景中的动画处理方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN112669194A true CN112669194A (zh) 2021-04-16
CN112669194B CN112669194B (zh) 2024-04-26

Family

ID=75413152

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110011790.3A Active CN112669194B (zh) 2021-01-06 2021-01-06 虚拟场景中的动画处理方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112669194B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113313796A (zh) * 2021-06-08 2021-08-27 腾讯科技(上海)有限公司 场景生成方法、装置、计算机设备和存储介质
CN113781615A (zh) * 2021-09-28 2021-12-10 腾讯科技(深圳)有限公司 一种动画生成方法、装置、设备、存储介质及程序产品
CN115277669A (zh) * 2022-06-24 2022-11-01 重庆长安汽车股份有限公司 一种车辆基于虚拟形象的状态控制方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106327589A (zh) * 2016-08-17 2017-01-11 北京中达金桥技术股份有限公司 基于Kinect的3D虚拟试衣镜的实现方法及系统
CN110728739A (zh) * 2019-09-30 2020-01-24 杭州师范大学 一种基于视频流的虚拟人控制与交互方法
CN110992495A (zh) * 2019-12-26 2020-04-10 珠海金山网络游戏科技有限公司 一种虚拟模型的变形方法及装置
CN111026318A (zh) * 2019-12-05 2020-04-17 腾讯科技(深圳)有限公司 基于虚拟环境的动画播放方法、装置、设备及存储介质
CN111161365A (zh) * 2019-12-30 2020-05-15 珠海金山网络游戏科技有限公司 一种骨骼动画数据的压缩方法及装置
CN111598987A (zh) * 2020-05-18 2020-08-28 网易(杭州)网络有限公司 虚拟对象的骨骼处理方法、装置、设备和存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106327589A (zh) * 2016-08-17 2017-01-11 北京中达金桥技术股份有限公司 基于Kinect的3D虚拟试衣镜的实现方法及系统
CN110728739A (zh) * 2019-09-30 2020-01-24 杭州师范大学 一种基于视频流的虚拟人控制与交互方法
CN111026318A (zh) * 2019-12-05 2020-04-17 腾讯科技(深圳)有限公司 基于虚拟环境的动画播放方法、装置、设备及存储介质
CN110992495A (zh) * 2019-12-26 2020-04-10 珠海金山网络游戏科技有限公司 一种虚拟模型的变形方法及装置
CN111161365A (zh) * 2019-12-30 2020-05-15 珠海金山网络游戏科技有限公司 一种骨骼动画数据的压缩方法及装置
CN111598987A (zh) * 2020-05-18 2020-08-28 网易(杭州)网络有限公司 虚拟对象的骨骼处理方法、装置、设备和存储介质

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113313796A (zh) * 2021-06-08 2021-08-27 腾讯科技(上海)有限公司 场景生成方法、装置、计算机设备和存储介质
CN113313796B (zh) * 2021-06-08 2023-11-07 腾讯科技(上海)有限公司 场景生成方法、装置、计算机设备和存储介质
CN113781615A (zh) * 2021-09-28 2021-12-10 腾讯科技(深圳)有限公司 一种动画生成方法、装置、设备、存储介质及程序产品
CN113781615B (zh) * 2021-09-28 2023-06-13 腾讯科技(深圳)有限公司 一种动画生成方法、装置、设备、存储介质
CN115277669A (zh) * 2022-06-24 2022-11-01 重庆长安汽车股份有限公司 一种车辆基于虚拟形象的状态控制方法
CN115277669B (zh) * 2022-06-24 2023-05-26 重庆长安汽车股份有限公司 一种车辆基于虚拟形象的状态控制方法

Also Published As

Publication number Publication date
CN112669194B (zh) 2024-04-26

Similar Documents

Publication Publication Date Title
CN112669194B (zh) 虚拟场景中的动画处理方法、装置、设备及存储介质
CN112076473B (zh) 虚拟道具的控制方法、装置、电子设备及存储介质
JP7436707B2 (ja) 仮想シーンにおける情報処理方法、装置、機器、媒体及びコンピュータプログラム
US11065550B2 (en) Local game execution for spectating and spectator game play
TWI793837B (zh) 虛擬物件的控制方法、裝置、設備、儲存媒體及電腦程式產品
WO2023005522A1 (zh) 虚拟技能的控制方法、装置、设备、存储介质及程序产品
CN112402960A (zh) 虚拟场景中状态切换方法、装置、设备及存储介质
TW202217541A (zh) 虛擬按鍵的位置調整方法、裝置、設備、儲存介質及程式産品
Vohera et al. Game engine architecture and comparative study of different game engines
WO2023109288A1 (zh) 虚拟场景中开局操作的控制方法、装置、设备、存储介质及程序产品
Sherman et al. FreeVR: honoring the past, looking to the future
CN112843683B (zh) 虚拟角色的控制方法、装置、电子设备及存储介质
CN112843704B (zh) 动画模型处理方法、装置、设备及存储介质
WO2022156629A1 (zh) 虚拟对象的控制方法、装置、电子设备、存储介质及计算机程序产品
CN113144617B (zh) 虚拟对象的控制方法、装置、设备及计算机可读存储介质
CN113313796A (zh) 场景生成方法、装置、计算机设备和存储介质
CN112396683A (zh) 虚拟场景的阴影渲染方法、装置、设备及存储介质
WO2024012016A1 (zh) 虚拟场景的信息显示方法、装置、电子设备、存储介质及计算机程序产品
WO2024037139A1 (zh) 虚拟场景中的信息提示方法、装置、电子设备、存储介质及程序产品
CN114247132B (zh) 虚拟对象的控制处理方法、装置、设备、介质及程序产品
CN114219924B (zh) 虚拟场景的适配显示方法、装置、设备、介质及程序产品
WO2023169010A1 (zh) 虚拟对象的控制方法、装置、电子设备、存储介质及程序产品
Carboni A Framework for Client-Server Objects Streaming in VR
Pouke et al. Developing a virtual zoological museum
Pesado A Cross-Platform Immersive 3D Environment for Algorithm Learning

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40042607

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant