任务的处理方法和装置、存储介质、电子装置转让专利

申请号 : CN202010630525.9

文献号 : CN111773690B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 徐峰何文峰

申请人 : 完美世界(北京)软件科技发展有限公司

摘要 :

本申请公开了一种任务的处理方法和装置、存储介质、电子装置。其中,该方法包括:确定目标模型的多个节点,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼;生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间;对多个节点的模拟运算任务进行并行处理。本申请解决了相关技术中数据处理效率较低的技术问题。

权利要求 :

1.一种任务的处理方法,其特征在于,包括:确定目标模型的多个节点,其中,所述目标模型用于表示虚拟场景中的柔性对象,所述多个节点中的每个节点用于表示所述目标模型的一个骨骼;

生成所述多个节点的模拟运算任务,其中,所述模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,所述第二时间晚于所述第一时间;

对所述多个节点的模拟运算任务进行并行处理,包括:确定所述多个节点中的多个第二节点,其中,任意两个所述第二节点所表示的骨骼不属于同一个动画,所述第二节点的节点数量不大于所述多个节点的节点数量;通过多个线程的多个第二线程运行所述多个第二节点的模拟运算任务,其中,所述第二线程的线程数量不大于所述多个线程的线程数量、且不大于所述第二节点的节点数量。

2.根据权利要求1所述的方法,其特征在于,对所述多个节点的模拟运算任务进行并行处理包括按照如下方式为多个线程中的每个线程分配模拟运算任务:通过管理工具监控第一线程的运行状态,其中,所述管理工具为预先创建的用于根据线程的运行状态分发模拟运算任务的工具,所述运行状态用于表示所述第一线程当前是否有正在处理的模拟运算任务,所述第一线程为所述多个线程中的任意一个线程;

在所述运行状态表明所述第一线程当前没有正在处理的模拟运算任务的情况下,通过所述管理工具将目标模拟运算任务分发给所述第一线程进行处理,其中,所述目标模拟运算任务为所述多个节点的模拟运算任务中未处理的模拟运算任务。

3.根据权利要求2所述的方法,其特征在于,在通过所述管理工具将目标模拟运算任务分发给所述第一线程进行处理之后,所述方法还包括:在所述第一线程完成所述目标模拟运算任务的情况下,将第一节点的物理状态更新为所述第一线程处理得到的物理状态,其中,所述目标模拟运算任务属于所述第一节点。

4.根据权利要求1所述的方法,其特征在于,对所述多个节点的模拟运算任务进行并行处理包括:

在通过所述多个线程的多个第二线程运行所述多个第二节点的模拟运算任务之前,通过多个读线程中的每个读线程从一个所述第二节点读取待处理的物理状态,并将读取的待处理的物理状态传递给一个所述第二线程,其中,所述多个读线程为并行运行的读线程,任意两个所述读线程所读取物理状态来源的所述第二节点不同,任意两个所述读线程将读取的物理状态所传递至的所述第二线程不同。

5.根据权利要求1所述的方法,其特征在于,对所述多个节点的模拟运算任务进行并行处理包括:

在通过所述多个线程的多个第二线程运行所述多个第二节点的模拟运算任务之后,通过多个写线程中的每个写线程从一个所述第二线程获取得到的物理状态,并将得到的物理状态写入一个所述第二节点,以对所述第二节点保存的物理状态进行更新,其中,所述多个写线程为并行运行的写线程,任意两个所述写线程所获取物理状态的所述第二线程不同,任意两个所述写线程将获取的物理状态所写入的所述第二节点不同。

6.根据权利要求1至5中任意一项所述的方法,其特征在于,生成所述多个节点的模拟运算任务包括:

为所述多个节点中的每个节点创建包括如下操作的模拟运算任务:外力模拟、惯性模拟、弹性模拟、刚性模拟、碰撞处理以及保持父子节点之间的长度。

7.一种任务的处理装置,其特征在于,包括:确定单元,用于确定目标模型的多个节点,其中,所述目标模型用于表示虚拟场景中的柔性对象,所述多个节点中的每个节点用于表示所述目标模型的一个骨骼;

生成单元,用于生成所述多个节点的模拟运算任务,其中,所述模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,所述第二时间晚于所述第一时间;

