CN102663801B - 一种提高三维模型渲染性能的方法 - Google Patents
一种提高三维模型渲染性能的方法 Download PDFInfo
- Publication number
- CN102663801B CN102663801B CN201210116987.4A CN201210116987A CN102663801B CN 102663801 B CN102663801 B CN 102663801B CN 201210116987 A CN201210116987 A CN 201210116987A CN 102663801 B CN102663801 B CN 102663801B
- Authority
- CN
- China
- Prior art keywords
- texture
- model
- enters
- binary tree
- cluster
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Image Generation (AREA)
Abstract
本发明公开了一种提高三维模型渲染性能的方法,包括步骤:将有共用纹理的模型进行合并得到合并后的模型;将合并后的模型的内部纹理进行合并;将对内部纹理进行合并处理后的模型进行多细节层次LOD处理;将进行过多细节层次LOD处理的模型划分到不同的模型瓦片中去,对所得到的模型瓦片进行基于R树的分块划分。采用本发明提供的技术方案,减少了渲染批次,同时也减少渲染状态的切换,能够有效提高渲染性能。
Description
技术领域
本发明涉及一种提高三维模型渲染性能的方法。
背景技术
在三维数字城市应用中,高效率、实时渲染海量城市模型数据是一个比较困难的问题。由于普通计算机显卡硬件性能有限,在软件层面去优化海量城市模型数据的渲染效率,就成了比较迫切的问题。
发明内容
本发明的目的是提供一种在软件层面上优化海量城市模型数据的渲染效率,提高三维模型渲染性能的方法
本发明提供了一种提高三维模型渲染性能的方法,包括步骤:将有共用纹理的模型进行合并得到合并后的模型;将合并后的模型的内部纹理进行合并;将对内部纹理进行合并处理后的模型进行多细节层次LOD处理;将进行过多细节层次LOD处理的模型划分到不同的模型瓦片中去,对所得到的模型瓦片进行基于R树的分块划分。
本发明的提高三维模型渲染性能的方法,在将有共用纹理的模型进行合并的步骤中,采用了如下聚类算法:
开始以unvisited的任意一个点出发,寻找到该点的距离在eps范围内的所有附近点,并且对返回的结果按照聚类的收敛因子k_mat+k_dis降序排序;如果该点的是核心点,那么创建一个新的聚类Cluster,并将该点标记为vistied,然后将聚类附近符合条件的邻居点加入到该聚类中,同时判断该聚类是否已经满足数据大小小于MaxClusterMeshDataSize,如果大于该阈值那么停止创建该聚类,否则继续递归评估刚才加入到聚类的中未被标记为已访问的点,直到该聚类满足条件或者该聚类中的所有点标记为visited;如果该点不是核心点,暂时将其标记为为噪声点。重复遍历数据集中所有标记为unvisited的点,直到数据集中所有点标记为visited;如果所有的点已经被访问则结束,否则取下一个unvisited的点,进行如上步骤;其中,eps为两点之间的最大距离;k_mat为任意两个模型的材质重合度的计算因子,其公式为:k_mat=1–(不同材质的子网格数量/所有材质的子网格数量);k_dis为空间距离的聚类因子,其公式为:k_dis=1-(dis/far_distance),dis为两个模型中心点之间的空间距离,far_distance为模型可以聚合在一起的最大距离;聚类的最大模型数据大小相加为MaxClusterMeshDataSize。
本发明的提高三维模型渲染性能的方法,将合并后的模型的内部纹理进行合并的步骤进一步包括:扫描模型所分解成的网格,记录网格中各三角面的纹理坐标、纹理参数和纹理名称;将不同尺寸的纹理合并成大纹理;重新绘制新纹理,修改网格中的纹理坐标和纹理名称。
本发明的提高三维模型渲染性能的方法,进一步包括:遍历网格三角面,收集待合并的纹理,记录各纹理的尺寸,地址映射模式,并将待合并的纹理保存到纹理列表中,对列表中的纹理,按照尺寸由大到小进行排序。
本发明的提高三维模型渲染性能的方法,将不同尺寸的纹理合并成大纹理的步骤中,采用了如下算法:
a,创建一棵二叉树;
b,判断纹理列表中所有纹理是否都已经被处理,如果是,则进入i,否则,进入c;
c,从纹理列表中按顺序取下一张纹理;
d,按照插入算法,尝试将取下的纹理插入到二叉树中,并记录返回值;
e,判断返回值是否为真,如果是,则进入f,否则,进入g;
f,将取下的纹理插入到二叉树中,标记该纹理为已处理
g,判断取下的纹理是否为列表中最后一张纹理,如果是,则进入h,否则进入c;
h,将二叉树保存到二叉树列表中,创建一棵新的二叉树代替旧的二叉树;
i,结束。
本发明的提高三维模型渲染性能的方法,所述插入算法如下:
a,判断二叉树根结点的左右子树是否都不为空,如果是,则,否则,进入b;
b,尝试将纹理插入到根结点左子树中;
c,判断是否插入成功,如果是,则进入m,否则进入d;
d,尝试将纹理插入到根结点右子树中
e,判断插入是否成功,如果是,则进入m,否则进入f;
f,判断当前结点是否已被结点占用,如果是,则进入n,否则进入g;
g,判断当前结点尺寸大小是否小于插入的纹理尺寸大小,如果是,则进入n,否则进入h;
h,判断当前结点尺寸刚好与纹理尺寸相同,如果是,则进入j,否则进入k;
j,在当前结点位置插入纹理;
k,将当前结点一分为二,进入l;
l,将纹理插入到当前结点左子树中,进入m;
m,返回真;
n,返回假。
本发明的提高三维模型渲染性能的方法,进一步包括:
a,判断所述二叉树列表是否为空,如果是,则进入e,否则,进入b;
b,从所述二叉树列表中取出一棵二叉树,进入c;
c,按照前序遍历二叉树,根据二叉树中对纹理的组织,将一棵二叉树中的所有纹理合并到一张大纹理中,进入d;
d,修改与这棵二叉树中纹理相关的网格中的纹理坐标、纹理地址模式和纹理名称,进入a;
e,结束。
本发明的提高三维模型渲染性能的方法,多细节层次LOD处理包括对网格MESH的多细节层次LOD处理和对纹理的LOD处理。
本发明的提高三维模型渲染性能的方法,对网格MESH的多细节层次LOD处理使用的算法如下:
a,遍历模型所分解成的网格中的所有三角面,找出所有共用边,计算出共用边所在的两个三角形的夹角和共用边的长度,根据夹角越大、长度越短权值越大的原则,设定边的权值,并将边放入排序队列中;
b,循环从队列中取出权值最大的边,将边剔除,合并边所在的两个三角形面为一个三角形面,重新计算所有共用边的权值,并放入队列中;
c,重复上述步骤,直到三角面数降到指定要求的值为止;
d,将符合三角面数要求的网格MESH导出到指定目录。
本发明的提高三维模型渲染性能的方法,对纹理的LOD处理进一步包括如下步骤:
读取并解析模型的脚本文件,获取纹理集合;
遍历集合,获取纹理的宽度width、高度height值,设定LOD级别level、缩放比例scale,计算纹理的缩放比例公式为scale=2^(-level),则当前级别的LOD纹理大小为width=width*scale,height=height*scale,然后按计算好的缩放比例将纹理图片导出到指定目录;
在纹理图片按LOD级别处理完成之后,计算每个级别的LOD距离,第0级的LOD距离zerodistance计算公式为:zerodistance=(height>width?height:width)*0.25,高级别的计算公式为,distance=zerodistance*2^level,并将相关信息保存到脚本文件和配置文件中。
本发明的提高三维模型渲染性能的方法,还包括建立模型瓦片索引文件的步骤,对所得到的模型瓦片进行基于R树的分块划分的步骤进一步包括:解析模型瓦片索引文件构建R树,解析R树叶子节点,生成叶子节点索引文件并打包叶子节点对应的模型数据;其中,R树是B树向多维空间发展的另一种形式,它将空间对象按范围划分,每个结点都对应一个区域和一个磁盘页,非叶子结点的磁盘页中存储其所有子结点的区域范围,非叶子结点的所有子结点的区域都落在它的区域范围之内;叶结点的磁盘页中存储其区域范围之内的所有空间对象的外接矩形。
本发明的技术效果在于,经过本发明提供的技术方案的处理,减少了渲染批次,同时也减少渲染状态的切换,能够有效提高渲染性能。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明的一个具体实施例的示意图;
图2为本发明的一个具体实施例中所使用的聚类算法的实现流程图;
图3为本发明的一个具体实施例中扫描网格纪录参数步骤具体实现的流程图;
图4为本发明的一个具体实施例中所使用的二叉树算法的实现流程图;
图5为本发明的一个具体实施例中所使用的插入算法的实现流程图;
图6为本发明的一个具体实施例中重新绘制新纹理修改参数步骤具体实现的流程图;
图7为本发明的一个具体实施例中对网格MESH进行LOD处理步骤所使用算法的实现流程图;
图8为本发明的一个具体实施例中模型及R树节点空间分布情况示意图;
图9为本发明的一个具体实施例中与附图9的示例相应的R树结构示意图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
以下将结合说明书附图,详细描述本发明。
如图1所示,本发明提供了一种提高三维模型渲染性能的方法,包括步骤:将有共用纹理的模型进行合并得到合并后的模型;将合并后的模型的内部纹理进行合并;将对内部纹理进行合并处理后的模型进行多细节层次LOD处理;将进行过多细节层次LOD处理的模型划分到不同的模型瓦片中去,对所得到的模型瓦片进行基于R树的分块划分。
合并有共用纹理的几个小模型为一个大模型。在三维建模过程中,对一些外观相似的小模型,经常会让他们共用一些纹理。这一步需要把这些有共用纹理的小模型合并起来。
模型数据合并规则。城市建筑在分布上同一区域的建筑可能会存在大量相似的情况,比如同一小区内的建筑,同一科技广场的建筑,这些建筑在外形和风格上都会相近或者相似。因此,这些建筑模型可能使用相同的模型或者贴图材质。
数据流由内存交换到显存的过程中,一次提交适量的顶点索引数据流,而不是大量零碎的数据流,能达到比较好的性能。在实际的测试过程中,一次提交的数据流为1M至2M(1M大小的顶点索引数据大概对应的三角面为35000个三角面左右),在CPU数据交换延迟和渲染性能达到一个比较好的平衡点,能有效在CPU和GPU之间进行数据同步。
模型数据合并规则,优先合并具有相同贴图材质的建筑模型并且在空间上分布上比较相邻的建筑模型。本发明采用改进的DBSCAN(Density-Based Spatial Clustering of Applications withNoise),DBSCAN是一个比较有代表性的基于密度的聚类算法,从而在合并模型数据的时候得到一个近似最优解。
模型数据合并。为了能将空间上邻近并且材质重复度高的模型数据进行归类。需要采用数据挖掘中的聚类方法。所谓聚类(Clustering)是将一组对象分成若干个类,使得同一类中的对象尽量相似,不同的类中的对象尽量相异。
本发明采用改进的DBSCAN(Density-Based Spatial Clustering ofApplications with Noise),DBSCAN是一个比较有代表性的基于密度的聚类算法。聚类的epsilon由空间距离和材质重合度计算出来因子。由于本发明所用的聚类算法与传统空间数据聚类算法不同,聚类因子的收敛条件为同一簇(Clustering)中的模型数据占用存储空间的大小不能超过设定的阈值,而不是传统方法中的元素最大聚类数目。
一个建筑模型通常包含多个材质,那么一个模型就需要分解成多个子网格(SubMesh),通常情况下一个子网格对应一张纹理贴图。因此,任意两个模型的材质重合度的计算因子公式为:k_mat=1–(不同材质的子网格数量/所有材质的子网格数量)。
模型聚类的空间距离因子,模型可以聚合在一起的最大距离far_distance作为空间距离的最大阈值因子,超过这个阈值因子的模型数据都不能归类到一起。因此空间距离的聚类因子的计算公式为:k_dis=1-(dis/far_distance)dis为两个模型中心点之间的空间距离。
聚类归类的收敛聚类因子计算,k=k_mat+k_dis,两个模型之间聚类因子的值越大,表示该模型为同一聚类的概率越大。
对模型空间聚类算法的描述如下:
输入:包含n个模型对象(模型位置,OBB外接矩形,模型数据大小)的数据集,聚类参数:两点之间的最大距离ε(eps),最小簇数目大小MinPts,聚类的最大模型数据大小相加为MaxClusterMeshDataSize。
输出:按照参数生成聚类的簇Cluster
描述:根据模型聚类需求改进的DBSCAN,聚类的是否是核心点,根据该点所有距离在eps范围内的点的数目大于MinPts。
如图2所示,算法开始以unvisited的任意一个点出发,寻找到该点的距离在eps范围内的所有附近点,并且对返回的结果按照聚类的收敛因子(k=k_mat+k_dis)降序排序;如果该点的是核心点,那么创建一个新的聚类Cluster,并将该点标记为vistied,然后将聚类附近符合条件的邻居点加入到该聚类中,同时判断该聚类是否已经满足数据大小小于MaxClusterMeshDataSize,如果大于该阈值那么停止创建该聚类,否则继续递归评估刚才加入到聚类的中未被标记为vistied的点,直到该聚类满足条件或者该聚类中的所有点标记为visited;如果该点不是核心点,暂时将其标记为为噪声点。重复遍历数据集中所有标记为unvisited的点,直到数据集中所有点标记为visited。
单个模型内部纹理的合并。在建模过程中,为了真实,高精度地表达模型建筑,经常用很多小的纹理图片细致地表达模型的各个部分。但这些小的纹理,一张就至少是一个批次,纹理多了非常影响渲染性能。为提高渲染效率,在渲染之前需要对模型纹理数据做预处理,先将这些若干小纹理合并到大纹理。具体步骤包括:扫描网格(mesh),记录网格中三角面的纹理坐标,纹理参数,纹理名称;将若干纹理合并成大纹理;根据合并结果,重新绘出新纹理,调整网格中三角面的纹理坐标,纹理参数,纹理名称。
扫描网格,记录网格中各三角面的纹理坐标,纹理参数,纹理名称。这一步主要是记录是否有重复纹理。通常纹理uv坐标在[0,1]范围之内,这个时候,纹理的尺寸就是图片实际尺寸。也有超出这一范围的,这一般是重复纹理,这种情况下,合并时需要将纹理展示,因此纹理的尺寸是图片实际尺寸乘以展开次数。如图3所示,遍历网格三角面,收集待合并的纹理,记录各纹理的尺寸,地址映射模式,并将待合并的纹理保存到纹理列表中,对列表中的纹理,按照尺寸由大到小进行排序。
将不同尺寸的纹理合并成几张大纹理。将不同尺寸的小图片拼在大图片上的算法有很多。在这种情况中,由于纹理图片尺寸都是2的幂,如64,256,512等,相对比较规则,采用了比较简单的二叉树算法,算法流程如图4所示,
a,创建一棵二叉树;
b,判断纹理列表中所有纹理是否都已经被处理,如果是,则进入i,否则,进入c;
c,从纹理列表中按顺序取下一张纹理;
d,按照插入算法,尝试将取下的纹理插入到二叉树中,并记录返回值;
e,判断返回值是否为真,如果是,则进入f,否则,进入g;
f,将取下的纹理插入到二叉树中,标记该纹理为已处理
g,判断取下的纹理是否为列表中最后一张纹理,如果是,则进入h,否则进入c;
h,将二叉树保存到二叉树列表中,创建一棵新的二叉树代替旧的二叉树;
i,结束。
上面流程图中提到的插入算法,具体实现流程如图5所示,
a,判断二叉树根结点的左右子树是否都不为空,如果是,则,否则,进入b;
b,尝试将纹理插入到根结点左子树中;
c,判断是否插入成功,如果是,则进入m,否则进入d;
d,尝试将纹理插入到根结点右子树中
e,判断插入是否成功,如果是,则进入m,否则进入f;
f,判断当前结点是否已被结点占用,如果是,则进入n,否则进入g;
g,判断当前结点尺寸大小是否小于插入的纹理尺寸大小,如果是,则进入n,否则进入h;
h,判断当前结点尺寸刚好与纹理尺寸相同,如果是,则进入j,否则进入k;
j,在当前结点位置插入纹理;
k,将当前结点一分为二,进入l;
l,将纹理插入到当前结点左子树中,进入m;
m,返回真;
n,返回假。
重新绘制新纹理,修改网格中纹理坐标,纹理名称。在前面产生了一个二叉树列表treeList,该列表中每一个二叉树对应了一个合并出来的大纹理。只需要递归遍历该二差树,就可以按二差树的组织结构把插入到这棵树中的纹理绘制在一张大纹理上。具体流程如图6所示,
a,判断所述二叉树列表是否为空,如果是,则进入e,否则,进入b;
b,从所述二叉树列表中取出一棵二叉树,进入c;
c,按照前序遍历二叉树,根据二叉树中对纹理的组织,将一棵二叉树中的所有纹理合并到一张大纹理中,进入d;
d,修改与这棵二叉树中纹理相关的网格中的纹理坐标、纹理地址模式和纹理名称,进入a;
e,结束。
模型的LOD处理。衡量一个3d渲染引擎性能的好坏,往往会将能渲染的最大三角面数作为一个重要标准,而在引擎的性能基本稳定的前提下,如何最大限度的减少要渲染的三角面数就成了一个必须要考虑的问题,在本发明中,采用了mesh LOD和纹理LOD双管齐下的策略。
MESH的LOD处理。因为UGLOBE作为三维数据展示平台,可以进行大规模的城市级别的模型数据浏览,所以MESH的LOD就很有必要,这里采用的原理是通过剔除相邻两个三角形的共用边来实现两个三角形的合并简化,具体算法如图7所示:遍历网格中的所有三角面,找出所有共用边,计算出共用边所在的两个三角形的夹角和共用边的长度,根据夹角越大、长度越短权值越大的原则,设定边的权值,并将边放入排序队列中;循环从队列中取出权值最大的边,将边剔除,合并边所在的两个三角形面为一个三角形面。重新计算所有共用边的权值,并放入队列中;重复上述步骤,直到三角面数降到指定要求的值为止。
纹理的LOD处理。通过纹理的LOD处理,可以根据在场景中与相机的距离进行纹理级别切换,实现纹理由远及近从模糊变清晰的浏览效果,既可以提高浏览体验,又可以有效降低对内存和显存的占用,提高渲染性能。流程如下:
读取并解析模型的脚本文件,获取纹理集合;
遍历集合,获取纹理的宽度width、高度height值,设定LOD级别level、缩放比例scale,计算纹理的缩放比例公式为scale=2^(-level),则当前级别的LOD纹理大小为width=width*scale,height=height*scale,然后按计算好的缩放比例将纹理图片导出到指定目录;
在纹理图片按LOD级别处理完成之后,计算每个级别的LOD距离,第0级的LOD距离zerodistance计算公式为:zerodistance=(height>width?height:width)*0.25,高级别的计算公式为,distance=zerodistance*2^level,并将相关信息保存到脚本文件和配置文件中。
模型瓦片基于R树的分块划分。经过以上几步处理后的模型数据会被划分到不同的模型瓦片中去,这些模型瓦片空间范围相同位置相邻。由于现实中建筑物分布不均匀,所以导致不同模型瓦片中划分的模型个数不可控。UGLOBE为了实现更高速有效的模型调度对模型瓦片采取了基于R树的进一步分块划分。
R树是B树向多维空间发展的另一种形式,它将空间对象按范围划分,每个结点都对应一个区域和一个磁盘页,非叶子结点的磁盘页中存储其所有子结点的区域范围,非叶子结点的所有子结点的区域都落在它的区域范围之内;叶结点的磁盘页中存储其区域范围之内的所有空间对象的外接矩形。每个结点所能拥有的子结点数目有上、下限,下限保证对磁盘空间的有效利用,上限保证每个结点对应一个磁盘页,当插入新的结点导致某结点要求的空间大于一个磁盘页时,该结点一分为二。R树是一种动态索引结构,即:它的查询可与插入或删除同时进行,而且不需要定期地对树结构进行重新组织。当更新一个关系并且在这个关系上正在做扫描时,如果更新影响到了扫描操作的任何一个页,需要检查扫描并且修复它。
模型瓦片R树分块主要分为两步:第一步,解析模型瓦片索引文件构建R树;第二步,解析R树叶子节点,生成叶子节点索引文件并打包叶子节点对应的模型数据。
解析模型瓦片索引文件构建R树。每个模型瓦片都对应一个XML索引文件,索引文件中保存着瓦片中所有模型的名字、位置、包围盒、纹理LOD等相关属性信息。将解析得到的模型插入的R树中,通过对节点的合并和分裂保持树的平衡。其中模型数据保存在叶子节点中,记录着模型的相关属性信息;中间节点记录着其包含的子节点和子节点的MBR(最小外包矩形)。图8、9给出了模型瓦片R树空间划分的例子,其中模型用黑色圆点表示;R树节点用矩形框表示。模型插入时查找根节点中包含模型的坐标的索引项,若有多个则选择其中之一,否则选择加入该对象后起MBR面积扩大最少的索引项。以此类推,继续查找被选择索引的对应子节点直至叶子节点层,并插入对象。
解析R树叶子节点生成叶子节点索引文件打包模型数据。将R树叶子节点中保存的所有模型信息按照一定组织结构生成一个索引文件,作为模型调度的最小单位。
在生成索引文件的同时也会对R树叶子节点中保存的模型数据进行打包处理。其中所有模型的Mesh数据、材质脚本数据、第二级LOD纹理数据会被压缩成一个ZIP包,而第一级和第零级LOD纹理则单独压缩成一个ZIP包。
总之,经过本发明提供的技术方案的处理,减少了渲染批次,同时也减少渲染状态的切换,能够有效提高渲染性能。
Claims (10)
1.一种提高三维模型渲染性能的方法,其特征在于,包括步骤:将有共用纹理的模型进行合并得到合并后的模型;将合并后的模型的内部纹理进行合并;将对内部纹理进行合并处理后的模型进行多细节层次LOD处理;将进行过多细节层次LOD处理的模型划分到不同的模型瓦片中去,对所得到的模型瓦片进行基于R树的分块划分,
在所述将有共用纹理的模型进行合并的步骤中,采用了如下聚类算法:
开始以unvisited的任意一个点出发,寻找到该点的距离在eps范围内的所有附近点,并且对返回的结果按照聚类的收敛因子k_mat+k_dis降序排序;
如果该点的是核心点,那么创建一个新的聚类Cluster,并将该点标记为vistied,然后将聚类附近符合条件的邻居点加入到该聚类中,同时判断该聚类是否已经满足数据大小小于MaxClusterMeshDataSize,如果大于该阈值那么停止创建该聚类,否则继续递归评估刚才加入到聚类的中未被标记为已访问的点,直到该聚类满足条件或者该聚类中的所有点标记为visited;
如果该点不是核心点,暂时将其标记为为噪声点,重复遍历数据集中所有标记为unvisited的点,直到数据集中所有点标记为visited;
如果所有的点已经被访问则结束,否则取下一个unvisited的点,进行如上步骤;
其中,eps为两点之间的最大距离;k_mat为任意两个模型的材质重合度的计算因子,其公式为:k_mat=1–(不同材质的子网格数量/所有材质的子网格数量);k_dis为空间距离的聚类因子,其公式为:k_dis=1-(dis/far_distance),dis为两个模型中心点之间的空间距离,far_distance为模型可以聚合在一起的最大距离;聚类的最大模型数据大小相加为MaxClusterMeshDataSize。
2.如权利要求1所述的方法,其特征在于,将合并后的模型的内部纹 理进行合并的步骤进一步包括:
扫描模型所分解成的网格,记录网格中各三角面的纹理坐标、纹理参数和纹理名称;将不同尺寸的纹理合并成大纹理;重新绘制新纹理,修改网格中的纹理坐标和纹理名称。
3.如权利要求2所述的方法,其特征在于,进一步包括:遍历网格三角面,收集待合并的纹理,记录各纹理的尺寸,地址映射模式,并将待合并的纹理保存到纹理列表中,对列表中的纹理,按照尺寸由大到小进行排序。
4.如权利要求3所述的方法,其特征在于,将不同尺寸的纹理合并成大纹理的步骤中,采用了如下算法:
a,创建一棵二叉树;
b,判断纹理列表中所有纹理是否都已经被处理,如果是,则进入i,否则,进入c;
c,从纹理列表中按顺序取下一张纹理;
d,按照插入算法,尝试将取下的纹理插入到二叉树中,并记录返回值;
e,判断返回值是否为真,如果是,则进入f,否则,进入g;
f,将取下的纹理插入到二叉树中,标记该纹理为已处理
g,判断取下的纹理是否为列表中最后一张纹理,如果是,则进入h,否则进入c;
h,将二叉树保存到二叉树列表中,创建一棵新的二叉树代替旧的二叉树;
i,结束。
5.如权利要求4所述的方法,其特征在于,所述插入算法如下:
a,判断二叉树根结点的左右子树是否都不为空,如果是,则,否则,进入b;
b,尝试将纹理插入到根结点左子树中;
c,判断是否插入成功,如果是,则进入m,否则进入d;
d,尝试将纹理插入到根结点右子树中
e,判断插入是否成功,如果是,则进入m,否则进入f;
f,判断当前结点是否已被结点占用,如果是,则进入n,否则进入g;
g,判断当前结点尺寸大小是否小于插入的纹理尺寸大小,如果是,则进入n,否则进入h;
h,判断当前结点尺寸刚好与纹理尺寸相同,如果是,则进入j,否则进入k;
j,在当前结点位置插入纹理;
k,将当前结点一分为二,进入l;
l,将纹理插入到当前结点左子树中,进入m;
m,返回真;
n,返回假。
6.如权利要求4所述的方法,其特征在于,进一步包括:
a,判断所述二叉树列表是否为空,如果是,则进入e,否则,进入b;
b,从所述二叉树列表中取出一棵二叉树,进入c;
c,按照前序遍历二叉树,根据二叉树中对纹理的组织,将一棵二叉树中的所有纹理合并到一张大纹理中,进入d;
d,修改与这棵二叉树中纹理相关的网格中的纹理坐标、纹理地址模式和纹理名称,进入a;
e,结束。
7.如权利要求1所述的方法,其特征在于,多细节层次LOD处理包括对网格MESH的多细节层次LOD处理和对纹理的LOD处理。
8.如权利要求7所述的方法,其特征在于,对网格MESH的多细节层次LOD处理使用的算法如下:
a,遍历模型所分解成的网格中的所有三角面,找出所有共用边,计算出共用边所在的两个三角形的夹角和共用边的长度,根据夹角越大、长度越短权值越大的原则,设定边的权值,并将边放入排序队列中;
b,循环从队列中取出权值最大的边,将边剔除,合并边所在的两个三角形面为一个三角形面,重新计算所有共用边的权值,并放入队列中;
c,重复上述步骤,直到三角面数降到指定要求的值为止;
d,将符合三角面数要求的网格MESH导出到指定目录。
9.如权利要求7所述的方法,其特征在于,对纹理的LOD处理进一步包括如下步骤:
读取并解析模型的脚本文件,获取纹理集合;
遍历集合,获取纹理的宽度width、高度height值,设定LOD级别level、缩放比例scale,计算纹理的缩放比例公式为scale=2^(-level),则当前级别的LOD纹理大小为width=width*scale,height=height*scale,然后按计算好的缩放比例将纹理图片导出到指定目录;
在纹理图片按LOD级别处理完成之后,计算每个级别的LOD距离,第0级的LOD距离zerodistance计算公式为:zerodistance=(height>width?height:width)*0.25,高级别的计算公式为,distance=zerodistance*2^level,并将相关信息保存到脚本文件和配置文件中。
10.如权利要求1所述的方法,其特征在于,还包括建立模型瓦片索引文件的步骤,对所得到的模型瓦片进行基于R树的分块划分的步骤进一步包括:解析模型瓦片索引文件构建R树,解析R树叶子节点,生成叶子节点索引文件并打包叶子节点对应的模型数据;其中,R树是B树向多维空间发展的另一种形式,它将空间对象按范围划分,每个结点都对应一个区域和一个磁盘页,非叶子结点的磁盘页中存储其所有子结点的区域范围,非叶子结点的所有子结点的区域都落在它的区域范围之内;叶结点的磁盘页中存储其区域范围之内的所有空间对象的外接矩形。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210116987.4A CN102663801B (zh) | 2012-04-19 | 2012-04-19 | 一种提高三维模型渲染性能的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210116987.4A CN102663801B (zh) | 2012-04-19 | 2012-04-19 | 一种提高三维模型渲染性能的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102663801A CN102663801A (zh) | 2012-09-12 |
CN102663801B true CN102663801B (zh) | 2015-07-01 |
Family
ID=46773278
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210116987.4A Active CN102663801B (zh) | 2012-04-19 | 2012-04-19 | 一种提高三维模型渲染性能的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102663801B (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103106689B (zh) * | 2013-02-28 | 2015-07-08 | 中铁第四勘察设计院集团有限公司 | 一种全球层次细节网格三维地形图像叠置方法 |
CN103886635B (zh) * | 2014-04-18 | 2017-02-15 | 重庆市勘测院 | 基于面聚类的自适应lod模型构建方法 |
CN103927424B (zh) * | 2014-05-05 | 2017-08-11 | 曾志明 | 利用体网格简化建筑三维模型结构的方法 |
CN104134201B (zh) * | 2014-07-31 | 2017-03-29 | 广东威创视讯科技股份有限公司 | 纹理图像拼接的方法和装置 |
CN107111896B (zh) * | 2014-09-30 | 2020-12-08 | Cae有限公司 | 更新损坏增强三维多边形网格 |
CN106296779B (zh) * | 2015-05-19 | 2019-04-23 | 深圳市腾讯计算机系统有限公司 | 一种三维模型渲染显示方法及系统 |
CN105023234B (zh) * | 2015-06-29 | 2018-02-23 | 嘉兴慧康智能科技有限公司 | 基于嵌入式系统存储优化的图形加速方法 |
CN107194982B (zh) * | 2016-03-15 | 2021-07-27 | 斑马智行网络(香港)有限公司 | 创建纹理图集和纹理图集等待集合的方法、装置和设备 |
CN106327572A (zh) * | 2016-08-23 | 2017-01-11 | 网易(杭州)网络有限公司 | 一种三维场景中模型合并的方法及装置 |
CN106296791A (zh) * | 2016-08-25 | 2017-01-04 | 浙江科澜信息技术有限公司 | 一种面向大场景渲染的高效纹理优化方法 |
CN106570922A (zh) * | 2016-08-25 | 2017-04-19 | 浙江科澜信息技术有限公司 | 一种提高三维模型渲染性能的方法 |
CN106384386B (zh) * | 2016-10-08 | 2019-05-03 | 广州市香港科大霍英东研究院 | Lod模型生成中网格处理方法、系统以及3d重建方法和系统 |
CN107248187B (zh) * | 2017-05-22 | 2020-12-08 | 武汉地大信息工程股份有限公司 | 一种快速三维模型纹理切割重组的方法 |
JP6802393B2 (ja) * | 2017-06-09 | 2020-12-16 | 株式会社ソニー・インタラクティブエンタテインメント | 中心窩レンダリングシステムにおける、遅延ライティングの最適化、パーティクルの中心窩適応、及びシミュレーションモデル |
CN107330846B (zh) * | 2017-06-16 | 2019-07-30 | 浙江大学 | 一种基于屏幕块对的双目渲染流水线流程与方法 |
CN107767449B (zh) * | 2017-10-16 | 2020-12-18 | 苏州蜗牛数字科技股份有限公司 | 一种基于球面顶点的球体区域划分方法 |
CN107845135B (zh) * | 2017-11-15 | 2020-11-20 | 山东师范大学 | 一种三维仿真模型及模型库的构建方法及装置 |
CN110019400B (zh) * | 2017-12-25 | 2021-01-12 | 深圳云天励飞技术有限公司 | 数据存储方法、电子设备及存储介质 |
CN109745704B (zh) * | 2018-11-19 | 2022-09-09 | 苏州蜗牛数字科技股份有限公司 | 一种体素地形的管理方法 |
CN110276820B (zh) * | 2019-06-24 | 2022-12-23 | 重庆梅安森科技股份有限公司 | 基于lod组织与调度方法的gis模型优化方法及系统 |
CN110570507B (zh) * | 2019-09-11 | 2023-09-19 | 珠海金山数字网络科技有限公司 | 一种图像渲染方法及装置 |
CN110544291B (zh) * | 2019-09-11 | 2023-05-09 | 珠海金山数字网络科技有限公司 | 一种图像渲染方法及装置 |
CN111028361B (zh) * | 2019-11-18 | 2023-05-02 | 杭州群核信息技术有限公司 | 三维模型及材质合并方法、装置、终端、存储介质以及渲染方法 |
CN112132111A (zh) * | 2020-10-10 | 2020-12-25 | 安徽江淮汽车集团股份有限公司 | 泊车典型场景的提取方法、设备、存储介质及装置 |
CN112587921A (zh) * | 2020-12-16 | 2021-04-02 | 成都完美时空网络技术有限公司 | 模型处理方法和装置、电子设备和存储介质 |
CN113256803A (zh) * | 2021-06-23 | 2021-08-13 | 合肥量圳建筑科技有限公司 | 一种数据压缩方法、装置、设备及存储介质 |
CN113658327A (zh) * | 2021-08-10 | 2021-11-16 | 煤炭科学研究总院 | 煤矿三维模型数据的轻量化方法和装置 |
CN117953181B (zh) * | 2024-03-27 | 2024-06-21 | 江苏狄诺尼信息技术有限责任公司 | 一种面向web3d的顶点分层与增量式lod方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101136107A (zh) * | 2006-08-29 | 2008-03-05 | 三星电子株式会社 | 减小功耗的细节级别值计算方法和介质以及3维渲染系统 |
EP2323051A1 (en) * | 2009-10-23 | 2011-05-18 | Y.UPPIES' SERVICES S.p.a. | Method and system for detecting and displaying graphical models and alphanumeric data |
CN102289839A (zh) * | 2011-08-04 | 2011-12-21 | 天津中科遥感信息技术有限公司 | 一种面向三维数字城市的高效多细节层次渲染方法 |
-
2012
- 2012-04-19 CN CN201210116987.4A patent/CN102663801B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101136107A (zh) * | 2006-08-29 | 2008-03-05 | 三星电子株式会社 | 减小功耗的细节级别值计算方法和介质以及3维渲染系统 |
EP2323051A1 (en) * | 2009-10-23 | 2011-05-18 | Y.UPPIES' SERVICES S.p.a. | Method and system for detecting and displaying graphical models and alphanumeric data |
CN102289839A (zh) * | 2011-08-04 | 2011-12-21 | 天津中科遥感信息技术有限公司 | 一种面向三维数字城市的高效多细节层次渲染方法 |
Non-Patent Citations (3)
Title |
---|
基于点簇合并的多边形表面模型简化算法研究;吴勃;《航空学报》;20031130;第24卷(第6期);573-576 * |
基于犚树索引的三维场景细节层次自适应控制方法;龚俊;《测绘学报》;20110831;第40卷(第4期);531-534 * |
基于纹理集的大规模场景模型优化算法;宋歌;《计算机工程与设计》;20110930;第32卷(第9期);3119-3123 * |
Also Published As
Publication number | Publication date |
---|---|
CN102663801A (zh) | 2012-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102663801B (zh) | 一种提高三维模型渲染性能的方法 | |
CN101996242B (zh) | 基于三维r树索引扩展结构的三维城市模型自适应方法 | |
Lindstrom et al. | Visualization of large terrains made easy | |
US8570322B2 (en) | Method, system, and computer program product for efficient ray tracing of micropolygon geometry | |
CN103093499B (zh) | 一种适用于网络传输的城市三维模型数据组织方法 | |
CN105261066B (zh) | 一种三维地理信息系统实时绘制多线程分配与控制方法 | |
US8952964B2 (en) | Generating animated voronoi treemaps to visualize dynamic hierarchical data with node insertion | |
TW201403542A (zh) | 圖形處理單元中3d加速結構之完全並列原地建構 | |
CN102663800A (zh) | 一种顾及城市意象的城市建筑综合与渲染的方法 | |
CN104699946B (zh) | 一种游戏场景的管理方法及装置 | |
CN108388642A (zh) | 一种子图查询方法、装置及计算机可读存储介质 | |
CN101408990B (zh) | 一种城市建筑模型的渐进压缩和传输方法 | |
CN109118588B (zh) | 一种基于块分解的彩色lod模型自动生成方法 | |
CN101692230A (zh) | 顾及多细节层次的三维r树空间索引方法 | |
CN113268557B (zh) | 一种适应显示导向型可视化分析的快速的空间索引方法 | |
CN102158533B (zh) | 基于QoS的分布式web服务选择方法 | |
CN116036604B (zh) | 数据处理方法、装置、计算机及可读存储介质 | |
CN104573140A (zh) | 一种应用于虚拟仿真的分层动态路径规划方法 | |
CN103345507B (zh) | 一种基于碰撞盒原理动态加载三维地图的方法 | |
CN110287508A (zh) | 一种多源三维城市模型的可视化融合系统 | |
CN113468286A (zh) | 一种基于三角面片个数划分的三维金字塔构建方法 | |
Gross et al. | Fast and Efficient Nearest Neighbor Search for Particle Simulations. | |
KR20090020924A (ko) | 3차원 광선 추적 시스템에서 적응형 다중 계층 케이디-트리구조 알고리즘을 이용한 광선 추적 방법 및 장치 | |
Zhang et al. | A geometry and texture coupled flexible generalization of urban building models | |
CN105138607B (zh) | 一种基于混合粒度分布式内存网格索引的knn查询方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
PP01 | Preservation of patent right | ||
PP01 | Preservation of patent right |
Effective date of registration: 20211115 Granted publication date: 20150701 |