物理状态的更新方法和装置、存储介质、电子装置

文档序号:1104657 发布日期:2020-09-29 浏览:18次 >En<

阅读说明:本技术 物理状态的更新方法和装置、存储介质、电子装置 (Physical state updating method and device, storage medium and electronic device ) 是由 汪成峰 胡梓楠 于 2020-04-30 设计创作,主要内容包括:本申请公开了一种物理状态的更新方法和装置、存储介质、电子装置。其中,该方法包括:确定虚拟场景中的第一对象,第一对象为虚拟场景中不用进行物理状态模拟处理的对象;对第一对象进行对象状态更新;在对第一对象进行对象状态更新的过程中,调用物理引擎对第二对象和第三对象进行物理状态更新,第二对象和第三对象为虚拟场景中需要进行物理状态模拟处理的对象。本申请解决了相关技术中游戏流程处理效率较低的技术问题。(The application discloses a method and a device for updating a physical state, a storage medium and an electronic device. Wherein, the method comprises the following steps: determining a first object in the virtual scene, wherein the first object is an object which does not need to be subjected to physical state simulation processing in the virtual scene; updating the object state of the first object; and in the process of updating the object state of the first object, calling a physical engine to update the physical state of a second object and a third object, wherein the second object and the third object are objects needing physical state simulation processing in a virtual scene. The method and the device solve the technical problem that the game flow processing efficiency is low in the related technology.)

物理状态的更新方法和装置、存储介质、电子装置

技术领域

本申请涉及游戏领域,具体而言,涉及一种物理状态的更新方法和装置、存储介质、电子装置。

背景技术

物理引擎主要包含游戏世界中的物体之间、物体和场景之间发生碰撞后的力学模拟,以及发生碰撞后的物体骨骼运动的力学模拟。近年来,随着硬件的发展,物理引擎广泛应用于游戏行业。世界三大物理引擎分别是Physx、Havok、Bullet,其中Physx物理引擎是Nvidia公司的一款开源物理引擎,性能优越,模拟效果稳定,尤其在Nvidia的显卡上模拟效率极高。Physx物理引擎包含刚体、关节、vehilce小车、布料、破碎等物理功能,这些功能极大的丰富了游戏的开发内容,提升游戏的效果表现。

游戏引擎的模拟一般分为两部分,一部分是更新游戏数据,一部分是渲染游戏。物理引擎的模拟,需要用到游戏引擎更新后的数据,而游戏引擎的渲染需要用到物理引擎的模拟数据。Physx物理引擎的模拟流程:送入模拟数据;开始模拟;结束模拟;获取模拟结果。这种流程的处理效率较低。

针对上述的问题,目前尚未提出有效的解决方案。

发明内容

本申请实施例提供了一种物理状态的更新方法和装置、存储介质、电子装置,以至少解决相关技术中游戏流程处理效率较低的技术问题。

根据本申请实施例的一个方面,提供了一种物理状态的更新方法,包括:确定虚拟场景中的第一对象,第一对象为虚拟场景中不用进行物理状态模拟处理的对象;对第一对象进行对象状态更新;在对第一对象进行对象状态更新的过程中,调用物理引擎对第二对象和第三对象进行物理状态更新,其中,第二对象和第三对象为虚拟场景中需要进行物理状态模拟处理的对象。

根据本申请实施例的另一方面,还提供了一种物理状态的更新装置,包括:确定单元,用于确定虚拟场景中的第一对象,第一对象为虚拟场景中不用进行物理状态模拟处理的对象;第一更新单元,用于对第一对象进行对象状态更新;第二更新单元,用于在对第一对象进行对象状态更新的过程中,调用物理引擎对第二对象和第三对象进行物理状态更新,其中,第二对象和第三对象为虚拟场景中需要进行物理状态模拟处理的对象。

根据本申请实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,程序运行时执行上述的方法。

根据本申请实施例的另一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器通过计算机程序执行上述的方法。

在本申请实施例中,对于虚拟场景中的对象,可按照如下几个类型来进行处理,其一是需要用到物理引擎进行物理状态更新的游戏对象(即第二对象和第三对象);其二是不需要用到物理引擎进行物理状态更新的游戏对象(即第一对象),由于这几类对象不相关,所以可以采用并行处理的方式进行处理,而不是对这几类对象不分类的串行处理,从而可以解决相关技术中游戏流程处理效率较低的技术问题,进而达到提高处理效率的技术效果。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例的物理状态的更新方法的硬件环境的示意图;

图2是根据本申请实施例的一种可选的物理状态的更新方法的流程图;

图3是根据本申请实施例的一种可选的物理状态的更新方法的流程图;

图4是根据本申请实施例的一种可选的物理状态的更新装置的示意图;以及,

图5是根据本申请实施例的一种终端的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

相关技术中游戏引擎进行游戏更新的步骤包括更新游戏数据和渲染游戏数据,如果结合物理引擎,则变为:更新游戏数据;PhysX开始模拟;PhysX结束模拟;更新依赖于PhysX计算结果的游戏数据;渲染游戏数据。以上流程必须等待游戏数据更新完毕后,才开始物理模拟,效率较低,这样的流程不能充分发挥计算机设备并行处理的特性。

为了克服上述问题,根据本申请实施例的一方面,提供了一种物理状态的更新方法的方法实施例,该方案兼顾设备性能和游戏表现效果,既能利用多线程提高效率,也能够完整真实的表现游戏效果。

