一种地形纹理加载方法及相关装置与流程

文档序号:21781305发布日期:2020-08-07 20:07阅读:132来源:国知局
一种地形纹理加载方法及相关装置与流程

本申请涉及计算机技术领域,特别涉及一种地形纹理加载方法、地形纹理加载装置、服务器以及计算机可读存储介质。



背景技术:

随着信息技术的不断发展,电子游戏的硬件要求随着质量不断攀升。其中,在计算机中进行建模处理的过程使用的纹理贴图会占据较多的显存空间。目前,常用纹理映射技术处理大批量的纹理贴图。

进一步的,在地形渲染过程中,用于表现地形细节度的纹理贴图是由好几张不同的纹理贴图融合而成的,而根据细节度不同,需要的纹理贴图数量也不同。但对于要求细节度比较高的超大地形,所需的纹理贴图的总大小很有可能远远超过实际显存的大小。因此,现有技术中就需要应用虚拟纹理技术。

现有技术中,整个地形需要的一张超大纹理,该纹理的每个纹理映射细节级别切割成大小相同的小块纹理,一般该小块纹理大小为256x256像素。虚拟纹理有多个mipmap等级,每个mipmap等级可以认为是一张单独的纹理贴图,等级越高,则纹理贴图大小越小,低等级的mipmap等级贴图大小比较大,用于需要高精度贴图的情况下,比如渲染中离摄像机比较近的地形,相反,高等级的mipmap等级用于离像机比较远的地形。其中,低等级的mipmap等级加载的前提是已经加载了高等级的mipmap等级,比如需要加载mipmap等级3需要,那么必须要先加载mipmap等级4和mipmap等级5。

在实际渲染过程中,并不是地形所有区域都是可见的,并不需要加载全部的小块纹理,只需要加载实际需要的小块纹理。所有需要的小块纹理被存储在一张物理纹理中,这张物理纹理大小远小于虚拟纹理大小,同时这张物理纹理上的空间是可以被重用的,例如如果某个小块纹理不需要了,可以被卸载。

在渲染过程中,采样纹理时分为两步,首先查询对应虚拟纹理的间接纹理(indirectiontexture),得到实际对应的小块纹理在物理纹理中的位置,然后再采用物理纹理得到对应位置的像素值。如果采样时发现该纹理没有被加载到物理纹理当中去,则需要加载该纹理。加载纹理时,一般需要计算对应地形需要的虚拟纹理mipmap等级大小并加载对应的mipmap等级的小块纹理。

现有技术中,目前常用方案有两种,分别是megavirtualtexture(巨型虚拟纹理)和proceduralvirtualtexture(过程虚拟纹理)。其中,megavirtualtexture预先生成地形的小块纹理,然后实际需要的时候去加载。而proceduralvirtualtexture则是实时合成小块纹理。但是,megavirtualtexture缺点在于需要预先合成纹理并保存到磁盘当中,如果纹理较大的情况下,纹理大小可能达到上百g大小,极大地占用磁盘空间。proceduralvirtualtexture实时合成需要的纹理,如果需要合成的小块纹理数量过多,则影响运行时的程序性能。同时由于对于需要加载虚拟纹理的mipmap等级是在cpu上计算的,现有技术中只是一个较粗略的估计,并不能真实反映gpu实际需要的mipmap等级,存在误差,一般情况下,gpu需要的mipmap等级会更高,也就是实际只需要加载比计算结果更少数量的纹理。可见,现有技术均需要耗费巨大的显存空间,用于存放多余的纹理数据。

因此,如何解决游戏较大地形渲染过程中纹理贴图数量过多而显存不足的问题是本领域技术人员关注的重点问题。



技术实现要素:

本申请的目的是提供一种地形纹理加载方法、地形纹理加载装置、服务器以及计算机可读存储介质,通过首先对待渲染地形进行分块,然后对多层次细节地形,最后在该多层次细节地形中将不同mipmap等级的纹理同时加载在一个合成纹理中,以便将此时的地形根据距离远近加载不同细节程度的纹理,降低纹理加载的显存空间,提高处理性能。

为解决上述技术问题,本申请提供一种地形纹理加载方法,包括:

根据摄像机与地块的距离采用四叉树算法对待渲染地形进行分块,得到多层次细节地形;

根据所述多层次细节地形中每个地块与摄像机的距离计算出每个地块对应的mipmap等级;