处理单元,用于对所述多个节点的模拟运算任务进行并行处理;所述处理单元还用于:确定所述多个节点中的多个第二节点,其中,任意两个所述第二节点所表示的骨骼不属于同一个动画,所述第二节点的节点数量不大于所述多个节点的节点数量;通过多个线程的多个第二线程运行所述多个第二节点的模拟运算任务,其中,所述第二线程的线程数量不大于所述多个线程的线程数量、且不大于所述第二节点的节点数量。

8.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至6任一项中所述的方法。

9.一种电子装置,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器通过所述计算机程序执行上述权利要求1至6任一项中所述的方法。

说明书 :

任务的处理方法和装置、存储介质、电子装置

技术领域

[0001] 本申请涉及游戏领域,具体而言,涉及一种任务的处理方法和装置、存储介质、电子装置。

背景技术

[0002] 随着时代的发展和移动设备硬件性能的提升,物理引擎被越来越多的移动游戏所使用。物理引擎处理的对象主要可以分为刚体(Rigid Bodies)和柔体(Soft Bodies)两大
部分,刚体主要应用在物理碰撞、破碎、布娃娃等系统中,而柔体最为重要的应用代表就是
布料系统。
[0003] 在物理引擎中,通过物理计算来模拟布料效果的系统可以称之为布料系统。实时布料模拟作为一个关键特性,可以广泛应用在角色服装,场景柔体等诸多情景下,既可改善
传统骨骼动画表现僵硬、细节粗糙的不足,也能解决顶点动画无法交互、存贮量大的问题,
从而大幅提升游戏的真实感体验。虽然名为布料系统,但并不仅仅用于表现角色衣服的布
料效果,而且可以应用于毛发、坠饰,甚至人体的某些柔软部位。
[0004] 在实时布料模拟的过程中,需要对所有顶点依次进行模拟运算,处理过程效率较低。
[0005] 针对上述的问题,目前尚未提出有效的解决方案。

发明内容

[0006] 本申请实施例提供了一种任务的处理方法和装置、存储介质、电子装置,以至少解决相关技术中数据处理效率较低的技术问题。
[0007] 根据本申请实施例的一个方面,提供了一种任务的处理方法,包括:确定目标模型的多个节点,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示
目标模型的一个骨骼;生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在
第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间;对多个
节点的模拟运算任务进行并行处理。
[0008] 根据本申请实施例的另一方面,还提供了一种任务的处理装置,包括:确定单元,用于确定目标模型的多个节点,其中,目标模型用于表示虚拟场景中的柔性对象,多个节点
中的每个节点用于表示目标模型的一个骨骼;生成单元,用于生成多个节点的模拟运算任
务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物
理状态,第二时间晚于第一时间;处理单元,用于对多个节点的模拟运算任务进行并行处
理。
[0009] 根据本申请实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,程序运行时执行上述的方法。
[0010] 根据本申请实施例的另一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器通过计算机程序执行上述的方
法。
[0011] 在本申请实施例中,将目标模型按照多个骨骼分成多个节点,对所述多个节点的模拟运算任务进行并行处理,而不是串行处理这些模拟运算任务,可以解决相关技术中数
据处理效率较低的技术问题,进而达到提高数据处理效率的技术效果。

附图说明

[0012] 此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0013] 图1是根据本申请实施例的任务的处理方法的硬件环境的示意图;
[0014] 图2是根据本申请实施例的一种可选的任务的处理方法的流程图;
[0015] 图3是根据本申请实施例的一种可选的任务的示意图;
[0016] 图4是根据本申请实施例的一种可选的任务的处理方案的示意图;
[0017] 图5是根据本申请实施例的一种可选的任务处理方案效果的示意图;
[0018] 图6是根据本申请实施例的一种可选的任务的处理方案的示意图;
[0019] 图7是根据本申请实施例的一种可选的任务的处理方案的示意图;
[0020] 图8是根据本申请实施例的一种可选的任务处理方案效果的示意图;
[0021] 图9是根据本申请实施例的一种可选的任务处理方案效果的示意图;
[0022] 图10是根据本申请实施例的一种可选的任务的处理装置的示意图;
[0023] 以及
[0024] 图11是根据本申请实施例的一种终端的结构框图。

具体实施方式

