图像渲染方法、装置、设备和存储介质转让专利

申请号 : CN202010560369.3

文献号 : CN111798556A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡梓楠

申请人 : 完美世界(北京)软件科技发展有限公司

摘要 :

本发明实施例提供一种图像渲染方法、装置、设备和存储介质,该方法包括:确定目标物体在第一视口相机中是否可见;若所述目标物体在所述第一视口相机中可见,则确定所述目标物体在场景视口中占据投影区域的面积;若所述面积小于第一预设阈值,则获取所述目标物体对应的面片贴图;将所述目标物体对应的面片贴图绘制到所述场景视口。采用本发明,可以通过面片贴图代替模型本身的顶点数据,减少绘制顶点数,提高渲染效率。

权利要求 :

1.一种图像渲染方法,其特征在于,包括:

确定目标物体在第一视口相机中是否可见;

若所述目标物体在所述第一视口相机中可见,则确定所述目标物体在场景视口中占据投影区域的面积;

若所述面积小于第一预设阈值,则获取所述目标物体对应的面片贴图;

将所述目标物体对应的面片贴图绘制到所述场景视口。

2.根据权利要求1所述的方法,其特征在于,所述确定所述目标物体在场景视口中占据投影区域的面积,包括:确定所述目标物体对应的面片的边长;

确定所述面片的中心到所述第一视口相机之间的距离;

确定所述边长与所述距离之间的比值;

所述若所述面积小于第一预设阈值,则获取所述目标物体对应的面片贴图,包括:若所述比值小于第一预设阈值,则获取所述目标物体对应的面片贴图。

3.根据权利要求1所述的方法,其特征在于,所述获取所述目标物体对应的面片贴图,包括:获取所述目标物体对应的贴图信息,所述贴图信息用于指示所述目标物体对应的面片贴图在图像阵列中的存储位置;

根据所述贴图信息,获取所述目标物体对应的面片贴图。

4.根据权利要求1所述的方法,其特征在于,所述方法还包括:预先创建用于存储多个物体面片贴图的图像阵列,所述图像阵列包括多个区域块,每个区域块用于存储一个物体的面片贴图;

设置预设数量的面片贴图参数指针;

为每个区域块分配所述预设数量的面片贴图参数指针中的一个指针,分配的面片贴图参数指针的初始指向为空;

在任一区域块分配给任一物体之后,将所述任一区域块的面片贴图参数指针设置为指向所述任一物体;

在所述任一区域块分配给所述任一物体之后,记录所述任一区域块中的物体对应的面片贴图的连续未使用次数。

5.根据权利要求4所述的方法,其特征在于,所述获取所述目标物体对应的面片贴图,包括:若未预先绘制所述目标物体对应的面片贴图,则确定是否存在面片贴图参数指针为空的第一资源;

若存在面片贴图参数指针为空的第一资源,将所述第一资源分配给所述目标物体,以在所述第一资源中绘制所述目标物体对应的面片贴图;

若不存在面片贴图参数指针为空的第一资源,则确定面片贴图的连续未使用次数超过第二预设阈值的其他物体,将所述其他物体占用的第二资源分配给所述目标物体,以在所述第二资源中绘制所述目标物体对应的面片贴图。

6.根据权利要求1所述的方法,其特征在于,在获取所述目标物体对应的面片贴图之前,所述方法还包括:确定当前第一视口相机的第一朝向角度与上一次对所述目标物体对应的面片贴图进行更新时所述第一视口相机的第二朝向角度之间的变化量;

基于所述变化量,确定是否对所述目标物体对应的面片贴图进行更新;

若所述变化量大于第三预设阈值,则对所述目标物体对应的面片贴图进行更新;

若所述变化量小于或者等于所述第三预设阈值,则对所述目标物体对应的面片贴图的旋转姿态进行调整。

7.根据权利要求6所述的方法,其特征在于,所述确定当前第一视口相机的第一朝向角度与上一次对所述目标物体对应的面片贴图进行更新时所述第一视口相机的第二朝向角度之间的变化量,包括:确定当前第一视口相机的第一朝向角度;

确定上一次对所述目标物体对应的面片贴图进行更新时所述第一视口相机的第二朝向角度;

确定所述第一朝向角度与所述第二朝向角度的数量积;

所述若所述变化量大于第三预设阈值,则对所述目标物体对应的面片贴图进行更新,包括:确定所述第三预设阈值的余弦值;

若所述数量积小于所述余弦值,则对所述目标物体对应的面片贴图进行更新。

8.一种图像渲染装置,其特征在于,包括:

确定模块,用于确定目标物体在第一视口相机中是否可见;

计算模块,用于若所述目标物体在所述第一视口相机中可见,则确定所述目标物体在场景视口中占据投影区域的面积;

获取模块,用于若所述面积小于第一预设阈值,则获取所述目标物体对应的面片贴图;

绘制模块,用于将所述目标物体对应的面片贴图绘制到所述场景视口。

9.一种电子设备,其特征在于,包括:存储器、处理器;其中,所述存储器上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1-7中任一项所述的图像渲染方法。

10.一种非暂时性机器可读存储介质,其特征在于,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1-7中任一项所述的图像渲染方法。

说明书 :

图像渲染方法、装置、设备和存储介质

技术领域