根据所述mipmap等级对所述多层次细节地形中每个地块按照摄像机与地块的距离从近到远依次进行纹理合成,得到合成纹理;

将所述合成纹理作为物理纹理进行加载。

可选的,根据摄像机与地块的距离采用四叉树算法对待渲染地形进行分块,得到多层次细节地形,包括:

根据所述摄像机与地块的距离分批次将所述待渲染地形分成不同网格密度的多个地形块;

将所述不同网格密度的多个地形块进行合成得到所述多层次细节地形。

可选的,根据所述多层次细节地形中每个地块与摄像机的距离计算出每个地块对应的mipmap等级,包括:

计算所述摄像机与所述多层次细节地形中每个地块的目标距离;

根据预设距离表和所述目标距离对所述多层次细节地形中每个地块进行匹配,得到每个地块的mipmap等级。

可选的,根据所述mipmap等级对所述多层次细节地形中每个地块按照摄像机与地块的距离从近到远依次进行纹理合成,得到合成纹理,包括:

按照所述摄像机与地块的距离从近到远将所述多层次细节地形分为不同层次的多个地块集合;

根据所述mipmap等级对所述多个地块集合分别匹配对应的纹理数据;

将所有所述地块集合的纹理数据进行合成,得到所述合成纹理。

可选的,还包括:

根据所述合成纹理进行间接纹理更新处理得到间接纹理,并将所述间接纹理作为索引。

可选的,还包括:

使用所述物理纹理进行地形渲染处理。

可选的,还包括:

在对所述待渲染地形进行分块之前,在gpu中预加载最高级别mipmap等级对应的所有纹理。

本申请还提供一种地形纹理加载装置,包括:

地形分块模块,用于根据摄像机与地块的距离采用四叉树算法对待渲染地形进行分块,得到多层次细节地形;

mipmap等级获取模块,用于根据所述多层次细节地形中每个地块与摄像机的距离计算出每个地块对应的mipmap等级;

纹理合成模块,用于根据所述mipmap等级对所述多层次细节地形中每个地块按照摄像机与地块的距离从近到远依次进行纹理合成,得到合成纹理;

纹理加载模块,用于将所述合成纹理作为物理纹理进行加载。

本申请还提供一种服务器,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上所述的地形纹理加载方法的步骤。

本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的地形纹理加载方法的步骤。

本申请所提供的一种地形纹理加载方法,包括:根据摄像机与地块的距离采用四叉树算法对待渲染地形进行分块,得到多层次细节地形;根据所述多层次细节地形中每个地块与摄像机的距离计算出每个地块对应的mipmap等级;根据所述mipmap等级对所述多层次细节地形中每个地块按照摄像机与地块的距离从近到远依次进行纹理合成,得到合成纹理;将所述合成纹理作为物理纹理进行加载。

首先根据摄像机与地块之间的距离并采用四叉树算法将待渲染地形进行分块,得到多层次细节地形,并在根据每个地块与摄像机之间的距离计算出每个地块对应的mipmap等级,最后根据该mipmap等级按照从近到远的距离将所有纹理进行合成,得到合成纹理,也就是得到了一张拥有不同纹理细节的合成纹理,最后将该合成纹理作为物理纹理进行加载,而不是将同一mipmap等级的纹理直接加载在计算机的显存中,并且该合成纹理根据摄像机的距离设置了不同mipmap等级的纹理数据,使得增强地形细节度,同时减少需要采样的纹理贴图数量,降低显存的占用空间从而提高性能。

本申请还提供一种地形纹理加载装置、服务器以及计算机可读存储介质,具有以上有益效果,在此不做赘述。

附图说明

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

图1为本申请实施例所提供的一种地形纹理加载方法的流程图;

图2为本申请实施例所提供的一种地形纹理加载装置的结构示意图。

具体实施方式

本申请的核心是提供一种地形纹理加载方法、地形纹理加载装置、服务器以及计算机可读存储介质,通过首先对待渲染地形进行分块,然后对多层次细节地形,最后在该多层次细节地形中将不同mipmap等级的纹理同时加载在一个合成纹理中,以便将此时的地形根据距离远近加载不同细节程度的纹理,降低纹理加载的显存空间,提高处理性能。

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

