目标对象的渲染方法和装置与流程

文档序号:11409070阅读:238来源:国知局
目标对象的渲染方法和装置与流程

本发明涉及图像处理领域,具体而言,涉及一种目标对象的渲染方法和装置。



背景技术:

在相关技术中,游戏中的对象(如游戏中的角色、游戏场景等)越来越多,且所有的对象都是不能通用的,例如,在对象为游戏中的乌龟时,制作100只不一样的乌龟就需要去调整100只乌龟的碰撞体,对它们的渲染情况也要一一分别处理。随着用户的游戏设备的配置越来越高,如屏幕的显示越来越精细,这就需要提高对单个对象的渲染程度,意味着游戏中单个对象的制作复杂度也越来越高。

在游戏时,需要使用大量数据对游戏中的一个对象进行渲染,采用大的整体的系统的概念,每个系统采用复杂的计算层次,譬如碰撞系统,会采用bsp树等类似的层次逻辑关系来处理,如渲染的时候会基于网格对象为单位来做处理。由于游戏系统的耦合性非常高,因此对于数据的处理要按照一定的顺序逻辑进行,由于待处理的数据量非常大且数据之间存在强依赖性,故而造成了数据处理效率较低。

针对相关技术中在进行游戏渲染时,对数据的处理效率较低的技术问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种目标对象的渲染方法和装置,以至少解决相关技术中在进行游戏渲染时,对数据的处理效率较低的技术问题。

根据本发明实施例的一个方面,提供了一种目标对象的渲染方法,该渲染方法包括:接收到渲染请求,其中,渲染请求用于请求对三维游戏图像中的目标对象进行渲染,目标对象由体素表示;响应于渲染请求,获取对目标对象进行渲染时需使用的体素数据,其中,每个体素数据为渲染相关联的一个体素时需使用的数据;通过运算器件对体素数据进行运算,得到运算结果;根据运算结果以体素为单位对目标对象进行渲染。

根据本发明实施例的另一方面,还提供了一种目标对象的渲染装置,包括:接收单元,用于接收到渲染请求,其中,渲染请求用于请求对三维游戏图像中的目标对象进行渲染,目标对象由体素表示;响应单元,用于响应于渲染请求,获取对目标对象进行渲染时需使用的体素数据,其中,每个体素数据为渲染相关联的一个体素时需使用的数据;运算单元,用于通过运算器件对体素数据进行运算,得到运算结果;渲染单元,用于根据运算结果以体素为单位对目标对象进行渲染。

在本发明实施例中,在接收到渲染请求时,获取对目标对象进行渲染时需使用的体素数据,通过运算器件对体素数据进行运算,根据运算结果以体素为单位对目标对象进行渲染,由于体素之间相对独立,关联性较小,故而体素数据之间的数据依赖关系较弱,从而使得运算器件可直接对体素数据进行运算,无需要等待其它体素数据的运算结果,可以解决了相关技术中在进行游戏渲染时,对数据的处理效率较低的技术问题,进而达到了提高数据处理效率的技术效果。

附图说明

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

图1是根据本发明实施例的目标对象的渲染方法的硬件环境的示意图;

图2是根据本发明实施例的一种可选的目标对象的渲染方法的流程图;

图3是根据本发明实施例的一种可选的渲染系统的示意图;

图4是根据本发明实施例的一种可选的目标对象的渲染方法的流程图;

图5是根据本发明实施例的一种可选的目标对象的渲染装置的示意图;

图6是根据本发明实施例的一种可选的目标对象的渲染装置的示意图;

图7是根据本发明实施例的一种可选的目标对象的渲染装置的示意图;以及

图8是根据本发明实施例的一种终端的结构框图。

具体实施方式

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

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

首先,在对本发明实施例进行描述的过程中出现的部分名词或者术语适用于如下解释:

bsp树:bsp(binaryspacepartitioning)树是一种二叉树,它将空间逐级进行一分为二的划分,bsp树能很好地与空间数据库中空间对象的分布情况相适应,但对一般情况而言,bsp树深度较大,对各种操作均有不利影响。

marchingcubes算法:marchingcubes算法(简称为mc算法)是面绘制算法中的经典算法,它是1987年提出来的一种重建方法,mc算法也被称为“等值面提取”(isosurfaceextraction)算法。

cuda:全称为computeunifieddevicearchitecture,是显卡厂商nvidia推出的运算平台,cudatm是一种由nvidia推出的通用并行计算架构,该架构使gpu能够解决复杂的计算问题,它包含了cuda指令集架构(isa)以及gpu内部的并行计算引擎,开发人员现在可以使用c语言来为cudatm架构编写程序,c语言是应用最广泛的一种高级编程语言。所编写出的程序于是就可以在支持cudatm的处理器上以超高性能运行。cuda3.0已经开始支持c++和fortran。

实施例1

根据本发明实施例,提供了一种目标对象的渲染方法的方法实施例。

可选地,在本实施例中,上述目标对象的渲染方法可以应用于如图1所示的由服务器102和终端104所构成的硬件环境中。如图1所示,服务器102通过网络与终端104进行连接,上述网络包括但不限于:广域网、城域网或局域网,终端104并不限定于pc、手机、平板电脑等。本发明实施例的目标对象的渲染方法可以由服务器102来执行,也可以由终端104来执行,还可以是由服务器102和终端104共同执行。其中,终端104执行本发明实施例的目标对象的渲染方法也可以是由安装在其上的客户端来执行。

上述的终端为游戏终端,如能够运行游戏的pc、手机、平板电脑等,对于pc而言,该pc具有中央处理器cpu和图形处理器gpu,可以用一个cpu或者cpu中的部分资源来执行本申请的技术方案,在cpu接收到对3d图像中的目标对象(如游戏角色、游戏场景等)渲染请求时,获取对目标对象进行渲染时需使用的体素数据,每个体素数据为渲染相关联的一个体素时需使用的数据;在该cpu的控制下,通过运算器件(即其它cpu或者该cpu中未被占用的资源、及gpu)对体素数据进行运算,得到运算结果;通过调用gpu使用运算结果对目标对象进行渲染,从而达到了渲染的目的。

对于服务器而言,可以在服务器侧或者使用服务器的本地终端上执行本申请的方法,通过调用服务器的cpu和gpu等运算器件完成本申请的上述方法,具体实现过程与上述类似,在此不再赘述。

图2是根据本发明实施例的一种可选的目标对象的渲染方法的流程图,如图2所示,该方法可以包括以下步骤:

步骤s202,接收到渲染请求,渲染请求用于请求对三维游戏图像中的目标对象进行渲染,目标对象由体素表示;

步骤s204,响应于渲染请求,获取对目标对象进行渲染时需使用的体素数据,每个体素数据为渲染相关联的一个体素时需使用的数据;

步骤s206,通过运算器件对体素数据进行运算,得到运算结果;

步骤s208,根据运算结果以体素为单位对目标对象进行渲染。

通过上述步骤s202至步骤s208,在接收到渲染请求时,获取对目标对象进行渲染时需使用的体素数据,通过运算器件对体素数据进行运算,根据运算结果以体素为单位对目标对象进行渲染,由于体素之间相对独立,关联性较小,故而体素数据之间的数据依赖关系较弱,从而使得运算器件可直接对体素数据进行运算,无需要等待其它体素数据的运算结果,可以解决了相关技术中在进行游戏渲染时,对数据的处理效率较低的技术问题,进而达到了提高数据处理效率的技术效果。

上述的渲染请求为需要在屏幕上输出三维的3d图像时生成的请求。

目标对象即3d图像中的对象,如该游戏的游戏角色、游戏装备、游戏场景、道具框等。

体素是体积元素(volumepixel)的简称,是三维对象(如本申请的目标对象)在三维空间上的组成单位,如长方体、正方体、球体等。

一个体素数据对应于一个体素,也即可以将一个体素的某个类型的所有数据均保存在一个体素数据中,如该体素所有与显示相关的数据保存为一个体素数据;如该体素所有与逻辑相关的数据保存为一个体素数据。

在相关技术中,在游戏时,需要使用大量数据对游戏中的一个对象进行渲染,由于系统的耦合性非常高,因此对于数据的处理要按照一定的顺序逻辑进行,数据并行处理能力差,除此之外,每个数据单元的数据大小和数据处理所需要的时间也都是不一致的,很难去估算每一个计算包所需花费的时间会是多少。例如,计算一个高精度模型的碰撞体的碰撞测试时间和一个立方体的碰撞体的碰撞测试时间之间的差别很大,很难去对运算任务进行量化,更加不可能根据任务大小将其分配给不同的硬件,因此,在以非体素为单元的情况下,采用单元化的数据处理硬件分配方案是没有意义的,是不可行的。

在本申请的技术方案中,在游戏的制作过程中,采用体素单元来作为游戏显示和游戏逻辑的基本单元,将游戏显示和游戏逻辑相关的数据都通过体素来表示,从而使得游戏所需的计算量得到了量化的表达,使得这些游戏所需的计算量可以支持数据的并行处理,同时可根据程序运行的过程中的硬件状态结果,来为这次程序运行中的体素数据分配硬件计算平台,在运行过程中支持动态的分配微调。下面结合图2详述本申请的实施例,如图2所示:

在步骤s202提供的技术方案中,当需要在屏幕上输出三维的3d图像(即三维游戏图像)时,会触发上述的渲染请求,此时,触发请求会被发送至执行本申请的方法的cpu上或者cpu的指定资源上。

在步骤s204提供的技术方案中,在获取对目标对象进行渲染时需使用的体素数据时,可获取与目标对象的每个体素对应的一个第一体素数据,第一体素数据与体素的显示相关;获取与目标对象的每个体素对应的一个第二体素数据,第二体素数据与体素的逻辑设置相关。

上述的与体素的显示相关的第一体素数据可以为该体素的网格上与显示颜色、亮度、冷暖等相关的数据;上述的与体素的逻辑设置相关的第二体素数据可以为与体素的游戏逻辑设置相关的数据,如碰撞逻辑等,碰撞逻辑用来表示该体素为被占有(即能够产生碰撞)或未被占有(即不能产生碰撞)。

可选地,通过体素来表达的游戏显示和游戏逻辑系统的数据是多种多样的,具体可以通过预先定义,如用户自定义,越多的数据采用体素来表达,那么数据处理的效率越高。

在该实施例中,每个体素上的某一类数据保存在一个体素数据中,实现了数据的体素化表达,不管是对象的显示模块的数据还是游戏逻辑模块的数据,全都以体素为单位进行表达,采用这种方式来表示数据具有以下优点:1)每一个体素所需要的计算能力是基本相同的,可以体素为单位来分配计算资源;2)每个体素的计算对其他的数据的依赖性是有限的,对于以体素为单位来分配的计算任务可以并行化计算的方式实现,达到对计算任务的量化分配的目的。下面结合步骤s206详述如何实现体素数据的并行计算。

在步骤s206提供的技术方案中,运算器件包括中央处理器和图形处理器,在通过运算器件对体素数据进行运算时,可将多个体素数据传输给并行运行的中央处理器和图形处理器进行并行运算,得到对每个体素数据进行运算得到的运算结果,另外,在进行运算时,图形处理器允许同时对多个体素数据进行运算。

也即,在该实施例中,并行运算包括以下两个方面:1)中央处理器cpu和图形处理器gpu并行运行,同时对体素数据进行处理;2)在gpu内部,流水线之间是并行运行的,可以同时处理多个体素数据。

需要说明的是,考虑到cpu和gpu在处理图像相关的数据方面的性能方面存在差异,可以通过静态调整和动态调整来实现最大效率的利用cpu和gpu的性能。

(1)静态调整,提前分配好cpu和gpu需要处理的体素数据

可选地,在通过运算器件对体素数据进行运算时,可以将获取到的所有体素数据(即对应于目标对象的各个体素的体素数据)划分为第一数据集合和第二数据集合,cpu和gpu各自处理与自己的性能相匹配的数据集合,以使中央处理器运算第一数据集合中的体素数据时的利用率和图形处理器运算第二数据集合中的体素数据时的利用率之间的差值保持预设范围内;在实际运算时,将第一数据集合中的体素数据按照cpu的处理速度传输给中央处理器进行运算,并将第二数据集合中的体素数据按照gpu的处理速度传输给图形处理器进行运算。

可选地,在将获取到的所有体素数据划分为第一数据集合和第二数据集合时,可以通过如下两种方式实现:

方式一:根据cpu和gpu之前处理体素数据的信息为其分配与其处理能力相当的体素数据,具体是在将获取到的所有体素数据划分为第一数据集合和第二数据集合之前,获取历史记录文件,历史记录文件中保存有至少一条记录,每条记录中记录有相同时间段内中央处理器所处理的体素数据的数量和图形处理器所处理的体素数据的数量;将各条记录中记录的中央处理器所处理的体素数据的数量之和与各条记录中记录的图形处理器所处理的体素数据的数量之和之间的比值作为第一比值;按照第一比值将获取到的所有体素数据划分为第一数据集合和第二数据集合。

方式二:根据cpu和gpu的当前资源利用状态为其分配与其处理能力相当的体素数据,具体是在将获取到的所有体素数据划分为第一数据集合和第二数据集合之前,确定中央处理器内允许使用的第一运算资源的第一数量和每个第一运算资源每次允许处理的体素数据的第二数量,并确定图形处理器内允许使用的第二运算资源的第三数量和每个第二运算资源每次允许处理的体素数据的第四数量;获取第一数量与第二数量的第一乘积,第三数量与第四数量的第二乘积;将第一乘积与第二乘积之间的比值作为第二比值;按照第二比值将获取到的所有体素数据划分为第一数据集合和第二数据集合。

(2)动态调整,在cpu和gpu处理体素数据的过程中,根据cpu和gpu的硬件状态(如负荷情况等)对需要运算的体素数据进行二次再分配,对在通过运算器件对体素数据进行运算的过程中,检测中央处理器的第一利用率和图形处理器的第二利用率;在第一利用率小于第一阈值,且第二利用率大于第二阈值(也即cpu负荷过低而gpu负荷过重)的情况下,减少分配给图形处理器的体素数据的数量,并将减少的体素数据分配给中央处理器,即通过cpu来分担gpu的运算负担,第二阈值大于第一阈值;在第二利用率小于第一阈值,且第一利用率大于第二阈值(也即gpu负荷过低而cpu负荷过重)的情况下,减少分配给中央处理器的体素数据的数量,并将减少的体素数据分配给图形处理器,即通过gpu来分担cpu的运算负担。

在步骤s208提供的技术方案中,根据运算结果以体素为单位对目标对象进行渲染时,是根据每个体素数据的运算结果,对目标对象中与该体素数据相关联的一个体素进行渲染,具体是指对该体素的显示、游戏逻辑进行渲染。

通过上述实施例,对计算任务的量化,使得对计算任务的量化分配成为可能,一方面会根据以往的本机执行数据做分析来决定这次的数据该怎么分配任务,同时会在任务执行的过程中根据实时硬件状态做微调,达到充分利用硬件资源的目的,实现了根据硬件环境来分配体素计算任务的目的。

本发明还提供了一种优选实施例,图3示出了整个系统的框架结构,下面结合图3详述本申请的实施例。

(1)关于体素数据

体素数据(即voxeldata),在系统中,整个世界空间(如本申请的目标对象)可划分为一个个小的立方体,那么整个空间的所有的大的元素也就可以同样的分散到每一个小的立方体内来存储,譬如最基本的需要存储的内容可分为以下两部分:

第一体素数据中的渲染内容,渲染内容首先是基础的网格,就是说空间内的每个小的立方体内该怎么去渲染网格,比如一种常用的网格渲染方式是通过mc算法来渲染,另外,对于常用到的粒子特效,也可以采用相似的方法来处理,通过特效系统来计算得到哪些立方体在某一时刻来渲染某个特效粒子,特效粒子的效果是怎么样的,可以使用该体素(小立方体)对应的第一体素数据的表达。

第二体素数据中的逻辑内容,除了与渲染显示相关的内容以外,还有一部分需要存储的内容就是逻辑计算用的内容,如通常使用的碰撞逻辑,例如,一种简单的碰撞存储方式是需要存储某一个小的立方体空间(即体素)是已经被占有了(即产生碰撞)还是没被占有(即不产生碰撞),在具体实现时可利用一个布尔变量来描述这个子空间的碰撞逻辑(如“1”表示产生碰撞、“0”表示不产生碰撞),还有一些游戏中的逻辑也可以切分成空间存储单元来描述,譬如,这个立方体空间是否允许玩家通过,这个立方体空间是否允许玩家看见等等。

那么对于整个空间,最后的数据可以描述成:每一个小空间表示为一个立方体,这是基本的数据处理单元,那么整个空间就可以看作是一个超大的立方体,由诸多小立方体组成,那么小立方体的数据就是三维立体的,很直观的就是一个三维数组的数据,下面提供了一种通过最大化的调动硬件资源来处理三维数据的实施例:

(2)关于体素数据的保存

将体素数据voxeldata存储在数组中,对于单个计算单元的计算,某些情况下会涉及到邻居(即相邻的计算单元,也即相邻体素的数据),需要通过邻居的信息来再次更新自己的数据,因此存在大量的读操作,通过数组存储和三维空间概念所带来的存储逻辑,对于每一次对邻居的存取操作,可以做到复杂度是1,仅需一次读写即可完成数据更新,也就是最快。

(3)关于硬件资源(即运算器件)

硬件资源(即hardware)表示的是硬件计算环境,对于个人计算机而言,特别是用于玩游戏的计算机,其硬件配置越来越高,基本都会配置一块cpu和一块gpu,甚至某些高端玩家会配置多块cpu和多块gpu,对于采用纯体素数据方式来进行数据存取的游戏来说,每一帧所需要处理的体素数据量都非常庞大,为了提高处理效率,需要充分利用玩家的硬件资源,主要包括以下两个方面:

对于cpu来说,数据资料的处理是线性的(即一维的),在这里表示的是每一个时刻处理的是单个的小立方体的数据(即一个体素数据),因此在本申请的技术方案中提供给cpu做处理的数据可以看作是一维的数组,cpu会根据数组内的数据标号一个一个依次的处理完当前的所有立方体的数据。

对于gpu来说,数据资料的处理是以block为单位(即二维的一个平面),因此每一次提供给gpu的数据可以看作是一个二维数组(即多个体素数据,具体数量可以根据gpu的运算资源确定),gpu会一次处理完整个二维数组的所有单元数据。

对于硬件资源而言,整个数据处理所耗费的时间可以分为两部分:cpu或gpu计算所需要消耗的时间;将所需要的数据传给cpu或gpu所需要的时间。

在本申请提供的实施例中,对于存在邻居依赖关系的数据运算而言,由于复杂度为1,进行数据传输的所需耗费的时间较短,不同于相关技术中的数据运算,由于复杂度较高(远大于1),需要将大量的时间花在将所需要的数据传给cpu或gpu这个上面,比如对于mc算法来说,生成渲染网格就是强邻居依赖关系的运算,传输数据需要花费较多时间;对于不存在邻居依赖关系的数据运算,消耗的时间主要是指花在cpu或gpu运算上面的时间,由于是以体素数据为单位进行运算,可以调用cpu和gpu来并行运算,数据处理效率较高,比如在进行渲染体素特效时,则不存在邻居依赖关系,无需进行数据传输。

在该实施例中,gpu单纯的用来做计算,其效率会比cpu高很多,下面本申请提供了在体素数据计算中如何来调配硬件计算资源的实施例。

这里可以通过动态调配体素数据的来提高计算效率,由于gpu支持通用计算,可通过gpu来计算并行数据资源,尤其是处理比较独立的数组数据,如本申请的相关较为独立的体素数据,有了gpu通用计算的支持,就不仅仅可以将gpu运用在渲染管线内,还可以独立于渲染管线,运用于一般数据资源的运算。

(4)关于资源调配(choosecalculateplatform)

资源调配的关键就是通过当前的计算环境分析来调配待计算的数据到不同的计算资源上面,能这么做的前提是要在每一次运行的时候都需要实时记录cpu或gpu的数据通道饱和状态和运算能力饱和状态。

上述的调整分为静态调整和动态调整两方面。

静态调整指的是通过对以前几次在当前机器上运行这个体素程序的硬件环境的分析,来调整这一次的cpu或gpu运算分配,例如,最简单的做法是做全局统计,看在整个运行过程中cpu或gpu是不是全程都很空闲,如果两个设备全程都很空闲,则表示当前计算能力完全满足计算需求,完全不需要做调配处理;如果其中一个设备全程都比较空闲,则表示其中一个设备可以适当增加运算需求的承载,可以在这次的运行过程中适当的增加一些体素数据来让他运算;如果两个设备在运算过程中都不空闲,表示当前游戏渲染本身就会比较耗资源,则尽量不将体素数据承载到gpu运行,保证gpu渲染顺利。

更为准确的静态调整方式是分析存储硬件资源的消耗信息和当前的渲染需求信息(包括体素数据量和渲染drawcall数量),根据这两部分的量和硬件资源消耗的变化情况来作调整,得到下一次运行每个时刻该如何去分配体素数据的运算状况,这里drawcall部分在gpu执行,因此可以动态调整运算硬件的数据就是体素数据的计算。

动态调整指的是在当前运行的时候如果出现资源处理不平衡的时候会及时的调整运算分配,这种情况会因为每次执行这个游戏的时候操作系统的状态是不稳定的,操作系统在每一时刻调配给当前应用的资源是不一定的,比如说在这一次运行的时候cpu一直处于满负荷运算状态,但是gpu一直没有饱和,则在当前运行的时候就动态的划分一些运算到gpu上面去,这一调配可在两边设备状态不一致的情况下执行。

上述实施例中描述了在cpu或gpu之间的运算调配,对于多cpu或多gpu来说是一样的,对于所有cpu当作一个cpu运算池,对于所有的gpu当作是一个gpu运算池,这样总的还是来调度cpu或gpu之间的数据处理,使得数据到cpu池或者gpu池的时候再均匀分配,具体调配方案与前述实施例类似,在此不再赘述。

下面结合图4详述本申请的处理流程,如图4所示:

步骤s402,在游戏中的对象使用体素来进行表达的体素场景下,处理的数据是游戏当中的通过体素表达的数据,可将场景逻辑打散后分散存储到体素数据中,采用这种数据存储方式,一个游戏的绝大部分逻辑数据和渲染数据都可以通过体素方式表达,使得待处理的数据适用于本申请所提出的渲染方案。

步骤s404,软件处理模块根据历史记录和/或当前的硬件资源的硬件状态,进行任务的计算分配。

软件处理模块即为数据分配计算平台,由于体素数据的原子性和可量化的特征,使得软件处理模块的预测和分配就变得非常合理,如将70%的体素数据分配给gpu运算,将30%的体素数据分配给cpu运算。

步骤s406,体素数据通过分配到的平台做运算得到结果。

步骤s408,对于部分存在数据依赖关系的体素数据,根据计算结果返回来更新体素场景的数据状态。

通过本申请的上述实施例,通过体素来表示待计算的数据可以量化计算需求,使得计算的量化分配成为可能;可以充分利用硬件计算能力,为在相同的硬件环境下提供更好的游戏体验。

本申请所提供的技术方案可以应用于与体素相关的图像渲染。

如对于现有的基于体素的游戏,本申请可以大幅提高游戏运行的效率,通过充分利用gpu的通用计算能力,使得体素数据的处理速度可以提高数倍,因此对于相同的硬件设备,使用本申请提供的技术方案以后可以给予更大的提速描述的空间、给予更好的游戏画面、提供更复杂的体素游戏逻辑。

另外,本申请提供的技术方案着眼于游戏的发展趋势,用体素来表示3d场景,这就好比数字信号,数字图片慢慢的已经取代模拟信号和模拟图片,在硬件技术的发展中,把3d空间离散表示成体素(3d空间的基本单元)模式,优势会更加的显而易见,例如在渲染层面使用体素渲染,可以达到更好的视觉效果;在游戏逻辑方面,也可将部分逻辑分散开来进行存储和计算,效果也很好,因此本申请提供的技术方案有非常广阔的产品应用前景,且能达到非常好的技术效果。

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

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

实施例2

根据本发明实施例,还提供了一种用于实施上述目标对象的渲染方法的目标对象的渲染装置。图5是根据本发明实施例的一种可选的目标对象的渲染装置的示意图,如图5所示,该装置可以包括:接收单元52、响应单元54、运算单元56以及渲染单元58。

接收单元52,用于接收到渲染请求,其中,渲染请求用于请求对三维游戏图像中的目标对象进行渲染,目标对象由体素表示;

响应单元54,用于响应于渲染请求,获取对目标对象进行渲染时需使用的体素数据,其中,每个体素数据为渲染相关联的一个体素时需使用的数据;

运算单元56,用于通过运算器件对体素数据进行运算,得到运算结果;

渲染单元58,用于根据运算结果以体素为单位对目标对象进行渲染。

需要说明的是,该实施例中的接收单元52可以用于执行本申请实施例1中的步骤s202,该实施例中的响应单元54可以用于执行本申请实施例1中的步骤s204,该实施例中的运算单元56可以用于执行本申请实施例1中的步骤s206,该实施例中的渲染单元58可以用于执行本申请实施例1中的步骤s208。

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

通过上述模块,在接收到渲染请求时,获取对目标对象进行渲染时需使用的体素数据,通过运算器件对体素数据进行运算,根据运算结果以体素为单位对目标对象进行渲染,由于体素之间相对独立,关联性较小,故而体素数据之间的数据依赖关系较弱,从而使得运算器件可直接对体素数据进行运算,无需要等待其它体素数据的运算结果,可以解决了相关技术中在进行游戏渲染时,对数据的处理效率较低的技术问题,进而达到了提高数据处理效率的技术效果。

上述的渲染请求为需要在屏幕上输出三维的3d图像时生成的请求。

目标对象即3d图像中的对象,如该游戏的游戏角色、游戏装备、游戏场景、道具框等。

体素是体积元素(volumepixel)的简称,是三维对象(如本申请的目标对象)在三维空间上的组成单位,如长方体、正方体、球体等。

一个体素数据对应于一个体素,也即可以将一个体素的某个类型的所有数据均保存在一个体素数据中,如该体素所有与显示相关的数据保存为一个体素数据;如该体素所有与逻辑相关的数据保存为一个体素数据。

在相关技术中,在游戏时,需要使用大量数据对游戏中的一个对象进行渲染,由于系统的耦合性非常高,因此对于数据的处理要按照一定的顺序逻辑进行,数据并行处理能力差,除此之外,每个数据单元的数据大小和数据处理所需要的时间也都是不一致的,很难去估算每一个计算包所需花费的时间会是多少。例如,计算一个高精度模型的碰撞体的碰撞测试时间和一个立方体的碰撞体的碰撞测试时间之间的差别很大,很难去对运算任务进行量化,更加不可能根据任务大小将其分配给不同的硬件,因此,在以非体素为单元的情况下,采用单元化的数据处理硬件分配方案是没有意义的,是不可行的。

在本申请的技术方案中,在游戏的制作过程中,采用体素单元来作为游戏显示和游戏逻辑的基本单元,将游戏显示和游戏逻辑相关的数据都通过体素来表示,从而使得游戏所需的计算量得到了量化的表达,使得这些游戏所需的计算量可以支持数据的并行处理,同时可根据程序运行的过程中的硬件状态结果,来为这次程序运行中的体素数据分配硬件计算平台,在运行过程中支持动态的分配微调。

可选地,当需要在屏幕上输出三维的3d图像(即三维游戏图像)时,会触发上述的渲染请求,此时,触发请求会被发送至接收单元52。

