胡军强
(福建江夏学院,福州 350108)
2006年3月,Google公司推出了完全免费的Google Sketch Up建模软件。该建模软件是一个建筑草图软件,能使用户快速建立简单的3D建筑模型(Collada模型),而且它还包含了一个插件,允许Google Earth用户直接将Collada模型导入Google Earth中,并与Google Earth中的三维地形数据整合,实现虚拟环境的构建。
然而,Google Sketch Up对规则构造物(如建筑模型)的建模较为方便,而在制作线形复杂多变的模型时则较为烦琐。因此,建立复杂的Collada模型可以借助于建模功能强大的3ds Max,Maya等进行建模,然后转换为Collada模型。
本文以此为出发点,详细分析如何利用当前格式的3D模型向Collada模型转换。
目前,对各种各样三维数据格式的转换方法有很多,主要分为2种类型:商业的模型转换工具和自主开发的转换程序。
商业的模型转换软件如3D Trans Vidia、Converter、3D Explorer等简单易用,效率很高,然而在转换3D文件的时候,只能保存和转换模型的几何信息,而所有的纹理信息则在转换过程中全部丢失[1]。
自主开发的转换程序的主要原理是:将被转换的三维数据通过解析程序提取关键要素,然后按要求转化为其它三维数据的对应关键元素并构建虚拟系统。然而,有些三维软件如3Ds Max生成的文件格式难以被程序全部解析,而且依靠解析文件获取建模信息的方法最终并没有生成三维模型[2];利用3Ds Max中模型数据的方法是将其导出为3DS、VRML、OBJ等文件格式,然后在虚拟现实系统中解析这些文件格式,但这种方法在导出过程中模型信息不能被全部保存,会损失部分模型信息[3]。
Google Earth构建的虚拟环境中的模型只能是Collada模型或kmz文件(包含有Collada模型与kml文件),而3Dtrans Vidia等软件不支持Collada模型与kmz文件,难以符合虚拟环境所需三维模型的要求;程序转换模式中的几种方法都是通过提取三维模型中的关键元素而重建虚拟系统,最终并没有生成三维模型,也不适用于本虚拟系统的需求。因此,笔者选择通过三维建模软件多次转换方式生成Collada模型或kmz文件。
综合三维模型转换方式的优点与本论文模型转换的目的,本节设计一种三维模型转换方案,如图1所示。其中,各种DCC(Dimension Content Creator三维内容制作软件)生成的模型首先转化成通用的3D交互格式,然后经三维模型数据转换器转换并修改后生成kmz文件(包含有kml文件与Collada模型)。数据转换器是指具体的三维建模转换过程。由于原模型格式不同,具体的转换过程也不同。
本文设计图1所示方案将不同格式的三维模型转换生成Collada模型,其理由如下:3DS文件都是比较通用的3D交换格式。3Ds Max、Maya等软件创建的原文件的数据结构复杂,对其文件直接进行转化将会十分困难。在其转化前先进行模型预处理,即转化为文件格式相对简单的VRML文件或者3DS文件。这2种格式作为中介进行三维建筑模型的转化将大大提高转化效率[4]。
图1 三维模型转换方案设计图
三维数据的直接转换模式就是通过三维软件系统自己建立的数据格式进行转换。在这种模式下,异构数据格式经专门的数据转换工具进行格式转换后复制到当前系统文件中[5]。本文即以这种转换模式将Maya生成的OBJ模型转换为Collada模型(即kmz文件)。
根据上节对三维模型转换方法与方案的研究,笔者设计了一种3DS-Collada三维模型转换的具体流程。图2为转换流程图。
图2 转换流程图
下面对转换流程中用到的三维建模工具和三维模型格式做个简单介绍。
(1)Maya创建的原始文件OBJ文件为文本类型,结构非常简单,保存的是一些多边形的信息,诸如顶点几何坐标、纹理坐标,点与点如何连线组成线、面等等,所以适合在应用程序中读取或进行3D文件格式转换[1]。
(2)3Ds Max可导入OBJ文件,经过对OBJ模型进行UV贴图等调整后,可导出生成3DS文件。3DS也是一种三维模型交换格式。
(3)kmz是符合zip压缩的文件格式,kmz文件比kml文件功能强大,可以包含kml文件及Collada模型文件的信息。解压后文件的典型结构如下图3所示。在doc.kml中存放kml描述,在Textures.txt存放纹理数据,在models文件夹中存放模型(DAE模型、位图等)。Python语言自带有zip压缩模块Zip File,可以很方便地实现zip压缩。
(4)Collada文件是Google Earth4采用三维模型文件格式,其后缀为dae。当从Sketch Up中直接获取模型时,模型即以此文件格式存放。对于需要重复构建的模型,可以通过一次建模,然后借助在kml文件中对ID号的引用实现多个实例的显示。
图3 KMZ文件夹结构图
3DS-Collada三维模型转换流程中包括2个主要转换步骤,下面针对这2个步骤具体操做过程作个介绍。
Maya软件建模所得的原始模型为OBJ格式,导入3Ds Max中进行坐标微调与UV贴图后,可导出3DS格式的模型。这一步骤成败的关键在于如何正确在3Ds Max给OBJ模型重新进行UV贴图。
UV贴图是计算机图形学中的术语,三维空间中的X、Y、Z坐标用来描述空间位置,而UV用来描述贴图的位置。因为贴图都是一张平面图粘附到一个几何形体上的,UV用来表述该平面图与几何形体的具体对应关系。
3D贴图实际上是将二维图形贴到三维物体上,所以为了控制二维图形在三维物体上的位置,定义了贴图坐标,U与X对应,V与Y对应。
对OBJ文件进行UV贴图时可能会碰到以下问题,应该注意:
(1)在材质球上添加棋盘格,从模型上显示,在一系列的UV(黑白的棋盘格)中,所有的表面都必须有同样的尺寸,因此,当浏览模型时,那些小方块应该是相同大小的。另外,也应该尽量避免拉伸。棋盘格应该越接近正方形越好。Maya和3Ds Max中的unflod功能可以帮助实现这一点。
(2)在贴图中,贴图的空间应该充分利用。所以要尽量找到最好的UV排列方法将UV排满。
(3)尽最大努力把模型边缘连接好,这样才能避免贴图的接缝问题。同时在剪开UV的时候要注意接缝的位置。
(4)UV最好不要重叠,不要超出UV编辑框。
(5)UV贴图必须同OBJ模型放在同一个文件夹下,否则导出的3DS模型没有质材。
3DS模型导入Sketch Up中之后,可能要对模型做一些修改和调整,才能生成符合Google Earth环境的三维模型,方法如下。
(1)修改建筑物。大多建筑物的模型顶部都没有进行贴图,可能因为顶部材质难以采集,也有可能是大多漫游都不会看到顶部,所以为了减小模型的数量,顶部省略了材质贴图。屋顶纹理借助Google Earth抓图解决,导入的模型可以在Sketch Up中再次贴图。
(2)调整模型大小。转换后的模型大小不一定与Google Earth中的环境匹配,因此模型在上载到Google Earth之前必须调整大小。在Google Earth确定好模型所处位置,通过GE接口导入一个当前视口中的图像,模型根据图像所显示的位置大小进行调整。
由于Google Earth图像仅提供构造物的平面信息,而不具有高程信息,因此简易的建筑模型高度应与建筑平面尺寸保持相应的比例关系,以满足建筑物的实际体量。最后通过建筑物实际高度、实物与模型比例来确定模型的高度。
为了验证该方案的正确性,作者按照上节三维模型转换方案中的流程步骤转换了大量的三维模型。本文用某大学“数字校园”项目中Maya创建的OBJ模型作为数据,转化为Collada模型,最后导入Google Earth中,如图4是导入Google Earth中的教学楼模型。
图4 Google Earth中教学楼模型
图5 导入参数显示图
当3DS文件在Sketch Up中打开时,模型中某些数据可能会丢失,比如材质、贴图等数据。以Maya模型8hl.3ds为例,导入后会弹出对话框,如图5所示,对话框中显示不能生成8 HL.JPG贴图与01-Default材质。
主要原因是在OBJ-3DS转换过程中,OBJ模型的贴图出现了问题。改正的方法是重新对该OBJ文件进行UV贴图。
现在的3D文件资源十分丰富,要充分利用这些资源,文件格式的转换就必不可少。本文对Google Earth中Collada模型的转换方法进行了详细的总结与尝试性的实践,提出一种新的转换流程,并以个案实验的形式给出了实现效果图。
[1]黎华,肖伟.几种三维模型文件在 OpenGL中的输入与处理[J].物探化探计算技术,2007,29(1):83.
[2]余烨.面向VR系统的三维模型转换工具[J].工程图学学报,2008(05):72-78.
[3]陈炳发,陆楠,伍铁军.一种面向OPENGL的三维模型的转化方法[J].小型微型计算机系统,2004,25(3):72.
[4]朱笑然,年福纯,田兆平,等.基于多软件的STK模型转换应用研究[J].飞行器测控学报,2010,29(2):54-56.
[5]江水.三维模型转换引擎及其应用研究[D].南京:南京师范大学,2007:22-28.
[6]雷相波,王昊鹏.基于ElevationGrid节点的虚拟现实仿真[J].长春工程学院学报:自然科学版,2007,8(2):67-69.