一种模型的合批处理方法和装置

文档序号:26132 发布日期:2021-09-24 浏览:19次 >En<

阅读说明:本技术 一种模型的合批处理方法和装置 (Batch processing method and device for models ) 是由 邹星明 于 2021-07-01 设计创作,主要内容包括:本发明实施例提供了一种模型的合批处理方法及装置,其中,所示的方法包括:将待处理模型添加至合批处理队列中;待处理模型包含至少一个子模型;根据所述待处理模型的属性,将所述合批处理队列中的待处理模型分配至不同的模型分组中;分别根据所述模型分组中的子模型的纹理和材质,对该模型分组中的所有的子模型进行排序以得到排序结果;按照所述排序结果,以预置的合批逻辑对所述模型分组中的子模型进合批处理,以得到合批结果。将待处理模型加入合批处理队列中进行处理,从而可以去除顶点数限制,修改模型的排序策略,并实现合并后支持变换模型矩阵,对模型下的挂接点模型和模型特效加以处理最大化的合并游戏场景中的模型的批次。(The embodiment of the invention provides a batch processing method and a batch processing device for a model, wherein the method comprises the following steps: adding a model to be processed into a batch processing queue; the model to be processed comprises at least one sub-model; distributing the models to be processed in the batch processing queue to different model groups according to the attributes of the models to be processed; sorting all the submodels in the model group according to the texture and the material of the submodels in the model group respectively to obtain a sorting result; and according to the sequencing result, carrying out batch combination processing on the sub-models in the model group by using a preset batch combination logic so as to obtain a batch combination result. And adding the model to be processed into a batch combining processing queue for processing, thereby removing the limit of the number of top points, modifying the sorting strategy of the model, realizing the combination and supporting the transformation of a model matrix, and combining the batch of the model in the game scene to maximize the processing of the hang point model and the model special effect under the model.)

一种模型的合批处理方法和装置

技术领域

本发明涉及游戏

技术领域

,特别是涉及一种模型的合批处理方法和一种模型的合批处理装置。

背景技术

在计算机图形学中,简单来说,一个批次是CPU(central processing unit,中央处理器)向GPU(Graphics Processing Unit,图形处理器)提交绘制所需的数据以及调用图形API(Application Programming Interface,应用程序接口)的操作。在游戏场景中只要是一个独立的模型,如果不进行任何合批处理,就算是一个批次。由于每一个批次都需要进行数据提交,设置Shader着色器,切换渲染状态等操作,这些操作都是比较消耗性能的,因此,一帧的处理批次过多会导致性能的下降的问题,合并批次是游戏中提升游戏性能的一个重要手段。

现有技术中主要有三种合批方案,分别为:静态合批、动态合批和Instancing实例合批方案。其中,静态合批是对使用相同材质、相同贴图并且勾选Static支持静态合批的物体对应的数据,通过计算整合到一个合并的Buffer缓冲区数据并提交给GPU,从而达到一个批次绘制的目的。动态合批支持动态实时的对符合要求的模型合并批次。Instancing合批则是在相同材质球、相同网格的模型的情况下,提交一个模型顶点数据和各个模型不同的世界矩阵,GPU根据不同的世界矩阵计算不同的模型位置。

然而,静态合批具有顶点数的限制、批处理的顺序问题导致不同模型几乎无法合批,并且合批后不支持变换模型的世界矩阵;动态合批则由于每帧需要实时计算,为了效率对模型顶点数限制严格,而且每帧的计算消耗过大;Instancing合批方案支持合并相同的模型,这不适用于存在大量不同模型的游戏中。如果一款游戏中模型的特点是模型种类繁多,但是不同种类模型使用的材质和纹理几乎相同,上述几种方案都不适用于用来合批处理这些模型。

发明内容

鉴于上述现有的合批处理方案不适用于游戏场景中模型繁多,但是使用的材质和纹理几乎相同的模型的问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种模型的合批处理方法和相应的一种模型的合批处理装置。

本发明实施例公开了一种模型的合批处理方法,包括:

将待处理模型添加至合批处理队列中;其中,所述待处理模型包含至少一个子模型;

根据所述待处理模型的属性,将所述合批处理队列中的待处理模型分配至不同的模型分组中;

分别根据所述模型分组中的子模型的纹理和材质,对该模型分组中的所有的子模型进行排序以得到排序结果;

按照所述排序结果,以预置的合批逻辑对所述模型分组中的子模型进合批处理,以得到合批结果。

可选地,所述按照所述排序结果,以预置的合批逻辑对所述模型分组中的子模型进合批处理,以得到合批结果,包括:

判断是否需要更新所述模型分组中针对所述子模型存储的顶点数据;

当需要更新所述模型分组中针对所述子模型存储的顶点数据时,更新所述模型分组中针对所述子模型存储的顶点数据,并设置所述模型分组对应的更新位为真;

若所述模型分组的更新位为真,则针对所述模型分组创建几何数据结构,并根据所述排序结果在所述几何数据结构中存储所有子模型的顶点缓冲和索引缓冲;

根据所述几何数据结构中存储的顶点缓冲和索引缓冲,以预置的合批逻辑对所述模型分组中的子模型进行合批处理以得到合批结果。

