CN111773690B - 任务的处理方法和装置、存储介质、电子装置 - Google Patents
任务的处理方法和装置、存储介质、电子装置 Download PDFInfo
- Publication number
- CN111773690B CN111773690B CN202010630525.9A CN202010630525A CN111773690B CN 111773690 B CN111773690 B CN 111773690B CN 202010630525 A CN202010630525 A CN 202010630525A CN 111773690 B CN111773690 B CN 111773690B
- Authority
- CN
- China
- Prior art keywords
- nodes
- threads
- simulation operation
- thread
- task
- 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.)
- Active
Links
Images
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/50—Controlling the output signals based on the game progress
- A63F13/52—Controlling the output signals based on the game progress involving aspects of the displayed game scene
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/55—Controlling game characters or game objects based on the game progress
- A63F13/57—Simulating properties, behaviour or motion of objects in the game world, e.g. computing tyre load in a car race game
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Processing Or Creating Images (AREA)
Abstract
本申请公开了一种任务的处理方法和装置、存储介质、电子装置。其中,该方法包括:确定目标模型的多个节点,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼;生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间;对多个节点的模拟运算任务进行并行处理。本申请解决了相关技术中数据处理效率较低的技术问题。
Description
技术领域
本申请涉及游戏领域,具体而言,涉及一种任务的处理方法和装置、存储介质、电子装置。
背景技术
随着时代的发展和移动设备硬件性能的提升,物理引擎被越来越多的移动游戏所使用。物理引擎处理的对象主要可以分为刚体(Rigid Bodies)和柔体(Soft Bodies)两大部分,刚体主要应用在物理碰撞、破碎、布娃娃等系统中,而柔体最为重要的应用代表就是布料系统。
在物理引擎中,通过物理计算来模拟布料效果的系统可以称之为布料系统。实时布料模拟作为一个关键特性,可以广泛应用在角色服装,场景柔体等诸多情景下,既可改善传统骨骼动画表现僵硬、细节粗糙的不足,也能解决顶点动画无法交互、存贮量大的问题,从而大幅提升游戏的真实感体验。虽然名为布料系统,但并不仅仅用于表现角色衣服的布料效果,而且可以应用于毛发、坠饰,甚至人体的某些柔软部位。
在实时布料模拟的过程中,需要对所有顶点依次进行模拟运算,处理过程效率较低。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种任务的处理方法和装置、存储介质、电子装置,以至少解决相关技术中数据处理效率较低的技术问题。
根据本申请实施例的一个方面,提供了一种任务的处理方法,包括:确定目标模型的多个节点,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼;生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间;对多个节点的模拟运算任务进行并行处理。
根据本申请实施例的另一方面,还提供了一种任务的处理装置,包括:确定单元,用于确定目标模型的多个节点,其中,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼;生成单元,用于生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间;处理单元,用于对多个节点的模拟运算任务进行并行处理。
根据本申请实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,程序运行时执行上述的方法。
根据本申请实施例的另一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器通过计算机程序执行上述的方法。
在本申请实施例中,将目标模型按照多个骨骼分成多个节点,对所述多个节点的模拟运算任务进行并行处理,而不是串行处理这些模拟运算任务,可以解决相关技术中数据处理效率较低的技术问题,进而达到提高数据处理效率的技术效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的任务的处理方法的硬件环境的示意图;
图2是根据本申请实施例的一种可选的任务的处理方法的流程图;
图3是根据本申请实施例的一种可选的任务的示意图;
图4是根据本申请实施例的一种可选的任务的处理方案的示意图;
图5是根据本申请实施例的一种可选的任务处理方案效果的示意图;
图6是根据本申请实施例的一种可选的任务的处理方案的示意图;
图7是根据本申请实施例的一种可选的任务的处理方案的示意图;
图8是根据本申请实施例的一种可选的任务处理方案效果的示意图;
图9是根据本申请实施例的一种可选的任务处理方案效果的示意图;
图10是根据本申请实施例的一种可选的任务的处理装置的示意图;
以及
图11是根据本申请实施例的一种终端的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本申请实施例的一方面,提供了一种任务的处理方法的方法实施例。
可选地,在本实施例中,上述任务的处理方法可以应用于如图1所示的由终端101和服务器103所构成的硬件环境中。如图1所示,服务器103通过网络与终端101进行连接,可用于为终端或终端上安装的客户端提供服务(如游戏服务、应用服务等),可在服务器上或独立于服务器设置数据库105,用于为服务器103提供数据存储服务,上述网络包括但不限于:广域网、城域网或局域网,终端101并不限定于PC、手机、平板电脑等。
本申请实施例的任务的处理方法可以由终端101来执行,还可以是由服务器103和终端101共同执行。其中,终端101执行本申请实施例的任务的处理方法也可以是由安装在其上的客户端来执行。图2是根据本申请实施例的一种可选的任务的处理方法的流程图,如图2所示,该方法可以包括以下步骤:
步骤S202,确定目标模型的多个节点,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼。
上述柔性对象为布料模拟的对象,如角色服饰、树叶等场景柔体,角色身上柔软的部分等;该对象的模型具有骨骼系统,该骨骼系统具有多根骨骼,上述多个节点与这多根骨骼一一对应。
步骤S204,生成多个节点的模拟运算任务,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间。
上述模拟运算任务用于主要有两个功能,其一是模拟骨骼受外力和惯性的影响,其二是受内部因素的影响,如弹性模拟、刚性模拟、碰撞模拟以及骨骼之间的约束等。
步骤S206,对多个节点的模拟运算任务进行并行处理,此处的并行处理包括以下几种类型:其一是利用多个处理器进行并行处理、其二是利用多个进程进行并行处理、其三是利用多个线程进行并行处理,后续以线程级别的并行处理为例进行说明。
通过上述步骤S202至步骤S206,将目标模型按照多个骨骼分成多个节点,对多个节点的模拟运算任务进行并行处理,而不是串行处理这些模拟运算任务,可以解决相关技术中数据处理效率较低的技术问题,进而达到提高数据处理效率的技术效果。下文结合图2所示的步骤进一步详述本申请的技术方案。
在一个可选的方案中,可以将模拟运算任务封装为任务作业job,然后利用管理工具(可以为一个管理程序、管理程序中的类等)进行job的批量创建和派发,即在对多个节点的模拟运算任务进行并行处理时,按照如下步骤1-步骤3为多个线程中的每个线程分配模拟运算任务:
步骤1,通过管理工具监控第一线程(第一线程为多个线程中的任意一个线程)的运行状态,管理工具为预先创建的用于根据线程的运行状态分发模拟运算任务的工具,运行状态用于表示第一线程当前是否有正在处理的模拟运算任务。
步骤2,在运行状态表明第一线程当前没有正在处理的模拟运算任务的情况下,通过管理工具将目标模拟运算任务分发给第一线程进行处理,目标模拟运算任务为多个节点的模拟运算任务中未处理的模拟运算任务。
步骤3,在第一线程完成目标模拟运算任务的情况下,将第一节点的物理状态更新为第一线程处理得到的物理状态,目标模拟运算任务属于第一节点。
在以上方案中,相当于将模拟部分封装成任务Job,然后通过全局的管理工具负责在每一帧的LateUpdate阶段读取所需信息(如骨骼位置),批量创建和派发Job,高效地利用空闲线程执行Job,最后等待Job完成并将模拟结果写入骨骼中进行更新。
在以上方案中,如果多个骨骼有共同的祖先节点,同一时间只能读写其中一个骨骼,换言之,就不能对这多个骨骼中的其他骨骼进行模拟处理,为此,本申请还提供了一种优化的解决方案,即对多个节点的模拟运算任务进行并行处理时,可以通过如下步骤1-步骤4实现:
步骤1,确定多个节点中的多个第二节点,任意两个第二节点所表示的骨骼不属于同一个动画,第二节点的节点数量不大于多个节点的节点数量。
步骤2,在通过多个线程的多个第二线程运行多个第二节点的模拟运算任务之前,通过多个读线程中的每个读线程从一个第二节点读取待处理的物理状态,并将读取的待处理的物理状态传递给一个第二线程,多个读线程为并行运行的读线程,任意两个读线程所读取物理状态的第二节点不同,即读线程可以读取至少一个物理状态且任意一个物理状态不会被重复读取,任意两个读线程将读取的物理状态所传递至的第二线程不同,即每个第二线程至少处理一个物理状态且任意一个物理状态不会被重复处理。
步骤3,通过多个线程的多个第二线程运行多个第二节点的模拟运算任务,第二线程的线程数量不大于多个线程的线程数量、且不大于第二节点的节点数量。
步骤4,在通过多个线程的多个第二线程运行多个第二节点的模拟运算任务之后,通过多个写线程中的每个写线程从一个第二线程获取得到的物理状态,并将得到的物理状态写入一个第二节点,以对第二节点保存的物理状态进行更新,多个写线程为并行运行的写线程,任意两个写线程所获取物理状态的第二线程不同,任意两个写线程将获取的物理状态所写入的第二节点不同,即写线程可以写入至少一个物理状态且任意一个物理状态不会被重复写入。
在以上方案中,只要不同骨骼所属的动画animator不同,就可以在同时读写,从而可以提高处理效率。
作为一种可选的实施例,下面结合具体的实施方式进一步详述本申请的技术方案中。
动态骨骼Dynamic Bone是一款基于模拟弹簧振子的算法实现树状柔体的物理模拟插件,虽然是基于模拟弹簧振子运动的算法实现,但是Dynamic Bone各节点之间的距离实际上不会发生变化。比起弹簧,父子节点之间的相对运动更接近串联的单摆。
Dynamic Bone模拟出的柔体特性体现在物体运动之后发生的弹性形变上,所以它的模拟自然发生在物体运动之后,再根据物体运动的结果去模拟各个节点弹性运动的过程。Dynamic Bone的整体流程是当物体原本移动完成后,首先根据运动的当前结果模拟弹性运动,再根据模拟结果修正各节点的旋转并且将模拟结果同步到实际节点上。下面结合图3进行描述:
Dynamic Bone作为一种骨骼动画后处理的方案,首先将骨骼抽象成粒子,模拟动力学效果,最后将模拟效果同步到骨骼上。粒子的模拟分成两个阶段,图3是这两个阶段的示意图,第一阶段计算重力等外力对粒子的影响,以及模拟惯性效果,第二阶段进行弹性模拟,刚性模拟,碰撞处理以及保持父子节点的长度。
使用Dynamic Bone可以方便地模拟头发、飘带、翅膀和尾巴等柔性物体的动画。尽管Dynamic Bone能给游戏增添不少动态效果,但对效率和效果有极致追求的游戏来说还远远不够。为了满足手机等移动端实际项目的需求,采用本申请的技术方案能够从性能和效果上对Dynamic Bone进行了一番升级改造。
在方案一中,采用作业Job系统System这样的一套多线程框架,用户用作业系统可以轻松的写出安全的多线程代码,作业系统配合Burst Compiler一起使用,可以生成高度优化的目标代码,使Job更高效的执行。
如图4所示,先将原始的Dynamic Bone的粒子(如Dynamic Bone 0、Dynamic Bone1等)模拟部分封装成Job(如Job 0、Job 1等),然后设计了一个全局的管理类,该类管理场景中所有Dynamic Bone组件,管理类负责在每一帧的LateUpdate阶段读取骨骼位置,批量生成和派发Job,高效地利用Work线程(如Work Thread 0、Work Thread 1等)执行Job,最后等待Job完成并将粒子模拟结果写入骨骼中。
在上述方案中,当一个Job线程完成了本次所分配给它的工作后,可以将其他线程那里获取其剩余的作业。假设每个线程的处理能力是相当的,它每次可获取那个线程剩余作业的一半,从而可以提高工作效率。
为了优化这个过程,你需要指定一个每批次数量(batch count)。这个每批次数量控制了你会生成多少job和线程中进行任务分发的粒度。使用一个较低的每批次数量,比如1,会使你在线程之间的工作分配更平均。它会带来一些额外的开销,所以有时增加每批次数量会是更好的选择。从每批次数量为1开始,然后慢慢增加这个数量直到性能不再提升是一个合理的策略。
为了对上述方案进行效果验证,本方案构建了一个包含900个Dynamic Bone组件,每个组件包含6个骨骼的测试场景,在i7-6700 CPU,16GB RAM的PC上进行了测试,测试结果如图5所示,数据的时间单位为毫秒ms,采用本方案实现Dynamic Bone,在帧更新的Update个LateUpdate阶段皆有优化,优化幅度达到36.62%。
从以上的测试结果可以看出,使用方案一提升了Dynamic Bone的性能,但是提升效果有限,为了提升效率,考虑了进行骨骼读写的并行操作,本方案将读写骨骼的操作封装到ParallelForTransform Job中,使之并行读写骨骼,但是通过实践发现如果场景中Dynamic Bone有共同的祖先节点的话,同一时间只能读写一个骨骼,如图6左侧图所示,无法同时读写下节点4与节点5,基于此,本申请还提供了下文描述的方案二。
该方案采用动画Animation作业Job来对骨骼动画进行后期处理,动画作业与作业Job系统System(即方案一)相似,但有一大的区别是只要不同骨骼所属的动画animator不同,就可以在动画Animation作业Job中同时读写,如图6中右图所示,节点4与节点5分属于动画0和动画1,所属动画不同,就可以通过动画Animation作业Job进行并行读写。
方案二与方案一的另一点不同之处是方案一需要管理类管理Job的创建,派发和和完成,而方案二可借助如图7所示的动画图工具Playable Graph进行管理,只需在开始阶段创建并设置Playable Graph,图7是设置Playable Graph的示意图,Playable Graph生成动画输出Animation Output,设置数据来源,调用动画脚本Animation Script生成动态骨骼的动画作业,在设置之后的每帧中Playable Graph都会自动管理对应的动画作业Job。
在与方案一相同的测试场景下测试了方案二的性能,并与原始的Dynamic Bone和方案一进行比较,得到了如图8所示的测试数据(时间单位为毫秒ms),方案二相对于原始方案有了65.77%的优化幅度,也远高于方案一的优化幅度。
此外,本方案还在PS4主机上进行了测试,将主机游戏中的女主角作为测试对象,一个女主角翅膀上挂了6个Dynamic Bone,每个Dynamic Bone控制20至30根骨骼,场景中共计50个这样的女主角,得到测试结果如图9所示(时间单位为毫秒ms),方案二相对于原始方案有了69.78%的优化幅度,也远高于方案一的优化幅度。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
根据本申请实施例的另一个方面,还提供了一种用于实施上述任务的处理方法的任务的处理装置。图10是根据本申请实施例的一种可选的任务的处理装置的示意图,如图10所示,该装置可以包括:
确定单元1001,用于确定目标模型的多个节点,其中,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼。
上述柔性对象为布料模拟的对象,如角色服饰、树叶等场景柔体,角色身上柔软的部分等;该对象的模型具有骨骼系统,该骨骼系统具有多根骨骼,上述多个节点与这多根骨骼一一对应。
生成单元1003,用于生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间。
上述模拟运算任务用于主要有两个功能,其一是模拟骨骼受外力和惯性的影响,其二是受内部因素的影响,如弹性模拟、刚性模拟、碰撞模拟以及骨骼之间的约束等。
处理单元1005,用于对多个节点的模拟运算任务进行并行处理。
需要说明的是,该实施例中的确定单元1001可以用于执行本申请实施例中的步骤S202,该实施例中的生成单元1003可以用于执行本申请实施例中的步骤S204,该实施例中的处理单元1005可以用于执行本申请实施例中的步骤S206。
此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现。
通过上述模块,将目标模型按照多个骨骼分成多个节点,对多个节点的模拟运算任务进行并行处理,而不是串行处理这些模拟运算任务,可以解决相关技术中数据处理效率较低的技术问题,进而达到提高数据处理效率的技术效果。
可选地,处理单元还用于:通过管理工具监控第一线程的运行状态,其中,管理工具为预先创建的用于根据线程的运行状态分发模拟运算任务的工具,运行状态用于表示第一线程当前是否有正在处理的模拟运算任务,第一线程为多个线程中的任意一个线程;在运行状态表明第一线程当前没有正在处理的模拟运算任务的情况下,通过管理工具将目标模拟运算任务分发给第一线程进行处理,其中,目标模拟运算任务为多个节点的模拟运算任务中未处理的模拟运算任务。
可选地,处理单元还用于:在通过管理工具将目标模拟运算任务分发给第一线程进行处理之后,在第一线程完成目标模拟运算任务的情况下,将第一节点的物理状态更新为第一线程处理得到的物理状态,其中,目标模拟运算任务属于第一节点。
可选地,处理单元包括:确定模块,用于确定多个节点中的多个第二节点,其中,任意两个第二节点所表示的骨骼不属于同一个动画,第二节点的节点数量不大于多个节点的节点数量;处理模块,用于通过多个线程的多个第二线程运行多个第二节点的模拟运算任务,其中,第二线程的线程数量不大于多个线程的线程数量、且不大于第二节点的节点数量。
可选地,处理模块还用于:在通过多个线程的多个第二线程运行多个第二节点的模拟运算任务之前,通过多个读线程中的每个读线程从一个第二节点读取待处理的物理状态,并将读取的待处理的物理状态传递给一个第二线程,其中,多个读线程为并行运行的读线程,任意两个读线程所读取物理状态的第二节点不同,任意两个读线程将读取的物理状态所传递至的第二线程不同。
可选地,处理模块还用于:在通过多个线程的多个第二线程运行多个第二节点的模拟运算任务之后,通过多个写线程中的每个写线程从一个第二线程获取得到的物理状态,并将得到的物理状态写入一个第二节点,以对第二节点保存的物理状态进行更新,其中,多个写线程为并行运行的写线程,任意两个写线程所获取物理状态的第二线程不同,任意两个写线程将获取的物理状态所写入的第二节点不同。
可选地,生成单元还用于:为多个节点中的每个节点创建包括如下操作的模拟运算任务:外力模拟、惯性模拟、弹性模拟、刚性模拟、碰撞处理以及保持父子节点之间的长度。
使用Dynamic Bone可以方便地模拟头发、飘带、翅膀和尾巴等柔性物体的动画。尽管Dynamic Bone能给游戏增添不少动态效果,但对效率和效果有极致追求的游戏来说还远远不够。为了满足手机等移动端实际项目的需求,采用本申请的技术方案能够从性能和效果上对Dynamic Bone进行了一番升级改造。
在方案一中,采用作业Job系统System这样的一套多线程框架,用户用作业系统可以轻松的写出安全的多线程代码,作业系统配合Burst Compiler一起使用,可以生成高度优化的目标代码,使Job更高效的执行。
在方案二中,采用动画Animation作业Job来对骨骼动画进行后期处理,动画作业与作业Job系统System(即方案一)相似,但有一大的区别是只要不同骨骼所属的动画animator不同,就可以在动画Animation作业Job中同时读写,如两个节点分属于动画0和动画1,所属动画不同,就可以通过动画Animation作业Job进行并行读写。
方案二与方案一的另一点不同之处是方案一需要管理类管理Job的创建,派发和和完成,而方案二可借助动画图工具Playable Graph进行管理,只需在开始阶段创建并设置Playable Graph,在设置之后的每帧中Playable Graph都会自动管理对应的动画作业Job。
此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。
根据本申请实施例的另一个方面,还提供了一种用于实施上述任务的处理方法的服务器或终端。
图11是根据本申请实施例的一种终端的结构框图,如图11所示,该终端可以包括:一个或多个(图中仅示出一个)处理器1101、存储器1103、以及传输装置1105,如图11所示,该终端还可以包括输入输出设备1107。
其中,存储器1103可用于存储软件程序以及模块,如本申请实施例中的任务的处理方法和装置对应的程序指令/模块,处理器1101通过运行存储在存储器1103内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的任务的处理方法。存储器1103可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1103可进一步包括相对于处理器1101远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
上述的传输装置1105用于经由一个网络接收或者发送数据,还可以用于处理器与存储器之间的数据传输。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置1105包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置1105为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
其中,具体地,存储器1103用于存储应用程序。
处理器1101可以通过传输装置1105调用存储器1103存储的应用程序,以执行下述步骤:
确定目标模型的多个节点,其中,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼;
生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间;
对多个节点的模拟运算任务进行并行处理。
处理器1101还用于执行下述步骤:
确定多个节点中的多个第二节点,其中,任意两个第二节点所表示的骨骼不属于同一个动画,第二节点的节点数量不大于多个节点的节点数量;
通过多个读线程中的每个读线程从一个第二节点读取待处理的物理状态,并将读取的待处理的物理状态传递给一个第二线程,其中,多个读线程为并行运行的读线程,任意两个读线程所读取物理状态的第二节点不同,任意两个读线程将读取的物理状态所传递至的第二线程不同;
通过多个线程的多个第二线程运行多个第二节点的模拟运算任务,其中,第二线程的线程数量不大于多个线程的线程数量、且不大于第二节点的节点数量;
通过多个写线程中的每个写线程从一个第二线程获取得到的物理状态,并将得到的物理状态写入一个第二节点,以对第二节点保存的物理状态进行更新,其中,多个写线程为并行运行的写线程,任意两个写线程所获取物理状态的第二线程不同,任意两个写线程将获取的物理状态所写入的第二节点不同。
采用本申请实施例,将目标模型按照多个骨骼分成多个节点,对多个节点的模拟运算任务进行并行处理,而不是串行处理这些模拟运算任务,可以解决相关技术中数据处理效率较低的技术问题,进而达到提高数据处理效率的技术效果。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
本领域普通技术人员可以理解,图11所示的结构仅为示意,终端可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile InternetDevices,MID)、PAD等终端设备。图11其并不对上述电子装置的结构造成限定。例如,终端还可包括比图11中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图11所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行任务的处理方法的程序代码。
可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
确定目标模型的多个节点,其中,目标模型用于表示虚拟场景中的柔性对象,多个节点中的每个节点用于表示目标模型的一个骨骼;
生成多个节点的模拟运算任务,其中,模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,第二时间晚于第一时间;
对多个节点的模拟运算任务进行并行处理。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:
确定多个节点中的多个第二节点,其中,任意两个第二节点所表示的骨骼不属于同一个动画,第二节点的节点数量不大于多个节点的节点数量;
通过多个读线程中的每个读线程从一个第二节点读取待处理的物理状态,并将读取的待处理的物理状态传递给一个第二线程,其中,多个读线程为并行运行的读线程,任意两个读线程所读取物理状态的第二节点不同,任意两个读线程将读取的物理状态所传递至的第二线程不同;
通过多个线程的多个第二线程运行多个第二节点的模拟运算任务,其中,第二线程的线程数量不大于多个线程的线程数量、且不大于第二节点的节点数量;
通过多个写线程中的每个写线程从一个第二线程获取得到的物理状态,并将得到的物理状态写入一个第二节点,以对第二节点保存的物理状态进行更新,其中,多个写线程为并行运行的写线程,任意两个写线程所获取物理状态的第二线程不同,任意两个写线程将获取的物理状态所写入的第二节点不同。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (9)
1.一种任务的处理方法,其特征在于,包括:
确定目标模型的多个节点,其中,所述目标模型用于表示虚拟场景中的柔性对象,所述多个节点中的每个节点用于表示所述目标模型的一个骨骼;
生成所述多个节点的模拟运算任务,其中,所述模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,所述第二时间晚于所述第一时间;
对所述多个节点的模拟运算任务进行并行处理,包括:确定所述多个节点中的多个第二节点,其中,任意两个所述第二节点所表示的骨骼不属于同一个动画,所述第二节点的节点数量不大于所述多个节点的节点数量;通过多个线程的多个第二线程运行所述多个第二节点的模拟运算任务,其中,所述第二线程的线程数量不大于所述多个线程的线程数量、且不大于所述第二节点的节点数量。
2.根据权利要求1所述的方法,其特征在于,对所述多个节点的模拟运算任务进行并行处理包括按照如下方式为多个线程中的每个线程分配模拟运算任务:
通过管理工具监控第一线程的运行状态,其中,所述管理工具为预先创建的用于根据线程的运行状态分发模拟运算任务的工具,所述运行状态用于表示所述第一线程当前是否有正在处理的模拟运算任务,所述第一线程为所述多个线程中的任意一个线程;
在所述运行状态表明所述第一线程当前没有正在处理的模拟运算任务的情况下,通过所述管理工具将目标模拟运算任务分发给所述第一线程进行处理,其中,所述目标模拟运算任务为所述多个节点的模拟运算任务中未处理的模拟运算任务。
3.根据权利要求2所述的方法,其特征在于,在通过所述管理工具将目标模拟运算任务分发给所述第一线程进行处理之后,所述方法还包括:
在所述第一线程完成所述目标模拟运算任务的情况下,将第一节点的物理状态更新为所述第一线程处理得到的物理状态,其中,所述目标模拟运算任务属于所述第一节点。
4.根据权利要求1所述的方法,其特征在于,对所述多个节点的模拟运算任务进行并行处理包括:
在通过所述多个线程的多个第二线程运行所述多个第二节点的模拟运算任务之前,通过多个读线程中的每个读线程从一个所述第二节点读取待处理的物理状态,并将读取的待处理的物理状态传递给一个所述第二线程,其中,所述多个读线程为并行运行的读线程,任意两个所述读线程所读取物理状态来源的所述第二节点不同,任意两个所述读线程将读取的物理状态所传递至的所述第二线程不同。
5.根据权利要求1所述的方法,其特征在于,对所述多个节点的模拟运算任务进行并行处理包括:
在通过所述多个线程的多个第二线程运行所述多个第二节点的模拟运算任务之后,通过多个写线程中的每个写线程从一个所述第二线程获取得到的物理状态,并将得到的物理状态写入一个所述第二节点,以对所述第二节点保存的物理状态进行更新,其中,所述多个写线程为并行运行的写线程,任意两个所述写线程所获取物理状态的所述第二线程不同,任意两个所述写线程将获取的物理状态所写入的所述第二节点不同。
6.根据权利要求1至5中任意一项所述的方法,其特征在于,生成所述多个节点的模拟运算任务包括:
为所述多个节点中的每个节点创建包括如下操作的模拟运算任务:外力模拟、惯性模拟、弹性模拟、刚性模拟、碰撞处理以及保持父子节点之间的长度。
7.一种任务的处理装置,其特征在于,包括:
确定单元,用于确定目标模型的多个节点,其中,所述目标模型用于表示虚拟场景中的柔性对象,所述多个节点中的每个节点用于表示所述目标模型的一个骨骼;
生成单元,用于生成所述多个节点的模拟运算任务,其中,所述模拟运算任务用于根据节点在第一时间的物理状态模拟出节点在第二时间的物理状态,所述第二时间晚于所述第一时间;
处理单元,用于对所述多个节点的模拟运算任务进行并行处理;所述处理单元还用于:确定所述多个节点中的多个第二节点,其中,任意两个所述第二节点所表示的骨骼不属于同一个动画,所述第二节点的节点数量不大于所述多个节点的节点数量;通过多个线程的多个第二线程运行所述多个第二节点的模拟运算任务,其中,所述第二线程的线程数量不大于所述多个线程的线程数量、且不大于所述第二节点的节点数量。
8.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至6任一项中所述的方法。
9.一种电子装置,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器通过所述计算机程序执行上述权利要求1至6任一项中所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010630525.9A CN111773690B (zh) | 2020-06-30 | 2020-06-30 | 任务的处理方法和装置、存储介质、电子装置 |
PCT/CN2020/132165 WO2022000972A1 (zh) | 2020-06-30 | 2020-11-27 | 任务的处理方法和装置、存储介质、电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010630525.9A CN111773690B (zh) | 2020-06-30 | 2020-06-30 | 任务的处理方法和装置、存储介质、电子装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111773690A CN111773690A (zh) | 2020-10-16 |
CN111773690B true CN111773690B (zh) | 2021-11-09 |
Family
ID=72759052
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010630525.9A Active CN111773690B (zh) | 2020-06-30 | 2020-06-30 | 任务的处理方法和装置、存储介质、电子装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111773690B (zh) |
WO (1) | WO2022000972A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111773690B (zh) * | 2020-06-30 | 2021-11-09 | 完美世界(北京)软件科技发展有限公司 | 任务的处理方法和装置、存储介质、电子装置 |
CN115222854A (zh) * | 2021-04-15 | 2022-10-21 | 北京字跳网络技术有限公司 | 虚拟形象的碰撞处理方法、装置、电子设备和存储介质 |
CN115035221B (zh) * | 2022-06-17 | 2024-06-21 | 广州虎牙科技有限公司 | 一种舞蹈动画合成方法、装置、设备及存储介质 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3172720A4 (en) * | 2014-07-25 | 2018-04-11 | Intel Corporation | Avatar facial expression animations with head rotation |
JP2018128851A (ja) * | 2017-02-08 | 2018-08-16 | 株式会社ソニー・インタラクティブエンタテインメント | プログラム、オブジェクト配置システム及びオブジェクト配置方法 |
CN107213638B (zh) * | 2017-04-06 | 2020-12-08 | 珠海金山网络游戏科技有限公司 | 一种3d游戏骨骼处理系统及其处理方法 |
CN108159694B (zh) * | 2017-12-05 | 2020-12-11 | 北京像素软件科技股份有限公司 | 柔体飘动模拟方法、柔体飘动模拟装置及终端设备 |
CN110090440B (zh) * | 2019-04-30 | 2022-03-11 | 腾讯科技(深圳)有限公司 | 虚拟对象显示方法、装置、电子设备及存储介质 |
CN110102050B (zh) * | 2019-04-30 | 2022-02-18 | 腾讯科技(深圳)有限公司 | 虚拟对象显示方法、装置、电子设备及存储介质 |
CN111026541B (zh) * | 2019-05-22 | 2020-09-29 | 珠海随变科技有限公司 | 渲染资源调度方法、装置、设备及存储介质 |
CN111028320B (zh) * | 2019-12-11 | 2021-12-03 | 腾讯科技(深圳)有限公司 | 布料动画的生成方法、装置、计算机可读存储介质 |
CN111292223B (zh) * | 2020-01-22 | 2023-07-25 | 北京百度网讯科技有限公司 | 图计算的处理方法、装置、电子设备及存储介质 |
CN111773690B (zh) * | 2020-06-30 | 2021-11-09 | 完美世界(北京)软件科技发展有限公司 | 任务的处理方法和装置、存储介质、电子装置 |
-
2020
- 2020-06-30 CN CN202010630525.9A patent/CN111773690B/zh active Active
- 2020-11-27 WO PCT/CN2020/132165 patent/WO2022000972A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
CN111773690A (zh) | 2020-10-16 |
WO2022000972A1 (zh) | 2022-01-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111773690B (zh) | 任务的处理方法和装置、存储介质、电子装置 | |
Tecchia et al. | A Flexible Framework for Wide‐Spectrum VR Development | |
KR102698917B1 (ko) | 이미지 처리 방법 및 장치, 전자 장치 및 저장 매체 | |
CN112433819A (zh) | 异构集群调度的模拟方法、装置、计算机设备及存储介质 | |
CN106951926A (zh) | 一种混合架构的深度学习系统方法及装置 | |
CN111773688B (zh) | 柔性对象的渲染方法和装置、存储介质、电子装置 | |
CN102207904B (zh) | 用于对可重构处理器进行仿真的设备和方法 | |
CN115641375B (zh) | 虚拟对象的毛发处理方法、装置、设备及存储介质 | |
CN102567172A (zh) | 用于应用性能测试的并行工作负荷仿真方法和系统 | |
CN112669194B (zh) | 虚拟场景中的动画处理方法、装置、设备及存储介质 | |
CN112090079A (zh) | 游戏任务运行方法、装置、计算机设备和存储介质 | |
CN111773719A (zh) | 虚拟对象的渲染方法和装置、存储介质、电子装置 | |
Zhang et al. | DEVS/RMI-An auto-adaptive and reconfigurable distributed simulation environment for engineering studies | |
CN110930484B (zh) | 动画配置方法和装置、存储介质及电子装置 | |
CN114298329A (zh) | 一种模型训练方法、装置、设备及存储介质 | |
Janczykowski et al. | Large-scale urban traffic simulation with Scala and high-performance computing system | |
CN112807695B (zh) | 游戏场景生成方法和装置、可读存储介质、电子设备 | |
CN115115752A (zh) | 虚拟服装的形变预测方法和装置、存储介质及电子设备 | |
CN116115995A (zh) | 图像渲染处理方法、装置及电子设备 | |
CN115129460A (zh) | 获取算子硬件时间的方法、装置、计算机设备和存储介质 | |
CN113778564B (zh) | 一种高效执行evm智能合约的方法、设备及储存介质 | |
US20110238680A1 (en) | Time and space efficient sharing of data structures across different phases of a virtual world application | |
CN114692056A (zh) | 目标页面生成方法、装置、计算机设备和存储介质 | |
CN114615521A (zh) | 视频处理方法和装置、计算机可读存储介质、电子设备 | |
CN113034651A (zh) | 互动动画的播放方法、装置、设备及存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |