本公开涉及计算机技术领域,尤其涉及一种模型处理方法、模型处理装置、电子设备及计算机可读存储介质。
背景技术:
在游戏或动画场景制作中,为了提高画面的美术效果,丰富虚拟场景的显示内容,通常会制作大量的美术模型。在制作这些美术模型时,由于模型本身的结构特性或其他原因,可能会导致最终生成的模型中包括一些不可见的面片。这些面片虽然对最终的渲染结果没有影响,但却会占用游戏包体资源,同时在运行时也会额外增加内存和渲染方面的开销。
现有技术中,为了提高渲染效率,通常都是以模型为粒度,进行遮挡剔除处理,例如,根据多个模型间的相互遮挡关系,将某些视点位置不可见的模型剔除掉,以节省资源占有率。然而,这种方式仍然难以避免由于每个模型内部包括的不可见面片所造成的渲染压力和内存压力较大的问题。
因此,如何对模型本身进行处理,准确、有效的确定可见面片,以提高模型的渲染效率,是现有技术亟待解决的问题。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
技术实现要素:
本公开提供了一种模型处理方法、模型处理装置、电子设备及计算机可读存储介质,进而至少在一定程度上克服现有技术中不能有效确定模型本身可见面片,难以提高模型渲染效率的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的第一方面,提供一种模型处理方法,包括:在当前采样方向下,对待处理模型进行预渲染,其中,所述待处理模型包含待确定面片和已确定的可见面片;在所述预渲染过程中,对所述待处理模型中的待确定面片进行分组测试,以测试所述待确定面片的可见性,所述待确定面片为所述待处理模型中除已确定的可见面片以外的面片;将测试结果为可见的所述待确定面片确定为可见面片。
在本公开的一种示例性实施例中,在所述当前采样方向下,对待处理模型进行预渲染之前,所述方法还包括:在多个预设的采样方向中确定当前采样方向。
在本公开的一种示例性实施例中,在所述将测试结果为可见的所述待确定面片确定为可见面片之后,所述方法还包括:遍历所述多个预设采样方向后,确定所述待处理模型中的可见面片。
在本公开的一种示例性实施例中,所述可见面片为游戏运行时对所述待处理模型进行渲染的目标面片。
在本公开的一种示例性实施例中,所述对待处理模型进行预渲染,包括:对所述待处理模型中已确定的可见面片进行预渲染;对所述待处理模型中的待确定面片进行分组预渲染。
在本公开的一种示例性实施例中,所述在所述预渲染过程中,对所述待处理模型中的待确定面片进行分组测试,包括:在所述分组预渲染过程中,对所述待处理模型中的待确定面片进行分组测试。
在本公开的一种示例性实施例中,所述对所述待处理模型中的待确定面片进行分组预渲染,包括:将所述待处理模型中的待确定面片划分为多个面片组,在对所述面片组进行测试前,预渲染除当前测试面片组以外的所有面片组。
在本公开的一种示例性实施例中,所述对所述待处理模型中的待确定面片进行分组测试,以测试所述待确定面片的可见性,包括:判断所述当前测试面片组是否被整体遮挡;如果所述当前测试面片组被整体遮挡,则确定所述当前测试面片组内所有待确定面片不可见;如果所述当前测试面片组未被整体遮挡,则测试所述当前测试面片组内所述待确定面片的可见性。
在本公开的一种示例性实施例中,所述测试所述当前测试面片组内所述待确定面片的可见性,包括:以所述当前测试面片组内所述待确定面片作为当前测试面片;预渲染所述当前测试面片组内除所述当前测试面片以外的所有待确定面片,判断所述当前测试面片是否被遮挡,以确定所述当前测试面片的可见性。
在本公开的一种示例性实施例中,所述对待处理模型进行预渲染,包括:对所述待处理模型添加深度偏移,并对所述待处理模型中的所有面片进行预渲染。
在本公开的一种示例性实施例中,所述对所述待处理模型中的待确定面片进行分组测试,以测试所述待确定面片的可见性,包括:将所述待处理模型中的待确定面片划分为多个面片组,依次以每个面片组作为当前测试面片组,判断所述当前测试面片组是否被整体遮挡;如果所述当前测试面片组被整体遮挡,则确定所述当前测试面片组内所有待确定面片不可见;如果所述当前测试面片组未被整体遮挡,则判断所述当前测试面片组内每个待确定面片是否被遮挡,以确定其可见性。
在本公开的一种示例性实施例中,在将测试结果为可见的所述待确定面片确定为可见面片后,所述方法还包括:对所述待处理模型的面片索引信息进行重排,将所述可见面片的索引排列在所述待确定面片的索引之前。
在本公开的一种示例性实施例中,在确定所述待处理模型中的可见面片后,所述方法还包括:从所述待处理模型中去除不可见面片。
根据本公开的第二方面,提供一种模型处理方法,包括:获取按顺序排列的多个采样方向集合,所述多个采样方向集合中前一采样方向集合的元素数量小于后一采样方向集合的元素数量;以所述采样方向集合中的采样方向为预设采样方向,执行上述模型处理方法,以确定待处理模型中的可见面片。
根据本公开的第三方面,提供一种模型处理装置,包括:模型预渲染模块,用于在所述当前采样方向下,对待处理模型进行预渲染,其中,所述待处理模型包含待确定面片和已确定的可见面片;面片分组测试模块,用于在所述预渲染过程中,对所述待处理模型中的待确定面片进行分组测试,以测试所述待确定面片的可见性,所述待确定面片为所述待处理模型中除已确定的可见面片以外的面片;可见面片确定模块,用于将测试结果为可见的所述待确定面片确定为可见面片。
在本公开的一种示例性实施例中,模型处理装置还包括:采样方向确定模块,用于在所述当前采样方向下,对待处理模型进行预渲染之前,在多个预设的采样方向中确定当前采样方向。
在本公开的一种示例性实施例中,模型处理装置还包括:采样方向遍历模块,用于在所述将测试结果为可见的所述待确定面片确定为可见面片之后,遍历所述多个预设采样方向后,确定所述待处理模型中的可见面片。
在本公开的一种示例性实施例中,所述可见面片为游戏运行时对所述待处理模型进行渲染的目标面片。
在本公开的一种示例性实施例中,模型预渲染模块,包括:可见面片预渲染单元,用于对所述待处理模型中已确定的可见面片进行预渲染;分组预渲染单元,用于对所述待处理模型中的待确定面片进行分组预渲染。
在本公开的一种示例性实施例中,面片分组测试模块包括:分组测试单元,用于在所述分组预渲染过程中,对所述待处理模型中的待确定面片进行分组测试。
在本公开的一种示例性实施例中,分组预渲染单元,包括:面片组划分子单元,用于将所述待处理模型中的待确定面片划分为多个面片组,在对所述面片组进行测试前,预渲染除当前测试面片组以外的所有面片组。
在本公开的一种示例性实施例中,面片分组测试模块,包括:遮挡判断单元,用于判断所述当前测试面片组是否被整体遮挡;不可见面片确定单元,用于如果所述当前测试面片组被整体遮挡,则确定所述当前测试面片组内所有待确定面片不可见;组内测试单元,用于如果所述当前测试面片组未被整体遮挡,则测试所述当前测试面片组内所述待确定面片的可见性。
在本公开的一种示例性实施例中,组内测试单元,包括:测试子单元,用于以所述当前测试面片组内所述待确定面片作为当前测试面片;面片渲染子单元,用于预渲染所述当前测试面片组内除所述当前测试面片以外的所有待确定面片,判断所述当前测试面片是否被遮挡,以确定所述当前测试面片的可见性。
在本公开的一种示例性实施例中,模型预渲染模块,包括:偏移添加单元,用于对所述待处理模型添加深度偏移,并对所述待处理模型中的所有面片进行预渲染。
在本公开的一种示例性实施例中,面片分组测试模块,包括:面片组划分单元,用于将所述待处理模型中的待确定面片划分为多个面片组,依次以每个面片组作为当前测试面片组,判断所述当前测试面片组是否被整体遮挡;不可见面片确定单元,用于如果所述当前测试面片组被整体遮挡,则确定所述当前测试面片组内所有待确定面片不可见;组内测试单元,用于如果所述当前测试面片组未被整体遮挡,则判断所述当前测试面片组内每个待确定面片是否被遮挡,以确定其可见性。
在本公开的一种示例性实施例中,模型处理装置还包括:索引重排模块,用于在将测试结果为可见的所述待确定面片确定为可见面片后,对所述待处理模型的面片索引信息进行重排,将所述可见面片的索引排列在所述待确定面片的索引之前。
在本公开的一种示例性实施例中,模型处理装置还包括:不可见面片去除模块,用于在确定所述待处理模型中的可见面片后,从所述待处理模型中去除不可见面片。
根据本公开的第四方面,提供一种模型处理装置,包括:方向集合获取模块,用于获取按顺序排列的多个采样方向集合,所述多个采样方向集合中前一采样方向集合的元素数量小于后一采样方向集合的元素数量;可见面片确定模块,用于以所述采样方向集合中的采样方向为预设采样方向,执行上述模型处理方法,以确定待处理模型中的可见面片。
根据本公开的第五方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一项所述的方法。
根据本公开的第六方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项所述的方法。
本公开的示例性实施例具有以下有益效果:
在当前采样方向下,对待处理模型进行预渲染,其中,待处理模型包含待确定面片和已确定的可见面片;在预渲染过程中,对待处理模型中的待确定面片进行分组测试,以测试待确定面片的可见性,待确定面片为待处理模型中除已确定的可见面片以外的面片;将测试结果为可见的待确定面片确定为可见面片。一方面,本示例性实施例提出一种新的模型处理方法,提出对待确定面片进行分组测试的思想策略,在进行模型预渲染时,以组为整体进行测试,相比于现有技术中对每一个待确定面片逐一进行可见性测试时,每次都需要绘制其他全部的面片,大大减少了面片的重画次数,降低了系统的绘制压力;另一方面,本示例性实施例以组级别进行可见性测试,减少了需要进行处理的面片数量,简化了模型处理流程,提高了模型渲染效率;再一方面,本示例性实施例的模型处理流程简洁,能够准确、有效的确定其中的可见面片,能够为剔除模型的不可见面片或其他模型处理的应用场景提供便捷。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性示出本示例性实施例中一种模型处理方法的流程图;
图2示意性示出本示例性实施例中对面片索引信息进行重排的示意图;
图3示意性示出本示例性实施例中一种模型处理方法的子流程图;
图4示意性示出本示例性实施例中另一种模型处理方法的子流程图;
图5示意性示出本示例性实施例面片分组测试的示意图;
图6示意性示出本示例性实施例中再一种模型处理方法的子流程图;
图7示意性示出本示例性实施例中另一种模型处理方法的流程图;
图8示意性示出本示例性实施例中一种飞机模型处理后的示意图;
图9示意性示出本示例性实施例中一种书店模型处理后的示意图;
图10示意性示出本示例性实施例中一种模型处理装置的结构框图;
图11示意性示出本示例性实施例中另一种模型处理装置的结构框图;
图12示意性示出本示例性实施例中一种用于实现上述方法的电子设备。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。
本公开的示例性实施例首先提供了一种模型处理方法,本实施例方法的应用场景可以是:在制作动画模型或者游戏模型时,通过本示例性实施例的方法对每个模型进行处理,可以得到模型所包括的可见面片,根据这些可见面片,对其他不可见面片进行剔除,能够避免由于无效面片造成的内存占用率大的问题等,提高后续动画或游戏运行时模型的渲染效率。
下面结合附图1对本示例性实施例做进一步说明,如图1所示,模型处理方法可以包括以下步骤s110~s130:
步骤s110,在当前采样方向下,对待处理模型进行预渲染,其中,待处理模型包含待确定面片和已确定的可见面片。
通常,编程人员可以通过特定的软件或应用程序建立模型网格数据,以制作虚拟模型,用于动画制作或游戏应用。模型网格数据可以包括用于构成模型的面片数据,例如三角面或四角面等等,用于反映模型的结构、形状等特性。从不同的角度观察模型时,可以看到不同的面片,也即模型网格数据中会包括从各个角度可以看见的面片或看不见的面片,其中,可以看到的面片为可见面片,看不见的面片为隐藏面片。在本示例性实施例中,为了确定模型中的可见面,可以在不同的采样方向上,对模型进行处理,来确定各个面片是否具有可见性。如果一个面片在任何一个方向可见,则该面片为可见面片;如果一个面片在所有方向均不可见,则该面片为不可见面片或隐藏面片。
待处理模型是指绘制模型时需要确定其中包含可见面信息的模型,其可以是多种类型的模型,例如动画场景或游戏场景的虚拟模型等,待处理模型可以是3d(3-dimensional,三维)模型,也可以是2.5d(2.5-dimensional,2.5维)等多种类型的模型。待处理模型中可以包含待确定面片,即不确定是否可见的面片,以及已确定的可见面片。在本示例性实施例中,系统可以在多个预设采样方向中,按照预设的顺序,以每个采样方向为当前采样方向,对待处理模型进行预渲染。上述预渲染过程是指模型绘制时的渲染过程,与游戏运行时对模型的渲染过程不同,可以认为预渲染是指在游戏运行时渲染模型之前,对模型预先进行的一种离线处理过程,预渲染过程的原理与运行游戏时的渲染过程类似,均是通过获取渲染数据来渲染模型。
在当前采样方向下,对待处理模型进行预渲染的过程也即对待处理模型进行着色的过程,本示例性实施例可以通过调用相关功能的函数实现,例如通过调用render,来执行在当前采样方向对待处理模型的预渲染流程。
在一示例性实施例中,在上述步骤s110之前,模型处理方法还可以包括:
在多个预设采样方向中确定当前采样方向。
本示例性实施例可以通过球面采样的方式,从球面上的多个预设采样方向中依次确定当前采样方向,以在不同的采样方向上,对模型进行处理,来确定各个面片是否具有可见性。在本示例性实施例中,根据设置参数的不同,可以具有多个预设采样方向,在不同的采样方向下进行采样,例如当设置6*6射线数的参数时,可以在36个采样方向上进行采样,当前采样方向即为这些采样方向中的其中一个采样方向。
步骤s120,在预渲染过程中,对待处理模型中的待确定面片进行分组测试,以测试待确定面片的可见性,待确定面片为待处理模型中除已确定的可见面片以外的面片。
步骤s130,将测试结果为可见的待确定面片确定为可见面片。
在本示例性实施例中,可以先通过特定工具,例如gpu(graphicsprocessingunit,图形处理器)遮挡查询功能,对待处理模型进行处理,确定其中的可见面片。进一步,基于初步确定的可见面片,将其他不能确定是否具有可见性的面片,确定为待确定面片。并在预渲染的过程中,对待确定面片进行分组,以每个组为整体,分别进行可见性测试。如果一个组整体不可见,则直接跳过该组,确定该组中所有的面片为不可见面片,如果一个组可见,则再具体测试组内的每个面片的可见性,在测试组内的每一面片的可见性时,除当前被测试的组之外的其他组的面片只需要绘制一次,不需要组内每个面片都绘制一次。在本示例性实施例中,待处理模型中的面片可以为三角形面片。即待处理模型可以是指由三角形面片构成的模型。
在一示例性实施例中,上述可见面片为游戏运行时对待处理模型进行渲染的目标面片。
考虑到在本示例性实施例中,对模型进行预渲染以及确定可见面片的过程,是为了确定出有效面片,以使得游戏在运行时进行模型渲染能够具有更高的效率,避免对无效面片渲染造成额外的内存开销的问题。因此,步骤s130中确定出的可见面片也即为最终运行游戏或其他程序时真正进行渲染的目标面片。
需要说明的是,在对待处理模型中的待确定面片进行分组时,可以根据需要自定义组的数量或每个组包括的面片数量,例如当需要对60个待确定面片进行测试时,可以将这60个面片进行6等分,确定6个分组,每个分组包括10个面片;也可以对其进行不等数量的不等划分,例如将60个面片划分为4个组、5个组或6个组等,每个组内的数量可以相同也可以不同,本公开对此不做具体限定。
现有技术在测试模型中面片的可见性时,通常需要将除了被测试的面片之外的其他面片都绘制一遍,复杂度约为o(i2),其中,i表示所有面片的数量。当模型包含的面片数量较多时,则会造成较大的开销。而本示例性实施例通过对待确定面片进行分组测试,在对每一面片进行测试时,可以减少对一些面片的重绘次数,从而提高测试效率,降低系统的工作压力。
在一示例性实施例中,在上述步骤s130之后,上述模型处理方法还可以包括:
遍历多个预设采样方向后,确定待处理模型中的可见面片。
本示例性实施例可以对多个预设采样方向进行遍历,即在每个预设采样方向下进行待处理模型可见面片的确定,以最终得到待处理模型的可见面片。例如当待处理模型包括100个面片时,从36个采样方向对这100个面片进行判断,遍历这36个采样方向的过程,就是逐步缩小和精确待处理模型可见面片的过程。基于确定的可见面片,可以对待处理模型进行不可见面片的剔除。
进一步的,在一示例性实施例中,在步骤s130,确定上述待处理模型中的可见面片之后,模型处理方法还可以包括:
从待处理模型中去除不可见面片。
其中,不可见面片,即隐藏面片,是指无论从哪个采样方向上观察均不可见的面片。考虑到这些面片对最终模型的渲染结果不会造成影响,为了提高模型的渲染效率,节省系统内存资源的占用率,在确定待处理模型的可见面片之后,本示例性实施例可以从待处理模型的所有面片中将不可见面片进行去除,即剔除隐藏面片。具体的,由于待处理模型中每个面片都可以通过特定的标识信息进行存储,例如顶点信息或顶点的索引信息等。因此,本示例性实施例可以根据确定的可见面片的顶点信息或顶点的索引信息,将其他不可见面片进行去除。在去除时,可以根据实际需要进行自定义剔除,例如在离线状态下,时间充裕,可以仅保留可见面片,将不可见面片全部去除;或者在其他对内存要求不高的情况下,去除预设数量的不可见面片等,本公开对此不做具体限定。
基于上述说明,在本示例性实施例中,在当前采样方向下,对待处理模型进行预渲染,其中,待处理模型包含待确定面片和已确定的可见面片;在预渲染过程中,对待处理模型中的待确定面片进行分组测试,以测试待确定面片的可见性,待确定面片为待处理模型中除已确定的可见面片以外的面片;将测试结果为可见的待确定面片确定为可见面片。一方面,本示例性实施例提出一种新的模型处理方法,提出对待确定面片进行分组测试的思想策略,在进行模型预渲染时,以组为整体进行测试,相比于现有技术中对每一个待确定面片逐一进行可见性测试时,每次都需要绘制其他全部的面片,大大减少了面片的重画次数,降低了系统的绘制压力;另一方面,本示例性实施例以组级别进行可见性测试,减少了需要进行处理的面片数量,简化了模型处理流程,提高了模型渲染效率;再一方面,本示例性实施例的模型处理流程简洁,能够准确、有效的确定其中的可见面片,能够为剔除模型的不可见面片或其他模型处理的应用场景提供便捷。
在一示例性实施例中,在上述步骤s130之后,模型处理方法还可以包括:
对待处理模型的面片索引信息进行重排,将可见面片的索引排列在待确定面片的索引之前。
在实际应用中,模型中的各个面片可以通过对应的顶点数据进行表示,例如可以通过三角形的三个顶点的数据表示一三角形面片,顶点数据可以存储在vertexbuffer(顶点缓冲区)中,而indexbuffer(索引缓冲区)可以存储模型中面片的索引信息,其中,索引信息可以指向对应的顶点数据,因此,索引信息也可以对模型中的各个面片进行表示。在本示例性实施例中,对待确定面片进行可见性测试时,可以先对待处理模型的面片索引信息进行重排,将所有的可见面片的索引排列在待确定面片的索引之前,如图2所示,模型中包括6个面片时,其中面片3和面片5为可见面片,则对面片的索引信息进行重排,将面片3和面片5的索引排列在面片1、面片2、面片4和面片6之前,为了便于计算和测试,可以对划分的两类面片的集合进行标识,以v表示可见面片集合,i表示待确定面片集合。通过对可见面片和待确定面片进行分类,并针对待确定面片进行分组测试,可以增加组级别待确定面片测试的成功率。
在本示例性实施例中,不同类型的模型或者不同环境要求的模型可以具有不同的模型预渲染方法,例如离线状态下,对计算速度要求较低时,可以启动非depthbias(深度偏移)模型的预渲染方法,此时,模型预渲染的准确性较高;非离线状态下,对计算速度要求较高时,可以启动depthbias模型的预渲染方法,此时,模型渲染的准确性较低。其中,depthbias模型是指为模型的多边形增加深度偏移时的模型,此时,可以使立体空间的共面多边形看起来好像并不共面,以便它们能够被正确预渲染。
下面,在本示例性实施例中,将分别对非depthbias模型和depthbias模型的预渲染过程进行说明。
第一,针对非depthbias模型:
在一示例性实施例中,如图3所示,上述步骤s110中,对待处理模型进行预渲染,可以包括以下步骤:
步骤s310,对待处理模型中已确定的可见面片进行预渲染;
步骤s320,对待处理模型中的待确定面片进行分组预渲染。
对于非depthbias模型,在进行模型预渲染时,可以先对待处理模型中所有的面片索引信息进行重排,重排之后面片索引被划分为两部分,前面一部分都是可见面片,后面一部分是待确定面片。由于可见的面片不需要再测试可见性,因此每个采样方向只绘制一次即可,作为背景去遮挡其它待确定面片,而其他待确定面片则需要进行分组预渲染。
进一步的,在一示例性实施例中,上述步骤s120可以包括:
在分组预渲染过程中,对待处理模型中的待确定面片进行分组测试。
即本示例性实施例可以将待确定面片划分为多个组的面片,并对每个组的面片进行预渲染过程,来确定其中待确定面片的可见性,以实现对待确定面片的分组测试。
对待确定面片进行分组预渲染的过程,在一示例性实施例中,上述步骤s320可以包括:
将待处理模型中的待确定面片划分为多个面片组,在对每个面片组进行测试前,预渲染除当前测试面片组以外的所有面片组。
在本示例性实施例中,对每个面片组进行绘制时,可见面片在预渲染开始时绘制一次即可,后续无需重复绘制,然后再执行分组预渲染的流程。举例说明,待处理模型中包括100个面片,其中有30个可见面片和70个待确定面片,这里,将这70个待确定面片划分为7个面片组,并对这7个面片组分别进行可见性测试。对第一组面片组进行测试时,首先,可以对30个可见面片进行预渲染,且,在之后测试该组内任意面片时,都无需重复预渲染这30个面片。然后预渲染除当前测试面片组以外的其他6个面片组,也即60个待确定面片。
在对每组面片进行测试时,可以以组为整体测试可见性,具体的,在一示例性实施例中,如图4所示,上述步骤s120可以包括:
步骤s410,判断当前测试面片组是否被整体遮挡;
步骤s420,如果当前测试面片组被整体遮挡,则确定当前测试面片组内所有待确定面片不可见;
步骤s430,如果当前测试面片组未被整体遮挡,则测试当前测试面片组内待确定面片的可见性。
在本示例性实施例中,可以将划分的每个测试面片组作为一个整体,判断其可见性。如果当前测试面片组被其他预渲染后的面片整体遮挡,则可以确定当前测试面片组内所包括的所有待确定面片均为不可见面片。如果当前测试面片组未被整体遮挡,则说明其中可能包括可见面片,则需要进一步测试面片组内每个待确定面片的可见性。
进一步的,每个测试面片组内待确定面片的可见性测试,在一示例性实施例中,上述步骤s430中,测试当前测试面片组内每个待确定面片的可见性,可以包括以下步骤:
以当前测试面片组内每个待确定面片作为当前测试面片;
预渲染当前测试面片组内除当前测试面片以外的所有待确定面片,判断当前测试面片是否被遮挡,以确定当前测试面片的可见性。
本示例性实施例通过将每个待测试面片组内的每个待确定面片作为当前测试面片,执行预渲染过程,通过先绘制其他面片组的待确定面片,再绘制当前组除当前测试面片的其他面片,最后绘制当前测试面片本身,来判断被测试的待确定面片是否被遮挡,确定可见性。下面对于具体的绘制过程进行具体说明,图5示出了当前需要进行面片测试的多个面片组,记待处理模型中可见面片集合为v,待确定面片集合为i,划分的多个待确定面片的面片组的数量为m,每个面片组内待确定面片数量相等为n,多个面片组的编号分别为g_1、…、g_x、…、g_m,设当前测试面片组编号为g_x,其中包括的待确定面片编号包括t_1、…、t_y、…、t_n。则在对当前测试的面片组g_x进行测试时,需要对除面片组g_x的其他面片组进行绘制。则分组后进行预渲染的计算复杂度,约为o(m*i m*n2)。举例说明,假设待处理模型当前待确定面片集合为70,划分的面片组的数量为7,每个组内包括10个待确定面片,由于每个面片组在测试时,都需要绘制一次其他组的面片,为60次,总共7个组,共计60*7次,每个面片组在测试组内每一待确定面片时,都需要对组内除被测试的待确定面片之外的其他面片绘制一次,为9次,一组有10个面片,一共有7个组,共计7*9*10次,也即,以分组方式对面片可见性进行测试的次数为60*7 7*9*10,可以近似看做70*7 7*102,也即复杂度m*i m*n2。可以明显的看出,通过本示例性实施例对待确定面片进行分组的方式相比于现有技术的计算复杂度,得到了明显的优化。
需要说明的是,上述分组大小n需要根据需要进行合适的设定,若分组设置较大,可能难以体现出分组测试的优势,与不分组的情况相差不大,若分组设置较小,整体复杂度也不能得到很好的优化,本示例性实施例可以将n设置为128。
第二,针对depthbias模型:
在一示例性实施例中,上述步骤s110中,对待处理模型进行预渲染,可以包括以下步骤:
对待处理模型添加深度偏移,并对待处理模型中的所有面片进行预渲染。
对待处理模型添加深度偏移,能够保证具有深度偏移的每个对象能够被正确渲染。在对depthbias模型进行处理时,与非depthbias模型的预渲染过程,区别在于,由于depthbias模型存在深度偏移,被测试的面片自己不会被遮挡,因此可以进一步减少绘制次数,对整个待处理模型(包括被测试的面片)整体进行一次预渲染。
进一步的,对于depthbias模型的预渲染过程,与非depthbias模型的预渲染过程类似,如图6所示,上述步骤s120中对待处理模型中的待确定面片进行分组测试,以测试待确定面片的可见性,可以包括以下步骤:
步骤s610,将待处理模型中的待确定面片划分为多个面片组,依次以每个面片组作为当前测试面片组,判断当前测试面片组是否被整体遮挡;
步骤s620,如果当前测试面片组被整体遮挡,则确定当前测试面片组内所有待确定面片不可见;
步骤s630,如果当前测试面片组未被整体遮挡,则判断当前测试面片组内每个待确定面片是否被遮挡,以确定其可见性。
即可以将每个面片组为整体进行可见性的整体判断,如果当前测试面片组被其他预渲染后的面片整体遮挡,则可以确定当前测试面片组内所包括的所有待确定面片均为不可见面片。如果当前测试面片组未被整体遮挡,则说明其中可能包括可见面片,则需要进一步测试面片组内每个待确定面片的可见性。对于每个测试面片组内的测试逻辑,与非depthbias模型类似,在此不做赘述。
需要说明的是,无论是depthbias模型还是非depthbias模型,对每个预设采样方向下,进行上述预渲染流程之后,都可以对索引信息进行重排过程,以保证在遍历每一个预设采样方向后,对待确定面片进行进一步的筛选。
本公开的示例性实施例还提供了另一种模型处理方法,下面结合附图7对本示例性实施例做进一步说明,如图7所示,模型处理方法可以包括以下步骤s710~s720:
步骤s710,获取按顺序排列的多个采样方向集合,多个采样方向集合中前一采样方向集合的元素数量小于后一采样方向集合的元素数量;
步骤s720,以采样方向集合中的采样方向为预设采样方向,执行上述模型处理方法步骤s110~s130以及其他相关步骤,以确定待处理模型中的可见面片。
其中,多个采样方向集合可以包括多次进行参数设置下确定的多个采样方向。本示例性实施例可以采用不同的参数设置对待处理模型进行多个阶段的采样过程,例如第一阶段采样过程采用较低的参数设置,例如分辨率为512*512,射线数为6*6的参数设置,此时需要从待处理模型的36个采样方向进行36次采样过程,确定出待处理模型的可见面片;第二组采样过程采用较高的参数设置,例如分辨率为800*600,射线数为16*16的参数设置,此时需要从待处理模型的256个采样方向进行256次采样过程,则多个采样方向集合,可以包括两个采样方向集合,第一个采样方向集合包括36个采样方向,第二个采样方向集合包括256个采样方向等,集合中的采样方向及为集合中的元素。
进一步,在每个采样方向集合中,依次以每个采样方向集合中的采样方向为预设采样方向,执行上述模型处理方法步骤s110~s130以及其他相关步骤,即可以确定待处理模型中的可见面片。由于后一采样方向集合中的元素数量较前一采样方向集合中的元素数量较多,例如上述实施例中第一个采样方向集合包括36个采样方向,第二个采样方向集合包括256个采样方向,也即后一采样集合的精度更高,因此,通过多个采样方向集合对待处理模型进行可见面片确定的过程,实质上,可以看做是逐步缩小计算精度,多阶段筛选可见面片的过程。特别的,在本示例性实施例中,可以采用两个采样方向集合,第一个采样方向集合可以视为预览阶段,快速计算出大致的可见面片,第二个采样方向集合可以视为全量计算阶段,进一步确定出精细的可见面片。其中,确定可见面片的过程与上述步骤s110~s130的模型处理方法相同,在此不做具体赘述。
通过上述模型处理方式,确定待处理模型的可见面片,可以有效、快速的对待处理模型的不可见面片进行剔除,以提高模型在游戏运行时的渲染的效率,且剔除后的模型与未剔除后的模型在渲染效果上,差别不大。
下表1为一飞机模型采用现有技术进行不可见面片剔除,与采用本示例性实施例进行不可见面片剔除的数据对比表:
表1
对应的,图8示出了飞机模型从6972个面片数,剔除不可见面片后到5123个面片数后的示意图。
下表2为一书店模型采用现有技术进行不可见面片剔除,与采用本示例性实施例进行不可见面片剔除的数据对比表:
表2
对应的,图9示出了书架模型从1668个面片数,剔除不可见面片后到1055个面片数后的示意图。
可以看出,采用本示例性实施例对待处理模型进行处理,可以大大减少不可见面片剔除的效率,且具有更高的加速比。
基于上述说明,在本示例性实施例中,获取按顺序排列的多个采样方向集合,多个采样方向集合中前一采样方向集合的元素数量小于后一采样方向集合的元素数量;以采样方向集合中的采样方向为预设采样方向,执行步骤s110~s130以及相关步骤的模型处理方法,以确定待处理模型中的可见面片。一方面,通过多个采样方向集合,对待处理模型进行采样,由于每个采样方向集合中所包括的采样方向数量不同,因此,以不同的采样方向集合,该过程能够对待处理模型进行多阶段的采样过程,快速确定待处理模型的可见面片,且可以逐步确定更为准确的可见面片,提高可见面片的确定效率和有效性;另一方面,模型处理流程较为简单,应用范围较广。
本公开的示例性实施例还提供了一种模型处理装置。参照图10,该装置1000可以包括,模型预渲染模块1010,用于在当前采样方向下,对待处理模型进行预渲染,其中,待处理模型包含待确定面片和已确定的可见面片;面片分组测试模块1020,用于在预渲染过程中,对待处理模型中的待确定面片进行分组测试,以测试待确定面片的可见性,待确定面片为待处理模型中除已确定的可见面片以外的面片;可见面片确定模块1030,用于将测试结果为可见的待确定面片确定为可见面片。
在一示例性实施例中,模型处理装置还包括:采样方向确定模块,用于在当前采样方向下,对待处理模型进行预渲染之前,在多个预设的采样方向中确定当前采样方向。
在一示例性实施例中,模型处理装置还包括:采样方向遍历模块,用于在将测试结果为可见的待确定面片确定为可见面片之后,遍历多个预设采样方向后,确定待处理模型中的可见面片。
在一示例性实施例中,可见面片为游戏运行时对待处理模型进行渲染的目标面片。
在一示例性实施例中,模型预渲染模块,包括:可见面片预渲染单元,用于对待处理模型中已确定的可见面片进行预渲染;分组预渲染单元,用于对待处理模型中的待确定面片进行分组预渲染。
在一示例性实施例中,面片分组测试模块包括:分组测试单元,用于在分组预渲染过程中,对待处理模型中的待确定面片进行分组测试。
在一示例性实施例中,分组预渲染单元,包括:面片组划分子单元,用于将待处理模型中的待确定面片划分为多个面片组,在对面片组进行测试前,预渲染除当前测试面片组以外的所有面片组。
在一示例性实施例中,面片分组测试模块,包括:遮挡判断单元,用于判断当前测试面片组是否被整体遮挡;不可见面片确定单元,用于如果当前测试面片组被整体遮挡,则确定当前测试面片组内所有待确定面片不可见;组内测试单元,用于如果当前测试面片组未被整体遮挡,则测试当前测试面片组内待确定面片的可见性。
在一示例性实施例中,组内测试单元,包括:测试子单元,用于以当前测试面片组内待确定面片作为当前测试面片;面片渲染子单元,用于预渲染当前测试面片组内除当前测试面片以外的所有待确定面片,判断当前测试面片是否被遮挡,以确定当前测试面片的可见性。
在一示例性实施例中,模型预渲染模块,包括:偏移添加单元,用于对待处理模型添加深度偏移,并对待处理模型中的所有面片进行预渲染。
在一示例性实施例中,面片分组测试模块,包括:面片组划分单元,用于将待处理模型中的待确定面片划分为多个面片组,依次以每个面片组作为当前测试面片组,判断当前测试面片组是否被整体遮挡;不可见面片确定单元,用于如果当前测试面片组被整体遮挡,则确定当前测试面片组内所有待确定面片不可见;组内测试单元,用于如果当前测试面片组未被整体遮挡,则判断当前测试面片组内每个待确定面片是否被遮挡,以确定其可见性。
在一示例性实施例中,模型处理装置还包括:索引重排模块,用于在将测试结果为可见的待确定面片确定为可见面片后,对待处理模型的面片索引信息进行重排,将可见面片的索引排列在待确定面片的索引之前。
在一示例性实施例中,模型处理装置还包括:不可见面片去除模块,用于在确定待处理模型中的可见面片后,从待处理模型中去除不可见面片。
本公开的示例性实施例还提供了一种模型处理装置。参照图11,该装置1100可以包括,方向集合获取模块1110,用于获取按顺序排列的多个采样方向集合,多个采样方向集合中前一采样方向集合的元素数量小于后一采样方向集合的元素数量;可见面片确定模块1120,用于以采样方向集合中的采样方向为预设采样方向,执行上述模型处理方法,以确定待处理模型中的可见面片。
上述装置中各模块/单元的具体细节在方法部分的实施例中已经详细说明,未披露的细节内容可以参见方法部分的实施例内容,因此此处不再赘述。
本公开的示例性实施例还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图12来描述根据本公开的这种示例性实施例的电子设备1200。图12显示的电子设备1200仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图12所示,电子设备1200以通用计算设备的形式表现。电子设备1200的组件可以包括但不限于:上述至少一个处理单元1210、上述至少一个存储单元1220、连接不同系统组件(包括存储单元1220和处理单元1210)的总线1230、显示单元1240。
其中,存储单元存储有程序代码,程序代码可以被处理单元1210执行,使得处理单元1210执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。例如,处理单元1210可以执行图1、图3、图4、图6或图7所示的步骤。
存储单元1220可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(ram)1221和/或高速缓存存储单元1222,还可以进一步包括只读存储单元(rom)1223。
存储单元1220还可以包括具有一组(至少一个)程序模块1225的程序/实用工具1224,这样的程序模块1225包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1230可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1200也可以与一个或多个外部设备1300(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1200交互的设备通信,和/或与使得该电子设备1200能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口1250进行。并且,电子设备1200还可以通过网络适配器1260与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器1260通过总线1230与电子设备1200的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开示例性实施例的方法。
本公开的示例性实施例还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。
本公开的示例性实施例还提供还一种用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如java、c 等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的示例性实施例,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限定。
1.一种模型处理方法,其特征在于,包括:
在当前采样方向下,对待处理模型进行预渲染,其中,所述待处理模型包含待确定面片和已确定的可见面片;
在所述预渲染过程中,对所述待处理模型中的待确定面片进行分组测试,以测试所述待确定面片的可见性,所述待确定面片为所述待处理模型中除已确定的可见面片以外的面片;
将测试结果为可见的所述待确定面片确定为可见面片。
2.根据权利要求1所述的方法,其特征在于,在所述当前采样方向下,对待处理模型进行预渲染之前,所述方法还包括:
在多个预设的采样方向中确定当前采样方向。
3.根据权利要求2所述的方法,其特征在于,在所述将测试结果为可见的所述待确定面片确定为可见面片之后,所述方法还包括:
遍历所述多个预设采样方向后,确定所述待处理模型中的可见面片。
4.根据权利要求1所述的方法,其特征在于,所述可见面片为游戏运行时对所述待处理模型进行渲染的目标面片。
5.根据权利要求1所述的方法,其特征在于,所述对待处理模型进行预渲染,包括:
对所述待处理模型中已确定的可见面片进行预渲染;
对所述待处理模型中的待确定面片进行分组预渲染。
6.根据权利要求5所述的方法,其特征在于,所述在所述预渲染过程中,对所述待处理模型中的待确定面片进行分组测试,包括:
在所述分组预渲染过程中,对所述待处理模型中的待确定面片进行分组测试。
7.根据权利要求5所述的方法,其特征在于,所述对所述待处理模型中的待确定面片进行分组预渲染,包括:
将所述待处理模型中的待确定面片划分为多个面片组,在对所述面片组进行测试前,预渲染除当前测试面片组以外的所有面片组。
8.根据权利要求7所述的方法,其特征在于,所述对所述待处理模型中的待确定面片进行分组测试,以测试所述待确定面片的可见性,包括:
判断所述当前测试面片组是否被整体遮挡;
如果所述当前测试面片组被整体遮挡,则确定所述当前测试面片组内所有待确定面片不可见;
如果所述当前测试面片组未被整体遮挡,则测试所述当前测试面片组内所述待确定面片的可见性。
9.根据权利要求8所述的方法,其特征在于,所述测试所述当前测试面片组内所述待确定面片的可见性,包括:
以所述当前测试面片组内所述待确定面片作为当前测试面片;
预渲染所述当前测试面片组内除所述当前测试面片以外的所有待确定面片,判断所述当前测试面片是否被遮挡,以确定所述当前测试面片的可见性。
10.根据权利要求1所述的方法,其特征在于,所述对待处理模型进行预渲染,包括:
对所述待处理模型添加深度偏移,并对所述待处理模型中的所有面片进行预渲染。
11.根据权利要求10所述的方法,其特征在于,所述对所述待处理模型中的待确定面片进行分组测试,以测试所述待确定面片的可见性,包括:
将所述待处理模型中的待确定面片划分为多个面片组,依次以每个面片组作为当前测试面片组,判断所述当前测试面片组是否被整体遮挡;
如果所述当前测试面片组被整体遮挡,则确定所述当前测试面片组内所有待确定面片不可见;
如果所述当前测试面片组未被整体遮挡,则判断所述当前测试面片组内每个待确定面片是否被遮挡,以确定其可见性。
12.根据权利要求1所述的方法,其特征在于,在将测试结果为可见的所述待确定面片确定为可见面片后,所述方法还包括:
对所述待处理模型的面片索引信息进行重排,将所述可见面片的索引排列在所述待确定面片的索引之前。
13.根据权利要求1所述的方法,其特征在于,在确定所述待处理模型中的可见面片后,所述方法还包括:
从所述待处理模型中去除不可见面片。
14.一种模型处理方法,其特征在于,包括:
获取按顺序排列的多个采样方向集合,所述多个采样方向集合中前一采样方向集合的元素数量小于后一采样方向集合的元素数量;
以所述采样方向集合中的采样方向为预设采样方向,执行权利要求1至13任一项所述的模型处理方法,以确定待处理模型中的可见面片。
15.一种模型处理装置,其特征在于,包括:
模型预渲染模块,用于在所述当前采样方向下,对待处理模型进行预渲染,其中,所述待处理模型包含待确定面片和已确定的可见面片;
面片分组测试模块,用于在所述预渲染过程中,对所述待处理模型中的待确定面片进行分组测试,以测试所述待确定面片的可见性,所述待确定面片为所述待处理模型中除已确定的可见面片以外的面片;
可见面片确定模块,用于将测试结果为可见的所述待确定面片确定为可见面片。
16.一种模型处理装置,其特征在于,包括:
方向集合获取模块,用于获取按顺序排列的多个采样方向集合,所述多个采样方向集合中前一采样方向集合的元素数量小于后一采样方向集合的元素数量;
可见面片确定模块,用于以所述采样方向集合中的采样方向为预设采样方向,执行权利要求1至13任一项所述的模型处理方法,以确定待处理模型中的可见面片。
17.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-13任一项所述的方法。
18.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-13任一项所述的方法。
技术总结