可选地,所述判断是否需要更新所述模型分组中针对所述子模型存储的顶点数据,包括:

判断所述子模型是否是首次加入所述模型分组中;

若所述子模型是首次加入所述模型分组中,则判定需要更新所述模型分组中针对所述子模型存储的顶点数据;

若所述子模型不是首次加入所述模型分组中,则判断所述子模型的世界矩阵是否发生变化;若所述子模型的世界矩阵发生变化,则判定需要更新所述模型分组中针对所述子模型存储的顶点数据。

可选地,所述根据所述排序结果在所述几何数据结构中存储所有子模型的顶点缓冲和索引缓冲,包括:

将所述模型分组中针对所述子模型存储的顶点数据变换到世界空间中,以得到目标顶点数据;

根据所述排序结果和所述目标顶点数据,在所述几何数据结构中存储所有子模型的顶点缓冲和索引缓冲。

可选地,所述几何数据结构包括每个子模型对应的子几何数据结构,所述子几何数据结构用于记录所述子模型在所述几何数据结构中的开始索引和结束索引。

可选地,所述根据所述几何数据结构中存储的顶点缓冲和索引缓冲,以预置的合批逻辑对所述模型分组中的子模型进行合批处理,以得到合批结果,包括:

根据所述几何数据结构中存储的顶点缓冲和索引缓冲,确定所有子模型中属于同一个几何数据结构且位置相邻的一个或多个子模型;

以预置的合批逻辑确定所述一个或多个子模型中符合合批条件的目标子模型,并合并所述目标子模型以得到合批结果;其中,所述合批条件包含以下至少之一:

材质相同;

渲染优先级相同;

合批标志位参数相同。

可选地,所述待处理模型的属性包含顶点类型和使用的着色器,所述根据所述待处理模型的属性,将所述合批处理队列中的待处理模型分配至不同的模型分组中,包括:

依次从所述合批处理队列中确定当前操作的模型;

根据所述当前操作的模型的顶点类型和使用的着色器,确定与所述当前操作的模型匹配的目标模型分组;

将所述当前操作的模型分配至所述目标模型分组中。

可选地,所述根据所述当前操作的模型的顶点类型和使用的着色器,确定与所述当前操作的模型匹配的目标模型分组,包括:

确定所述当前操作的模型的至少一个子模型中的第一个子模型;

根据所述第一个子模型的顶点类型和使用的着色器,确定与所述当前操作的模型匹配的目标模型分组。

可选地,所述顶点数据包含以下至少一项:顶点位置、颜色信息、法线方向和纹理坐标。

可选地,所述分别根据所述模型分组中的子模型的纹理和材质对所有的子模型进行排序,以得到排序结果,包括:

获取用于描述所述模型分组中所有的子模型的纹理和材质的主纹理参数和材质参数;

根据所述主纹理参数计算得到纹理哈希值,及根据所述材质参数计算得到参数哈希值;

根据所述纹理哈希值和参数哈希值对所有的子模型进行排序,以得到排序结果。

可选地,在所述将待处理模型添加至合批处理队列中的步骤之前,还包括:

加载游戏场景中的模型;其中,所述模型具有对应原始合批逻辑的合批标志位参数;

判断所述游戏场景中的模型是否开启渐隐效果;

若所述游戏场景中的模型未开启渐隐效果,则将所述合批标志位参数调整为对应所述预置的合批逻辑的参数,根据调整后的所述合批标志位参数启用所述预置的合批逻辑对所述游戏场景中的模型进行合批处理。

可选地,还包括:

若所述游戏场景中的模型开启渐隐效果,则按照所述原始合批逻辑对所述游戏场景中的模型进行合批处理,并依据合批的结果渲染所述游戏场景中的模型;

在所述游戏场景中的模型的渐隐效果结束之后,清除所述游戏场景中的模型的渲染数据,并将所述合批标志位参数调整为对应所述预置的合批逻辑的参数,根据调整后的所述合批标志位参数启用预置的合批逻辑对所述游戏场景中的模型进行合批处理。

可选地,在所述将待处理模型添加至合批处理队列中的步骤之前,还包括:

对游戏场景中的模型进行裁剪以得到所述待处理模型。

本发明实施例还公开了一种模型的合批处理装置,包括:

模型添加模块,用于将待处理模型添加至合批处理队列中;其中,所述待处理模型包含至少一个子模型;

模型分组模块,用于根据所述待处理模型的属性,将所述合批处理队列中的待处理模型分配至不同的模型分组中;

模型排序模块,用于分别根据所述模型分组中的子模型的材质子模型的纹理和材质,对该模型分组中的所有的子模型进行排序以得到排序结果;

模型合批模块,用于按照所述排序结果,以预置的合批逻辑对所述模型分组中的子模型进合批处理,以得到合批结果。

本发明实施例还公开了一种电子设备,包括:

处理器和存储介质,所述存储介质存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器执行所述机器可读指令,以执行如本发明实施例任一项所述的方法。

本发明实施例还公开了一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如本发明实施例任一项所述的方法。

本发明实施例包括以下优点:

在本发明实施例提供的一种模型的合批处理方法中,通过将待处理模型添加至合批处理队列中,其中,待处理模型包含至少一个子模型,根据待处理模型的属性,将合批处理队列中的待处理模型分配至不同的模型分组中,分别根据模型分组中的子模型的材质子模型的纹理和材质对该模型分组中的所有的子模型进行排序,以得到排序结果,按照排序结果对模型分组中的子模型进合批处理,以得到合批结果。使得可以在引擎层面对模型进行合批,大大降低了大量使用相似材质的建筑群场景下的批次,相较于静态合批的方式,本发明实施例通过在对所有的子模型进行重新排序之后再进行合批处理,提高了合并模型的成功率,并且可以支持模型的移动。而相较于Instancing合批得方式,本发明实施例通过根据模型的属性进行分组,使得可以对不同模型合并,只要模型的渲染状态、材质等信息是一致的就可以合并,而不必限定于仅合并相同材质球、相同网格的模型。而且,通过在游戏引擎中静态合批方案的基础上加以改进,将待处理模型加入合批处理队列中进行处理,从而可以去除顶点数限制,修改模型的排序策略,并实现合并后支持变换模型矩阵,对模型下的挂接点模型和模型特效加以处理最大化的合并游戏场景中的模型的批次。

附图说明

为了更清楚地说明本发明的技术方案,下面将对本发明的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种模型的合批处理方法的步骤流程图;

图2是本发明实施例提供的一种合批处理的步骤流程图;

图3是本发明实施例提供的一种模型的合批处理方法的步骤流程图;

图4是本发明实施例提供的一种模型的合批处理装置的结构框图;

图5是本发明的一种电子设备的结构框图;

图6是本发明的一种存储介质的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

现有技术中,游戏引擎(如NeoX引擎)主要支持的合批方案有静态合批、动态合批和Instancing实例合批方案。在一些游戏中,例如,太空背景下的SLG(Simulation Game)策略游戏,每位玩家有自己的基地,由于基地的建筑具有升级属性,为了灵活性被拆分为繁多的小模型,导致玩家基地的批次数非常的高,为了减少批次则需要进行合批。基地的模型繁多但是使用的材质、纹理几乎相同,如何尽量减少模型的处理批次,并且能够处理模型的挂接点上的模型和特效模型是一个难题。游戏引擎自带的合批方案有各种问题无法满足需求:静态合批具有顶点数的限制、批处理的顺序问题导致不同模型几乎无法合批,并且合批后不支持变换模型的世界矩阵;基地模型各不相同,显然支持合并相同模型的Instancing合批方案没有太大作用;动态合批则由于每帧需要实时计算,为了效率对模型顶点数限制严格,而且每帧的计算消耗过大。

本发明实施例提供了一种能够适用于对游戏场景中模型繁多,但是使用的材质和纹理几乎相同的模型进行合批处理的方案,通过增加一个预置的合批逻辑,该预置的合批逻辑为MeshPacker,是一种自定义的用于处理合并模型的逻辑系统,在需要进行合批处理时,将待处理模型添加至合批处理队列中,其中,待处理模型包含至少一个子模型,根据待处理模型的属性,将合批处理队列中的待处理模型分配至不同的模型分组中,分别根据模型分组中的子模型的纹理和材质,对该模型分组中的所有的子模型进行排序,以得到排序结果,按照排序结果,以预置的合批逻辑对模型分组中的子模型进合批处理,以得到合批结果。使得可以在引擎层面对模型进行合批,大大降低了大量使用相似材质的建筑群场景下的批次,相较于静态合批的方式,本发明实施例通过在对所有的子模型进行重新排序之后再进行合批处理,提高了合并模型的成功率,并且可以支持模型的移动。而相较于Instancing合批得方式,本发明实施例通过根据模型的属性进行分组,使得可以对不同模型合并,只要模型的渲染状态、材质等信息是一致的就可以合并,而不必限定于仅合并相同材质球、相同网格的模型。

此外,本发明合批之后也会降低CSM(Cascaded Shadow Maps,级联阴影贴图)阴影的批次,虽然在合并时,计算到用一组的模型数据由于材质参数等微小的不同可能导致不同批次绘制,但这过程中避免了渲染状态的切换,依然能带来一定的效率提升,最终在游戏中基地建筑最复杂的情况下,可以有效降低合批的批次,CPU使用率基本持平,而GPU使用率小幅度下降,显著地提升了游戏运行的效率。

参照图1,示出了本发明实施例提供的一种模型的合批处理方法的步骤流程图,具体可以包括如下步骤:

步骤101,将待处理模型添加至合批处理队列中;其中,所述待处理模型包含至少一个子模型;

其中,待处理模型可以为游戏场景中需要渲染的可视模型,例如,待处理模型可以为基地的建筑模型、虚拟角色模型等。在本发明实施例中,待处理模型可以包含多个,每一个待处理模型可以包含至少一个子模型,例如,对于基地的建筑模型,由于基地的建筑模型具有升级属性,为了保证灵活性被拆分为繁多的小模型,每个小模型即为一个子模型。在具体实现中,为了提高游戏渲染的效率,需要对待处理模型中包含的所有的子模型进行合批处理。

