CN109947561B - 一种虚拟场景处理方法、装置及存储介质 - Google Patents
一种虚拟场景处理方法、装置及存储介质 Download PDFInfo
- Publication number
- CN109947561B CN109947561B CN201910156165.0A CN201910156165A CN109947561B CN 109947561 B CN109947561 B CN 109947561B CN 201910156165 A CN201910156165 A CN 201910156165A CN 109947561 B CN109947561 B CN 109947561B
- Authority
- CN
- China
- Prior art keywords
- scene
- virtual
- virtual scene
- processing
- instruction
- 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
Abstract
本发明实施例公开了一种虚拟场景处理方法、装置及存储介质;该方法接收主线程发送的虚拟场景处理指令,根据虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,场景资源池包括固定数量的虚拟场景,将处理结果添加到虚拟场景处理指令中,得到添加后场景处理指令,根据添加后场景处理指令对场景资源池中虚拟场景的场景状态进行更新。该方案可以提高虚拟场景处理的流畅性。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种虚拟场景处理方法、装置及存储介质。
背景技术
随着计算机技术的不断发展,计算机相关行业也得到了飞快的发展,因此,用户对于服务器的性能要求越来越高。
由于目前虚拟场景的愈加丰富化以及多样化,而服务器的能力有限,无法对大量虚拟场景进行有效的处理,会导致虚拟场景处理不顺畅,甚至有卡顿现象的发生。
发明内容
本申请实施例提供一种虚拟场景处理方法、装置及存储介质,可以提高虚拟场景处理的流畅性。
本申请实施例提供一种虚拟场景处理方法,包括:
接收主线程发送的虚拟场景处理指令;
根据所述虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,所述场景资源池包括固定数量的虚拟场景;
将所述处理结果添加到所述虚拟场景处理指令中,得到添加后场景处理指令;
根据所述添加后场景处理指令对所述场景资源池中虚拟场景的场景状态进行更新。
相应的,本申请实施例还提供一种虚拟场景处理装置,包括:
接收模块,用于接收主线程发送的虚拟场景处理指令;
处理模块,用于根据所述虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,所述场景资源池包括固定数量的虚拟场景;
结果添加模块,用于将所述处理结果添加到所述虚拟场景处理指令中,得到添加后场景处理指令;
更新模块,用于根据所述添加后场景处理指令对所述场景资源池中虚拟场景的场景状态进行更新。
相应的,本申请实施例还提供一种存储介质,所述存储介质存储有指令,所述指令被处理器执行时实现本申请实施例任一提供的虚拟场景处理方法的步骤。
本申请实施例接收主线程发送的虚拟场景处理指令,根据虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,场景资源池包括固定数量的虚拟场景,将处理结果添加到虚拟场景处理指令中,得到添加后场景处理指令,根据添加后场景处理指令对场景资源池中虚拟场景的场景状态进行更新。该方案可以提高虚拟场景处理的流畅性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的虚拟场景处理系统的场景示意图;
图2是本申请实施例提供的虚拟场景处理方法的第一流程示意图;
图3是本申请实施例提供的虚拟场景处理方法的第二流程示意图;
图4是本申请实施例提供的多线程虚拟场景处理流程图;
图5是本申请实施例提供的虚拟场景交替销毁、创建示意图;
图6是本申请实施例提供的场景状态流转图;
图7是本申请实施例提供的场景重启流程示意图;
图8是本申请实施例提供的虚拟场景处理的结构示意图;
图9是本申请实施例提供的网络设备的结构示意图。
具体实施方式
请参照图式,其中相同的组件符号代表相同的组件,本申请的原理是以实施在一适当的运算环境中来举例说明。以下的说明是基于所例示的本申请具体实施例,其不应被视为限制本申请未在此详述的其它具体实施例。
在以下的说明中,本申请的具体实施例将参考由一部或多部计算机所执行的步骤及符号来说明,除非另有述明。因此,这些步骤及操作将有数次提到由计算机执行,本文所指的计算机执行包括了由代表了以一结构化型式中的数据的电子信号的计算机处理单元的操作。此操作转换该数据或将其维持在该计算机的内存系统中的位置处,其可重新配置或另外以本领域测试人员所熟知的方式来改变该计算机的运作。该数据所维持的数据结构为该内存的实体位置,其具有由该数据格式所定义的特定特性。但是,本申请原理以上述文字来说明,其并不代表为一种限制,本领域测试人员将可了解到以下所述的多种步骤及操作亦可实施在硬件当中。
本文所使用的术语“模块”可看作为在该运算系统上执行的软件对象。本文所述的不同组件、模块、引擎及服务可看作为在该运算系统上的实施对象。而本文所述的装置及方法可以以软件的方式进行实施,当然也可在硬件上进行实施,均在本申请保护范围之内。
本申请中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,而是某些实施例还包括没有列出的步骤或模块,或某些实施例还包括对于这些过程、方法、产品或设备固有的其它步骤或模块。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本申请实施例提供一种虚拟场景处理方法,该虚拟场景处理方法的执行主体可以是本申请实施例提供的虚拟场景处理装置,或者集成了该虚拟场景处理装置的网络设备,其中该虚拟场景处理装置可以采用硬件或者软件的方式实现。其中,网络设备可以是智能手机、平板电脑、掌上电脑、笔记本电脑、或者台式电脑等设备。
请参阅图1,图1为本申请实施例提供的虚拟场景处理方法的应用场景示意图,以虚拟场景处理装置集成在网络设备中为例,网络设备中的场景处理线程可以接收主线程发送的虚拟场景处理指令,场景处理线程根据虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,场景资源池包括固定数量的虚拟场景,场景处理线程将处理结果添加到虚拟场景处理指令中,得到添加后场景处理指令,根据添加后场景处理指令对场景资源池中虚拟场景的场景状态进行更新。
请参阅图2,图2为本申请实施例提供的虚拟场景处理方法的流程示意图。本申请实施例提供的虚拟场景处理方法的具体流程可以如下:
201、接收主线程发送的虚拟场景处理指令。
其中,线程是程序执行流的最小单元,是进程中的实体,被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有运行中必不可少的资源,但是线程可以与同属一个进程的其他线程共享进程所拥有的全部资源。
其中,进程是计算机中的程序关于数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在面向线程设计的计算机结构中,进程是线程的容器。
其中,主线程是在程序开始时就执行的线程。当一个程序启动时,操作系统会创建一个进程,同时主线程开始运行。再创建的线程都是主线程的子线程,每个进程中都至少有一个主线程。
其中,虚拟场景可以为构建的虚拟环境,比如,可以为游戏中的虚拟环境。虚拟场景中可以包括多个虚拟物品。虚拟物品可以包括根据企划的要求还原出游戏中的建筑物、树木、天空、道路等可用元素,还可以包括包含武器道具与非玩家角色等。
虚拟场景处理指令为指示场景处理线程进行虚拟场景处理的指令。
在实际应用中,可以通过场景处理线程接收主线程发送的虚拟场景处理指令。
其中,场景处理线程是主线程的子线程,用来进行虚拟场景的销毁和创建。
由于虚拟场景中可以包括数万个虚拟物品,因而导致虚拟场景单次创建平均时长过长,并且当重新开启某一个虚拟场景进程时,如果在主线程中进行虚拟场景的创建,会导致该进程上其他房间的玩家在创建虚拟场景过程中得不到响应,影响了虚拟场景处理的流畅性。
因此,在一实施例中,可以通过采用支持多线程的物理运算引擎,使得多个虚拟场景可以并发运行,单个虚拟场景只能在一个线程上运行。可以使得主线程只负责处理正常的业务逻辑,而将虚拟场景的创建和销毁过程交给场景处理线程进行,从而避免在虚拟场景处理过程中对其他用户的影响,提高了虚拟场景处理的流畅性。
具体地,步骤“接收主线程发送的虚拟场景处理指令”包括:
接收发送队列中的虚拟场景处理指令,所述虚拟场景处理指令由主线程发送至发送队列中。
其中,队列是一种线性表,队列只允许在表的前端进行删除操作,而在表的后端进行插入操作,进行插入操作的端成为队尾,进行删除操作的端成为队头。
在实际应用中,如图4所示,主线程可以将虚拟场景处理指令发送到发送队列中,场景处理线程再从发送队列中接收该虚拟场景处理指令。比如,主线程可以将虚拟场景处理指令发送到发送队列中,指令格式可以如下:
指令类型 |
场景指针 |
处理结果 |
202、根据虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果。
其中,池是一种资源抽象的形象化说法,在编程领域中,池代表一组资源,可以随时使用,但不随时创建和释放。
其中,场景资源池为包括若干虚拟场景资源的池,这些虚拟场景资源不专属于某个进程或者内部资源。可以通过客户端向场景资源池中请求虚拟场景资源,客户端可以使用返回的虚拟场景资源进行指定的操作,当客户端使用完虚拟场景资源后,会把虚拟场景资源放回场景资源池中,而不是释放或者丢弃掉。
在一实施例中,场景资源池中可以包括固定数量的虚拟场景。
在实际应用中,场景处理线程可以根据接收到的虚拟场景处理指令,对场景资源池中的虚拟场景进行相应的处理,得到处理结果。比如,当虚拟场景处理指令为虚拟场景创建指令时,场景处理线程根据该虚拟场景创建指令进行虚拟场景的创建,得到创建结果;当虚拟场景处理指令为虚拟场景销毁指令时,场景处理线程根据该虚拟场景销毁指令进行虚拟场景的销毁,得到销毁结果。
在一实施例中,可以通过主线程创建包括固定数量虚拟场景的场景资源池,比如,在进程启动的时候,主线程可以创建固定数量虚拟场景的场景资源池。该场景资源池中虚拟场景的初始状态为未初始化的,也就是说初始状态虚拟场景中的虚拟物品可以未加载完全,比如,未初始化的虚拟场景中可以仅加载了地形数据,而未加载完全建筑等虚拟物品。
在一实施例中,比如,该主线程创建的固定数量的场景资源池,可以为固定数量的PhysX场景资源池。
其中,PhysX是一种物理运算引擎,通过物理运算引擎,可以使得虚拟世界中的物体运动符合真实世界的物理定律,从而使得游戏富有真实感。PhysX中的所有物理运动都在PhysX场景中进行,在同一个场景中的物体才会产生碰撞。
其中,由于PhysX场景占用的内存较大,而单个进程能够承载的虚拟场景数量有限,因此需要在主线程创建场景资源池时,规定场景资源池中虚拟场景的固定数量,比如,该固定数量可以为一个进程的最多场景数量。
在一实施例中,该虚拟场景处理指令可以包括虚拟场景销毁指令。为了使得虚拟场景中的虚拟物品能够循环利用,可以将销毁的虚拟场景中的虚拟物品存放至场景资源池对应的内存池中,使得虚拟物品可以循环利用。
具体地,步骤“根据所述虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果”,可以包括:
根据所述虚拟场景销毁指令对场景资源池中的第一虚拟场景进行销毁,并将所述第一虚拟场景对应的备用虚拟物品存放至所述场景资源池对应的内存池中,得到销毁结果。
其中,内存池为固定大小区块规划,程序员可以进行动态的存储器规划。内存池通过预先规划一定数量的存储器区块,使得程序可以再运行期规划、使用、归还存储器区块。
在实际应用中,当虚拟场景处理指令为虚拟场景销毁指令时,场景处理线程可以根据虚拟场景销毁指令,对场景资源池中的虚拟场景进行销毁,并将场景销毁过程中释放的虚拟物品存放至内存池中。比如,当场景处理线程进行场景销毁的时候,会将第一虚拟场景中的备用虚拟物品进行释放,而这些释放的备用虚拟物品,可以存放到场景资源池对应的内存池中进行备用,以便创建场景时可以使用,使得虚拟物品可以循环的进行使用。
在一实施例中,当内存池中的虚拟物品存储到一定数量,内存池中的空闲空间达到一定数目时,还可以将内存池中的虚拟物品进行一次性的释放。
由于PhysX的内存管理采取了内存池的管理方案,因此虚拟场景内的虚拟物品在使用完毕后不会立即释放,而是先将其放到内存池中,当内存池中的空闲空间达到一定数目时,会一次性的进行虚拟物品的释放。当创建虚拟场景,虚拟场景内的虚拟物品需要进行加载时,可以先从内存池中获取虚拟物品,如果内存池中的虚拟物品不够时,可以一次性申请一定数量的虚拟物品放到内存池中留作备用。
但是PhysX的这种内存管理策略,会导致在内存池申请和释放虚拟物品时,对性能消耗较大,同时也会导致进程所占用的内存变化较为剧烈。如果某一个进程申请和释放虚拟场景较为频繁,会使得上述问题更为突出。
因此,在一实施例中,如图5所示,可以使得主线程在发送虚拟场景销毁指令后,立即发送一个虚拟场景创建指令,使得虚拟场景的销毁步骤和虚拟场景的创建步骤交替进行,虚拟场景销毁后释放的虚拟物品可以被创建的虚拟场景所用,从而保持内存的稳定。
在一实施例中,该销毁的虚拟场景和创建的虚拟场景可以不完全相同,由于在同一个游戏中,虚拟场景中包括多个基本的虚拟物品,这些基本的虚拟物品是虚拟场景所必须的虚拟物品,后创建的虚拟场景仅需保证利用基本的虚拟物品,就可以保证内存的稳定。
在实际应用中,比如,为了保证内存的稳定,主线程可以在发送一个虚拟场景销毁指令后,立即发送一个虚拟场景创建指令,场景处理线程可以根据虚拟场景销毁指令销毁第一虚拟场景后,接收虚拟场景创建指令,并创建第二虚拟场景。
在一实施例中,具体地,步骤“根据所述虚拟场景销毁指令对场景资源池中的第一虚拟场景进行销毁,并将所述第一虚拟场景对应的备用虚拟物品存放至所述场景资源池对应的内存池中,得到销毁结果之后”,还可以包括:
向主线程发送所述销毁结果;
接收主线程基于所述销毁结果发送的虚拟场景创建指令;
根据所述虚拟场景创建指令从所述内存池中提取备用虚拟物品;
基于提取的所述备用虚拟物品创建所述场景资源池中第二虚拟场景。
在实际应用中,比如,场景处理线程可以在对第一虚拟场景进行场景销毁后,向主线程发送销毁结果,主线程可以基于该销毁结果发送虚拟场景创建指令,场景处理线程接收到虚拟场景创建指令后,可以从内存池中提取之前存入以备用的虚拟物品,之后基于提取出的虚拟物品创建第二虚拟场景。
在一实施例中,只有处于工作状态的虚拟场景才能提供正常的碰撞检测,其他状态下的虚拟场景不提供碰撞检测功能。
其中,碰撞检测为检测虚拟场景中的虚拟物品是否发生碰撞,然后根据检测的结果做出不同处理的检测。
其中,场景状态可以为场景资源池中的虚拟场景所处的状态,比如,场景资源池中虚拟场景的场景状态可以包括创建状态(PREPARE)、创建中销毁状态(PREPARE_DESTORY)、工作状态(WORK)和销毁状态(DESTORY)。创建状态可以为虚拟场景在创建过程的状态;创建中销毁状态可以为虚拟场景在创建过程中又收到虚拟场景销毁指令的状态;工作状态可以为虚拟场景创建完成,正在提供服务的状态;销毁状态可以为虚拟场景在销毁过程的状态。
在一实施例中,可以基于虚拟物品和碰撞检测进行虚拟场景的创建,增加虚拟场景的真实度。具体地,步骤“基于提取的所述备用虚拟物品创建所述场景资源池中第二虚拟场景”,可以包括:
基于所述备用虚拟物品确定创建所述第二虚拟场景所需的目标虚拟物品;
当所述第二虚拟场景的场景状态处于工作状态时,对所述目标虚拟物品进行碰撞检测,得到碰撞检测结果;
基于所述目标虚拟物品和所述碰撞检测结果创建第二虚拟场景。
在实际应用中,比如,场景处理线程可以在对第一虚拟场景进行场景销毁后,向主线程发送销毁结果,主线程可以基于该销毁结果发送虚拟场景创建指令,场景处理线程接收到虚拟场景创建指令后,可以从内存池中提取之前存入以备用的虚拟物品,并在备用虚拟物品中确定出创建第二虚拟场景所需的目标虚拟物品,当场景状态处于工作状态时,可以对目标虚拟物品进行碰撞检测,并根据碰撞检测结果和目标虚拟物品,创建第二虚拟场景。
在一实施例中,如果内存池中的备用虚拟物品不足以创建第二虚拟场景时,还可以一次性申请一定数量的虚拟物品放到内存池中留作备用。以便以后创建虚拟场景时,可以从内存池中获取虚拟物品。
在一实施例中,为了保证内存的稳定,可以使得主线程在虚拟场景销毁指令发出后立即发送虚拟场景创建指令,使得虚拟场景的销毁和虚拟场景的创建交替进行,这样虚拟场景销毁后释放的目标内存空间正好可以被新创建的虚拟场景所利用,从而保持内存的稳定。
具体地,步骤“根据所述虚拟场景销毁指令对场景资源池中的第一虚拟场景进行销毁,并将所述第一虚拟场景对应的备用虚拟物品存放至所述场景资源池对应的内存池中,得到销毁结果之后”,还可以包括:
当对所述第一虚拟场景销毁完成时,对所述内存池中第一虚拟场景对应的目标内存空间进行释放;
基于提取的所述备用虚拟物品创建所述场景资源池中第二虚拟场景,包括:
基于释放的目标内存空间和提取的所述备用虚拟物品,创建第二虚拟场景。
在实际应用中,比如,场景处理线程对第一虚拟场景销毁完成时,可以对内存池中第一虚拟场景对应的目标内存空间进行释放,之后基于释放的内存空间和提取的备用虚拟物品,创建第二虚拟场景。
203、将处理结果添加到虚拟场景处理指令中,得到添加后场景处理指令。
在实际应用中,比如,场景处理线程可以将处理结果放置在虚拟场景处理指令的处理结果字段中,得到添加后场景处理指令。该添加后场景处理指令包括经过场景处理线程处理虚拟场景后的处理结果。
204、根据添加后场景处理指令对场景资源池中虚拟场景的场景状态进行更新。
其中,场景状态可以为场景资源池中的虚拟场景所处的状态,比如,场景资源池中虚拟场景的场景状态可以包括创建状态(PREPARE)、创建中销毁状态(PREPARE_DESTORY)、工作状态(WORK)和销毁状态(DESTORY)。创建状态可以为虚拟场景在创建过程的状态;创建中销毁状态可以为虚拟场景在创建过程中又收到虚拟场景销毁指令的状态;工作状态可以为虚拟场景创建完成,正在提供服务的状态;销毁状态可以为虚拟场景在销毁过程的状态。
在实际应用中,场景处理线程可以根据场景处理指令对场景资源池中虚拟场景的场景状态进行更新。
在一实施例中,具体地,步骤“根据所述添加后场景处理指令对所述场景资源池中虚拟场景的场景状态进行更新”可以包括:
将所述添加后场景处理指令发送至接收队列中;
主线程根据所述接收队列中的添加后场景处理指令,对所述场景资源池中虚拟场景的场景状态进行更新。
在实际应用中,比如,如图4所示,场景处理线程可以将添加后场景处理指令发送至接收队列中,主线程将接收队列中的指令弹出,并根据添加后场景处理指令对场景资源池中虚拟场景的场景状态进行更新。
在一实施例中,添加后场景处理指令可以包括添加后场景创建指令和添加后场景销毁指令。比如,如图6所示,当虚拟场景的场景状态为创建状态时,主线程可以根据添加后场景创建指令,将创建状态更新为工作状态;当虚拟场景的场景状态为创建状态时,主线程可以根据添加后场景销毁指令,将创建状态更新为创建中销毁状态。
在一实施例中,比如,如图6所示,当虚拟场景的场景状态为工作状态时,主线程可以根据添加后场景销毁指令,将工作状态更新为销毁状态;当虚拟场景的场景状态为创建中销毁状态时,主线程可以根据添加后场景创建指令,将创建中销毁状态更新为销毁状态。
由于PhysX场景数据是存放在进程堆内的,场景数据由PhysX自行管理,外界无法干预,因此一旦进程崩溃场景数据将全部丢失,从而导致整个进程不可使用,影响玩家的游戏体验。
因此,在一实施例中,可以采用进程RESUME的容灾方案,将虚拟场景状态数据保存在场景资源池中,使得当进程崩溃再次重启后,可以无损的恢复虚拟场景状态数据,从而做到用户基本无感知。
其中,进程RESUME是指进程遇到问题发生宕机,再次拉起后原进程中的一些状态数据不丢失,从而做到用户无感知的一种技术。
在一实施例中,具体地,步骤“接收主线程发送的虚拟场景处理指令”,可以包括:
当检测到虚拟场景重启时,将所述虚拟场景的场景状态设置为创建状态;
接收主线程基于所述创建状态发送的虚拟场景创建指令;
根据所述虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,包括;
根据所述虚拟场景创建指令对场景资源池中的虚拟场景进行处理,得到创建结果;
将所述创建结果添加到所述虚拟场景创建指令中,得到添加后场景创建指令;
根据所述添加后场景创建指令对所述场景资源池中虚拟场景的场景状态进行更新。
在实际应用中,比如,如图7所示,当检测到虚拟场景重启时,可以将虚拟场景的场景状态设置为创建状态,服务器在这段时间内,可以暂时信任客户端碰撞信息。主线程可以根据该创建状态发送虚拟场景创建指令,场景处理线程可以根据场景创建指令对虚拟场景进行创建,之后将创建结果发送给主线程,主线程可以根据该创建结果对场景状态进行更新。
在一实施例中,该虚拟场景处理方法可以不仅仅应用在游戏虚拟场景的处理过程中,还可以应用在电影中的虚拟场景、购物应用中的虚拟场景、以及其他需要对虚拟场景进行处理的应用都可以采用该虚拟场景处理方法。
由上可知,本申请实施例可以接收主线程发送的虚拟场景处理指令,根据虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,场景资源池包括固定数量的虚拟场景,将处理结果添加到虚拟场景处理指令中,得到添加后场景处理指令,根据添加后场景处理指令对场景资源池中虚拟场景的场景状态进行更新。该方案通过将虚拟场景的处理过程交给场景处理线程完成,从而减少了主线程的工作量。并且主线程发出虚拟场景销毁指令后,立即发送虚拟场景创建指令,保持了内存的稳定。同时能够使得虚拟场景重启时,无损恢复状态数据,提高了虚拟场景处理的流畅性。
根据上述实施例所描述的方法,以下将举例作进一步详细说明。
在本实施例中,如图3所示,将以该虚拟场景处理装置具体集成在网络设备中为例进行说明。
301、场景处理线程接收主线程发送的虚拟场景销毁指令。
比如,在进程启动时,主线程可以创建一个固定数量的PhysX场景资源池。由于PhysX场景占用的内存较大,单个进程可以承载的场景数量有限,因此,可以规定一个进程中场景资源池的最多场景数量,该最多场景数量就是固定数量。并将该场景资源池中的虚拟场景的场景初始状态设置为未初始化,场景初始状态中可以有部分虚拟物品未加载完全。
主线程可以将虚拟场景销毁指令推入(push)发送队列中去,该虚拟场景销毁指令的格式可以如下:
指令类型 |
场景指针 |
处理结果 |
场景处理线程可以将发送队列中的虚拟场景销毁指令弹出(pop),从而接收到主线程发送的虚拟场景销毁指令。
302、场景处理线程根据虚拟场景销毁指令对场景资源池中的第一虚拟场景进行销毁,得到销毁结果。
比如,场景处理线程可以根据虚拟场景销毁指令,对场景资源池中的第一虚拟场景进行销毁,并将第一虚拟场景对应的备用虚拟物品存放至场景资源池对应的内存池中,同时将内存池中第一虚拟场景对应的目标内存空间进行释放,得到销毁结果。
303、场景处理线程向主线程发送所述销毁结果。
比如,场景处理线程销毁第一虚拟场景后,可以将销毁结果放置在虚拟场景销毁指令中的处理结果字段中,并将该虚拟场景销毁指令压到接收队列中。主线程可以接收到接收队列中的虚拟场景销毁指令,并根据虚拟场景销毁指令中的销毁结果,对场景资源池中第一虚拟场景的场景状态进行更新。
304、场景处理线程接收主线程基于销毁结果发送的虚拟场景创建指令。
比如,为了保持内存的稳定,主线程可以在发出虚拟场景销毁指令后,立即发送虚拟场景创建指令,使得虚拟场景的销毁和虚拟场景的创建交替进行,使得虚拟场景销毁后释放的内存正好可以被新创建的虚拟场景所用,从而保持内存的稳定。
场景处理线程对第一虚拟场景进行销毁后,可以接收主线程发送的虚拟场景创建指令。主线程可以将虚拟场景创建指令推入发送队列中去,场景处理线程可以将发送队列中的虚拟场景创建指令弹出,从而接收到主线程发送的虚拟场景创建指令。
305、场景处理线程根据虚拟场景创建指令创建第二虚拟场景。
比如,场景处理线程可以根据虚拟场景创建指令,从内存池中提取备用虚拟物品,并从备用虚拟物品中确定创建第二虚拟场景所需的目标虚拟物品,当第二虚拟场景处于工作状态时,对目标虚拟物品进行碰撞检测,根据目标虚拟物品和碰撞检测结果创建第二虚拟场景。
比如,场景处理线程创建第二虚拟场景后,可以将创建结果放置在虚拟场景创建指令中的处理结果字段中,并将该虚拟场景创建指令压到接收队列中。主线程可以接收到接收队列中的虚拟场景创建指令,并根据虚拟场景创建指令中的创建结果,对场景资源池中第二虚拟场景的场景状态进行更新。
在一实施例中,当检测到虚拟场景重启时,可以将虚拟场景的场景状态设置为创建状态,主线程会根据该创建状态发送虚拟场景创建指令,之后场景处理线程可以根据虚拟场景创建指令对虚拟场景进行创建,从而做到进程崩溃再次重启后,可以无损恢复虚拟场景状态数据,做到用户基本无感知。
由上可知,本申请实施例可以通过网络设备中的场景处理线程接收主线程发送的虚拟场景销毁指令,场景处理线程根据虚拟场景销毁指令对场景资源池中的第一虚拟场景进行销毁,得到销毁结果,场景处理线程向主线程发送所述销毁结果,场景处理线程接收主线程基于销毁结果发送的虚拟场景创建指令,场景处理线程根据虚拟场景创建指令创建第二虚拟场景。该方案通过将虚拟场景的处理过程交给场景处理线程完成,从而减少了主线程的工作量。并且主线程发出虚拟场景销毁指令后,立即发送虚拟场景创建指令,保持了内存的稳定。同时能够使得虚拟场景重启时,无损恢复状态数据,提高了虚拟场景处理的流畅性。
为了更好地实施以上方法,本申请实施例还提供了一种虚拟场景处理装置,该虚拟场景处理装置具体可以集成在网络设备中。
例如,如图8所示,该虚拟场景处理装置可以包括接收模块81、处理模块82、结果添加模块83和更新模块84,如下:
接收模块81,用于接收主线程发送的虚拟场景处理指令;
处理模块82,用于根据所述虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,所述场景资源池包括固定数量的虚拟场景;
结果添加模块83,用于将所述处理结果添加到所述虚拟场景处理指令中,得到添加后场景处理指令;
更新模块84,用于根据所述添加后场景处理指令对所述场景资源池中虚拟场景的场景状态进行更新。
在一实施例中,所述处理模块82可以具体用于:
根据所述虚拟场景销毁指令对场景资源池中的第一虚拟场景进行销毁,并将所述第一虚拟场景对应的备用虚拟物品存放至所述场景资源池对应的内存池中,得到销毁结果。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
由上可知,本申请实施例通过接收模块81接收主线程发送的虚拟场景处理指令,通过处理模块82根据虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,场景资源池包括固定数量的虚拟场景,通过结果添加模块83将处理结果添加到虚拟场景处理指令中,得到添加后场景处理指令,通过更新模块84根据添加后场景处理指令对场景资源池中虚拟场景的场景状态进行更新。该方案通过将虚拟场景的处理过程交给场景处理线程完成,从而减少了主线程的工作量。并且主线程发出虚拟场景销毁指令后,立即发送虚拟场景创建指令,保持了内存的稳定。同时能够使得虚拟场景重启时,无损恢复状态数据,提高了虚拟场景处理的流畅性。
本申请实施例还提供一种网络设备,该网络设备可以为服务器或终端等设备,其集成了本申请实施例所提供的任一种虚拟场景处理装置。如图9所示,图9是本申请实施例提供的网络设备的结构示意图,具体来讲:
该网络设备可以包括一个或者一个以上处理核心的处理器91、一个或一个以上计算机可读存储介质的存储器92、电源93和输入单元94等部件。本领域技术人员可以理解,图9中示出的网络设备结构并不构成对网络设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器91是该网络设备的控制中心,利用各种接口和线路连接整个网络设备的各个部分,通过运行或执行存储在存储器92内的软件程序和/或模块,以及调用存储在存储器92内的数据,执行网络设备的各种功能和处理数据,从而对网络设备进行整体监控。可选的,处理器91可包括一个或多个处理核心;优选的,处理器91可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器91中。
存储器92可用于存储软件程序以及模块,处理器91通过运行存储在存储器92的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器92可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据网络设备的使用所创建的数据等。此外,存储器92可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器92还可以包括存储器控制器,以提供处理器91对存储器92的访问。
网络设备还包括给各个部件供电的电源93,优选的,电源93可以通过电源管理系统与处理器91逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源93还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该网络设备还可包括输入单元94,该输入单元94可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,网络设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,网络设备中的处理器91会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器92中,并由处理器91来运行存储在存储器92中的应用程序,从而实现各种功能,如下:
接收主线程发送的虚拟场景处理指令,根据虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,场景资源池包括固定数量的虚拟场景,将处理结果添加到虚拟场景处理指令中,得到添加后场景处理指令,根据添加后场景处理指令对场景资源池中虚拟场景的场景状态进行更新。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
由上可知,本申请实施例接收主线程发送的虚拟场景处理指令,根据虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,场景资源池包括固定数量的虚拟场景,将处理结果添加到虚拟场景处理指令中,得到添加后场景处理指令,根据添加后场景处理指令对场景资源池中虚拟场景的场景状态进行更新。该方案通过将虚拟场景的处理过程交给场景处理线程完成,从而减少了主线程的工作量。并且主线程发出虚拟场景销毁指令后,立即发送虚拟场景创建指令,保持了内存的稳定。同时能够使得虚拟场景重启时,无损恢复状态数据,提高了虚拟场景处理的流畅性。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请实施例所提供的任一种虚拟场景处理方法中的步骤。例如,该指令可以执行如下步骤:
接收主线程发送的虚拟场景处理指令,根据虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,场景资源池包括固定数量的虚拟场景,将处理结果添加到虚拟场景处理指令中,得到添加后场景处理指令,根据添加后场景处理指令对场景资源池中虚拟场景的场景状态进行更新。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本申请实施例所提供的任一种虚拟场景处理方法中的步骤,因此,可以实现本申请实施例所提供的任一种虚拟场景处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种虚拟场景处理方法、装置及存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (6)
1.一种虚拟场景处理方法,其特征在于,包括:
接收主线程发送的虚拟场景处理指令;
根据所述虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,所述场景资源池包括固定数量的虚拟场景;
将所述处理结果添加到所述虚拟场景处理指令中,得到添加后场景处理指令;
根据所述添加后场景处理指令对所述场景资源池中虚拟场景的场景状态进行更新;
其中,所述虚拟场景处理指令包括虚拟场景销毁指令;
根据所述虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,包括:
根据所述虚拟场景销毁指令对场景资源池中的第一虚拟场景进行销毁,并将所述第一虚拟场景对应的备用虚拟物品存放至所述场景资源池对应的内存池中,得到销毁结果;
根据所述虚拟场景销毁指令对场景资源池中的第一虚拟场景进行销毁,并将所述第一虚拟场景对应的备用虚拟物品存放至所述场景资源池对应的内存池中,得到销毁结果之后,还包括:
向主线程发送所述销毁结果;
接收主线程基于所述销毁结果发送的虚拟场景创建指令;
根据所述虚拟场景创建指令从所述内存池中提取备用虚拟物品;
基于提取的所述备用虚拟物品创建所述场景资源池中第二虚拟场景。
2.根据权利要求1所述的虚拟场景处理方法,其特征在于,基于提取的所述备用虚拟物品创建所述场景资源池中第二虚拟场景,包括:
基于所述备用虚拟物品确定创建所述第二虚拟场景所需的目标虚拟物品;
当所述第二虚拟场景的场景状态处于工作状态时,对所述目标虚拟物品进行碰撞检测,得到碰撞检测结果;
基于所述目标虚拟物品和所述碰撞检测结果创建第二虚拟场景。
3.根据权利要求1所述的虚拟场景处理方法,其特征在于,根据所述虚拟场景销毁指令对场景资源池中的第一虚拟场景进行销毁,并将所述第一虚拟场景对应的备用虚拟物品存放至所述场景资源池对应的内存池中,得到销毁结果之后,还包括:
当对所述第一虚拟场景销毁完成时,对所述内存池中第一虚拟场景对应的目标内存空间进行释放;
基于提取的所述备用虚拟物品创建所述场景资源池中第二虚拟场景,包括:
基于释放的目标内存空间和提取的所述备用虚拟物品,创建第二虚拟场景。
4.根据权利要求1所述的虚拟场景处理方法,其特征在于,所述虚拟场景处理指令包括虚拟场景创建指令;
接收主线程发送的虚拟场景处理指令,包括:
当检测到虚拟场景重启时,将所述虚拟场景的场景状态设置为创建状态;
接收主线程基于所述创建状态发送的虚拟场景创建指令;
根据所述虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,包括;
根据所述虚拟场景创建指令对场景资源池中的虚拟场景进行处理,得到创建结果;
将所述创建结果添加到所述虚拟场景创建指令中,得到添加后场景创建指令;
根据所述添加后场景创建指令对所述场景资源池中虚拟场景的场景状态进行更新。
5.一种虚拟场景处理装置,其特征在于,包括:
接收模块,用于接收主线程发送的虚拟场景处理指令;
处理模块,用于根据所述虚拟场景处理指令对场景资源池中的虚拟场景进行处理,得到处理结果,其中,所述场景资源池包括固定数量的虚拟场景;
结果添加模块,用于将所述处理结果添加到所述虚拟场景处理指令中,得到添加后场景处理指令;
更新模块,用于根据所述添加后场景处理指令对所述场景资源池中虚拟场景的场景状态进行更新;
其中,所述虚拟场景处理指令包括虚拟场景销毁指令,所述处理模块具体用于:根据所述虚拟场景销毁指令对场景资源池中的第一虚拟场景进行销毁,并将所述第一虚拟场景对应的备用虚拟物品存放至所述场景资源池对应的内存池中,得到销毁结果;
向主线程发送所述销毁结果;
接收主线程基于所述销毁结果发送的虚拟场景创建指令;
根据所述虚拟场景创建指令从所述内存池中提取备用虚拟物品;
基于提取的所述备用虚拟物品创建所述场景资源池中第二虚拟场景。
6.一种存储介质,其特征在于,所述存储介质存储有指令,所述指令被处理器执行时实现如权利要求1-4任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910156165.0A CN109947561B (zh) | 2019-03-01 | 2019-03-01 | 一种虚拟场景处理方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910156165.0A CN109947561B (zh) | 2019-03-01 | 2019-03-01 | 一种虚拟场景处理方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109947561A CN109947561A (zh) | 2019-06-28 |
CN109947561B true CN109947561B (zh) | 2021-03-23 |
Family
ID=67008147
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910156165.0A Active CN109947561B (zh) | 2019-03-01 | 2019-03-01 | 一种虚拟场景处理方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947561B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104102488A (zh) * | 2014-07-18 | 2014-10-15 | 无锡梵天信息技术股份有限公司 | 一种基于多线程并行化的3d引擎系统 |
US8930969B2 (en) * | 2005-12-07 | 2015-01-06 | Nvidia Corporation | Cloth application programmer interface |
CN106502670A (zh) * | 2016-10-20 | 2017-03-15 | 网易(杭州)网络有限公司 | 一种游戏场景切换方法与装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103218840A (zh) * | 2012-12-13 | 2013-07-24 | 航天科工仿真技术有限责任公司 | 基于纹理映射技术的视景仿真系统矢量数据动态绘制方法 |
-
2019
- 2019-03-01 CN CN201910156165.0A patent/CN109947561B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8930969B2 (en) * | 2005-12-07 | 2015-01-06 | Nvidia Corporation | Cloth application programmer interface |
CN104102488A (zh) * | 2014-07-18 | 2014-10-15 | 无锡梵天信息技术股份有限公司 | 一种基于多线程并行化的3d引擎系统 |
CN106502670A (zh) * | 2016-10-20 | 2017-03-15 | 网易(杭州)网络有限公司 | 一种游戏场景切换方法与装置 |
Non-Patent Citations (2)
Title |
---|
多线程渲染 (Multithreaded- rendering)3D引擎实例分析 : FlagshipEngine;pizi0475;《https://blog.csdn.net/pizi0475/article/details/7764888》;20120719;第2部分第1-3段、第4部分第5-6段 * |
游戏随笔之游戏资源池的设计;zblade;《https://www.cnblogs.com/zblade/p/8134121.html》;20171228;第1部分 * |
Also Published As
Publication number | Publication date |
---|---|
CN109947561A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110898428B (zh) | 多虚拟对象交互的方法、装置、服务器及存储介质 | |
JP6893284B2 (ja) | リソーススケジューリング方法、スケジューリングサーバ、クラウドコンピューティングシステム、及び記憶媒体 | |
US8522001B1 (en) | Fast restart on a virtual machine | |
CN111273969B (zh) | 状态切换方法、装置、设备和存储介质 | |
CN108073423A (zh) | 一种加速器加载方法、系统和加速器加载装置 | |
CN111111201B (zh) | 一种基于游戏的技能创建方法、装置、服务器及介质 | |
CN115617364A (zh) | Gpu虚拟化部署方法、系统、计算机设备和存储介质 | |
WO2022121866A1 (zh) | 一种基于加速卡的服务运行方法、装置、电子设备及计算机可读存储介质 | |
CN108043029B (zh) | 逻辑控制方法及装置 | |
CN113590304A (zh) | 一种业务数据处理方法、装置、计算机设备及存储介质 | |
CN109947561B (zh) | 一种虚拟场景处理方法、装置及存储介质 | |
CN107528871A (zh) | 存储系统中的数据分析 | |
KR102315102B1 (ko) | 가상 머신을 부팅하기 위한 방법, 장치, 기기 및 매체 | |
CN113704299A (zh) | 一种模型训练方法、装置、存储介质及计算机设备 | |
CN105653347A (zh) | 一种服务器、资源管理方法及虚拟机管理器 | |
CN111915811A (zh) | 一种多主机控制存取柜的方法与设备 | |
CN111737166B (zh) | 数据对象的处理方法、装置及设备 | |
CN109032674A (zh) | 一种多进程管理方法、系统及网络设备 | |
CN114820218A (zh) | 内容操作方法、装置、服务器及存储介质 | |
CN113641476A (zh) | 一种任务调度方法、游戏引擎、设备及存储介质 | |
CN112559568A (zh) | 一种虚拟物品确定方法、装置及计算机可读存储介质 | |
CN108073559B (zh) | 一种实现表格数据更新的方法、装置及系统 | |
CN114185645B (zh) | 一种内存处理方法及装置 | |
CN111368242B (zh) | 语义资源发布系统及方法和自然语言处理装置及方法 | |
CN117806938A (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 |