[0001] 本发明涉及图像处理技术领域,尤其涉及一种图像渲染方法、装置、设备和存储介质。

背景技术

[0002] 对于三维场景中的静态物体,静态物体会对应有模型顶点数据、渲染材质、静态物体在三维场景中摆放的位置与姿态等信息。在游戏运行过程中会通过视口相机对三维场景中的静态物体进行查询,通过这样的方式可以收集视口相机可以查询到的物体。对于视口相机可以查询到的物体中的静态物体,会以这些物体为单位进行渲染,这样渲染每个这种类型的物体至少需要通过一次绘制操作。如果物体不同部位贴了多种材质,那么需要进行绘制的次数更多。
[0003] 大型的三维游戏场景中往往会摆放很多的物体,用以保证游戏美术内容的丰富和层次感。即使经过视口相机对物体的剔除,剩余物体的数量也不可小视。如果视口相机查询到的每个静态物体都至少需要通过一次绘制操作进行渲染,那么就会造成三维游戏场景中每帧产生的绘制操作次数较多,同时绘制顶点数量也较大,从而会影响游戏运行效率。

发明内容

[0004] 本发明实施例提供一种图像渲染方法、装置、设备和存储介质,用以实现降低绘制顶点数量,提高游戏运行效率。
[0005] 第一方面,本发明实施例提供一种图像渲染方法,该方法包括:
[0006] 确定目标物体在第一视口相机中是否可见;
[0007] 若所述目标物体在所述第一视口相机中可见,则确定所述目标物体在场景视口中占据投影区域的面积;
[0008] 若所述面积小于第一预设阈值,则获取所述目标物体对应的面片贴图;
[0009] 将所述目标物体对应的面片贴图绘制到所述场景视口。
[0010] 第二方面,本发明实施例提供一种图像渲染装置,包括:
[0011] 确定模块,用于确定目标物体在第一视口相机中是否可见;
[0012] 计算模块,用于若所述目标物体在所述第一视口相机中可见,则确定所述目标物体在场景视口中占据投影区域的面积;
[0013] 获取模块,用于若所述面积小于第一预设阈值,则获取所述目标物体对应的面片贴图;
[0014] 绘制模块,用于将所述目标物体对应的面片贴图绘制到所述场景视口。
[0015] 第三方面,本发明实施例提供一种电子设备,其中包括处理器和存储器,其中,所述存储器上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器至少可以实现第一方面中的图像渲染方法。
[0016] 第四方面,本发明实施例提供了一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器至少可以实现第一方面中的图像渲染方法。
[0017] 采用本发明,可以通过矩形面片代替模型本身的顶点数据,减少绘制顶点数,提高渲染效率。对于位于相同快照贴图也即图像阵列中的面片贴图的物体,可以将这些物体的面片贴图合并到一组顶点缓冲中通过一次绘制操作进行绘制,从总体上可以减少绘制的次数。另外,可以对面片贴图预先进行光照处理,那么在图像阵列中保存的面片贴图已经是经过光照处理的结果,在将面片贴图绘制到三维场景中时,可以虚无再进行光照计算,节省了进行光照计算的计算开销。最后,通过本发明,在静态物体的绘制效果基本不受影响的情况下,能够显著降低渲染计算开销。

附图说明

[0018] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0019] 图1为本发明实施例提供的一种图像渲染方法的流程图示意图;
[0020] 图2为本发明实施例提供的一种图像渲染方法的流程图示意图;
[0021] 图3为本发明实施例提供的一种图像渲染装置的结构示意图;
[0022] 图4为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