在本发明实施例中,可以预先创建一个合批处理队列,通过将待处理模型添加至合批处理队列中,以便于对添加到合批处理队列中的待处理模型进行重新排序,并通过预置的合批逻辑进行合批处理。该预置的合批逻辑可以为MeshPacker,是一种自定义的用于处理合并模型的逻辑系统,其中,预置的合批逻辑可以开放模型Group分组的顶点数,使模型的顶点数增加到游戏引擎指出的最大顶点数,例如,增加到Neox引擎支持的最大模型顶点数UINT16_MAX,使得一个合并后模型Group可以包含更多小模型。

在本发明的一种优选实施例中,在所述步骤101之前,还可以包括如下步骤:

对游戏场景中的模型进行裁剪以得到所述待处理模型。

具体的,可以通过主摄像机的视锥体对游戏场景中的模型进行裁剪,以得到待处理模型,从而可以获得当前的游戏场景中需要渲染的待处理模型。

步骤102,根据所述待处理模型的属性,将所述合批处理队列中的待处理模型分配至不同的模型分组中;

待处理模型的属性可以为用于描述待处理模型的某些属性的参数。具体的,待处理模型的属性包含模型的顶点类型和使用的着色器Shader类型,其中,顶点类型可以为顶点格式,如顶点的计算需要光照,则顶点格式需要法线参数,例如,顶点的计算需要带纹理的三维图形,则顶点格式需要UV纹理坐标。Shader用于实现图像渲染,使用的Shader类型可以包括顶点着色器和像素着色器等。

由于若是待处理模型的顶点类型和/或使用的Shader类型不同,则渲染待处理模型的方式也不同,不能被合并为一个批次进行处理,在本发明实施例中,可以根据待处理模型的属性,将合批处理队列中的待处理模型分配至不同的模型分组中。

具体的,针对不同的顶点类型和/或使用的Shader类型分别创建不同的模型分组MeshGroup,依次从合批处理队列中读取待处理模型,并获取该待处理模型对应的顶点类型和使用的Shader类型,确定匹配的MeshGroup,并将该待处理模型分配到匹配的MeshGroup中,其中,在将待处理模型分配至一个MeshGroup中时,同时将待处理模型所包含得所有子模型分配至同一个MeshGroup中。继续从合批处理队列中读取待处理模型,直到遍历完成合批处理队列中所有的待处理模型。

步骤103,分别根据所述模型分组中的子模型的纹理和材质,对该模型分组中的所有的子模型进行排序以得到排序结果;

在渲染或绘制模型时,只有相邻位置的模型才会被判定可以合并为一个批次,在MeshGroup中对模型的特性进行排序过程中,静态合批方案选择考虑模型的地址,这也导致不同模型大概率无法排序至相邻位置。

由于一个游戏中同一类模型(如基地的建筑模型)大部分子模型都使用相同材质,但参数上有微小差异的特点,在本发明实施例中,为了加大对模型合并的概率,可以修改模型的排序策略,通过对比子模型的纹理和材质,仅根据子模型的纹理和材质的相似性,将可以合批的子模型排列在相邻位置。具体的,可以对比每个子模型的纹理和材质,以根据子模型的纹理和材质,对一个模型分组中所有的子模型进行排序,以得到排序结果,其中,排序结果中属于不同待处理模型的子模型可能排列在相邻位置。

步骤104,按照所述排序结果,以预置的合批逻辑对所述模型分组中的子模型进合批处理,以得到合批结果。

具体的,在排序之后,可以将排序结果和所有子模型的顶点数据打包生成RenderNode数据,并将该Render Node数据提交给渲染模块,渲染模型可以根据Render Node数据,以预置的合批逻辑确定可以合并为一个批次的一个或多个子模型,以得到合批结果。

在具体实现中,可以根据Render Node数据判断子模型是否属于同一个MeshGroup,若属于一个MeshGroup则进一步判断这些子模型在排序结果中是否处于相邻位置,然后判断处于相邻位置的子模型是否符合合批条件,例如,可以判断相邻位置的子模型的材质是否相同、渲染优先级是否相同、合批标志位参数是否相同等,该合批标志位参数用于表征子模型所使用的合批逻辑。通过依次遍历每个子模型,若判定处于相邻位置的子模型符合合批条件,则可以将这些模型合并为一个批次进行渲染处理;若判定处于相邻位置的子模型不符合合批条件,则继续判断下一个子模型,直到遍历完成所有的子模型。

在本发明的一种优选实施例中,如图2所示,所述步骤104具体可以包括如下子步骤:

子步骤S11,判断是否需要更新所述模型分组中针对所述子模型存储的顶点数据;

具体的,在将待处理模型分配至一个模型分组MeshGroup之后,可以在该MeshGroup中存储属于该待处理模型的所有子模型的顶点数据,其中,顶点数据可以包含顶点位置、颜色信息、法线方向、纹理坐标等数据。

为了避免重复的合批处理导致对游戏性能的消耗,在本发明实施例中,可以在针对子模型存储的顶点数据存在更新时,进行后续合批处理的过程,若是针对子模型存储的顶点数据不存在更新,则可以直接按照在先计算得到的合批结果对模型进行渲染。

在本发明的一种优选实施例中,所述子步骤S11,具体可以包括如下子步骤:

判断所述子模型是否是首次加入所述模型分组中;若所述子模型是首次加入所述模型分组中,则判定需要更新所述模型分组中针对所述子模型存储的顶点数据;若所述子模型不是首次加入所述模型分组中,则判断所述子模型的世界矩阵是否发生变化;若所述子模型的世界矩阵发生变化,则判定需要更新所述模型分组中针对所述子模型存储的顶点数据。

具体的,通过判断子模型是否是首次加入MeshGroup,若子模型是首次加入MeshGroup中,则判定需要更新该MeshGroup中针对子模型存储的顶点数据。

若子模型不是首次加入MeshGroup中,则进一步判断子模型的世界矩阵是否发生变化,若子模型的世界矩阵发生变化,则判定需要更新MeshGroup中针对子模型存储的顶点数据。例如,在模型特效中的模型会发生位移、旋转、缩放,或者人为调整模型的世界矩阵等,以致于模型的世界矩阵变化,在模型的世界矩阵发生变化的情况下,需要更新MeshGroup中针对模型存储的顶点数据。

子步骤S12,当需要更新所述模型分组中针对所述子模型存储的顶点数据时,更新所述模型分组中针对所述子模型存储的顶点数据,并设置所述模型分组对应的更新位为真;

当需要更新模型分组中针对子模型存储的顶点数据时,则可以更新模型分组中针对子模型存储的顶点数据,并设置该模型分组对应的更新位为真。其中,更新位是用于描述模型分组中的子模型是否发生变化的参数,当更新位为真时,则表示模型分组中的子模型发生变化,需要重新进行合批计算,当更新位为假时,则表示模型分组中的子模型未发生变化,不需要重新进行合批计算。

子步骤S13,若所述模型分组的更新位为真,则针对所述模型分组创建几何数据结构,并根据所述排序结果在所述几何数据结构中存储所有子模型的顶点缓冲和索引缓冲;

具体的,可以判断MeshGroup对应的更新位是否为真,当MeshGroup的更新位为真时,则可以针对MeshGroup创建一个几何数据结构Geometry,该Geometry是公用的,即一个MeshGroup中所有的子模型都引用同一个Geometry。在本发明实施例中,几何数据结构Geometry中每个子模型具有对应的子几何数据结构Sub_Geometry,该Sub_Geometry用于记录子模型在Geometry中的开始索引和结束索引。具体的,可以针对每个子模型创建一个Sub_Geometry,然后设置Sub_Geometry引用子模型所在的MeshGroup对应的Geometry,从而可以在后续的合批计算过程中,根据子模型对应的Sub_Geometry所引用的Geometry,来判断子模型是否属于同一个MeshGroup,即当子模型对应的Sub_Geometry所引用的Geometry相同时,则判定子模型属于同一个Geometry,当子模型对应的Sub_Geometry所引用的Geometry不相同时,则判定子模型不属于同一个Geometry。

在本发明实施例中,在针对MeshGroup创建Geometry之后,可以根据所有子模型的排序结果在Geometry中存储所有子模型的顶点缓冲Vertex Buffer和索引缓冲IndexBuffer。其中,顶点缓冲用于存储顶点数据,索引缓冲用于存储顶点对应的顶点数据在几何数据结构中对应的索引地址。

在本发明的一种优选实施例中,所述子步骤S13,具体可以包括如下子步骤:

将所述模型分组中针对所述子模型存储的顶点数据变换到世界空间中,以得到目标顶点数据;根据所述排序结果和所述目标顶点数据,在所述几何数据结构中存储所有子模型的顶点缓冲和索引缓冲。

在本发明实施例中,可以将模型分组中针对子模型存储的顶点数据变换到世界空间中,以得到目标顶点数据,然后根据排序结果和目标顶点数据,在几何数据结构中存储所有子模型的顶点缓冲和索引缓冲。

子步骤S14,根据所述几何数据结构中存储的顶点缓冲和索引缓冲,以预置的合批逻辑对所述模型分组中的子模型进行合批处理以得到合批结果。

具体的,预置的合批逻辑可以根据顶点缓冲和索引缓冲,判断子模型是否属于一个MeshGroup,判断子模型是否处于相邻位置,处于相邻位置的子模型的材质是否相同,渲染优先级是否相同、合批标志位参数是否相同等过程,从而确定需要合并为一个批次的一个或子模型,得到合批结果。

在本发明的一种优选实施例中,所述子步骤S14,具体可以包括如下子步骤:

根据所述几何数据结构中存储的顶点缓冲和索引缓冲,确定所有子模型中属于同一个几何数据结构且位置相邻的一个或多个子模型;以预置的合批逻辑确定所述一个或多个子模型中符合合批条件的目标子模型,并合并所述目标子模型以得到合批结果。

具体的,可以根据几何数据结构中存储的顶点缓冲和索引缓冲,确定所有子模型中属于同一个几何数据结构,且位置相邻的一个或多个子模型,并进一步以预置的合批逻辑确定一个或多个子模型中符合合批条件的目标子模型,并合并目标子模型以得到合批结果。

在本发明实施例中,合批条件包含以下至少之一:材质相同;渲染优先级相同;合批标志位参数相同。

其中,渲染优先级是渲染模块在处理多个需要渲染的模型时,决定渲染的优先等级的参数,渲染优先级高的模型先进行渲染,渲染优先级低的模型后进行渲染。