可选地,响应单元包括:第一获取模块,用于获取与目标对象的每个体素对应的一个第一体素数据,其中,第一体素数据与体素的显示相关;第二获取模块,用于获取与目标对象的每个体素对应的一个第二体素数据,其中,第二体素数据与体素的逻辑设置相关。

上述的与体素的显示相关的第一体素数据可以为该体素的网格上与显示颜色、亮度、冷暖等相关的数据;上述的与体素的逻辑设置相关的第二体素数据可以为与体素的游戏逻辑设置相关的数据,如碰撞逻辑等,碰撞逻辑用来表示该体素为被占有(即能够产生碰撞)或未被占有(即不能产生碰撞)。

可选地,通过体素来表达的游戏显示和游戏逻辑系统的数据是多种多样的,具体可以通过预先定义,如用户自定义,越多的数据采用体素来表达,那么数据处理的效率越高。

在该实施例中,每个体素上的某一类数据保存在一个体素数据中,实现了数据的体素化表达,不管是对象的显示模块的数据还是游戏逻辑模块的数据,全都以体素为单位进行表达,采用这种方式来表示数据具有以下优点:1)每一个体素所需要的计算能力是基本相同的,可以体素为单位来分配计算资源;2)每个体素的计算对其他的数据的依赖性是有限的,对于以体素为单位来分配的计算任务可以并行化计算的方式实现,达到对计算任务的量化分配的目的。

可选地,运算单元还用于将多个体素数据传输给中央处理器和图形处理器进行并行运算,得到对每个体素数据进行运算得到的运算结果,其中,运算器件包括中央处理器和图形处理器,图形处理器允许同时对多个体素数据进行运算。

也即,在该实施例中,并行运算包括以下两个方面:1)中央处理器cpu和图形处理器gpu并行运行,同时对体素数据进行处理;2)在gpu内部,流水线之间是并行运行的,可以同时处理多个体素数据。

需要说明的是,考虑到cpu和gpu在处理图像相关的数据方面的性能方面存在差异,可以通过静态调整和动态调整来实现最大效率的利用cpu和gpu的性能。

(1)静态调整,提前分配好cpu和gpu需要处理的体素数据

可选地,运算单元包括:划分模块,用于将获取到的所有体素数据划分为第一数据集合和第二数据集合,以使中央处理器运算第一数据集合中的体素数据时的利用率和图形处理器运算第二数据集合中的体素数据时的利用率之间的差值保持预设范围内,其中,运算器件包括中央处理器和图形处理器;运算模块,用于将第一数据集合中的体素数据传输给中央处理器进行运算,并将第二数据集合中的体素数据传输给图形处理器进行运算,在实际运算时,将第一数据集合中的体素数据按照cpu的处理速度传输给中央处理器进行运算,并将第二数据集合中的体素数据按照gpu的处理速度传输给图形处理器进行运算。

可选地,在将获取到的所有体素数据划分为第一数据集合和第二数据集合时,可以通过如下两种方式实现:

方式一:根据cpu和gpu之前处理体素数据的信息为其分配与其处理能力相当的体素数据,具体可通过如图6所示的单元实现:第一获取单元62,用于在将获取到的所有体素数据划分为第一数据集合和第二数据集合之前,获取历史记录文件,其中,历史记录文件中保存有至少一条记录,每条记录中记录有相同时间段内中央处理器所处理的体素数据的数量和图形处理器所处理的体素数据的数量;第一处理单元64,用于将各条记录中记录的中央处理器所处理的体素数据的数量之和与各条记录中记录的图形处理器所处理的体素数据的数量之和之间的比值作为第一比值;划分模块还用于按照第一比值将获取到的所有体素数据划分为第一数据集合和第二数据集合。

方式二:根据cpu和gpu的当前资源利用状态为其分配与其处理能力相当的体素数据,具体是通过图7所示的如下单元实现:确定单元72,用于在将获取到的所有体素数据划分为第一数据集合和第二数据集合之前,确定中央处理器内允许使用的第一运算资源的第一数量和每个第一运算资源每次允许处理的体素数据的第二数量,并确定图形处理器内允许使用的第二运算资源的第三数量和每个第二运算资源每次允许处理的体素数据的第四数量;第二获取单元74,用于获取第一数量与第二数量的第一乘积,第三数量与第四数量的第二乘积;第二处理单元76,用于将第一乘积与第二乘积之间的比值作为第二比值;划分模块还用于按照第二比值将获取到的所有体素数据划分为第一数据集合和第二数据集合。。