[0025] 为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是
本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人
员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范
围。
[0026] 需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用
的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或
描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆
盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于
清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品
或设备固有的其它步骤或单元。
[0027] 根据本申请实施例的一方面,提供了一种任务的处理方法的方法实施例。
[0028] 可选地,在本实施例中,上述任务的处理方法可以应用于如图1所示的由终端101和服务器103所构成的硬件环境中。如图1所示,服务器103通过网络与终端101进行连接,可
用于为终端或终端上安装的客户端提供服务(如游戏服务、应用服务等),可在服务器上或
独立于服务器设置数据库105,用于为服务器103提供数据存储服务,上述网络包括但不限
于:广域网、城域网或局域网,终端101并不限定于PC、手机、平板电脑等。
[0029] 本申请实施例的任务的处理方法可以由终端101来执行,还可以是由服务器103和终端101共同执行。其中,终端101执行本申请实施例的任务的处理方法也可以是由安装在
其上的客户端来执行。图2是根据本申请实施例的一种可选的任务的处理方法的流程图,如
图2所示,该方法可以包括以下步骤:
[0030] 步骤S202,确定目标模型的多个节点,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼。
[0031] 上述柔性对象为布料模拟的对象,如角色服饰、树叶等场景柔体,角色身上柔软的部分等;该对象的模型具有骨骼系统,该骨骼系统具有多根骨骼,上述多个节点与这多根骨
骼一一对应。
[0032] 步骤S204,生成多个节点的模拟运算任务,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间。
[0033] 上述模拟运算任务用于主要有两个功能,其一是模拟骨骼受外力和惯性的影响,其二是受内部因素的影响,如弹性模拟、刚性模拟、碰撞模拟以及骨骼之间的约束等。
[0034] 步骤S206,对多个节点的模拟运算任务进行并行处理,此处的并行处理包括以下几种类型:其一是利用多个处理器进行并行处理、其二是利用多个进程进行并行处理、其三
是利用多个线程进行并行处理,后续以线程级别的并行处理为例进行说明。
[0035] 通过上述步骤S202至步骤S206,将目标模型按照多个骨骼分成多个节点,对多个节点的模拟运算任务进行并行处理,而不是串行处理这些模拟运算任务,可以解决相关技
术中数据处理效率较低的技术问题,进而达到提高数据处理效率的技术效果。下文结合图2
所示的步骤进一步详述本申请的技术方案。
[0036] 在一个可选的方案中,可以将模拟运算任务封装为任务作业job,然后利用管理工具(可以为一个管理程序、管理程序中的类等)进行job的批量创建和派发,即在对多个节点
的模拟运算任务进行并行处理时,按照如下步骤1‑步骤3为多个线程中的每个线程分配模
拟运算任务:
[0037] 步骤1,通过管理工具监控第一线程(第一线程为多个线程中的任意一个线程)的运行状态,管理工具为预先创建的用于根据线程的运行状态分发模拟运算任务的工具,运
行状态用于表示第一线程当前是否有正在处理的模拟运算任务。
[0038] 步骤2,在运行状态表明第一线程当前没有正在处理的模拟运算任务的情况下,通过管理工具将目标模拟运算任务分发给第一线程进行处理,目标模拟运算任务为多个节点
的模拟运算任务中未处理的模拟运算任务。
[0039] 步骤3,在第一线程完成目标模拟运算任务的情况下,将第一节点的物理状态更新为第一线程处理得到的物理状态,目标模拟运算任务属于第一节点。
[0040] 在以上方案中,相当于将模拟部分封装成任务Job,然后通过全局的管理工具负责在每一帧的LateUpdate阶段读取所需信息(如骨骼位置),批量创建和派发Job,高效地利用
空闲线程执行Job,最后等待Job完成并将模拟结果写入骨骼中进行更新。
[0041] 在以上方案中,如果多个骨骼有共同的祖先节点,同一时间只能读写其中一个骨骼,换言之,就不能对这多个骨骼中的其他骨骼进行模拟处理,为此,本申请还提供了一种
优化的解决方案,即对多个节点的模拟运算任务进行并行处理时,可以通过如下步骤1‑步
骤4实现:
[0042] 步骤1,确定多个节点中的多个第二节点,任意两个第二节点所表示的骨骼不属于同一个动画,第二节点的节点数量不大于多个节点的节点数量。
[0043] 步骤2,在通过多个线程的多个第二线程运行多个第二节点的模拟运算任务之前,通过多个读线程中的每个读线程从一个第二节点读取待处理的物理状态,并将读取的待处
理的物理状态传递给一个第二线程,多个读线程为并行运行的读线程,任意两个读线程所
读取物理状态的第二节点不同,即读线程可以读取至少一个物理状态且任意一个物理状态
不会被重复读取,任意两个读线程将读取的物理状态所传递至的第二线程不同,即每个第
二线程至少处理一个物理状态且任意一个物理状态不会被重复处理。
[0044] 步骤3,通过多个线程的多个第二线程运行多个第二节点的模拟运算任务,第二线程的线程数量不大于多个线程的线程数量、且不大于第二节点的节点数量。
[0045] 步骤4,在通过多个线程的多个第二线程运行多个第二节点的模拟运算任务之后,通过多个写线程中的每个写线程从一个第二线程获取得到的物理状态,并将得到的物理状
态写入一个第二节点,以对第二节点保存的物理状态进行更新,多个写线程为并行运行的
写线程,任意两个写线程所获取物理状态的第二线程不同,任意两个写线程将获取的物理
状态所写入的第二节点不同,即写线程可以写入至少一个物理状态且任意一个物理状态不
会被重复写入。
[0046] 在以上方案中,只要不同骨骼所属的动画animator不同,就可以在同时读写,从而可以提高处理效率。
[0047] 作为一种可选的实施例,下面结合具体的实施方式进一步详述本申请的技术方案中。
[0048] 动态骨骼Dynamic Bone是一款基于模拟弹簧振子的算法实现树状柔体的物理模拟插件,虽然是基于模拟弹簧振子运动的算法实现,但是Dynamic Bone各节点之间的距离
实际上不会发生变化。比起弹簧,父子节点之间的相对运动更接近串联的单摆。
[0049] Dynamic Bone模拟出的柔体特性体现在物体运动之后发生的弹性形变上,所以它的模拟自然发生在物体运动之后,再根据物体运动的结果去模拟各个节点弹性运动的过
程。Dynamic Bone的整体流程是当物体原本移动完成后,首先根据运动的当前结果模拟弹
性运动,再根据模拟结果修正各节点的旋转并且将模拟结果同步到实际节点上。下面结合
图3进行描述:
[0050] Dynamic Bone作为一种骨骼动画后处理的方案,首先将骨骼抽象成粒子,模拟动力学效果,最后将模拟效果同步到骨骼上。粒子的模拟分成两个阶段,图3是这两个阶段的
示意图,第一阶段计算重力等外力对粒子的影响,以及模拟惯性效果,第二阶段进行弹性模
拟,刚性模拟,碰撞处理以及保持父子节点的长度。
[0051] 使用Dynamic Bone可以方便地模拟头发、飘带、翅膀和尾巴等柔性物体的动画。尽管Dynamic Bone能给游戏增添不少动态效果,但对效率和效果有极致追求的游戏来说还远
远不够。为了满足手机等移动端实际项目的需求,采用本申请的技术方案能够从性能和效
果上对Dynamic Bone进行了一番升级改造。
[0052] 在方案一中,采用作业Job系统System这样的一套多线程框架,用户用作业系统可以轻松的写出安全的多线程代码,作业系统配合Burst Compiler一起使用,可以生成高度
优化的目标代码,使Job更高效的执行。
[0053] 如图4所示,先将原始的Dynamic Bone的粒子(如Dynamic Bone 0、Dynamic Bone 1等)模拟部分封装成Job(如Job 0、Job 1等),然后设计了一个全局的管理类,该类管理场
景中所有Dynamic Bone组件,管理类负责在每一帧的LateUpdate阶段读取骨骼位置,批量
生成和派发Job,高效地利用Work线程(如Work Thread 0、Work Thread 1等)执行Job,最后
等待Job完成并将粒子模拟结果写入骨骼中。
[0054] 在上述方案中,当一个Job线程完成了本次所分配给它的工作后,可以将其他线程那里获取其剩余的作业。假设每个线程的处理能力是相当的,它每次可获取那个线程剩余
作业的一半,从而可以提高工作效率。
[0055] 为了优化这个过程,你需要指定一个每批次数量(batch count)。这个每批次数量控制了你会生成多少job和线程中进行任务分发的粒度。使用一个较低的每批次数量,比如
1,会使你在线程之间的工作分配更平均。它会带来一些额外的开销,所以有时增加每批次
数量会是更好的选择。从每批次数量为1开始,然后慢慢增加这个数量直到性能不再提升是
一个合理的策略。
[0056] 为了对上述方案进行效果验证,本方案构建了一个包含900个Dynamic Bone组件,每个组件包含6个骨骼的测试场景,在i7‑6700 CPU,16GB RAM的PC上进行了测试,测试结果
如图5所示,数据的时间单位为毫秒ms,采用本方案实现Dynamic Bone,在帧更新的Update
个LateUpdate阶段皆有优化,优化幅度达到36.62%。
[0057] 从以上的测试结果可以看出,使用方案一提升了Dynamic Bone的性能,但是提升效果有限,为了提升效率,考虑了进行骨骼读写的并行操作,本方案将读写骨骼的操作封装
到ParallelForTransform Job中,使之并行读写骨骼,但是通过实践发现如果场景中
Dynamic Bone有共同的祖先节点的话,同一时间只能读写一个骨骼,如图6左侧图所示,无
法同时读写下节点4与节点5,基于此,本申请还提供了下文描述的方案二。
[0058] 该方案采用动画Animation作业Job来对骨骼动画进行后期处理,动画作业与作业Job系统System(即方案一)相似,但有一大的区别是只要不同骨骼所属的动画animator不
同,就可以在动画Animation作业Job中同时读写,如图6中右图所示,节点4与节点5分属于
动画0和动画1,所属动画不同,就可以通过动画Animation作业Job进行并行读写。
[0059] 方案二与方案一的另一点不同之处是方案一需要管理类管理Job的创建,派发和和完成,而方案二可借助如图7所示的动画图工具Playable Graph进行管理,只需在开始阶
段创建并设置Playable Graph,图7是设置Playable Graph的示意图,Playable Graph生成
动画输出Animation Output,设置数据来源,调用动画脚本Animation Script生成动态骨
骼的动画作业,在设置之后的每帧中Playable Graph都会自动管理对应的动画作业Job。
[0060] 在与方案一相同的测试场景下测试了方案二的性能,并与原始的Dynamic Bone和方案一进行比较,得到了如图8所示的测试数据(时间单位为毫秒ms),方案二相对于原始方
案有了65.77%的优化幅度,也远高于方案一的优化幅度。
[0061] 此外,本方案还在PS4主机上进行了测试,将主机游戏中的女主角作为测试对象,一个女主角翅膀上挂了6个Dynamic Bone,每个Dynamic Bone控制20至30根骨骼,场景中共
计50个这样的女主角,得到测试结果如图9所示(时间单位为毫秒ms),方案二相对于原始方
案有了69.78%的优化幅度,也远高于方案一的优化幅度。
[0062] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为
依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知
悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请
所必须的。
[0063] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多
情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有
技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储
介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算
机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
[0064] 根据本申请实施例的另一个方面,还提供了一种用于实施上述任务的处理方法的任务的处理装置。图10是根据本申请实施例的一种可选的任务的处理装置的示意图,如图
10所示,该装置可以包括:
[0065] 确定单元1001,用于确定目标模型的多个节点,其中,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼。
[0066] 上述柔性对象为布料模拟的对象,如角色服饰、树叶等场景柔体,角色身上柔软的部分等;该对象的模型具有骨骼系统,该骨骼系统具有多根骨骼,上述多个节点与这多根骨
骼一一对应。
[0067] 生成单元1003,用于生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间。
[0068] 上述模拟运算任务用于主要有两个功能,其一是模拟骨骼受外力和惯性的影响,其二是受内部因素的影响,如弹性模拟、刚性模拟、碰撞模拟以及骨骼之间的约束等。
[0069] 处理单元1005,用于对多个节点的模拟运算任务进行并行处理。
[0070] 需要说明的是,该实施例中的确定单元1001可以用于执行本申请实施例中的步骤S202,该实施例中的生成单元1003可以用于执行本申请实施例中的步骤S204,该实施例中
的处理单元1005可以用于执行本申请实施例中的步骤S206。
[0071] 此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如
图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现。
[0072] 通过上述模块,将目标模型按照多个骨骼分成多个节点,对多个节点的模拟运算任务进行并行处理,而不是串行处理这些模拟运算任务,可以解决相关技术中数据处理效
率较低的技术问题,进而达到提高数据处理效率的技术效果。
[0073] 可选地,处理单元还用于:通过管理工具监控第一线程的运行状态,其中,管理工具为预先创建的用于根据线程的运行状态分发模拟运算任务的工具,运行状态用于表示第
一线程当前是否有正在处理的模拟运算任务,第一线程为多个线程中的任意一个线程;在
运行状态表明第一线程当前没有正在处理的模拟运算任务的情况下,通过管理工具将目标
模拟运算任务分发给第一线程进行处理,其中,目标模拟运算任务为多个节点的模拟运算
任务中未处理的模拟运算任务。
[0074] 可选地,处理单元还用于:在通过管理工具将目标模拟运算任务分发给第一线程进行处理之后,在第一线程完成目标模拟运算任务的情况下,将第一节点的物理状态更新
为第一线程处理得到的物理状态,其中,目标模拟运算任务属于第一节点。
[0075] 可选地,处理单元包括:确定模块,用于确定多个节点中的多个第二节点,其中,任意两个第二节点所表示的骨骼不属于同一个动画,第二节点的节点数量不大于多个节点的
节点数量;处理模块,用于通过多个线程的多个第二线程运行多个第二节点的模拟运算任
务,其中,第二线程的线程数量不大于多个线程的线程数量、且不大于第二节点的节点数
量。
[0076] 可选地,处理模块还用于:在通过多个线程的多个第二线程运行多个第二节点的模拟运算任务之前,通过多个读线程中的每个读线程从一个第二节点读取待处理的物理状
态,并将读取的待处理的物理状态传递给一个第二线程,其中,多个读线程为并行运行的读
线程,任意两个读线程所读取物理状态的第二节点不同,任意两个读线程将读取的物理状
态所传递至的第二线程不同。
[0077] 可选地,处理模块还用于:在通过多个线程的多个第二线程运行多个第二节点的模拟运算任务之后,通过多个写线程中的每个写线程从一个第二线程获取得到的物理状
态,并将得到的物理状态写入一个第二节点,以对第二节点保存的物理状态进行更新,其
中,多个写线程为并行运行的写线程,任意两个写线程所获取物理状态的第二线程不同,任
意两个写线程将获取的物理状态所写入的第二节点不同。
[0078] 可选地,生成单元还用于:为多个节点中的每个节点创建包括如下操作的模拟运算任务:外力模拟、惯性模拟、弹性模拟、刚性模拟、碰撞处理以及保持父子节点之间的长
度。
[0079] 使用Dynamic Bone可以方便地模拟头发、飘带、翅膀和尾巴等柔性物体的动画。尽管Dynamic Bone能给游戏增添不少动态效果,但对效率和效果有极致追求的游戏来说还远
远不够。为了满足手机等移动端实际项目的需求,采用本申请的技术方案能够从性能和效
果上对Dynamic Bone进行了一番升级改造。
[0080] 在方案一中,采用作业Job系统System这样的一套多线程框架,用户用作业系统可以轻松的写出安全的多线程代码,作业系统配合Burst Compiler一起使用,可以生成高度
优化的目标代码,使Job更高效的执行。
[0081] 在方案二中,采用动画Animation作业Job来对骨骼动画进行后期处理,动画作业与作业Job系统System(即方案一)相似,但有一大的区别是只要不同骨骼所属的动画
animator不同,就可以在动画Animation作业Job中同时读写,如两个节点分属于动画0和动
画1,所属动画不同,就可以通过动画Animation作业Job进行并行读写。
[0082] 方案二与方案一的另一点不同之处是方案一需要管理类管理Job的创建,派发和和完成,而方案二可借助动画图工具Playable Graph进行管理,只需在开始阶段创建并设
置Playable Graph,在设置之后的每帧中Playable Graph都会自动管理对应的动画作业
Job。
[0083] 此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如
图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络
环境。
[0084] 根据本申请实施例的另一个方面,还提供了一种用于实施上述任务的处理方法的服务器或终端。
[0085] 图11是根据本申请实施例的一种终端的结构框图,如图11所示,该终端可以包括:一个或多个(图中仅示出一个)处理器1101、存储器1103、以及传输装置1105,如图11所示,
该终端还可以包括输入输出设备1107。
[0086] 其中,存储器1103可用于存储软件程序以及模块,如本申请实施例中的任务的处理方法和装置对应的程序指令/模块,处理器1101通过运行存储在存储器1103内的软件程
序以及模块,从而执行各种功能应用以及数据处理,即实现上述的任务的处理方法。存储器
1103可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、
闪存、或者其他非易失性固态存储器。在一些实例中,存储器1103可进一步包括相对于处理
器1101远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包
括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0087] 上述的传输装置1105用于经由一个网络接收或者发送数据,还可以用于处理器与存储器之间的数据传输。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,
传输装置1105包括一个网络适配器(Network Interface Controller,NIC),其可通过网线
与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装
置1105为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
[0088] 其中,具体地,存储器1103用于存储应用程序。
[0089] 处理器1101可以通过传输装置1105调用存储器1103存储的应用程序,以执行下述步骤:
[0090] 确定目标模型的多个节点,其中,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼;
[0091] 生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间;
[0092] 对多个节点的模拟运算任务进行并行处理。
[0093] 处理器1101还用于执行下述步骤:
[0094] 确定多个节点中的多个第二节点,其中,任意两个第二节点所表示的骨骼不属于同一个动画,第二节点的节点数量不大于多个节点的节点数量;
[0095] 通过多个读线程中的每个读线程从一个第二节点读取待处理的物理状态,并将读取的待处理的物理状态传递给一个第二线程,其中,多个读线程为并行运行的读线程,任意
两个读线程所读取物理状态的第二节点不同,任意两个读线程将读取的物理状态所传递至
的第二线程不同;
[0096] 通过多个线程的多个第二线程运行多个第二节点的模拟运算任务,其中,第二线程的线程数量不大于多个线程的线程数量、且不大于第二节点的节点数量;
[0097] 通过多个写线程中的每个写线程从一个第二线程获取得到的物理状态,并将得到的物理状态写入一个第二节点,以对第二节点保存的物理状态进行更新,其中,多个写线程
为并行运行的写线程,任意两个写线程所获取物理状态的第二线程不同,任意两个写线程
将获取的物理状态所写入的第二节点不同。
[0098] 采用本申请实施例,将目标模型按照多个骨骼分成多个节点,对多个节点的模拟运算任务进行并行处理,而不是串行处理这些模拟运算任务,可以解决相关技术中数据处
理效率较低的技术问题,进而达到提高数据处理效率的技术效果。
[0099] 可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
[0100] 本领域普通技术人员可以理解,图11所示的结构仅为示意,终端可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet 
Devices,MID)、PAD等终端设备。图11其并不对上述电子装置的结构造成限定。例如,终端还
可包括比图11中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图11所
示不同的配置。
[0101] 本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质
中,存储介质可以包括:闪存盘、只读存储器(Read‑Only Memory,ROM)、随机存取器(Random 
Access Memory,RAM)、磁盘或光盘等。
[0102] 本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行任务的处理方法的程序代码。
[0103] 可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
[0104] 可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
[0105] 确定目标模型的多个节点,其中,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼;
[0106] 生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间;
[0107] 对多个节点的模拟运算任务进行并行处理。
[0108] 可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:
[0109] 确定多个节点中的多个第二节点,其中,任意两个第二节点所表示的骨骼不属于同一个动画,第二节点的节点数量不大于多个节点的节点数量;
[0110] 通过多个读线程中的每个读线程从一个第二节点读取待处理的物理状态,并将读取的待处理的物理状态传递给一个第二线程,其中,多个读线程为并行运行的读线程,任意
两个读线程所读取物理状态的第二节点不同,任意两个读线程将读取的物理状态所传递至
的第二线程不同;
[0111] 通过多个线程的多个第二线程运行多个第二节点的模拟运算任务,其中,第二线程的线程数量不大于多个线程的线程数量、且不大于第二节点的节点数量;
[0112] 通过多个写线程中的每个写线程从一个第二线程获取得到的物理状态,并将得到的物理状态写入一个第二节点,以对第二节点保存的物理状态进行更新,其中,多个写线程
为并行运行的写线程,任意两个写线程所获取物理状态的第二线程不同,任意两个写线程
将获取的物理状态所写入的第二节点不同。
[0113] 可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
[0114] 可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者
光盘等各种可以存储程序代码的介质。
[0115] 上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
[0116] 上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技
术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软
件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一
台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所
述方法的全部或部分步骤。
[0117] 在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0118] 在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一
种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者
可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之
间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连
接,可以是电性或其它的形式。
[0119] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目
的。
[0120] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单
元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0121] 以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应
视为本申请的保护范围。