合批标志位参数Flag用于表示模型所使用的合批逻辑,当根据合批标志位参数判定模型启用预置的合批逻辑时,则表示可以采用本发明实施例的方案对该模型进行合批处理。

在本发明的一种优选实施例中,所述待处理模型的属性包含顶点类型和使用的着色器,所述步骤102,具体可以包括如下子步骤:

依次从所述合批处理队列中确定当前操作的模型;根据所述当前操作的模型的顶点类型和使用的着色器,确定与所述当前操作的模型匹配的目标模型分组;将所述当前操作的模型分配至所述目标模型分组中。

具体的,首先针对不同的顶点类型和/或使用的着色器创建对应的多个MeshGroup,通过依次从合批处理队列中确定一个待处理模型,作为当前操作的模型,然后根据当前操作的模型的顶点类型和使用的着色器,确定与当前操作的模型匹配的目标MeshGroup,并将当前操作的模型分配至目标MeshGroup中。然后继续从合批处理队列中确定下一个待处理模型,作为当前操作的模型,直到遍历完成合批处理队列中所有的待处理模型。

在本发明的一种优选实施例中,所述根据所述当前操作的模型的顶点类型和使用的着色器,确定与所述当前操作的模型匹配的目标模型分组,包括:

确定所述当前操作的模型的至少一个子模型中的第一个子模型;根据所述第一个子模型的顶点类型和使用的着色器,确定与所述当前操作的模型匹配的目标模型分组。

一个待处理模型中虽然可能包含顶点类型不同和/或使用不同Shader的多个子模型,但由于一个游戏中同一类模型(如基地的建筑模型),使用的材质组大体只分为几类,所以只判断第一个子模型的顶点类型和使用的Shader,这样大概率可以合批的模型会放在同一个MeshGroup中。

具体的,通过确定当前操作的模型的至少一个子模型中的第一个子模型,根据第一个子模型的顶点类型和使用的Shader,确定与当前操作的模型匹配的目标MeshGroup。其中,第一个子模型可以按照预先设定的规则进行确定,例如,可以通过随机法确定第一个子模型,本发明实施例对此不作限制。

在本发明的一种优选实施例中,所述步骤103具体可以包括如下子步骤:

获取用于描述所述模型分组中所有的子模型的纹理和材质的主纹理参数和材质参数;根据所述主纹理参数计算得到纹理哈希值,及根据所述材质参数计算得到参数哈希值;根据所述纹理哈希值和参数哈希值对所有的子模型进行排序,以得到排序结果。

其中,主纹理参数可以指用于描述子模型主要使用的纹理的参数,材质参数可以指用于描述子模型所使用的材质的参数。

在本发明实施例中,通过获取用于描述模型分组中所有的子模型的材质子模型的纹理和材质的主纹理参数和材质参数,根据主纹理参数计算得到纹理哈希值,及根据材质参数计算得到参数哈希值,并根据纹理哈希值和参数哈希值对所有的子模型进行排序以得到排序结果。具体的,可以将纹理哈希值和参数哈希值相同的子模型排列在相邻位置,使得仅根据主纹理参数和材质参数的相似性,把可以合批的子模型排序在相邻位置,便于对这个子模型进行合批处理。

在本发明实施例提供的一种模型的合批处理方法中,通过将待处理模型添加至合批处理队列中,其中,待处理模型包含至少一个子模型,根据待处理模型的属性,将合批处理队列中的待处理模型分配至不同的模型分组中,分别根据模型分组中的子模型的材质子模型的纹理和材质,对该模型分组中的所有的子模型进行排序以得到排序结果,并按照排序结果,以预置的合批逻辑对模型分组中的子模型进合批处理以得到合批结果。使得可以在引擎层面对模型进行合批,大大降低了大量使用相似材质的建筑群场景下的批次,相较于静态合批的方式,本发明实施例通过在对所有的子模型进行重新排序之后再进行合批处理,提高了合并模型的成功率,并且可以支持模型的移动。而相较于Instancing合批得方式,本发明实施例通过根据模型的属性进行分组,使得可以对不同模型合并,只要模型的渲染状态、材质等信息是一致的就可以合并,而不必限定于仅合并相同材质球、相同网格的模型。而且,通过在NeoX引擎的静态合批方案的基础上加以改进,将待处理模型加入合批处理队列中进行处理,从而可以去除顶点数限制,修改模型的排序策略,并实现合并后支持变换模型矩阵,对模型下的挂接点模型和模型特效加以处理最大化的合并游戏场景中的模型的批次。

参照图3,示出了本发明实施例提供的另一种模型的合批处理方法的步骤流程图,具体可以包括如下步骤:

步骤301,加载游戏场景中的模型;其中,所述模型具有对应原始合批逻辑的合批标志位参数;

模型具有对应的原始合批逻辑,在本发明实施例中,不改变模型对应的原始合批逻辑,在脚本层面加载游戏场景中的模型之后,设置这些模型开启本发明实施例的合批方案,即通过合批标志位参数设置模型启用预置的合批逻辑。