可选地,在本实施例中,上述物理状态的更新方法可以应用于如图1所示的由游戏引擎101、物理引擎103、控制模块105所构成的硬件环境中。如图1所示,控制模块105通过总线与物理引擎103和游戏引擎101进行连接,物理引擎103可用于为游戏引擎101提供物体之间、物体和场景之间发生碰撞后的力学模拟的服务,以便于游戏引擎101在渲染中使用物理引擎103得到的模拟结果,可在控制模块105上或独立于控制模块105设置数据库107(可以是片上存储、寄存器、内存等),用于为控制模块105提供数据存储服务。

上述游戏引擎101、物理引擎103、控制模块105为从功能上的区分,这些模块可以为独立的芯片,如游戏引擎101的功能基于图形处理器GPU(Graphics Processing Unit)实现、物理引擎103的功能基于物理运算处理器PPU(Paralleling and Protection Unit)实现、控制模块105为中央处理器CPU(central processing unit),游戏引擎101、物理引擎103、控制模块105也可以作为同一个芯片中的用于实现相应功能的模块存在于该芯片中,如为CPU中,后文以此为例进行说明;上述总线包括但不限于:片内总线(相当于此时上述三个模块为相同芯片中的功能模块)、片间总线(相当于此时上述三个模块为独立的芯片)。

本申请实施例的物理状态的更新方法可以由中央处理器CPU(也可以由CPU、GPU等共同执行)来执行,图2是根据本申请实施例的一种可选的物理状态的更新方法的流程图,如图2所示,该方法可以包括以下步骤:

步骤S202,在游戏数据发生更新时,中央处理器确定虚拟场景中的第一对象,第一对象为虚拟场景中不用进行物理状态模拟处理的对象,如仅仅需要更新与物理无关的游戏属性相关的信息(如衣服颜色、材质发生变化,武器发生变化等)的对象。

步骤S204,中央处理器对第一对象进行对象状态更新,即更新与物理无关的游戏属性相关的信息(如衣服颜色、材质发生变化,武器发生变化等)的对象。

步骤S206,在对第一对象进行对象状态更新的过程中,中央处理器调用物理引擎对第二对象和第三对象进行物理状态更新,第二对象和第三对象为虚拟场景中需要进行物理状态模拟处理的对象,如姿态、物理形态等发生变化的对象。

上述进行物理状态更新相关的逻辑可以通过硬件的形式实现,此时用于实现这些逻辑的硬件就相当于专用硬件,具体可以为一个专用处理器(如PPU)或者处理器中专用的核(如集成在CPU中的核),此时需要进行物理状态更新时调用相应的硬件资源即可实现,如CPU通过相应的接口直接调用物理引擎所在的芯片PPU,或者CPU直接调用片内物理引擎所在的核;上述进行物理状态更新相关的逻辑还可以通过软件的形式实现,可以将进行物理状态更新相关的逻辑编写为库文件,这些库文件可以在通用处理器(如CPU)上实现,此时需要进行物理状态更新时调用相应的库文件即可,如CPU调用相应的核、进程或者线程,通过在核、进程或者线程上运行库文件中进行物理状态更新相关的逻辑,来实现物理状态更新。

在本申请的技术方案中,通过上述步骤,对于虚拟场景中的对象,可按照如下几个类型来进行处理,其一是需要用到物理引擎进行物理状态更新的游戏对象(即第二对象和第三对象);其二是不需要用到物理引擎进行物理状态更新的游戏对象(即第一对象),由于这几类对象不相关,所以可以采用并行处理的方式进行处理,而不是对这几类对象不分类的串行处理,从而可以解决相关技术中游戏流程处理效率较低的技术问题,进而达到提高处理效率的技术效果。下面结合图2所示的步骤进一步详述本申请的技术方案:

在步骤S202提供的技术方案中,在游戏数据发生更新时,中央处理器确定虚拟场景中不用进行物理状态模拟处理的对象为第一对象。

在步骤S204提供的技术方案中,对第一对象进行对象状态更新。

在利用多线程提高效率时,可以采用如下方案:在第二次游戏更新结束后,结束使用第一次的游戏更新结果进行的物理引擎模拟,并保存模拟结果,然后将第二次游戏更新的游戏更新数据送入物理引擎,游戏引擎开始模拟;游戏开始渲染,将保存的物理模拟结果(即使用第一次的游戏更新结果进行模拟得到的结果)用于游戏渲染。

在上述方案中,物理引擎在更新存在依赖关系的对象的物理状态时使用的是上一帧进行物理模拟的物理计算结果,这种方式没有考虑到“更新游戏数据”这个步骤中,有可能会依赖物理输出的结果,如果游戏中有对象需要依赖物理的结果,那么会出现差一帧的问题,导致不正确的物理表现效果,特别是在两帧之间物理对象位移或旋转较大时,不正确的表现效果会更加明显,从而导致渲染的图像失真。

为了便于并行处理并使得处理结果符合实际情况,在本申请的技术方案中,在对第一对象进行对象状态更新之前,可以按照如下方式对虚拟场景中的对象分为如下三类:其一是将虚拟场景内待渲染的对象中不用进行物理状态模拟处理的对象划分为第一对象,对于第一对象的对象状态更新主要是指对第一对象的属性中不需要依赖物理状态模拟处理结果的属性进行更新;其二是将虚拟场景内待渲染的对象中需要进行物理状态模拟处理的对象划分为第二对象或第三对象,第三对象和第二对象是发生交互的对象,第三对象的更新依赖于第二对象的物理状态模拟处理的结果;其三是将用于作为物理引擎的输入的对象划分为第四对象,第四对象是与第二对象发生交互的对象,在对第二对象进行物理状态模拟处理时,依赖于第四对象,如第四对象可以为与第二对象发生碰撞的对象。

在本申请的实施例中,上述步骤S202和步骤S206为并行运行的步骤,并行运行的形式可以包括:芯片级别的并行运行,如在多处理器的设备中,上述步骤S204和步骤S206分别在不同的处理器芯片上运行;进程级别的并行运行,如在可以多进程运行的芯片内部,上述步骤S204和步骤S206分别在不同的进程上运行;线程级别的并行运行,如在可以多线程运行的芯片内部,上述步骤S204和步骤S206分别在不同的线程上运行。

以上述三种并行运行方式中的最后一种为例,对第一对象进行对象状态更新时,可以通过运行CPU上的第一线程(第一线程和下文目标线程是并行运行的线程)将第一对象从第一对象状态更新为第二对象状态,第一对象状态为第一对象在第一时间的对象状态,第二对象状态为第一对象在第二时间的对象状态,第一时间早于第二时间,第一时间和第二时间中的时间可以为时刻的意思,也即本申请的方案可以按照时刻进行更新(两个时刻对应的画面为帧画面,一个时刻序列对应的帧画面序列可以组成一个画面片段),时间可以为时间周期的意思,即本申请的方案可以按照时间周期进行更新(两个时刻对应的画面为关键帧画面,利用关键帧可以衍生出中间过程画面,从而可以生成画面片段)。

在步骤S206提供的技术方案中,在对第一对象进行对象状态更新的过程中,物理引擎对第二对象和第三对象进行物理状态更新,第二对象和第三对象为虚拟场景中需要进行物理状态模拟处理的对象。

在上述实施例中,调用物理引擎对第二对象和第三对象进行物理状态更新包括:通过运行目标线程将第二对象从第一物理状态更新为第二物理状态并将第三对象从第三物理状态更新为第四物理状态,目标线程为与第一线程并行运行的属于物理引擎的线程,第一物理状态为第二对象在第一时间的物理状态,第二物理状态为第二对象在第二时间的物理状态,第三物理状态为第三对象在第一时间的物理状态,第四物理状态为第三对象在第二时间的物理状态。

在本申请的实施例中,步骤S204和步骤S206之间为并行运行的步骤,在步骤S206内部,对于不相关的对象,相应的物理状态更新也可以并行运行,与之前内容类似,可以为芯片级别的并行运行、进程级别的并行运行、线程级别的并行运行,以最后一个为例,在通过运行目标线程将第二对象从第一物理状态更新为第二物理状态时,在第二对象为多个的情况下,通过并行运行多个第二线程将多个第二对象从第一物理状态更新为第二物理状态,目标线程包括多个第二线程,第二线程的数量和第二对象的数量相同,每个第二线程用于更新一个第二对象的物理状态,任意两个第二线程所更新的第二对象不同。

可选地,在将第二对象从第一物理状态更新为第二物理状态之前,可以预先确定虚拟场景中与第二对象发生交互的第四对象,利用物理引擎更新得到第四对象的第五物理状态,第五物理状态为第四对象在第一时间的物理状态;以便于在将第二对象从第一物理状态更新为第二物理状态时,利用第五物理状态将第二对象从第一物理状态更新为第二物理状态。

可选地,对于每个第二对象,通过运行目标线程将第二对象从第一物理状态更新为第二物理状态并将第三对象从第三物理状态更新为第四物理状态包括在目标线程(即上述第二线程)中执行如下步骤1-步骤2:

步骤1,首先变更第二对象的物理状态,利用第五物理状态将第二对象从第一物理状态更新为第二物理状态,如第一物理状态为第二对象前一时间的原始状态,第五物理状态可用来表示第四对象对第二对象造成的影响,如二者发生碰撞,从而可以根据第二对象的原始状态和碰撞情况确定下一时间的第二物理状态;

步骤2,利用第二物理状态将第三对象从第三物理状态更新为第四物理状态,例如,第四对象与第二对象发生碰撞,导致第二对象与第三对象发生接触,可以利用物理引擎按照几个对象之间的依赖关系依次确定第四对象的物理状态、第二对象的物理状态以及第三对象的物理状态。

在一个可选的实施例中,在通过运行目标线程将第三对象从第三物理状态更新为第四物理状态时,在与同一个第二对象交互的第三对象为多个的情况下,由于各个第三对象是单独与第二对象发生关联,各个第三对象之间并不发生关联,故可以按照上述三种并行处理方式进行处理,以采用线程并行运行的方式为例,可通过并行运行多个第三线程将第三对象从第三物理状态更新为第四物理状态,目标线程包括多个第三线程,第三线程的数量与第三对象的数量相同,每个第三线程用于更新一个第三对象的物理状态,任意两个第三线程更新的第三对象不同。

