三维城市模型重复纹理合并方法研究
2015-07-04詹勇重庆市勘测院重庆400020
詹勇(重庆市勘测院,重庆 400020)
三维城市模型重复纹理合并方法研究
詹勇∗
(重庆市勘测院,重庆 400020)
摘 要:由于现有三维引擎在处理重复纹理时,是对整张纹理进行重复,而不是对纹理中的部分内容进行重复,因此当纹理合并后,原来被用来重复贴图的单张纹理成了合并后纹理的一部分,而无法表示正确的重复贴图。本文针对该问题,研究了剖分模型、合并重复贴图以及RTT(Render To Texture)三种纹理合并方法,开展了对比试验。最后,在三维场景中开展了纹理合并实验,验证了合并纹理能有效地提高场景加载与渲染效率。
关键词:三维模型;重复纹理;纹理合并;帧率
1 引 言
城市级的三维模型数据通常达上百GB乃至TB 级,如何实现海量三维模型数据的快速加载与漫游一直是三维技术应用的关键问题,现有方法包括模型组织与优化、空间索引以及场景调度方法等[1]。影响三维场景渲染帧率的一个重要原因是纹理渲染状态的切换,图形处理单元GPU(Graphics Process Unit)是按批次对三角面进行渲染,只有渲染状态相同的三角面才会在同一批次被渲染[2]。因此,减少渲染状态的切换能够充分利用GPU性能。通过纹理的合并,可以减少场景使用的纹理数量,从而达到减少纹理状态切换,获得更高渲染帧率。
在纹理合并方法方面,国内外都有相应的研究[3,4],NVIDIA公司提供了texture tools工具箱[5]用于自动合并文件夹内纹理,戴雪峰[6]等研究了基于贪心算法和模拟退火算法的三维城市模型多纹理合并方法,纹理合并结果趋于全局最优,宋歌[2]等利用动态空间分配算法将模型中的纹理以最小空间代价合并为数个大纹理,杜志强[7]等提出了基于超面的建筑物纹理优化处理方法等。
本文在开展纹理合并的研究过程中,遇到了重复纹理的合并问题。由于现有三维引擎(如Direct3D和OpenGL等)的原因,纹理重复都是对整张纹理进行重复,而不是对纹理中的部分内容进行重复。因此当纹理合并后,原来被重复贴图的单张纹理成了合并后纹理的一部分,而无法表示正确的纹理坐标,因而无法表示正确的重复贴图。本文针对该问题,研究了剖分模型、合并重复贴图以及RTT(Render To Texture)三种纹理合并方法,开展了对比试验。最后,在三维场景中开展了纹理合并实验,验证了合并纹理能有效地提高场景加载与渲染效率。
本文涉及的部分术语定义如下:
合并前模型:是指按照一般三维建模规范建立的三维模型,包含一个几何模型及其采用的多张纹理,通常存在重复纹理贴图。
图片合并:仅处理模型图片,将多张图片合并成一张或几张图。
纹理合并:通过图片合并,并结合修改模型顶点或纹理坐标等,减少纹理使用数量。
重复纹理:本文所指的重复纹理不是指一张纹理被多个模型共用,而是指对一个面进行纹理贴图时,使用的纹理图片进行了多次重复(具体例子见2.2节),其基本特征是纹理坐标超出了[0,1]。
重复纹理合并:是指模型存在重复纹理贴图的情形下的纹理合并。
模型纹理分辨率:与影像的空间分辨率意义一致,描述模型使用纹理的清晰度。
2 纹理合并涉及的主要问题
2.1纹理合并及纹理坐标表示方法
图片合并的方法可采用手工、计算机自动拼图等方式,这里不做过多说明。难点是如何将合并前贴图的纹理坐标,修正成使用合并后贴图的纹理坐标。将图1中纹理A和纹理B经过图片合并得到新纹理C,使用纹理C替换纹理A和B时,使用纹理C的模型纹理坐标按如下公式进行。
图1 纹理合并后的坐标表示
其中,u1,v1是模型使用原图A或B的纹理坐标, u2,v2是使用纹理C的纹理坐标。ustart和vstart是A 或B在纹理C中的起始点位置,width和height分别是在纹理C的宽度和高度。
2.2重复纹理的坐标表示问题
例如对某一地面利用图1中纹理A,重复平铺得到了整个地面的纹理贴图,如图2(a),纹理坐标超出了[0,1],即为本文所指的重复纹理。利用合并后的贴图(图1中纹理C)中的右半部分来表示图2(a),即为本文所指的重复纹理坐标表示。
当纹理坐标超出[0,1],即产生纹理重复时,现有三维引擎(如Direct3D和OpenGL等)都是对整张纹理进行重复,而不会对纹理中的部分内容进行重复,即,利用图1中纹理C的右半部分,重复2次来表示图2(a),仅修改纹理坐标是不可行的,原因是引擎限制,不存在一个正确的纹理坐标实现纹理中部分内容的重复。若按公式(1)进行处理,得到的结果如图2(b)所示,与图2 (a)不同。因此,本文提出以下几种方法进行修正。
图2 纹理重复表示法
3 三维模型重复纹理合并
对于纹理坐标超出[0,1]的重复纹理,通过以下方式,将纹理坐标修正到[0,1],进一步按公式(1)或其他方式计算出采用新纹理后的纹理坐标,进而实现重复纹理合并。
3.1剖分模型法
剖分模型法是将模型按纹理坐标的重复次数进行剖分,保证纹理坐标的取值范围在[0,1]之间,如图3所示。矩形面重复了3次纹理单元,剖分模型法将矩形面按纹理坐标分成三部分,每部分分别进行一次纹理贴图。
图3 剖分前后的模型纹理坐标
具体方法包括手工和计算机处理。将合并前模型进行剖分后,在剖分面手工重复贴图即可。计算机处理则是根据重复纹理坐标对模型进行自动剖分,并采用式(1)进行坐标处理,达到纹理合并的目的。
3.2合并重复贴图
该方法是不改变模型几何结构,在图片合并时,先将使用的重复纹理贴图进行合并后,再进一步与其他图片进行合并,如图4所示。
图4 合并重复贴图后贴图
利用手工制作重复合并后的图,需要耗费较大的人工,增加了纹理合并的难度,因而在实际生产中运用较少,下文的RTT方法与该方法类似。
3.3RTT(Render to Texture)
RTT,即渲染至纹理技术。与合并重复贴图方法不同在于,前者是合并原始使用的纹理贴图,而RTT是计算出模型的每个几何面的纹理,然后通过排列算法,得到最终合并贴图。利用RTT技术合并纹理[8]有两个优点,一是程序自动处理,二是可将光照信息也同时渲染到贴图中去,整个模型只有一张纹理,此时模型纹理坐标范围为[0,1]。
使用RTT技术,通常产生一张合并的贴图。由于该图尺寸固定,会存在模型纹理分辨率较低的问题,而为了不损失原纹理的分辨率,则需要渲染出更大尺度的贴图,如4096∗4096。当三维场景中出现大量大尺寸贴图时,又会出现加载卡顿等问题。因此在模型制作阶段,需要限制单个模型的表面积和,保证有限的出图尺寸下,获得一定的模型纹理分辨率。
4 实验对比
对一个原始模型(如图5所示,一栋20层建筑,重复贴图20次),分别按剖分模型法和RTT方法进行比较(合并重复贴图方法与RTT方法从一定程度上说是类似的,此处仅采用RTT方法)。合并前模型的纹理为0.05 m,剖分模型法与RTT方法的模型纹理分辨率为0.05 m和0.07 m,保证了模型外观效果,图5是不同方法对应的几何模型与合并后纹理的效果。
进一步的,为模拟现实场景,便于比较不同方法的优劣,需要一定的数据规模。通过重命名模型名以及纹理名,设定每个模型与纹理不相同,同时设定模型和纹理不被共享(若共享为一个实例,失去数据规模的意义,与本实验目的不相符),通过平移,得到20∗20格网下,共400栋建筑。
实验平台采用重庆市勘测院自主研发的集景三维数字城市平台,使用计算机处理器为Intel(R) Core (TM)2 Duo CPU E8400.3.00GHZ,显卡为NVIDIA Ge-Force GTX 285,内存2GB进行测试,采用动态加载方式,实验场景如图6所示。
图5 不同方法对应的几何模型与合并后纹理
图6 实验场景
在保证加载方式相同的情况下,得到实验结果如表1所示。
实验结果 表1
可得出以下结论:
(1)合并纹理后的数据总量变大,特别是RTT方法,是合并前的6倍,主要是存在重复纹理,每个模型都被20次重复贴图,同时画布的留白也导致数据量上升,具体如图4所示。
(2)合并纹理后的场景帧率得到了提高。加载完场景模型后,两种方法的帧率都提高到60帧,证明了减少纹理个数对提高场景渲染效率的有效性,特别是剖分模型法,在加载时间、加载过程中以及加载完成后的帧率都获得了提升。
(3)RTT方法在模型加载过程的帧率降低,且加载时间长的原因是由于数据量增加导致了系统IO消耗,影响了场景加载效率。
5 三维大场景中使用RTT纹理合并实验
与剖分模型法相比,RTT技术由计算机自动完成,极大减少人工作量,应在实际生产中优先采用。在实际环境中,如上述实验中所展现的高重复贴图率较少,同时,由于数码相机获取的纹理清晰度很高,在应用中并不需要如此高的纹理分辨率,一般达到0.1 m以上即能满足应用需求,从而使得在RTT过程中可减小合并后的纹理尺寸,达到减小总数据量的目的。因此,本文进一步开展了在实际三维大场景中,利用RTT技术合并重复贴图实验。
数据来源为重庆某场景的三维城市模型,范围为2.2 km2。合并前每个模型平均使用约5张纹理,合并后为1张纹理。合并前后的模型纹理分辨率都不低于0.1 m。实验的加载场景如图7所示,结果如表2所示,经测试,发现合并前后的渲染状态数从4 926降低到930个,加载当前场景的时间从38 s缩短到13 s,帧率从14帧提高到30帧。
实验结果 表2
图7 三维大场景中使用纹理合并方法
6 结 论
本文研究了重复纹理的合并原理,给出了三种重复纹理的合并方法,开展了纹理合并实验,验证了合并纹理对于提升场景帧率的有效性。此外,在纹理合并方法的选择和应用上,还需进一步考虑:
对于城市级的三维模型,数据的集成量通常达到上百GB,纹理的数据量通常占到70%以上,因此在自动化的算法选择上,需要考虑到算法的效率;
在纹理更新方面,由于纹理的合并,在需要更新未合并前的某个小纹理时,需要同步更新合并后的大纹理,更新复杂度增加。
最后,合并纹理的方式是提高三维场景加载和渲染效率的方法之一,还可以从模型的LOD建立、场景的调度组织等方面提高三维场景的加载效率。
参考文献
[1] 冯琰,郭容寰,汪旻琦等.三维城市模型数据组织与管理方法研究[J].测绘科学,2011,36(1):215~217.
[2] 宋歌,杨红雨.基于纹理集的大规模场景模型优化算法[J].计算机工程与设计,2011,32(9):3120~3122.
[3] Carr N A,John H.Meshed atlases for real-time procedural solid texturing[J].ACM transactions on graphics,2002,21 (2):106~131.
[4] Buchholz H,Dollner J.View-dependent rendering of multiresolution texture-atlases[C].Minneapolis,MN,USA:IEEE COMPUTER SOC,2005.
[5] http:/ / www.nvidia.cn/ object/ nv _ texture _ tools.html.2015:2015.
[6] 戴雪峰,熊汉江,龚健雅.一种三维城市模型多纹理自动合并方法[J].武汉大学学报·信息科学版,2015,40 (3):347~353.
[7] 杜志强,罗盼,朱晓玲等.基于超面的建筑物纹理优化处理方法[J].武汉大学学报·信息科学版,2014,39(12): 1401~1406.
[8] 李芳.3ds max6标准教材[M].北京:中国电力出版社, 2004.
Research on Method of Merging Texture for 3D City Models
Zhan Yong
(Chongqing Survey Institute,Chongqing 400020,China)
Abstract:When 3D engine process repeated texture,it repeats the whole one,not the parts of texture.so when textures merged,the original single one which used to repeat becomes part of the merged texture.In this situation,the correct repeat cannot be expressed.To solve the problem,this paper introduces three merging methods for 3D city models, such as splitting model,combining repeated textures and rendering to texture,and the differences of these three methods are compared.At last,experiments on texture merging are carried out in large 3D city scene,and results show that texture merging can effectively improves the efficiency of models loading and rending.
Key words:three-dimensional model;repeated texture;texture merging;frame rate
文章编号:1672-8262(2015)06-17-04中图分类号:P208.1
文献标识码:A
收稿日期:∗2015—07—22
作者简介:詹勇(1987—),男,工程师,硕士,主要从事三维地理信息系统原理及应用研究工作。
基金项目:重庆市应用开发计划项目(cstc2014yykfB40004)