(2)动态调整,在cpu和gpu处理体素数据的过程中,根据cpu和gpu的硬件状态(如负荷情况等)对需要运算的体素数据进行二次再分配,对在通过运算器件对体素数据进行运算的过程中,检测单元在通过运算器件对体素数据进行运算的过程中,检测中央处理器的第一利用率和图形处理器的第二利用率;第一调整单元在第一利用率小于第一阈值,且第二利用率大于第二阈值的情况下,减少分配给图形处理器的体素数据的数量,并将减少的体素数据分配给中央处理器,其中,第二阈值大于第一阈值;第二调整单元在第二利用率小于第一阈值,且第一利用率大于第二阈值的情况下,减少分配给中央处理器的体素数据的数量,并将减少的体素数据分配给图形处理器。

可选地,渲染单元还用于根据每一个体素数据的运算结果,对目标对象中与每一个体素数据相关联的体素进行渲染。

通过上述实施例,对计算任务的量化,使得对计算任务的量化分配成为可能,一方面会根据以往的本机执行数据做分析来决定这次的数据该怎么分配任务,同时会在任务执行的过程中根据实时硬件状态做微调,达到充分利用硬件资源的目的,实现了根据硬件环境来分配体素计算任务的目的。

本申请所提供的技术方案可以应用于与体素相关的图像渲染。

如对于现有的基于体素的游戏,本申请可以大幅提高游戏运行的效率,通过充分利用gpu的通用计算能力,使得体素数据的处理速度可以提高数倍,因此对于相同的硬件设备,使用本申请提供的技术方案以后可以给予更大的提速描述的空间、给予更好的游戏画面、提供更复杂的体素游戏逻辑。

另外,本申请提供的技术方案着眼于游戏的发展趋势,用体素来表示3d场景,这就好比数字信号,数字图片慢慢的已经取代模拟信号和模拟图片,在硬件技术的发展中,把3d空间离散表示成体素(3d空间的基本单元)模式,优势会更加的显而易见,例如在渲染层面使用体素渲染,可以达到更好的视觉效果;在游戏逻辑方面,也可将部分逻辑分散开来进行存储和计算,效果也很好,因此本申请提供的技术方案有非常广阔的产品应用前景,且能达到非常好的技术效果。

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

实施例3

根据本发明实施例,还提供了一种用于实施上述目标对象的渲染方法的服务器或终端。

图8是根据本发明实施例的一种终端的结构框图,如图8所示,该终端可以包括:一个或多个(图8中仅示出一个)处理器801、存储器803、以及传输装置805(如上述实施例中的发送装置),如图8所示,该终端还可以包括输入输出设备807。

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

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

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

处理器801可以通过传输装置805调用存储器803存储的应用程序,以执行下述步骤:接收到渲染请求,其中,渲染请求用于请求对三维游戏图像中的目标对象进行渲染,目标对象由体素表示;响应于渲染请求,获取对目标对象进行渲染时需使用的体素数据,其中,每个体素数据为渲染相关联的一个体素时需使用的数据;通过运算器件对体素数据进行运算,得到运算结果;根据运算结果以体素为单位对目标对象进行渲染。

处理器801还用于执行下述步骤:将获取到的所有体素数据划分为第一数据集合和第二数据集合,以使中央处理器运算第一数据集合中的体素数据时的利用率和图形处理器运算第二数据集合中的体素数据时的利用率之间的差值保持预设范围内,其中,运算器件包括中央处理器和图形处理器;将第一数据集合中的体素数据传输给中央处理器进行运算,并将第二数据集合中的体素数据传输给图形处理器进行运算。

采用本发明实施例,在接收到渲染请求时,获取对目标对象进行渲染时需使用的体素数据,通过运算器件对体素数据进行运算,根据运算结果以体素为单位对目标对象进行渲染,由于体素之间相对独立,关联性较小,故而体素数据之间的数据依赖关系较弱,从而使得运算器件可直接对体素数据进行运算,无需要等待其它体素数据的运算结果,可以解决了相关技术中在进行游戏渲染时,对数据的处理效率较低的技术问题,进而达到了提高数据处理效率的技术效果。

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

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

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

实施例4

本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行目标对象的渲染方法的程序代码。

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

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

s11,接收到渲染请求,其中,渲染请求用于请求对三维游戏图像中的目标对象进行渲染,目标对象由体素表示;

s12,响应于渲染请求,获取对目标对象进行渲染时需使用的体素数据,其中,每个体素数据为渲染相关联的一个体素时需使用的数据;

s13,通过运算器件对体素数据进行运算,得到运算结果;

s14,根据运算结果以体素为单位对目标对象进行渲染。

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

s21,将获取到的所有体素数据划分为第一数据集合和第二数据集合,以使中央处理器运算第一数据集合中的体素数据时的利用率和图形处理器运算第二数据集合中的体素数据时的利用率之间的差值保持预设范围内,其中,运算器件包括中央处理器和图形处理器;

s22,将第一数据集合中的体素数据传输给中央处理器进行运算,并将第二数据集合中的体素数据传输给图形处理器进行运算。

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

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

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

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

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

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

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

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

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1