在另一个可选的实施例中,在通过运行目标线程将第三对象从第三物理状态更新为第四物理状态时,由于各个第三对象是单独与第二对象发生关联,各个第三对象之间并不发生关联,故可以按照上述三种并行处理方式进行处理,考虑到第二线程在处理完第二对象后处于空闲状态,可以继续处理其中一个第三处理的物理状态更新,还是以采用线程并行运行的方式为例:在与同一个第二对象交互的第三对象为多个的情况下,通过并行运行第二线程和第三线程将第三对象从第三物理状态更新为第四物理状态,第二线程和第三线程的数量与第三对象的数量相同,第二线程用于在更新第二对象的物理状态之后更新第三对象的物理状态,每个第三线程用于更新一个第三对象的物理状态,第二线程和第三线程中任意两个线程更新的第三对象不同。

在上述技术方案中,所涉及的线程可以在需要使用时创建,也可以预先创建,如在对第一对象进行对象状态更之前,创建用于对所述第一对象进行对象状态更新的第一线程、创建用于对所述第二对象进行对象状态更新的第二线程并创建用于对所述第三对象进行对象状态更新的第三线程,这样在需要使用相应的线程时,直接在创建的线程中分配即可。

采用本申请的技术方案,提供了一种对物理相关的游戏对象进行拆分后再执行游戏更新流程的方法,这样拆分后,物理无关的游戏对象处理与PhysX处理并行运行,在多核处理器上能提高效率,且以上两部分是在同一帧内严格按依赖关系运行,并且最大化利用多线程特性,而不是跨帧使用物理结果,避免有可能出现的不正确的结果,兼顾了机器性能和游戏效果,既能利用多线程提高效率,还能在物理效果表现上和实际画面完全一致。

作为一种可选的实施例,下面结合具体的实施方式,以将本申请的技术方案应用在物理引擎PhysX为例进一步详述本申请的技术方案。

预处理,可以将需要更新的游戏对象分为三部分:物理无关的游戏对象(即第一对象)、作为物理输入的对象(即第四对象)、依赖物理输出的结果的对象(即第三对象,依赖于第二对象的模拟结果)。

步骤302,在主线程(可以是CPU上启动的控制整个游戏进度的线程)先更新可能需要作为物理输入的游戏对象(如前文的第四对象,处理第四对象的线程即第二列对应的线程)。例如游戏对象里有物理交互的动画,游戏对象本身在主线程更新,可并发起工作线程的动画更新任务,动画更新的结果作为物理系统的输入;该游戏对象可能还会发起其他工作线程执行特效更新任务,这部分任务与物理无关,在主线程进行渲染前完成即可。

如图3所示,第一列的线程为主线程,第2-4列可按照功能有若干线程(可以是CPU上启动的)运行相关任务,不同列之间在时间线重叠的部分表示可并行运行,虚线表示需要同步的地方,虚线以上部分都完成了,相关线程才开始运行虚线以下的功能,此处同步的意思是如果A线程位于虚线下,B线程位于虚线上方,那么A线程要等B线程做完某个工作后,才会再继续运行。

步骤304,主线程开始PhysX模拟(即进行物理状态更新),该函数立即返回,物理模拟由PhysX在其他若干工作线(即处理第二对象的第二线程,如图3中第三列所示的线程)程运行,这些可由PhysX提供。

步骤306,主线程更新物理无关的游戏对象,更新游戏对象中支持多线程更新且与物理无关的部分,这部分更新与PhysX的更新并行运行,即更新物理无关部分的第一线程(如图3所示的第四列的线程)和第二线程并行运行。

步骤308,主线程等待PhysX的相关线程完成物理模拟,在PhysX模拟和其他线程处理都结束后,主线程更新依赖于PhysX输出的那部分游戏对象,即利用第三线程更新第三对象。

步骤S310,主线程等待其他物理无关的工作线程都完成后,进行渲染。

在上述方案中,在主线程上的逻辑,根据物理相关和物理无关进行区分,把物理无关部分与PhysX并行运行;在工作线程上运行的逻辑,根据不同类型设置不同的多线程同步点,确保游戏逻辑和物理之间有正确的依赖关系,这种方法可以利用多线程的特性,最大化利用游戏逻辑和PhysX的并行性,在多核处理器上能够提升效率,同时还确保物理模拟结果的正确性。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。

相关技术中游戏引擎进行游戏更新的步骤包括更新游戏数据和渲染游戏数据,如果结合物理引擎,则变为:更新游戏数据;PhysX开始模拟;PhysX结束模拟;更新依赖于PhysX计算结果的游戏数据;渲染游戏数据。以上流程必须等待游戏数据更新完毕后,才开始物理模拟,效率较低,这样的流程不能充分发挥计算机设备并行处理的特性。

为了克服上述问题,根据本申请实施例的一方面,根据本申请实施例的另一个方面,还提供了一种用于实施上述物理状态的更新方法的物理状态的更新装置。图4是根据本申请实施例的一种可选的物理状态的更新装置的示意图,如图4所示,该装置可以包括:

确定单元401,用于确定虚拟场景中的第一对象,第一对象为虚拟场景中不用进行物理状态模拟处理的对象;

第一更新单元403,用于对第一对象进行对象状态更新,其中,第一对象为虚拟场景中不用进行物理状态模拟处理的对象。

第二更新单元405,用于在对第一对象进行对象状态更新的过程中,调用物理引擎对第二对象和第三对象进行物理状态更新,其中,第二对象和第三对象为虚拟场景中需要进行物理状态模拟处理的对象。

需要说明的是,该实施例中的确定单元401可以用于执行本申请实施例中的步骤S202,该实施例中的第一更新单元403可以用于执行本申请实施例中的步骤S204,该实施例中的第二更新单元405可以用于执行本申请实施例中的步骤S206。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现。

通过上述模块,对于虚拟场景中的对象,可按照如下几个类型来进行处理,其一是需要用到物理引擎进行物理状态更新的游戏对象(即第二对象和第三对象);其二是不需要用到物理引擎进行物理状态更新的游戏对象(即第一对象),由于这几类对象不相关,所以可以采用并行处理的方式进行处理,而不是对这几类对象不分类的串行处理,从而可以解决相关技术中游戏流程处理效率较低的技术问题,进而达到提高处理效率的技术效果。

可选地,第一更新单元还用于:通过运行第一线程将第一对象从第一对象状态更新为第二对象状态,其中,第一对象状态为第一对象在第一时间的对象状态,第二对象状态为第一对象在第二时间的对象状态,第一时间早于第二时间;第二更新单元还用于:通过运行目标线程将第二对象从第一物理状态更新为第二物理状态并将第三对象从第三物理状态更新为第四物理状态,其中,目标线程为与第一线程并行运行的属于物理引擎的线程,第一物理状态为第二对象在第一时间的物理状态,第二物理状态为第二对象在第二时间的物理状态,第三物理状态为第三对象在第一时间的物理状态,第四物理状态为第三对象在第二时间的物理状态。

可选地,第二更新单元包括:第一更新模块,用于将第二对象从第一物理状态更新为第二物理状态;第二更新模块,用于利用第二物理状态将第三对象从第三物理状态更新为第四物理状态。

可选地,第二更新单元还用于:在第二对象为多个的情况下,通过并行运行多个第二线程将多个第二对象从第一物理状态更新为第二物理状态,其中,目标线程包括多个第二线程,每个第二线程用于更新一个第二对象的物理状态,任意两个第二线程所更新的第二对象不同。

可选地,第二更新单元包括:第三更新模块,用于在与同一个第二对象交互的第三对象为多个的情况下,通过并行运行多个第三线程将第三对象从第三物理状态更新为第四物理状态,其中,目标线程包括多个第三线程,每个第三线程用于更新一个第三对象的物理状态,任意两个第三线程更新的第三对象不同。

可选地,第二更新单元还用于:第四更新模块,用于在与同一个第二对象交互的第三对象为多个的情况下,通过并行运行第二线程和第三线程将第三对象从第三物理状态更新为第四物理状态,其中,第二线程用于在更新第二对象的物理状态之后更新第三对象的物理状态,每个第三线程用于更新一个第三对象的物理状态,第二线程和第三线程中任意两个线程更新的第三对象不同。

可选地,第一更新模块还用于:在将第二对象从第一物理状态更新为第二物理状态之前,利用物理引擎更新得到第四对象的第五物理状态,其中,第四对象为虚拟场景中与第二对象发生交互的对象,第五物理状态为第四对象在第一时间的物理状态;利用第五物理状态将第二对象从第一物理状态更新为第二物理状态包括。

在利用多线程提高效率时,可以采用如下方案:在第二次游戏更新结束后,结束使用第一次的游戏更新结果进行的物理引擎模拟,并保存模拟结果,然后将第二次游戏更新的游戏更新数据送入物理引擎,游戏引擎开始模拟;游戏开始渲染,将保存的物理模拟结果(即使用第一次的游戏更新结果进行模拟得到的结果)用于游戏渲染。

在上述方案中,物理引擎在更新存在依赖关系的对象的物理状态时使用的是上一帧进行物理模拟的物理计算结果,这种方式没有考虑到“更新游戏数据”这个步骤中,有可能会依赖物理输出的结果,如果游戏中有对象需要依赖物理的结果,那么会出现差一帧的问题,导致不正确的物理表现效果,特别是在两帧之间物理对象位移或旋转较大时,不正确的表现效果会更加明显,从而导致渲染的图像失真。

可选地,为了便于并行处理并使得处理结果符合实际情况,上述装置还包括:划分单元,用于在对第一对象进行对象状态更新之前,将虚拟场景内待渲染的对象中不用进行物理状态模拟处理的对象划分为第一对象,将虚拟场景内待渲染的对象中需要进行物理状态模拟处理的对象划分为第二对象或第三对象,并将用于作为物理引擎的输入的对象划分为第四对象。

可选地,上述装置还可包括:创建单元,用于在对第一对象进行对象状态更之前,创建用于对第一对象进行对象状态更新的第一线程、创建用于对第二对象进行对象状态更新的第二线程并创建用于对第三对象进行对象状态更新的第三线程。

采用本申请的技术方案,提供了一种对物理相关的游戏对象进行拆分后再执行游戏更新流程的方法,这样拆分后,物理无关的游戏对象处理与PhysX处理并行运行,在多核处理器上能提高效率,且以上两部分是在同一帧内严格按依赖关系运行,并且最大化利用多线程特性,而不是跨帧使用物理结果,避免有可能出现的不正确的结果,兼顾了机器性能和游戏效果,既能利用多线程提高效率,还能在物理效果表现上和实际画面完全一致。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。