原始合批逻辑可以是模型原先启用的合批方案,包含静态合批、动态合批和Instancing实例合批方案等,其中,静态合批是对使用相同材质、相同贴图并且勾选Static支持静态合批的物体对应的数据,通过计算整合到一个合并的Buffer缓冲区数据并提交给GPU,从而达到一个批次绘制的目的。动态合批支持动态实时的对符合要求的模型合并批次。Instancing合批则是在相同材质球、相同网格的模型的情况下,提交一个模型顶点数据和各个模型不同的世界矩阵,GPU根据不同的世界矩阵计算不同的模型位置。

预置的合批逻辑则在静态合批的基础上加以改进,通过在对模型中所有的子模型进行重新排序之后再进行合批处理,从而去除顶点数限制,修改模型的排序策略,并实现合并后支持变换模型矩阵,对模型下的挂接点模型和模型特效加以处理最大化的合并游戏中模型的批次。

步骤302,判断所述游戏场景中的模型是否开启渐隐效果;

具体的,可以通过模型对应的属性数据,判断游戏场景中的模型是否开启渐隐效果。

步骤303,若所述游戏场景中的模型未开启渐隐效果,则将所述合批标志位参数调整为对应所述预置的合批逻辑的参数,根据调整后的所述合批标志位参数启用预置的合批逻辑对所述游戏场景中的模型进行合批处理;

在本发明实施例中,若游戏场景中的模型未开启渐隐效果,则可以直接将合批标志位参数调整为对应预置的合批逻辑的参数,根据调整后的合批标志位参数启用预置的合批逻辑对游戏场景中的模型进行合批处理。具体的合批处理过程与上述步骤101-104相似,在此不再赘述。

在具体实现中,可以在脚本层设置游戏场景中的模型开启预置的合批逻辑,引擎层在渲染模型时,若是判定游戏场景中的模型需要开启预置的合批逻辑,则可以将对应于原始合批逻辑的合批标志位参数调整为对应预置的合批逻辑的参数,以便于按照合批标志位参数启用预置的合批逻辑对游戏场景中的模型进行合批处理,并按照合批结果渲染模型。

步骤304,若所述游戏场景中的模型开启渐隐效果,则按照所述原始合批逻辑对所述游戏场景中的模型进行合批处理,并依据合批的结果渲染所述游戏场景中的模型;

在本发明实施例中,若游戏场景中的模型开启渐隐效果,则可以按照合批标志位参数启用原始合批逻辑对游戏场景中的模型进行合批处理,并依据合批的结果渲染游戏场景中的模型。

步骤305,在所述游戏场景中的模型的渐隐效果结束之后,清除所述游戏场景中的模型的渲染数据,并将所述合批标志位参数调整为对应所述预置的合批逻辑的参数,根据调整后的所述合批标志位参数启用预置的合批逻辑对所述游戏场景中的模型进行合批处理。

在游戏场景中的模型的渐隐效果结束之后,可以清除该模型的渲染数据,包括针对该模型的渲染状态,计算得到的合批结果等数据,并将合批标志位参数调整为对应预置的合批逻辑的参数,然后根据调整后的合批标志位参数启用预置的合批逻辑对游戏场景中的模型进行合批处理。

由于一些游戏中的模型还具有渐隐效果,如游戏中的基地的建筑模型,在渐隐的过程中由于每个模型的材质参数都不一致,这使得游戏引擎中自带的合批方式都无法成功合批处理模型,如NeoX引擎自带的静态合批、动态合批和Instancing实例合批方案等,无法成功合批渐隐过程中的模型。在本发明实施例中,通过确保模型在渐隐阶段首先保持模型自身的渲染状态,在渐隐结束后,清除该模型的渲染数据,如渲染状态和合批结果等数据,然后,通过合批标志位参数修改其合批类型为启用本发明实施例中预置的合批逻辑,然后按照预置的合批逻辑来对这些模型进行合批处理,并按照合批结果重新渲染这些模型,使得预置的合批逻辑生效。

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

参照图4,示出了本发明的一种模型的合批处理装置实施例的结构框图,具体可以包括如下模块:

模型添加模块401,用于将待处理模型添加至合批处理队列中;其中,所述待处理模型包含至少一个子模型;

模型分组模块402,用于根据所述待处理模型的属性,将所述合批处理队列中的待处理模型分配至不同的模型分组中;

模型排序模块403,用于分别根据所述模型分组中的子模型的材质子模型的纹理和材质,对该模型分组中的所有的子模型进行排序以得到排序结果;

模型合批模块404,用于按照所述排序结果,以预置的合批逻辑对所述模型分组中的子模型进合批处理,以得到合批结果。

在本发明的一种优选实施例中,所述模型合批模块404,包括:

模型分组更新判断子模块,用于判断是否需要更新所述模型分组中针对所述子模型存储的顶点数据;

模型分组更新子模块,用于当需要更新所述模型分组中针对所述子模型存储的顶点数据时,更新所述模型分组中针对所述子模型存储的顶点数据,并设置所述模型分组对应的更新位为真;

几何数据结构存储子模块,用于若所述模型分组的更新位为真,则针对所述模型分组创建几何数据结构,并根据所述排序结果在所述几何数据结构中存储所有子模型的顶点缓冲和索引缓冲;

模型合批处理子模块,用于根据所述几何数据结构中存储的顶点缓冲和索引缓冲,以预置的合批逻辑对所述模型分组中的子模型进行合批处理,以得到合批结果。

