范明华,杜甘霖,任家勇
(1.江苏省基础地理信息中心,江苏南京210013;2.河海大学地理信息科学系,江苏南京210098;3.南京市国土资源局浦口分局,江苏南京210045)
SketchUp大区域三维建模技术研究
范明华1,杜甘霖2,任家勇3
(1.江苏省基础地理信息中心,江苏南京210013;2.河海大学地理信息科学系,江苏南京210098;3.南京市国土资源局浦口分局,江苏南京210045)
利用SketchUp软件能高效建模的特质,进行大区域的三维建模。对建模过程中涉及的思路进行探讨,针对其存在的一些问题和可以优化的方法进行介绍。利用SketchUp和Skyline的组合,实现了大范围三维建模和成果应用。
SketchUp;Skyline;三维建模;GIS
通过SketchUp软件,能够制作出精细美观的三维建筑模型,从而实现效果逼真的三维景观,但这种美观的效果只能在SketchUp中进行浏览。这样就存在两个主要问题:①显示城市级别的数据量几乎不可能;② SketchUp没有坐标系统。本文通过在SketchUp中制作精细、数据量小的三维模型,并将数据导出为一种通用的数据格式(如3ds数据),在Skyline中进行展示,保证了三维模型美观、数据量小的优势,同时又通过Skyline很好地弥补了空间信息的不足,可以说是充分利用了二者的优势,取得了良好的效果。
SketchUp作为一种方便易用的三维建模软件,一经推出就在建筑设计领域得到了广泛应用。其在处理建筑物数目巨大的三维建模工程时,能够有效地提高建模速度和建模质量。Google SketchUp三维建模软件避免了同类设计软件如3ds Max、Auto-CAD等的复杂性[1],具有易操作的贴图系统,提高了建模工作的效率,而且能够真实地表现建筑模型的质感,使模型更加美观。Google SketchUp能够根据不同需求提供相应的数据格式,支持如3ds、obj、kmz等多种数据格式的导出。SketchUp具有如下特点:① 界面简洁,易学易用,命令极少;② 精确高效,兼容性好;③功能强大,应用广泛。
1.几何信息获取
二维GIS系统发展相对成熟很多,现有的二维GIS数据精度高、数据全。在进行三维建模时,应用这些现有的数据,对提供工作效率是十分可观的。现有的数据比如ArcGIS中的SHP数据,AutoCAD中的DWG数据都可以通过SketchUp提供的功能或者一些小的插件导入到SketchUp中。利用这些数据进行建模,将保持建筑物底图的精度。在没有二维矢量数据的情况下,导入经过几何纠正的影像或正射影像,通过影像进行三维建模,其平面精度一般也能满足要求。
2.高度信息获取
高度信息是三维模型的一个重要参数。由于在二维GIS中仅把建筑物层数作为高度信息,这只是一个概略的描述,没有较高的精度,所以需要专门研究获取建筑物的高度信息。
当前主要通过以下几种方式获得建筑物的高度:①运用机载激光扫描仪与遥感影像相结合来提取建筑物高度,该方法获取速度快,但后续处理工作量大,费用可观;②简单提取,通过矢量二维空间数据其建筑物层数的属性乘以楼层高(如3 m)来提取其高度,这种方法获取的建筑物高度只是一个估算值,且所有建筑物只能用平顶来表达,或者人为地增加一个修饰性屋顶;③通过算法从遥感影像的阴影来直接提取建筑物高度以及其他信息。
在一般的非精细三维建模中,通常可利用遥感影像的阴影来提取建筑物的高度,与二维GIS的层数数据以及现场量测的一些特殊高度的建筑物数据相结合来推算建筑物的实际高度。
3.纹理信息获取
纹理信息主要包括实地拍摄的建筑物的相片和影像中的建筑物顶部信息。在采集建筑物侧面纹理的过程中要尽量采集非倾斜、明亮的照片。如果某些地方不易获取,则通过获取局部,再通过图像处理软件(如Photoshop等)进行拼接。所采集的图像需要经过处理,如纠正、亮度调整、数据量压缩等,目的在于得到端正、美观、数据量小的纹理材质。对于屋顶纹理则可从正射影像或高分辨率航片中获取。
通过插件将二维几何数据导入到SketchUp中,或者将影像数据导入到SketchUp中。利用面线工具对建筑物轮廓进行构建,并通过材质工具进行贴纹理,最后导出。具体流程如图1所示。
图1 SketchUp建模流程
使用SketchUp建模,导出为3ds通用格式时,主要存在批量导出的速度与坐标不一致性的问题。
1.批量导出问题
城市建模一般数据量都十分庞大,如图2所示,简单的几个街区就有上千个模型。如果人工导出,耗费大量时间,且效率低下。SketchUp是目前在三维图形界使用Ruby为插件接口的软件,Ruby脚本编写扩展SketchUp功能的Ruby应用程序编程接口(API)。此接口使用户可以创建要包含在SketchUp菜单中的宏,如自动化组件生成器和其他工具。通过SketchUp中的Ruby脚本进行批量导出,可极大地提高工作效率。导出的过程给定单个模型命名规则,导出格式为3ds。其Ruby编写程序思路为
图2 SketchUp场景图
2.坐标问题
通过SketchUp导出的3ds格式文件,采用的是相对坐标,缺少空间信息。这使得建好的模型与真实的地理位置不一致,需要通过算法来批量修改3ds文件的空间坐标信息。为此,必须先分析清楚3ds格式文件的内部结构。
3ds文件内部的结构是由“块”构成,这些“块”主要由两部分组成,即ID与下一数据块的位置[4]。其中,ID号为oxBO20的块,即POSITION TRACK块含有坐标信息,对3ds格式文件坐标的批量修改思路为
通过运行上面简单的代码给3ds文件的坐标加上一个50 000的大数,就可以从相对坐标回到绝对坐标。由此在处理大量3ds文件时可自动实现坐标的批量处理。
目前在城市三维系统的建设中,很多用户采用Skyline平台来解决,但Skyline对复杂模型的建设有点力不从心。而SketchUp建模软件虽然建模简单,但不支持海量数据显示,因此选用能够支持海量数据的Skyline软件进行三维场景的展示[2],发挥了各个软件各自的长处。在Skyline中三维场景展示的思路如图3所示,效果如图4所示。
1)初始化模型坐标。该步骤把单体模型的坐标设为零,Skyline 5.1.2以上的版本支持批量模型坐标归零,也可在3ds Max软件中使用平移方式来实现。
2)转换模型格式。把3ds格式的模型转换成Skyline支持的*.X格式。可以通过以下两种方式实现:① 使用DeepExploration软件,用批量转换工具将3ds格式的模型转换成*.X格式;② 在3ds Max中通过PandaDXExport插件导出*.X文件,并进行相关属性设置。
3)模型中心点提取。使用ArcGIS中的Add XY Data工具,生成SHP点文件,每个点文件中点格式限制在1000个以内,若模型数量较多则生成多个点文件。设置属性表上的路径为模型的绝对路径。
4)地形模拟。在Terrabuilder中,地形采用正射影像进行模拟,采用金字塔的方式组织。
5)场景组合。利用步骤2)~步骤4)的准备工作进行场景组合。基本思路是以正射影像模拟地形,以模型中心点来定位,然后进行相关设置实现场景的组合。
图3 Skyline中三维场景展示的思路
图4 Skyline中进行三维场景的展示效果
本文针对利用SketchUp高效高质建模的特质进行三维建模,对建模的思路进行了探讨,解决了大区域建模中存在的问题。结合SketchUp和Skyline的优点,成功地实现了三维场景,取得了良好的效果。
[1] 童滋雨.SketchUp建筑建模详解教程[M].北京:中国建筑工业出版社,2007.
[2] 许捍卫,房晓亮,任家勇,等.基于SketchUp的城市三维建模技术[J].测绘科学,2011,36(1):213-214.
[3] 叶松.集成GIS与VR的城市规划研究[D].武汉:武汉大学,2006.
[4] 冯伟,周云才.基于VC++和OPENGL的3ds文件的读取与控制[J].科技信息,2009(1):479,450.
[5] 侯妙乐,刘忠贞,孙维先.基于Skyline的三维数字校园[J].北京建筑工程学院学报,2008(4):18-21.
[6] 许捍卫,范小虎,任家勇,等.基于SketchUp和ArcGIS的城市三维可视化研究[J].测绘通报,2010(3):52-54.
[7] 邓洁,夏春林,王润芳.基于Skyline Terrasuite的城市三维景观的建立[J].遥感技术与应用,2008,23(5): 529-532.
Research on Technology of Three-dimensional Modeling in Large Area Based on SketchUp
FAN Minghua,DU Ganlin,REN Jiayong
0494-0911(2012)05-0056-03
P231.5
B
2011-08-26
范明华(1963—),女,江苏常熟人,高级工程师,主要从事测绘生产、科研课题等方面的管理工作。