根据本申请实施例的另一个方面,还提供了一种用于实施上述物理状态的更新方法的服务器或终端。

图5是根据本申请实施例的一种终端的结构框图,如图5所示,该终端可以包括:一个或多个(图5中仅示出一个)处理器501、存储器503、以及传输装置505,如图5所示,该终端还可以包括输入输出设备507。

其中,存储器503可用于存储软件程序以及模块,如本申请实施例中的物理状态的更新方法和装置对应的程序指令/模块,处理器501通过运行存储在存储器503内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的物理状态的更新方法。存储器503可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器503可进一步包括相对于处理器501远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

上述的传输装置505用于经由一个网络接收或者发送数据,还可以用于处理器与存储器之间的数据传输。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置505包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置505为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。

其中,具体地,存储器503用于存储应用程序。

处理器501可以通过传输装置505调用存储器503存储的应用程序,以执行下述步骤:

确定虚拟场景中的第一对象,第一对象为虚拟场景中不用进行物理状态模拟处理的对象;

对第一对象进行对象状态更新;

在对第一对象进行对象状态更新的过程中,调用物理引擎对第二对象和第三对象进行物理状态更新,其中,第二对象和第三对象为虚拟场景中需要进行物理状态模拟处理的对象。

处理器501还用于执行下述步骤:

对第一对象进行对象状态更新时,通过运行第一线程将第一对象从第一对象状态更新为第二对象状态,其中,第一对象状态为第一对象在第一时间的对象状态,第二对象状态为第一对象在第二时间的对象状态,第一时间早于第二时间;

调用物理引擎对第二对象和第三对象进行物理状态更新时,通过运行目标线程将第二对象从第一物理状态更新为第二物理状态并将第三对象从第三物理状态更新为第四物理状态,其中,目标线程为与第一线程并行运行的属于物理引擎的线程,第一物理状态为第二对象在第一时间的物理状态,第二物理状态为第二对象在第二时间的物理状态,第三物理状态为第三对象在第一时间的物理状态,第四物理状态为第三对象在第二时间的物理状态。

处理器501还用于执行下述步骤:

在第二对象为多个的情况下,通过并行运行多个第二线程将多个第二对象从第一物理状态更新为第二物理状态,其中,目标线程包括多个第二线程,每个第二线程用于更新一个第二对象的物理状态,任意两个第二线程所更新的第二对象不同;

在与同一个第二对象交互的第三对象为多个的情况下,通过并行运行多个第三线程将第三对象从第三物理状态更新为第四物理状态,其中,目标线程包括多个第三线程,每个第三线程用于更新一个第三对象的物理状态,任意两个第三线程更新的第三对象不同;或者,在与同一个第二对象交互的第三对象为多个的情况下,通过并行运行第二线程和第三线程将第三对象从第三物理状态更新为第四物理状态,其中,第二线程用于在更新第二对象的物理状态之后更新第三对象的物理状态,每个第三线程用于更新一个第三对象的物理状态,第二线程和第三线程中任意两个线程更新的第三对象不同。

采用本申请实施例,提供了一种“对第一对象进行对象状态更新,其中,第一对象为虚拟场景中不用进行物理状态模拟处理的对象;在对第一对象进行对象状态更新的过程中,调用物理引擎对第二对象和第三对象进行物理状态更新,其中,第二对象和第三对象为虚拟场景中需要进行物理状态模拟处理的对象”的方案。对于虚拟场景中的对象,可按照如下几个类型来进行处理,其一是需要用到物理引擎进行物理状态更新的游戏对象(即第二对象和第三对象);其二是不需要用到物理引擎进行物理状态更新的游戏对象(即第一对象),由于这几类对象不相关,所以可以采用并行处理的方式进行处理,而不是对这几类对象不分类的串行处理,从而可以解决相关技术中游戏流程处理效率较低的技术问题,进而达到提高处理效率的技术效果。另外,在上述方案中,在主线程上的逻辑,根据物理相关和物理无关进行区分,把物理无关部分与PhysX并行运行;在工作线程上运行的逻辑,根据不同类型设置不同的多线程同步点,确保游戏逻辑和物理之间有正确的依赖关系,这种方法可以利用多线程的特性,最大化利用游戏逻辑和PhysX的并行性,在多核处理器上能够提升效率,同时还确保物理模拟结果的正确性。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

本领域普通技术人员可以理解,图5所示的结构仅为示意,终端可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile InternetDevices,MID)、PAD等终端设备。图5其并不对上述电子装置的结构造成限定。例如,终端还可包括比图5中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图5所示不同的配置。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。

本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行物理状态的更新方法的程序代码。

可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:

确定虚拟场景中的第一对象,第一对象为虚拟场景中不用进行物理状态模拟处理的对象;

对第一对象进行对象状态更新,其中,第一对象为虚拟场景中不用进行物理状态模拟处理的对象;

在对第一对象进行对象状态更新的过程中,调用物理引擎对第二对象和第三对象进行物理状态更新,其中,第二对象和第三对象为虚拟场景中需要进行物理状态模拟处理的对象。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

对第一对象进行对象状态更新时,通过运行第一线程将第一对象从第一对象状态更新为第二对象状态,其中,第一对象状态为第一对象在第一时间的对象状态,第二对象状态为第一对象在第二时间的对象状态,第一时间早于第二时间;