在本发明的一种优选实施例中,所述模型分组更新判断子模块,包括:

判断单元,用于判断所述子模型是否是首次加入所述模型分组中;

第一判定单元,用于若所述子模型是首次加入所述模型分组中,则判定需要更新所述模型分组中针对所述子模型存储的顶点数据;

第二判定单元,用于若所述子模型不是首次加入所述模型分组中,则判断所述子模型的世界矩阵是否发生变化;若所述子模型的世界矩阵发生变化,则判定需要更新所述模型分组中针对所述子模型存储的顶点数据。

在本发明的一种优选实施例中,所述几何数据结构存储子模块,包括:

顶点数据更新单元,用于将所述模型分组中针对所述子模型存储的顶点数据变换到世界空间中,以得到目标顶点数据;

几何数据结构存储单元,用于根据所述排序结果和所述目标顶点数据,在所述几何数据结构中存储所有子模型的顶点缓冲和索引缓冲。

在本发明的一种优选实施例中,所述几何数据结构包括每个子模型对应的子几何数据结构,所述子几何数据结构用于记录所述子模型在所述几何数据结构中的开始索引和结束索引。

在本发明的一种优选实施例中,所述模型合批处理子模块,包括:

相邻模型确定单元,用于根据所述几何数据结构中存储的顶点缓冲和索引缓冲,确定所有子模型中属于同一个几何数据结构且位置相邻的一个或多个子模型;

模型合并单元,用于以预置的合批逻辑确定所述一个或多个子模型中符合合批条件的目标子模型,并合并所述目标子模型以得到合批结果;其中,所述合批条件包含以下至少之一:

材质相同;

渲染优先级相同;

合批标志位参数相同。

在本发明的一种优选实施例中,所述待处理模型的属性包含顶点类型和使用的着色器,所述模型分组模块402,包括:

当前操作的模型确定子模块,用于依次从所述合批处理队列中确定当前操作的模型;

目标模型分组确定子模块,用于根据所述当前操作的模型的顶点类型和使用的着色器,确定与所述当前操作的模型匹配的目标模型分组;

模型分配子模块,用于将所述当前操作的模型分配至所述目标模型分组中。

在本发明的一种优选实施例中,所述目标模型分组确定子模块,包括:

第一个子模型确定单元,用于确定所述当前操作的模型的至少一个子模型中的第一个子模型;

目标模型分组确定单元,用于根据所述第一个子模型的顶点类型和使用的着色器,确定与所述当前操作的模型匹配的目标模型分组。

在本发明的一种优选实施例中,所述顶点数据包含以下至少一项:顶点位置、颜色信息、法线方向和纹理坐标。

在本发明的一种优选实施例中,所述模型排序模块403,包括:

材质参数模块子模块,用于获取用于描述所述模型分组中所有的子模型的纹理和材质的主纹理参数和材质参数;

参数哈希值计算子模块,用于根据所述主纹理参数计算得到纹理哈希值,及根据所述材质参数计算得到参数哈希值;

模型排序子模块,用于根据所述纹理哈希值和参数哈希值对所有的子模型进行排序,以得到排序结果。

在本发明的一种优选实施例中,还包括:

模型加载模块,用于加载游戏场景中的模型;其中,所述模型具有对应原始合批逻辑的合批标志位参数;

效果判断模块,用于判断所述游戏场景中的模型是否开启渐隐效果;

第一合批处理模块,用于若所述游戏场景中的模型未开启渐隐效果,则将所述合批标志位参数调整为对应所述预置的合批逻辑的参数,根据调整后的所述合批标志位参数启用预置的合批逻辑对所述游戏场景中的模型进行合批处理。

在本发明的一种优选实施例中,还包括:

第二合批处理模块,用于若所述游戏场景中的模型开启渐隐效果,则按照所述原始合批逻辑对所述游戏场景中的模型进行合批处理,并依据合批的结果渲染所述游戏场景中的模型;

第三合批处理模块,用于在所述游戏场景中的模型的渐隐效果结束之后,清除所述游戏场景中的模型的渲染状态,并将所述合批标志位参数调整为对应所述预置的合批逻辑的参数,根据调整后的所述合批标志位参数启用预置的合批逻辑对所述游戏场景中的模型进行合批处理。

在本发明的一种优选实施例中,还包括:

模型裁剪模块,用于对游戏场景中的模型进行裁剪以得到所述待处理模型。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本发明实施例还提供了一种电子设备,如图5所示,包括:

处理器501和存储介质502,所述存储介质502存储有所述处理器501可执行的机器可读指令,当电子设备运行时,所述处理器501执行所述机器可读指令,以执行如本发明实施例任一项所述的方法。具体实现方式和技术效果类似,这里不再赘述。

本发明实施例还提供了一种计算机可读存储介质,如图6所示,所述存储介质上存储有计算机程序601,所述计算机程序601被处理器运行时执行如本发明实施例任一项所述的方法。具体实现方式和技术效果类似,这里不再赘述。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种模型的合批处理方法和一种模型的合批处理装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

22页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:虚拟场景的画面生成方法、装置、计算机设备及存储介质

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!

技术分类