现有技术中,目前常用方案有两种,分别是megavirtualtexture(巨型虚拟纹理)和proceduralvirtualtexture(过程虚拟纹理)。其中,megavirtualtexture预先生成地形的小块纹理,然后实际需要的时候去加载。而proceduralvirtualtexture则是实时合成小块纹理。但是,megavirtualtexture缺点在于需要预先合成纹理并保存到磁盘当中,如果纹理较大的情况下,纹理大小可能达到上百g大小,极大地占用磁盘空间。proceduralvirtualtexture实时合成需要的纹理,如果需要合成的小块纹理数量过多,则影响运行时的程序性能。同时由于对于需要加载虚拟纹理的mipmap等级是在cpu上计算的,现有技术中只是一个较粗略的估计,并不能真实反映gpu实际需要的mipmap等级,存在误差,一般情况下,gpu需要的mipmap等级会更高,也就是实际只需要加载比计算结果更少数量的纹理。可见,现有技术均需要耗费巨大的显存空间,用于存放多余的纹理数据。

因此,本申请提供一种地形纹理加载方法,首先根据摄像机与地块之间的距离并采用四叉树算法将待渲染地形进行分块,得到多层次细节地形,并在根据每个地块与摄像机之间的距离计算出每个地块对应的mipmap等级,最后根据该mipmap等级按照从近到远的距离将所有纹理进行合成,得到合成纹理,也就是得到了一张拥有不同纹理细节的合成纹理,最后将该合成纹理作为物理纹理进行加载,而不是将同一mipmap等级的纹理直接加载在计算机的显存中,并且该合成纹理根据摄像机的距离设置了不同mipmap等级的纹理数据,使得增强地形细节度,同时减少需要采样的纹理贴图数量,降低显存的占用空间从而提高性能。

请参考图1,图1为本申请实施例所提供的一种地形纹理加载方法的流程图。

本实施例中,该方法可以包括:

s101,根据摄像机与地块的距离采用四叉树算法对待渲染地形进行分块,得到多层次细节地形;

本步骤旨在对待渲染地形进行分块处理,得到多层次细节地形。其中,多层次细节地形主要指的是存在不同层次细节密度的地形。在计算机中的三维世界中,由于计算机性能是有限的,而显示的纹理会随着细节密度的增加需要占用更多的显存空间。因此,根据摄像机与地块之间的距离将待渲染地形进行分块,分为不同细节密度的地形,也就是多层次细节地形。

其中,四叉树算法也被称为q树(q-tree)。四叉树广泛应用于图像处理、空间数据索引、2d中的快速碰撞检测、存储稀疏数据等。四叉树(q-tree)是一种树形数据结构。四叉树的定义是:它的每个节点下至多可以有四个子节点,通常把一部分二维空间细分为四个象限或区域并把该区域里的相关信息存入到四叉树节点中。这个区域可以是正方形、矩形或是任意形状。其中,四叉树的每一个节点代表一个矩形区域,每一个矩形区域又可划分为四个小矩形区域,这四个小矩形区域作为四个子节点所代表的矩形区域。

可选的,本步骤可以包括:

步骤1,根据摄像机与地块的距离分批次将待渲染地形分成不同网格密度的多个地形块;

步骤2,将不同网格密度的多个地形块进行合成得到多层次细节地形。

可见,本可选方案主要是对如何进行分块进行说明。其中,首先根据摄像机与地块的距离将分批次的将待渲染地形分成不同细节密度的多个地形块,其中,每个地形块具有一种细节密度。最后,将不同细节密度的多个地形块进行合成,就得到的该多层次细节地形。

s102,根据多层次细节地形中每个地块与摄像机的距离计算出每个地块对应的mipmap等级;

在s101的基础上,本步骤旨在根据多层次细节地形中每个地块与摄像机之间的距离计算出每个地块对应的mipmap等级。也就是说将多层次细节地形中不同层次的地形分别计算出对应的最合适的mipmap等级。

例如,一个多层次细节地形中存在低细节密度地块、中细节密度地块以及高细节密度地块。然后,分别根据这三种层次细节密度的地块分别于摄像机之间的距离,计算出每种层次细节密度的地块对应的mipmap等级。也就是,低细节密度地块对应的一个mipmap等级,中细节密度地块对应的一个mipmap等级,高细节密度地块对应的一个mipmap等级。如此得到了每种细节密度地块分别对应的mipmap等级。