调用物理引擎对第二对象和第三对象进行物理状态更新时,通过运行目标线程将第二对象从第一物理状态更新为第二物理状态并将第三对象从第三物理状态更新为第四物理状态,其中,目标线程为与第一线程并行运行的属于物理引擎的线程,第一物理状态为第二对象在第一时间的物理状态,第二物理状态为第二对象在第二时间的物理状态,第三物理状态为第三对象在第一时间的物理状态,第四物理状态为第三对象在第二时间的物理状态。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

在第二对象为多个的情况下,通过并行运行多个第二线程将多个第二对象从第一物理状态更新为第二物理状态,其中,目标线程包括多个第二线程,每个第二线程用于更新一个第二对象的物理状态,任意两个第二线程所更新的第二对象不同;

在与同一个第二对象交互的第三对象为多个的情况下,通过并行运行多个第三线程将第三对象从第三物理状态更新为第四物理状态,其中,目标线程包括多个第三线程,每个第三线程用于更新一个第三对象的物理状态,任意两个第三线程更新的第三对象不同;或者,在与同一个第二对象交互的第三对象为多个的情况下,通过并行运行第二线程和第三线程将第三对象从第三物理状态更新为第四物理状态,其中,第二线程用于在更新第二对象的物理状态之后更新第三对象的物理状态,每个第三线程用于更新一个第三对象的物理状态,第二线程和第三线程中任意两个线程更新的第三对象不同。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

本发明实施例还包括在下列编号条款中规定的这些和其他方面:

1.一种物理状态的更新方法,其中,包括:

确定虚拟场景中的第一对象,其中,所述第一对象为所述虚拟场景中不用进行物理状态模拟处理的对象;

对所述第一对象进行对象状态更新;

在对所述第一对象进行对象状态更新的过程中,调用物理引擎对第二对象和第三对象进行物理状态更新,其中,所述第二对象和所述第三对象为所述虚拟场景中需要进行物理状态模拟处理的对象。

2.根据条款1所述的方法,其中,

对所述第一对象进行对象状态更新包括:通过运行第一线程将所述第一对象从第一对象状态更新为第二对象状态,其中,所述第一对象状态为所述第一对象在第一时间的对象状态,所述第二对象状态为所述第一对象在第二时间的对象状态,所述第一时间早于所述第二时间;

调用物理引擎对第二对象和第三对象进行物理状态更新包括:通过运行目标线程将所述第二对象从第一物理状态更新为第二物理状态并将所述第三对象从第三物理状态更新为第四物理状态,其中,所述目标线程为与所述第一线程并行运行的属于所述物理引擎的线程,所述第一物理状态为所述第二对象在所述第一时间的物理状态,所述第二物理状态为所述第二对象在所述第二时间的物理状态,所述第三物理状态为所述第三对象在所述第一时间的物理状态,所述第四物理状态为所述第三对象在所述第二时间的物理状态。

3.根据条款2所述的方法,其中,通过运行目标线程将所述第二对象从第一物理状态更新为第二物理状态并将第三对象从第三物理状态更新为第四物理状态包括在所述目标线程中执行如下步骤:

将所述第二对象从所述第一物理状态更新为所述第二物理状态;

利用所述第二物理状态将所述第三对象从所述第三物理状态更新为所述第四物理状态。

4.根据条款2所述的方法,其中,通过运行目标线程将所述第二对象从第一物理状态更新为第二物理状态包括:

在所述第二对象为多个的情况下,通过并行运行多个第二线程将多个所述第二对象从所述第一物理状态更新为所述第二物理状态,其中,所述目标线程包括所述多个第二线程,每个所述第二线程用于更新一个所述第二对象的物理状态,任意两个所述第二线程所更新的所述第二对象不同。

5.根据条款2所述的方法,其中,通过运行目标线程将所述第三对象从所述第三物理状态更新为所述第四物理状态包括:

在与同一个所述第二对象交互的所述第三对象为多个的情况下,通过并行运行多个第三线程将所述第三对象从所述第三物理状态更新为所述第四物理状态,其中,所述目标线程包括所述多个第三线程,每个所述第三线程用于更新一个所述第三对象的物理状态,任意两个所述第三线程更新的所述第三对象不同。

6.根据条款2所述的方法,其中,通过运行目标线程将所述第三对象从所述第三物理状态更新为所述第四物理状态包括:

在与同一个所述第二对象交互的所述第三对象为多个的情况下,通过并行运行第二线程和第三线程将所述第三对象从所述第三物理状态更新为所述第四物理状态,其中,所述第二线程用于在更新所述第二对象的物理状态之后继续更新所述第三对象的物理状态,每个所述第三线程用于更新一个所述第三对象的物理状态,所述第二线程和所述第三线程中任意两个线程更新的所述第三对象不同。

7.根据条款3所述的方法,其中,

在将所述第二对象从所述第一物理状态更新为所述第二物理状态之前,所述方法还包括:利用所述物理引擎更新得到第四对象的第五物理状态,其中,所述第四对象为所述虚拟场景中与所述第二对象发生交互的对象,所述第五物理状态为所述第四对象在所述第一时间的物理状态;

将所述第二对象从所述第一物理状态更新为所述第二物理状态包括:利用所述第五物理状态将所述第二对象从所述第一物理状态更新为所述第二物理状态包括。