[0023] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0024] 在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种。
[0025] 取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
[0026] 另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
[0027] 图1为本发明实施例提供的一种图像渲染方法的流程图,如图1所示,该方法包括如下步骤:
[0028] 101、确定目标物体在第一视口相机中是否可见。
[0029] 102、若目标物体在第一视口相机中可见,则确定目标物体在场景视口中占据投影区域的面积。
[0030] 103、若面积小于第一预设阈值,则获取目标物体对应的面片贴图。
[0031] 104、将目标物体对应的面片贴图绘制到场景视口。
[0032] 在实际应用中,在游戏过程中,可以通过第一视口相机进行查询,如果该第一视口相机能够看目标物体,那么就可以将该目标物体渲染到游戏中的三维场景中,否则的话则就无需将该目标物体渲染到三维场景中。需要说明的是,目标物体可以是游戏场景中的静态物体。由于静态物体的变化较小,可以减少对静态物体的渲染,以提高渲染效率。
[0033] 在本发明实施例中,如果确定出目标物体在第一视口相机中可见,则可以对目标物体进行渲染。在渲染的过程中,首先可以确定目标物体在场景视口中占据投影区域的面积,如果占据的面积小于第一预设阈值,则可以获取目标物体对应的面片贴图。该面片贴图也可以认为是目标物体的快照图像。可以理解的是,如果预先绘制并存储了目标物体对应的面片贴图,则可以直接获取该面片贴图。如果未预先绘制并存储目标物体对应的面片贴图,则可以绘制和存储目标物体对应的面片贴图,并使用该面片贴图。这里的面片贴图是指将目标物体单独按照当前第一视口相机的角度进行绘制得到的图像,可以将目标物体对应的面片贴图存储到额外的贴图上的图片数据中,该图片数据的像素格式可以是RGBA,A通道负责镂空效果。需要说明的是,后文将会介绍绘制面片贴图的具体实现方式,在此暂不赘述。
[0034] 上述确定目标物体在场景视口中占据投影区域的面积的过程可以实现为:确定目标物体对应的面片的边长;确定面片的中心到第一视口相机之间的距离;确定边长与距离之间的比值;若比值小于第一预设阈值,则获取目标物体对应的面片贴图。
[0035] 在实际应用中,当目标物体对应的面片的边长与面片的中心到第一视口相机之间的距离的比值小于第一预设阈值时,可以近似认为该目标物体在相机视口中的张角较小,那么可以采用快照对目标物体进行渲染。
[0036] 在上述过程中需要确定目标物体对应的面片的边长以及面片的中心位置,可以通过下面的方式确定面片的边长和中心位置:依照静态物体模型的包围盒和摆放位置,确定面片的边长和中心位置。如果对确定出的结果不满意,技术人员也可在编辑器中进行手动调整。
[0037] 目标物体对应的面片可以设置为正方形形状,可以将面片的边长设置为目标物体模型的包围盒的斜对角线长度的预设倍数,该预设倍数例如可以是1.05。面片得到中心位置可以设置为目标物体模型的包围盒的中心点在三维场景中的位置。可以理解的是,在本发明实施例中,默认的配置可以满足大多数情况的需要,实际工作中需要手动调整面片的边长和中心位置的静态物体较少,编辑阶段的工作量较小。
[0038] 在获取到目标物体对应的面片贴图之后,可以将目标物体对应的面片贴图绘制到场景视口中。
[0039] 需要说明的是,在本发明实施例中还可以获取目标物体对应的属性参数,该属性参数包括用于指示是否开启实时快照的标识,当目标物体对应的属性参数用于指示开启实时快照时,可以采用目标物体的快照对目标物体进行渲染,在默认的情况下可以设置每个静态物体都开启实时快照。对于某些重要的或者形状比较特殊的物体,可通过这些物体的属性参数关闭通过实时快照渲染,这样在游戏的运行期间可以完全按照普通渲染方式对这些物体进行渲染。
[0040] 下面将介绍绘制面片贴图的具体实现方式。在绘制面片贴图之前,需要预先创建一些在游戏运行期间实现快照相关信息的组织和管理功能的类,这些类主要可以包括ImposterManager类、ImposterImage类、ImposterData、ObjectImposterParam。下面先一一介绍一下这些类能够实现的功能。
[0041] 对于ImposterManager类,是全局分系统,为单例。ImposterManager类主要可以实现面片贴图的创建与删除,以及为目标物体分配图像阵列中的区域块。ImposterManager类还可以维护将目标物体的快照渲染到三维场景中使用的渲染材质。
[0042] ImposterManager类还可以存储与面片贴图相关的全局可配置参数,这些全局可配置参数可以包括面片贴图数目、每个面片贴图的大小,每个物体的面片贴图在图像阵列上所占区域的大小等。在默认的配置下,可以分配2张1024x1024大小的RGBA8图像阵列用于存储不同物体的面片贴图,可以以64x64像素为基本单位对每张图像阵列进行划分,这样可以得到16行16列的区域块,每个区域块对应一个静态物体的面片贴图。需要说明的是,在实际应用中还可以设置一张与上述图像阵列具有相同数量的像素的深度图。
[0043] 由于目标物体的贴图面片可以存储在图像阵列中,而图像阵列是一张大图,图像阵列被划分为多个区域块,不同区域块存储着不同物体的贴图面片。因此,在使用目标物体的贴图面片时,首先需要在图像阵列中定位到用于存储目标物体的贴图面片的区域块。ImposterData中可以存储目标物体对应的贴图信息,贴图信息包括用于指示目标物体对应的面片贴图在图像阵列中的存储位置的信息。因此可以从ImposterData中获取目标物体对应的贴图信息,根据目标物体对应的贴图信息,从图像阵列中获取目标物体对应的面片贴图。目标物体对应的贴图信息还可以包括面片贴图参数指针以及当前ImposterData连续未使用次数等信息。
[0044] 对于ImposterImage类,ImposterImage类对应一张面片贴图,同时也对应将面片贴图渲染到三维场景的一个绘制批次。ImposterImage类内部可以包含1个快照贴图对象、1组将快照贴图绘制到三维场景的顶点缓冲和索引缓冲。该快照贴图上的每个区域块对应一个ImposterData对象,可以由ImposterImage类负责维护和管理。
[0045] 在每帧渲染流程中,在面片贴图更新阶段,每个ImposterImage类可以收集需要重新更新的快照,将它们绘制到各自的区域块中。在三维场景渲染阶段,可以先将需要绘制到三维场景的快照的顶点位置和贴图纹理数据写入到顶点缓冲中,再按照统一的顺序将它们绘制到场景中。
[0046] 对于ObjectImposterParam,ObjectImposterParam是ImposterData中面片贴图参数指针所指向的对象,由每个使用快照的静态物体维护。通过该对象可关联到相应静态物体的快照参数、本身绘制的模型、材质、批次等信息。
[0047] 在本发明实施例中,可以预先创建用于存储多个物体面片贴图的图像阵列,图像阵列包括多个区域块,每个区域块用于存储一个物体的面片贴图;设置预设数量的面片贴图参数指针;为每个区域块分配预设数量的面片贴图参数指针中的一个指针,分配的面片贴图参数指针的初始指向为空;在任一区域块分配给任一物体之后,将任一区域块的面片贴图参数指针设置为指向任一物体;在任一区域块分配给任一物体之后,记录任一区域块中的物体对应的面片贴图的连续未使用次数。
[0048] 假设当前需要使用目标物体的面片贴图,预先未绘制目标物体的面片贴图,那么此时可以对目标物体的面片贴图进行绘制。在绘制之前,首先可以确定是否存在面片贴图参数指针为空的第一资源;若存在面片贴图参数指针为空的第一资源,将第一资源分配给目标物体,以在第一资源中绘制目标物体对应的面片贴图;若不存在面片贴图参数指针为空的第一资源,则确定面片贴图的连续未使用次数超过第二预设阈值的其他物体,将其他物体占用的第二资源分配给目标物体,以在第二资源中绘制目标物体对应的面片贴图。
[0049] 在实际应用中,可以优先将面片贴图参数指针为空的ImposterData分配给目标物体,若不存在面片贴图参数指针为空的ImposterData,则可以将连续未使用次数累计超过第二预设阈值的ImposterData分配给目标物体。第二预设阈值在本发明实施例中例如可以设置为100帧。如果没有可分配的ImposterData,则可以先按照普通绘制方式渲染目标物体。
[0050] 由于需要统计ImposterData的连续未使用次数,因此在每帧渲染时ImposterImage可以遍历该ImposterImage所管理的全部ImposterData,将不需要渲染到场景的ImposterData的连续未使用次数加1。如果在任一帧的渲染过程中使用到了某个物体对应的ImposterData,也可以将该ImposterData的连续未使用次数直接设置为0。
[0051] 对于目标物体和ImposterData关联关系的处理,当ImposterData分配给目标物体时,ImposterData中的面片贴图参数指针可以设置为指向目标物体的ObjectImposterParam,同时目标物体也可以记录对应的ImposterData在ImposterManager中的索引位置。当按照快照对目标物体进行渲染时,可以确认已分配给目标物体的ImposterData是否已经因为太久未使用而分配给了其他物体,这个过程可以通过判断ImposterData中的面片贴图参数指针是否仍指向目标物体的ObjectImposterParam实现。
在删除目标物体的快照时,也可以做此判断,即如果面片贴图参数指针仍指向目标物体,则可以将该面片贴图参数指针置空,这样面片贴图参数指针被置空的ImposterData就可以分配给其他物体。
[0052] 当需要采用快照渲染目标物体时,首先可以判断是否已为目标物体分配ImposterData,如果已分配ImposterData,那么可以判断已分配的ImposterData是否被分配给了其他物体,若已分配的ImposterData又被分配给了其他物体,则可以重新分配ImposterData给目标物体,由于新分配的ImposterData中不会存储有目标物体的快照,因此需要重新将目标物体的快照绘制在ImposterData对应的区域块中。
[0053] 如果已分配的ImposterData未被分配给其他物体,那么ImposterData中存储有目标物体的快照。可以直接使用ImposterData中存储的快照,也可以在满足一定条件下对快照进行更新再使用。基于此,可选地,可以确定当前第一视口相机的第一朝向角度与上一次对目标物体对应的面片贴图进行更新时第一视口相机的第二朝向角度之间的变化量;基于变化量,确定是否对目标物体对应的面片贴图进行更新;若变化量大于第三预设阈值,则对目标物体对应的面片贴图进行更新;若变化量小于或者等于第三预设阈值,则对目标物体对应的面片贴图的旋转姿态进行调整。
[0054] 在实际应用中,如果已分配的ImposterData未被分配给其他物体,则可以判断当前状态下和上次刷新快照时相机朝向的角度变化,若超过一定数值则可以刷新快照,否则可以仅只略微调整目标物体对应的面片的旋转姿态。
[0055] 可选地,上述确定当前第一视口相机的第一朝向角度与上一次对目标物体对应的面片贴图进行更新时第一视口相机的第二朝向角度之间的变化量的过程可以实现为:确定当前第一视口相机的第一朝向角度;确定上一次对目标物体对应的面片贴图进行更新时第一视口相机的第二朝向角度;确定第一朝向角度与第二朝向角度的数量积。相应地,还可以确定第三预设阈值的余弦值;若数量积小于余弦值,则对目标物体对应的面片贴图进行更新。
[0056] 上述数量积可以表示角度的余弦值,当数量积小于预设角度的余弦值时,表示第一视口相机的变化角度已变化超过该预设角度,可以刷新快照。其中,该预设角度在本发明实施例中例如可以设置为12度。
[0057] 在未绘制并存储目标物体的面片贴图或者需要对目标物体的面片贴图进行刷新的情况下,可选地,都可以采用下面的方式进行:确定第二视口相机的位置;通过目标物体对应的模型顶点数据、渲染材质以及渲染参数,绘制目标物体对应的面片贴图。
[0058] 在实际应用中,可以设置第二视口相机,该第二视口相机可以采用平行投影。可以将第二视口相机视域的长、宽设置为与目标物体的矩形面片的长、宽为相同的数值。第二视口相机的朝向、远近裁减面可以设置为与第一视口相机一致。第二视口相机的位置到目标物体的面片中心位置的向量即为第一视口相机到目标物体的面片中心位置的向量在第一视口相机的朝向上的投影。通过这样的方式可以确定出第二视口相机的位置。
[0059] 快照绘制视口可以根据该快照绘制区域在整个快照贴图的行列位置来计算。绘制快照时使用模型顶点数据,渲染材质,渲染参数与普通渲染时相同。
[0060] 在绘制面片贴图的具体内容之前,可以预先清理使用的区域块的颜色和深度。具体可以将深度图整体清空为1.0,将颜色图通过绘制方形面片的方式进行清空。在通过绘制方形面片的方式对颜色图清空的过程中,可以使用与正式绘制面片贴图时相同的场景视口,不读取深度值,且将颜色RGBA通道全部填充为0。
[0061] 可选地,对目标物体对应的面片贴图进行更新的过程也即快照面片顶点数据的计算过程可以实现为:确定面片贴图的局部坐标;确定世界变换矩阵;基于面片贴图的局部坐标以及世界变换矩阵,确定目标物体对应的面片贴图的顶点数据;基于顶点数据,对目标物体对应的面片贴图进行更新。
[0062] 在实际应用中,快照面片顶点的纹理坐标可以根据该快照绘制区域在整个快照贴图的行列位置来计算。快照面片顶点的位置坐标是世界空间下的坐标,可由局部坐标叠加世界变换矩阵计算。
[0063] 可选地,确定面片贴图的局部坐标的过程可以实现为:将面片贴图的四个顶点的z值设置为0,并以原点为中心且根据面片贴图的边长确定四个顶点的局部坐标。
[0064] 需要说明的是,快照面片在世界空间下的位置就是其中心点的位置,姿态为视口相机姿态四元数绕视口相机Y轴旋转180度。
[0065] 可选地,确定世界变换矩阵的过程可以实现为:获取第一视口相机的姿态;确定面片贴图的中心位置;基于第一视口相机的姿态以及面片贴图的中心位置,确定世界变换矩阵。
[0066] 可以理解的是,在本发明实施例中,可以采用矩形面片在模型空间下对称性的一种简化算法。在模型空间下可以将正方形面片的四个顶点位置作关于Y轴的对称交换,然后用相机姿态和快照面片中心的位置构成世界变换矩阵。对经过对称交换处理的四个顶点位置进行模型空间到世界空间的变换,就可以得到快照面片顶点在世界空间下的坐标。
[0067] 综上,如图2所示,在本发明实施例中可以获取目标物体,确定目标物体是否可以通过快照进行渲染,若可以通过快照进行渲染,则可以确定是否为目标物体分配了快照数据,若不可以通过快照进行渲染,则按照普通渲染方式对目标物体进行渲染。若已为目标物体分配快照数据,则可以判断快照数据是否仍然属于该目标物体,若未为目标物体分配快照数据,则可以为目标物体分配快照数据,并且如果判断分配成功,则可以重新绘制快照贴图,如果判断分配不成功,则可以按照普通渲染方式对目标物体进行渲染。在确定快照数据仍然属于目标物体之后,可以判断是否仅需要调整面片旋转姿态,如果不能仅调整面片旋转姿态,则可以执行重新绘制快照贴图的步骤,如果仅需要调整面片旋转姿态,则可以调整快照面片的旋转姿态。在重新绘制快照贴图或者调整快照面片的旋转姿态之后,可以将快照贴图绘制到三维场景中。
[0068] 在本发明实施例中,在渲染三维场景的过程中,当视口相机中查询到的静态物体比较多时,可以在整体上不影响美术效果的前提下简化绘制的顶点数据,对绘制批次进行合并,以提升渲染效率。
[0069] 采用本发明,可以通过矩形面片代替模型本身的顶点数据,减少绘制顶点数,提高渲染效率。对于位于相同快照贴图也即图像阵列中的面片贴图的物体,可以将这些物体的面片贴图合并到一组顶点缓冲中通过一次绘制操作进行绘制,从总体上可以减少绘制的次数。另外,可以对面片贴图预先进行光照处理,那么在图像阵列中保存的面片贴图已经是经过光照处理的结果,在将面片贴图绘制到三维场景中时,可以虚无再进行光照计算,节省了进行光照计算的计算开销。最后,通过本发明,在静态物体的绘制效果基本不受影响的情况下,能够显著降低渲染计算开销。
[0070] 以下将详细描述本发明的一个或多个实施例的图像渲染装置。本领域技术人员可以理解,这些图像渲染装置均可使用市售的硬件组件通过本方案所教导的步骤进行配置来构成。
[0071] 图3为本发明实施例提供的一种图像渲染装置的结构示意图,如图3所示,该装置包括:
[0072] 确定模块31,用于确定目标物体在第一视口相机中是否可见;
[0073] 计算模块32,用于若所述目标物体在所述第一视口相机中可见,则确定所述目标物体在场景视口中占据投影区域的面积;
[0074] 获取模块33,用于若所述面积小于第一预设阈值,则获取所述目标物体对应的面片贴图;
[0075] 绘制模块34,用于将所述目标物体对应的面片贴图绘制到所述场景视口。
[0076] 可选地,所述计算模块32,用于确定所述目标物体对应的面片的边长;确定所述面片的中心到所述第一视口相机之间的距离;确定所述边长与所述距离之间的比值;
[0077] 所述获取模块33,用于若所述比值小于第一预设阈值,则获取所述目标物体对应的面片贴图。
[0078] 可选地,所述获取模块33,用于:
[0079] 获取所述目标物体对应的贴图信息,所述贴图信息用于指示所述目标物体对应的面片贴图在图像阵列中的存储位置;
[0080] 根据所述贴图信息,获取所述目标物体对应的面片贴图。
[0081] 可选地,所述装置还包括:
[0082] 创建模块,用于预先创建用于存储多个物体面片贴图的图像阵列,所述图像阵列包括多个区域块,每个区域块用于存储一个物体的面片贴图;
[0083] 设置模块,用于设置预设数量的面片贴图参数指针;
[0084] 分配模块,用于为每个区域块分配所述预设数量的面片贴图参数指针中的一个指针,分配的面片贴图参数指针的初始指向为空;
[0085] 所述设置模块,用于在任一区域块分配给任一物体之后,将所述任一区域块的面片贴图参数指针设置为指向所述任一物体;
[0086] 在所述任一区域块分配给所述任一物体之后,记录所述任一区域块中的物体对应的面片贴图的连续未使用次数。
[0087] 可选地,所述获取模块33,用于:
[0088] 若未预先绘制所述目标物体对应的面片贴图,则确定是否存在面片贴图参数指针为空的第一资源;
[0089] 若存在面片贴图参数指针为空的第一资源,将所述第一资源分配给所述目标物体,以在所述第一资源中绘制所述目标物体对应的面片贴图;
[0090] 若不存在面片贴图参数指针为空的第一资源,则确定面片贴图的连续未使用次数超过第二预设阈值的其他物体,将所述其他物体占用的第二资源分配给所述目标物体,以在所述第二资源中绘制所述目标物体对应的面片贴图。
[0091] 可选地,所述装置还包括更新模块,所述更新模块,用于:
[0092] 确定当前第一视口相机的第一朝向角度与上一次对所述目标物体对应的面片贴图进行更新时所述第一视口相机的第二朝向角度之间的变化量;
[0093] 基于所述变化量,确定是否对所述目标物体对应的面片贴图进行更新;
[0094] 若所述变化量大于第三预设阈值,则对所述目标物体对应的面片贴图进行更新;
[0095] 若所述变化量小于或者等于所述第三预设阈值,则对所述目标物体对应的面片贴图的旋转姿态进行调整。
[0096] 可选地,所述更新模块,用于:
[0097] 确定当前第一视口相机的第一朝向角度;
[0098] 确定上一次对所述目标物体对应的面片贴图进行更新时所述第一视口相机的第二朝向角度;
[0099] 确定所述第一朝向角度与所述第二朝向角度的数量积;
[0100] 确定所述第三预设阈值的余弦值;
[0101] 若所述数量积小于所述余弦值,则对所述目标物体对应的面片贴图进行更新。
[0102] 可选地,所述更新模块,用于:
[0103] 确定面片贴图的局部坐标;
[0104] 确定世界变换矩阵;
[0105] 基于所述面片贴图的局部坐标以及所述世界变换矩阵,确定所述目标物体对应的面片贴图的顶点数据;
[0106] 基于所述顶点数据,对所述目标物体对应的面片贴图进行更新。
[0107] 可选地,所述更新模块,用于:
[0108] 将所述面片贴图的四个顶点的z值设置为0,并以原点为中心且根据所述面片贴图的边长确定所述四个顶点的局部坐标。
[0109] 可选地,所述更新模块,用于:
[0110] 获取所述第一视口相机的姿态;
[0111] 确定所述面片贴图的中心位置;
[0112] 基于所述第一视口相机的姿态以及所述面片贴图的中心位置,确定世界变换矩阵。
[0113] 可选地,所述获取模块33,用于:
[0114] 确定第二视口相机的位置;
[0115] 通过所述目标物体对应的模型顶点数据、渲染材质以及渲染参数,绘制所述目标物体对应的面片贴图。
[0116] 图3所示装置可以执行前述图1至图2所示实施例中提供的图像渲染方法,详细的执行过程和技术效果参见前述实施例中的描述,在此不再赘述。
[0117] 在一个可能的设计中,上述图3所示图像渲染装置的结构可实现为一电子设备,如图4所示,该电子设备可以包括:处理器91、存储器92。其中,所述存储器92上存储有可执行代码,当所述可执行代码被所述处理器91执行时,使所述处理器91至少可以实现如前述图1至图2所示实施例中提供的图像渲染方法。
[0118] 可选地,该电子设备中还可以包括通信接口93,用于与其他设备进行通信。
[0119] 另外,本发明实施例提供了一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器至少可以实现如前述图1至图2所示实施例中提供的图像渲染方法。
[0120] 根据需要,本发明各实施例的系统、方法和装置可以实现为纯粹的软件(例如用Java来编写的软件程序),也可以根据需要实现为纯粹的硬件(例如专用ASIC芯片或FPGA芯片),还可以实现为结合了软件和硬件的系统(例如存储有固定代码的固件系统或者带有通用存储器和处理器的系统)。
[0121] 以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所公开的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。要求保护的主题的范围仅由所附的权利要求进行限定。
[0122] 1、一种图像渲染方法,包括:
[0123] 确定目标物体在第一视口相机中是否可见;
[0124] 若所述目标物体在所述第一视口相机中可见,则确定所述目标物体在场景视口中占据投影区域的面积;
[0125] 若所述面积小于第一预设阈值,则获取所述目标物体对应的面片贴图;
[0126] 将所述目标物体对应的面片贴图绘制到所述场景视口。
[0127] 2、根据条款1所述的方法,所述确定所述目标物体在场景视口中占据投影区域的面积,包括:
[0128] 确定所述目标物体对应的面片的边长;
[0129] 确定所述面片的中心到所述第一视口相机之间的距离;
[0130] 确定所述边长与所述距离之间的比值;
[0131] 所述若所述面积小于第一预设阈值,则获取所述目标物体对应的面片贴图,包括:
[0132] 若所述比值小于第一预设阈值,则获取所述目标物体对应的面片贴图。
[0133] 3、根据条款1所述的方法,所述获取所述目标物体对应的面片贴图,包括:
[0134] 获取所述目标物体对应的贴图信息,所述贴图信息用于指示所述目标物体对应的面片贴图在图像阵列中的存储位置;
[0135] 根据所述贴图信息,获取所述目标物体对应的面片贴图。
[0136] 4、根据条款1所述的方法,所述方法还包括:
[0137] 预先创建用于存储多个物体面片贴图的图像阵列,所述图像阵列包括多个区域块,每个区域块用于存储一个物体的面片贴图;
[0138] 设置预设数量的面片贴图参数指针;
[0139] 为每个区域块分配所述预设数量的面片贴图参数指针中的一个指针,分配的面片贴图参数指针的初始指向为空;
[0140] 在任一区域块分配给任一物体之后,将所述任一区域块的面片贴图参数指针设置为指向所述任一物体;
[0141] 在所述任一区域块分配给所述任一物体之后,记录所述任一区域块中的物体对应的面片贴图的连续未使用次数。
[0142] 5、根据条款4所述的方法,所述获取所述目标物体对应的面片贴图,包括:
[0143] 若未预先绘制所述目标物体对应的面片贴图,则确定是否存在面片贴图参数指针为空的第一资源;
[0144] 若存在面片贴图参数指针为空的第一资源,将所述第一资源分配给所述目标物体,以在所述第一资源中绘制所述目标物体对应的面片贴图;
[0145] 若不存在面片贴图参数指针为空的第一资源,则确定面片贴图的连续未使用次数超过第二预设阈值的其他物体,将所述其他物体占用的第二资源分配给所述目标物体,以在所述第二资源中绘制所述目标物体对应的面片贴图。
[0146] 6、根据条款1所述的方法,在获取所述目标物体对应的面片贴图之前,所述方法还包括:
[0147] 确定当前第一视口相机的第一朝向角度与上一次对所述目标物体对应的面片贴图进行更新时所述第一视口相机的第二朝向角度之间的变化量;
[0148] 基于所述变化量,确定是否对所述目标物体对应的面片贴图进行更新;
[0149] 若所述变化量大于第三预设阈值,则对所述目标物体对应的面片贴图进行更新;
[0150] 若所述变化量小于或者等于所述第三预设阈值,则对所述目标物体对应的面片贴图的旋转姿态进行调整。
[0151] 7、根据条款6所述的方法,所述确定当前第一视口相机的第一朝向角度与上一次对所述目标物体对应的面片贴图进行更新时所述第一视口相机的第二朝向角度之间的变化量,包括:
[0152] 确定当前第一视口相机的第一朝向角度;
[0153] 确定上一次对所述目标物体对应的面片贴图进行更新时所述第一视口相机的第二朝向角度;
[0154] 确定所述第一朝向角度与所述第二朝向角度的数量积;
[0155] 所述若所述变化量大于第三预设阈值,则对所述目标物体对应的面片贴图进行更新,包括:
[0156] 确定所述第三预设阈值的余弦值;
[0157] 若所述数量积小于所述余弦值,则对所述目标物体对应的面片贴图进行更新。
[0158] 8、根据条款6所述的方法,所述对所述目标物体对应的面片贴图进行更新,包括:
[0159] 确定面片贴图的局部坐标;
[0160] 确定世界变换矩阵;
[0161] 基于所述面片贴图的局部坐标以及所述世界变换矩阵,确定所述目标物体对应的面片贴图的顶点数据;
[0162] 基于所述顶点数据,对所述目标物体对应的面片贴图进行更新。
[0163] 9、根据条款8所述的方法,所述确定面片贴图的局部坐标,包括:
[0164] 将所述面片贴图的四个顶点的z值设置为0,并以原点为中心且根据所述面片贴图的边长确定所述四个顶点的局部坐标。
[0165] 10、根据条款8所述的方法,所述确定世界变换矩阵,包括:
[0166] 获取所述第一视口相机的姿态;
[0167] 确定所述面片贴图的中心位置;
[0168] 基于所述第一视口相机的姿态以及所述面片贴图的中心位置,确定世界变换矩阵。
[0169] 11、根据条款1所述的方法,所述获取所述目标物体对应的面片贴图,包括:
[0170] 确定第二视口相机的位置;
[0171] 通过所述目标物体对应的模型顶点数据、渲染材质以及渲染参数,绘制所述目标物体对应的面片贴图。
[0172] 12、一种图像渲染装置,包括:
[0173] 确定模块,用于确定目标物体在第一视口相机中是否可见;
[0174] 计算模块,用于若所述目标物体在所述第一视口相机中可见,则确定所述目标物体在场景视口中占据投影区域的面积;
[0175] 获取模块,用于若所述面积小于第一预设阈值,则获取所述目标物体对应的面片贴图;
[0176] 绘制模块,用于将所述目标物体对应的面片贴图绘制到所述场景视口。
[0177] 13、根据条款12所述的装置,所述计算模块,用于确定所述目标物体对应的面片的边长;确定所述面片的中心到所述第一视口相机之间的距离;确定所述边长与所述距离之间的比值;
[0178] 所述获取模块,用于若所述比值小于第一预设阈值,则获取所述目标物体对应的面片贴图。
[0179] 14、根据条款12所述的装置,所述获取模块,用于:
[0180] 获取所述目标物体对应的贴图信息,所述贴图信息用于指示所述目标物体对应的面片贴图在图像阵列中的存储位置;
[0181] 根据所述贴图信息,获取所述目标物体对应的面片贴图。
[0182] 15、根据条款12所述的装置,所述装置还包括:
[0183] 创建模块,用于预先创建用于存储多个物体面片贴图的图像阵列,所述图像阵列包括多个区域块,每个区域块用于存储一个物体的面片贴图;
[0184] 设置模块,用于设置预设数量的面片贴图参数指针;
[0185] 分配模块,用于为每个区域块分配所述预设数量的面片贴图参数指针中的一个指针,分配的面片贴图参数指针的初始指向为空;
[0186] 所述设置模块,用于在任一区域块分配给任一物体之后,将所述任一区域块的面片贴图参数指针设置为指向所述任一物体;
[0187] 在所述任一区域块分配给所述任一物体之后,记录所述任一区域块中的物体对应的面片贴图的连续未使用次数。
[0188] 16、根据条款15所述的装置,所述获取模块,用于:
[0189] 若未预先绘制所述目标物体对应的面片贴图,则确定是否存在面片贴图参数指针为空的第一资源;
[0190] 若存在面片贴图参数指针为空的第一资源,将所述第一资源分配给所述目标物体,以在所述第一资源中绘制所述目标物体对应的面片贴图;
[0191] 若不存在面片贴图参数指针为空的第一资源,则确定面片贴图的连续未使用次数超过第二预设阈值的其他物体,将所述其他物体占用的第二资源分配给所述目标物体,以在所述第二资源中绘制所述目标物体对应的面片贴图。
[0192] 17、根据条款12所述的装置,所述装置还包括更新模块,所述更新模块,用于:
[0193] 确定当前第一视口相机的第一朝向角度与上一次对所述目标物体对应的面片贴图进行更新时所述第一视口相机的第二朝向角度之间的变化量;
[0194] 基于所述变化量,确定是否对所述目标物体对应的面片贴图进行更新;
[0195] 若所述变化量大于第三预设阈值,则对所述目标物体对应的面片贴图进行更新;
[0196] 若所述变化量小于或者等于所述第三预设阈值,则对所述目标物体对应的面片贴图的旋转姿态进行调整。
[0197] 18、根据条款17所述的装置,所述更新模块,用于:
[0198] 确定当前第一视口相机的第一朝向角度;
[0199] 确定上一次对所述目标物体对应的面片贴图进行更新时所述第一视口相机的第二朝向角度;
[0200] 确定所述第一朝向角度与所述第二朝向角度的数量积;
[0201] 确定所述第三预设阈值的余弦值;
[0202] 若所述数量积小于所述余弦值,则对所述目标物体对应的面片贴图进行更新。
[0203] 19、根据条款17所述的装置,所述更新模块,用于:
[0204] 确定面片贴图的局部坐标;
[0205] 确定世界变换矩阵;
[0206] 基于所述面片贴图的局部坐标以及所述世界变换矩阵,确定所述目标物体对应的面片贴图的顶点数据;
[0207] 基于所述顶点数据,对所述目标物体对应的面片贴图进行更新。
[0208] 20、根据条款19所述的装置,所述更新模块,用于:
[0209] 将所述面片贴图的四个顶点的z值设置为0,并以原点为中心且根据所述面片贴图的边长确定所述四个顶点的局部坐标。
[0210] 21、根据条款19所述的装置,所述更新模块,用于:
[0211] 获取所述第一视口相机的姿态;
[0212] 确定所述面片贴图的中心位置;
[0213] 基于所述第一视口相机的姿态以及所述面片贴图的中心位置,确定世界变换矩阵。
[0214] 22、根据条款12所述的装置,所述获取模块,用于:
[0215] 确定第二视口相机的位置;
[0216] 通过所述目标物体对应的模型顶点数据、渲染材质以及渲染参数,绘制所述目标物体对应的面片贴图。
[0217] 23、一种电子设备,包括:存储器、处理器;其中,所述存储器上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如条款1-11中任一项所述的图像渲染方法。
[0218] 24、一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如条款1-11中任一项所述的图像渲染方法。