其中,mipmap是一种电脑图形图像技术,用于在三维图像的二维代替物中达到立体感效应。mipmap技术与材质贴图技术结合,根据距观看者远近距离的不同,以不同的分辨率将单一的材质贴图以多重图像的形式表现出来并代表平面纹理:尺寸最大的图像放在前面显著的位置,而相对较小的图像则后退到背景区域。每一个不同的尺寸等级定义成一个mipmap等级。

可选的,本步骤可以包括:

步骤1,计算摄像机与多层次细节地形中每个地块的目标距离;

步骤2,根据预设距离表和目标距离对多层次细节地形中每个地块进行匹配,得到每个地块的mipmap等级。

可见,本可选方案中主要是对如何计算出每个地块对应的mipmap等级做进一步说明。首先计算出摄像机与每个地块之间的目标距离。该目标距离可以是摄像机到该地块最近的一个点的距离,也可以是摄像机到该地块中点的距离,还可以是摄像机到该地块最远点的距离。然后,根据预设距离表将目标距离进行匹配,就可以得到每个地块对应的mipmap等级。

s103,根据mipmap等级对多层次细节地形中每个地块按照摄像机与地块的距离从近到远依次进行纹理合成,得到合成纹理;

在s102的基础上,本步骤旨在根据计算好的mipmap等级对该多层次细节地形中的每个地块进行纹理合成,得到合成纹理。也就是将该多层次细节地形中不同地块中不同mipmap等级的纹理进行合成,得到合成纹理。

例如,在多层次细节地形中存在三种层次细节的地块,分别是低细节密度地块、中细节密度地块以及高细节密度地块。这三种细节密度地块分别对应了不同的mipmap等级,然后根据不同的mipmap等级获取对应的不同的等级的纹理数据。而不是现有技术中,将所有mipmap等级的纹理均获取后都加载在显存中,占用过多的显存空间。因此,通过本步骤可以降低显存中加载纹理数据的空间,提高显存空间利用率。

可选的,本步骤可以包括:

步骤1,按照摄像机与地块的距离从近到远将多层次细节地形分为不同层次的多个地块集合;

步骤2,根据mipmap等级对多个地块集合分别匹配对应的纹理数据;

步骤3,将所有地块集合的纹理数据进行合成,得到合成纹理。

可见,本可选方案主要是对如何合成纹理进行说明。首先将所有地块分为不同细节密度层次的地块集合,其中,每个地块集合都对应了一个mipmap等级。然后,可以根据该mipmap等级加载对应的纹理数据。可以是,加载该mipmap等级对应的纹理数据。如果,此时显存空间大于预设空间时,也可以加载该mipmap等级对应的纹理数据,以及小于该mipmap等级所有mipmap等级的纹理数据,以便保持纹理数据的流畅加载。

s104,将合成纹理作为物理纹理进行加载。

在s103的基础上,本步骤旨在将合成纹理作为物理纹理进行加载,以便将待渲染地形进行加载。本步骤中采用的加载方法可以采用现有技术中提供的任意一种物理纹理加载的方法,在此不做具体限定。

可选的,本实施例还可以包括:

根据合成纹理进行间接纹理更新处理得到间接纹理,并将间接纹理作为索引。

可见,本可选方案根据该合成纹理进行间接纹理更新数据,得到间接纹理。其中,间接纹理是在渲染过程中,采样纹理时分为两步,首先查询对应虚拟纹理的间接纹理(indirectiontexture,如图2右下角图片所示),得到实际对应的小块纹理在物理纹理中的位置,然后再采用物理纹理得到对应位置的像素值。

可选的,本实施例还可以包括:

使用物理纹理进行地形渲染处理。

可见,通过本可选方案主要实现地形的渲染处理。也就是,最后使用该物理纹理实现地形的渲染处理。其中,地形渲染处理的处理方式q选择现有技术提供的任意一种渲染方式,在此不做赘述。

可选的,本实施例还可以包括:

在对待渲染地形进行分块之前,在gpu中预加载最高级别mipmap等级对应的所有纹理。

可见,本可选方案中主要是说明在对待渲染地形进行分块之前,在gpu中预加载最高等级对应的所有纹理,以便后续步骤中直接从gpu中获取到对应的纹理数据,而不用从硬盘中获取纹理数据,提高纹理数据获取的效率。