8.根据条款2至7中任意一项所述的方法,其中,在对所述第一对象进行对象状态更之前,所述方法还包括:

创建用于对所述第一对象进行对象状态更新的第一线程、创建用于对所述第二对象进行对象状态更新的第二线程并创建用于对所述第三对象进行对象状态更新的第三线程。

9.根据条款1至7中任意一项所述的方法,其中,在对所述第一对象进行对象状态更新之前,所述方法还包括:

将所述虚拟场景内待渲染的对象中不用进行物理状态模拟处理的对象划分为所述第一对象,将所述虚拟场景内待渲染的对象中需要进行物理状态模拟处理的对象划分为所述第二对象或所述第三对象,并将用于作为所述物理引擎的输入的对象划分为第四对象。

10.一种物理状态的更新装置,其中,包括:

确定单元,用于确定虚拟场景中的第一对象,其中,所述第一对象为所述虚拟场景中不用进行物理状态模拟处理的对象;

第一更新单元,用于对所述第一对象进行对象状态更新;

第二更新单元,用于在对所述第一对象进行对象状态更新的过程中,调用物理引擎对第二对象和第三对象进行物理状态更新,其中,所述第二对象和所述第三对象为所述虚拟场景中需要进行物理状态模拟处理的对象。

11.根据条款10所述的装置,其中,

所述第一更新单元还用于:通过运行第一线程将所述第一对象从第一对象状态更新为第二对象状态,其中,所述第一对象状态为所述第一对象在第一时间的对象状态,所述第二对象状态为所述第一对象在第二时间的对象状态,所述第一时间早于所述第二时间;

所述第二更新单元还用于:通过运行目标线程将所述第二对象从第一物理状态更新为第二物理状态并将第三对象从第三物理状态更新为第四物理状态,其中,所述目标线程为与所述第一线程并行运行的属于所述物理引擎的线程,所述第一物理状态为所述第二对象在所述第一时间的物理状态,所述第二物理状态为所述第二对象在所述第二时间的物理状态,所述第三物理状态为所述第三对象在所述第一时间的物理状态,所述第四物理状态为所述第三对象在所述第二时间的物理状态。

12.根据条款11所述的装置,其中,所述第二更新单元包括:

第一更新模块,用于将所述第二对象从所述第一物理状态更新为所述第二物理状态;

第二更新模块,用于利用所述第二物理状态将所述第三对象从所述第三物理状态更新为所述第四物理状态。

13.根据条款11所述的装置,其中,所述第二更新单元还用于:

在所述第二对象为多个的情况下,通过并行运行多个第二线程将多个所述第二对象从所述第一物理状态更新为所述第二物理状态,其中,所述目标线程包括所述多个第二线程,每个所述第二线程用于更新一个所述第二对象的物理状态,任意两个所述第二线程所更新的所述第二对象不同。

14.根据条款11所述的装置,其中,所述第二更新单元包括:

第三更新模块,用于在与同一个所述第二对象交互的所述第三对象为多个的情况下,通过并行运行多个第三线程将所述第三对象从所述第三物理状态更新为所述第四物理状态,其中,所述目标线程包括所述多个第三线程,每个所述第三线程用于更新一个所述第三对象的物理状态,任意两个所述第三线程更新的所述第三对象不同。

15.根据条款11所述的装置,其中,所述第二更新单元还用于:

第四更新模块,用于在与同一个所述第二对象交互的所述第三对象为多个的情况下,通过并行运行第二线程和第三线程将所述第三对象从所述第三物理状态更新为所述第四物理状态,其中,所述第二线程用于在更新所述第二对象的物理状态之后更新所述第三对象的物理状态,每个所述第三线程用于更新一个所述第三对象的物理状态,所述第二线程和所述第三线程中任意两个线程更新的所述第三对象不同。

16.根据条款12所述的装置,其中,

所述第一更新模块还用于:在将所述第二对象从所述第一物理状态更新为所述第二物理状态之前,利用所述物理引擎更新得到第四对象的第五物理状态,其中,所述第四对象为所述虚拟场景中与所述第二对象发生交互的对象,所述第五物理状态为所述第四对象在所述第一时间的物理状态;利用所述第五物理状态将所述第二对象从所述第一物理状态更新为所述第二物理状态包括。

17.根据条款11至16中任意一项所述的装置,其中,所述装置还包括:

创建单元,用于在对第一对象进行对象状态更之前,创建用于对所述第一对象进行对象状态更新的第一线程、创建用于对所述第二对象进行对象状态更新的第二线程并创建用于对所述第三对象进行对象状态更新的第三线程。

18.根据条款10至16中任意一项所述的装置,其中,所述装置还包括:

划分单元,用于在对第一对象进行对象状态更新之前,将所述虚拟场景内待渲染的对象中不用进行物理状态模拟处理的对象划分为所述第一对象,将所述虚拟场景内待渲染的对象中需要进行物理状态模拟处理的对象划分为所述第二对象或所述第三对象,并将用于作为所述物理引擎的输入的对象划分为第四对象。

19.一种存储介质,其中,所述存储介质包括存储的程序,其中,所述程序运行时执行上述条款1至9任一项中所述的方法。

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

21页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:画面的显示方法和装置、存储介质、电子装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类