单体化问题的由来
我们先来说说什么是“单体化”。“单体化”其实指的就是每一个我们想要单独管理的对象,是一个个单独的、可以被选中的实体(Entity);即用鼠标点击时可以显示为不同颜色(称为“高亮”)显示,可以附加属性,可以被查询统计等等。只有具备了“单体化”的能力,数据才可以被管理,而不仅仅是被用来查看。
对于人工建模而言,单体化是一个不言而喻的事情。即在人工建模的过程中,自然会把需要单独管理的对象(如建筑、路灯、树木等)制作为单独的模型,也是和其它对象分离开的。(当然也有一些时候为了其它方面的一些考虑,人工建模时故意把几栋楼作为一个对象来制作)
图1 倾斜摄影自动化建模过程和机制
对于倾斜摄影自动化建模而言,其建模机制的原因可简单归纳为如上图所示。即在空三之后,首先对所拍摄的影像像对生成稠密的点云,然后对点云进行抽稀,再构建三角网,最后贴上贴图。在这个过程中,是没有人工干预的。当前的建模算法并不会把建筑、地面、树木等地物区分出来,因此构建出来的是一个连续的Tin网。对于这样的数据,本身是无法选中单个建筑的,需要进行一定的处理才能实现“单体化”。
而对于大多数应用(除了仅仅用来看效果或进行量算)而言,是需要能对建筑等地物进行单独的选中、赋予属性、查询属性能最基本的GIS的能力。因此,单体化成为倾斜摄影模型在GIS中应用所绕不过的一个坎,是必须要解决的问题。
图2 单体化问题的由来
单体化的三种解决思路
那么,倾斜摄影模型实现单体化的技术思路,总结出来有三种,具体包括:
1、最直观的思路,就是用建筑物、道路、树木等对应的矢量面,对倾斜摄影模型进行切割,即把连续的三角面片网从物理上分割开,从而实现单体化。我们可以称之为“切割单体化”。效果可如下图所示:
图3 切割单体化效果图
2、利用三角面片中每个顶点额外的存储空间,把对应的矢量面的ID值存储起来;即一个建筑所对应的三角面片的所有顶点,都存储了同一个ID值,从而实现在鼠标选中这个建筑时,该建筑可以呈现出高亮的效果。这个可以称之为“ID单体化”,如下图所示。
ID单体化理解起来相对要难一点,最好能懂一点三维开发的知识。其实就是让同一个建筑模型上,都存储上同一个id值。从而在三维gis中呈现出鼠标点击后,能高亮显示这个建筑物:
图4 ID单体化效果图
3、在三维渲染的时候,动态的把对应的矢量面叠加到倾斜摄影模型上,类似于一个保鲜膜从上到下完整的把对应建筑等物体的模型包裹起来,从而实现可被单独选中的效果。这种由于是渲染时动态呈现的,可以称之为“动态单体化”。如下图所示:
图5 动态单体化效果图
动态单体化乍一看和ID单体化效果非常像,但它们实现的技术原理是有很大区别的。ID单体化是需要预先处理数据,把建筑物所对应的模型上存储同一个ID值,而动态单体化则是在渲染时动态绘制出来的。
动态单体化的另外一个误解是:是不是就在用一个半透明的方盒子在倾斜摄影模型外面。其实不是这样,动态单体化类似于半透明的皮肤衣,是从上到下贴合模型表面,并把模型完整全部套合在内的效果。如下图所示:
图6 动态单体化中矢量面与模型的套合效果
在软件操作中,动态单体化需要把矢量面作为一个图层添加到三维场景中,然后软件中的一个开关设置为“贴对象”,效果就出来了。
内部实现中,可以简单理解为:矢量面会判断tin网的哪些部分是在它的范围内的,包括空中漂浮的模型,然后把半透明的颜色覆盖上去。
还有一类是以天际航的DP-Modeler为代表,在倾斜摄影模型的基础上,进行人工干预,重新构建单个的三维模型;这个其实有点类似于人工建模的味道,结果自然就是单体化的(同时还起到修饰模型效果的作用)。就不在我们后续讨论之列了。
单体化目的回顾及优缺点分析
乍一看,第一种思路即“切割单体化”在单体化的道路上最为彻底,毕竟只有这样,才是真正把连片的模型单独切割出来了,之后的选中高亮、赋予属性等也就都是顺理成章的事情了。因此,也有人说:只有“切割单体化”才是真正的单体化,其他都是假的单体化。
但我们继续深入研究,就会发现后面两种单体化在代价更小的情况下,也能实现对应的要求,切效果更佳。也就是说我们需要再审视目的,再综合利弊来考虑和选择途径和方法。就如同减肥并不代表必须节食,运动加合理的膳食同样能达到目的,效果可能更好。
那么,我们再来回顾一下单体化的目的到底是什么:
单体化本质上是为了解决倾斜摄影自动化建模软件输出的三维模型是连片的、无法单独选中要管理的地物;为了能进行查询和管理,我们需要能单独选中某个地物,能查询它对应的业务属性;但并不“必然”要求把这个地物从物理上把它和周边的模型分离开。
当然,“单体化”这个名词容易给人造成一种误解,似乎必须物理切割了,才是真正的单体化;要是换做“对象化”或“可管理”等名词,理解起来就顺畅多了。
图7 单体化思维的转变
打破了这个心理障碍,那我们就继续来分析这三种单体化方法各自存在的优缺点。
首先我们来看,上述三种单体化的方式,其实都能达成最基本的目标,就是能选中该地物,能赋予属性并进行查询。我们再看数据制作过程,“切割单体化”必须先进行模型物理上的切割,由于倾斜摄影数据量一般都比较大,因此切割是一件费时费力的事情,再有就是切割后模型的底边,会带有非常明显的锯齿(三角面片的边界)。另外由于三维GIS对模型的空间查询和分析计算能力远没有二维GIS对面的能力完善,因此所能进行的下一步分析计算的能力是非常有限的。
而“动态单体化”则是在三维渲染过程中,动态的把对应矢量底面套合在模型表面之上,因此就无需提前的预处理,只需要三维GIS软件和所运行的设备上支持该渲染能力即可;套合后的模型底边的平滑度是和显示器屏幕的分辨率一致的,效果会好的太多。另外动态单体化由于是把二维矢量面和三维倾斜摄影模型结合起来了,因此可以充分利用二维GIS平台对面数据的查询计算分析等能力,各类GIS能力都能充分发挥出来,如查询周边地物,制作专题图等等。如下图所示:
图8 动态单体化支持丰富的GIS功能
“ID单体化”则是介于两者之间,可以理解为在还不支持“动态单体化”所需要的三维渲染能力时,一种折中的处理方法。
对于以上分析,我们可以归纳总结为下表:
单体化方法 技术思路 预处理时间 模型效果 功能 小结
切割单体化 预先物理切割把地物分离开 长 差,锯齿感明显 弱 非特殊情况不推荐使用
ID单体化 给对应地物的模型赋予相同ID 一般 一般 一般 在不支持动态渲染的环境中使用
动态单体化 叠加矢量底面,动态渲染出地物单体化效果 无需 好,模型边缘和和屏幕分辨率一致 强,所有GIS功能都能实现 推荐使用
“切割单体化”还有一个非常致命的问题在于:倾斜摄影模型本身是带有多层LOD的,切割针对最精细层进行,破坏了数据原生的LOD,也就无法直接加载模型,而只能采用导入的方式。再就是切割一般只是把Tin网分来了,而整块模型所对应的纹理并不会切割开,因此会出现多份纹理,而重复大量的纹理是最耽误三维渲染性能的。这一切,都会导致数据量较大时三维浏览的性能急剧下降。这一点,还可以参考对倾斜摄影数据加载和性能方面的问题,会有更详细的阐述。
分层单体化的实现思路
动态单体化的一个高级应用,就是对不同楼层进行单体化,也就是能选中高亮一个建筑的每一层、乃至每一户,并查询对应的属性。这么做的目的是为了实现基于倾斜摄影模型的精细化管理,在*的“三实”、不动产登记等诸多领域中都具备应用价值。
实现分层单体化的提前是需要知道每一层楼层高度信息的矢量面数据。数据准备过程如下图所示。一般这类数据在房产主管部门会有,自己也能根据倾斜摄影模型采集制作。
图9 分层单体化所需要的数据基础
对于切割单体化而言,是把模型中的每一层楼都单独切割开,想想运算效率和每一层的锯齿都是比较恐怖的事情。对于动态单体化而言,在数据准备妥当的情况下,也是软件中的一个开关打开,即可实现单独每层每户的选中和查询。效果如下图所示:
图10 基于动态单体化技术的选中查询倾斜摄影模型每层每户效果图
从数据本质角度出发的再思考
其实,我们从科学原理上分析,倾斜摄影自动建模的结果,本质上就是带有建筑树木等一切地物的地形加影像数据,只不过地形是用三角网来表达的。对于这种数据,我们更多可以参考和借鉴对影像的处理方式。即没有人会把影像按照一个个建筑来进行切割为多个小的影像块,而是通过叠加一层矢量化的面来实现对建筑的选中和管理。
图11 单体化方式的再思考
图 12 2.5维地图中的热区(图*的*城楼效果)
当然,“切割单体化”也并非一无是处。曾经遇到个别应用中,用户就是想存储和拷贝其所拥有的建筑模型,而并不关心周边的环境。对于这种情况,窃以为采用模型修补软件进行进一步加工处理,除了满足单独建筑模型的需要,还能同时修补模型的效果。
配套矢量底面的获取方法
需要说明的是:由于三种单体化都事先需要准备好地物所对应的矢量底面,因此在数据的准备工作上并没有差别。不同的是:切割单体化是用完矢量面之后就可以扔了;ID单体化需要留着矢量面做属性查询;而动态单体化得把矢量面带着走、随时用。
那么,获取配套的矢量底面就是一个非常重要的工作。方法有三:
1、 已有DLG数据进行配准。这个是最省事的,不过需要有数据基础;注意投影的一致性。
2、用自动化建模软件输出正射影像,然后半自动的勾画矢量面,这个需要投入一定的人工时间。也有不少国内公司,直接基于倾斜摄影来进行矢量化制图,据说效率也非常高。
3、 自动化的提取;这种方式代表着未来的方向,业界有不同公司正在探索之中,虽然方法各有差别,但总体前景非常看好。
例如中科遥感(天津)基于模型数据直接进行提取,但运算性能和效果还需要进一步提升。北京超图则先把倾斜摄影模型转换为Grid格式的地形,然后提取等高线,根据等高线的特征进行分析提取。具体过程和提取后效果如下图所示。最后的效果只能说是勉强可用,要是做太精确的计算肯定是达不到要求的;不过用来做管理,能选中能查询还是OK的。
考虑到不同地区数据特征不同,尚未提供一键式功能;但上述功能在桌面中都能进行操作(无需编程)。
图13 根据等高线分析来提取矢量面的操作步骤
图14 根据等高线分析方法提取矢量面之后的效果
最值得期待的是街景工厂、ContextCapture(Smart3D)等自动化建模软件也在研制自动化提取方法。大致思路是通过中间输出的点云数据,按照一定规则进行筛选、简化转化为DLG。这个技术完成后,对于倾斜摄影的单体化,以及后续应用,都是一个大大的福音。