综上,本实施例首先根据摄像机与地块之间的距离并采用四叉树算法将待渲染地形进行分块,得到多层次细节地形,并在根据每个地块与摄像机之间的距离计算出每个地块对应的mipmap等级,最后根据该mipmap等级按照从近到远的距离将所有纹理进行合成,得到合成纹理,也就是得到了一张拥有不同纹理细节的合成纹理,最后将该合成纹理作为物理纹理进行加载,而不是将同一mipmap等级的纹理直接加载在计算机的显存中,并且该合成纹理根据摄像机的距离设置了不同mipmap等级的纹理数据,使得增强地形细节度,同时减少需要采样的纹理贴图数量,降低显存的占用空间从而提高性能。

以下通过一个具体的实施例,对本申请提供的一种地形纹理加载方法做进一步说明。

本实施例中,该方法可以包括:

步骤1,在gpu显存中预加载虚拟纹理的最高级别mipmap等级需要的所有小块纹理;其中,gpu(graphicsprocessingunit)指的是图形处理器。

步骤2,对于需要渲染的地形进行分块,根据可见性计算需要渲染的地形块;

步骤3,cpu计算需要加载的mipmap等级,加载与计算结果最接近的mipmap等级对应的小块纹理;

步骤4,cpu回读上一帧gpu需要加载的mipmap等级的计算结果;

步骤5,cpu处理回读结果,计算需要加载的mipmap等级对应的小块纹理;

步骤6,对距离最近的地形块按mipmap等级从高到低合成纹理,每帧只合成一张或几张纹理,最后加载到物理纹理同时更新间接纹理用于索引该纹理;

步骤7,gpu使用新加载的纹理去渲染地形;

步骤8,gpu计算需要加载的mipmap等级;执行步骤2。

可见,合成小块纹理实时分帧合成,按距离从近到远,mipmap等级从高到低合成,提高程序运行性能的同时减少对于实时渲染表现的影响。同时,预加载虚拟纹理最高等级的mipmap等级。cpu先预计算虚拟纹理需要加载的mipmap等级并加载与计算结果最接近的mipmap等级,然后gpu上计算虚拟纹理需要加载的mipmap等级,接着cpu在下一帧回读计算结果,合成并加载虚拟纹理的mipmap等级对应的小块纹理。可见,由于该虚拟纹理是实时合成的,不用增加磁盘的使用空间,同时是通过回读gpu中的mipmap等级结果,精确的加载了需要的mipmap等级,降低了显存的占用量的,同时提高了gpu显存的有效利用率。

综上,本实施例首先根据摄像机与地块之间的距离并采用四叉树算法将待渲染地形进行分块,得到多层次细节地形,并在根据每个地块与摄像机之间的距离计算出每个地块对应的mipmap等级,最后根据该mipmap等级按照从近到远的距离将所有纹理进行合成,得到合成纹理,也就是得到了一张拥有不同纹理细节的合成纹理,最后将该合成纹理作为物理纹理进行加载,而不是将同一mipmap等级的纹理直接加载在计算机的显存中,并且该合成纹理根据摄像机的距离设置了不同mipmap等级的纹理数据,使得增强地形细节度,同时减少需要采样的纹理贴图数量,降低显存的占用空间从而提高性能。

下面对本申请实施例提供的一种地形纹理加载装置进行介绍,下文描述的一种地形纹理加载装置与上文描述的一种地形纹理加载方法可相互对应参照。

请参考图2,图2为本申请实施例所提供的一种地形纹理加载装置的结构示意图。

本实施例中,该装置可以包括:

地形分块模块100,用于根据摄像机与地块的距离采用四叉树算法对待渲染地形进行分块,得到多层次细节地形;

mipmap等级获取模块200,用于根据多层次细节地形中每个地块与摄像机的距离计算出每个地块对应的mipmap等级;

纹理合成模块300,用于根据mipmap等级对多层次细节地形中每个地块按照摄像机与地块的距离从近到远依次进行纹理合成,得到合成纹理;

纹理加载模块400,用于将合成纹理作为物理纹理进行加载。

本申请实施例还提供一种服务器,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如以上实施例所述的地形纹理加载方法的步骤。

本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如以上实施例所述的地形纹理加载方法的步骤。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的一种地形纹理加载方法、地形纹理加载装置、服务器以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

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