来源:超图软件 2015-04-23 13:43:37
倾斜摄影三维建模及应用是近年来测绘 领域关注的热点,产业链上下游的企业为此都在积极探索,以推动该项技术的健康发展和落地应用。然而,什么样的技术才是真正符合用户实际应用需求的?在这 里,我们要和大家讲解倾斜摄影应用的两个重要话题——倾斜摄影自动化建模成果(后文简称“倾斜模型”)的数据组织和单体化。
数据组织:要LOD 更要便捷和安全
倾斜模型的一个突出的特点就是数据量庞大,这是因其技术机制、高精度、对地表全覆盖的真实影像所决定的。那么,如何承载海量的倾斜模型数据、保 证快速加载和流畅渲染?这是倾斜摄影技术顺利实现应用的第一大“拦路虎”,必须拿下。是直接读取OSGB格式的倾斜摄影模型海量数据,还是需要导入和处理 数据格式后读取?这是一个关键问题。
解决这个问题之前,我们先明确下LOD(Level of Detail)这个概念。LOD是GIS平台提高性能的一个重要法宝,即对同一个数据从清晰到模糊有多份。当屏幕视角距离某个地物近时,软件自动调用最清 晰层的数据;当屏幕视角远离该地物时,则自动切换为模糊层的数据。由于人眼本来就无法看清远处的数据,因此这样做并不影响视觉效果。例如影像金字塔、地图 分比例尺切图等,都采用此方式。
对于手工建模的模型,一般是通过三维GIS平台自行计算出多层LOD,并处理其远近距离的切换关系。而对于倾斜模型,由于其技术原理是先计算稠 密点云、经过简化后再构建TIN,因此在数据生产的过程中,就能通过不同的简化比例来得到数据LOD,而不再需要GIS平台来进行计算。并且数据生产过程 中计算出来的LOD效果也是最佳的。也正因为如此,无论是街景工厂还是Smart3D,其生产出来的倾斜模型都是自带多级LOD的,一般至少带有5-6 层,多则10层以上。
数据本身自带LOD,从技术原理上就决定了其看似庞大,其实完全可以做到非常高的调度和渲染性能(只要不破换原始自带的LOD)。这也是为什么我们使用数据厂家自带的Viewer就可以获得很好的加载和浏览性能。
分析到这里,相信大家就会明白:采用直接读取倾斜模型原始OSGB格式相比采用导入的方式更好。为什么这么说呢?一方面,导入过程费时费力,处 理海量倾斜模型数据往往需要数周。更重要的是,在数据导入过程中,为了和平台内部格式保持一致,往往会破换原始数据的LOD,自行再构建LOD。这样构建 的LOD,无论是效果还是性能,都远逊于原始LOD,导致性能不佳。
此外,在格式选择上,倾斜摄影建模软件有内部私有格式(如Smart3D的s3c),另外还可输出为OSGB和DAE两种外部格式。其 中,DAE格式由于是文本格式,直接读取效率太低,因此被排除在外。而OSGB格式是开源的OSG库所自带的二进制格式,直接读取效率高,且格式公开,有 免费的开源库可直接使用,并且适合作为后续网络发布与三维服务共享的模型传输格式,因此成为最佳选择。
那么,有人可能会问:OSGB作为公开格式,若直接使用,如何解决网络发布后的数据安全问题?对于这个问题,其实并不难解决:在服务端,我们虽 然是直接读取OSGB文件,但在网络发布缓存到客户端的模型,已经是通过服务端加密,并在客户端压缩打包为一个内部的大文件,如下图所示。因此,直接读取 OSGB格式绝对不存在数据泄露等安全问题。
图 1服务端的OSGB文件
图 2客户端缓存后的大文件
解答完上述问题,可能还有人会问:一大堆OSGB的小文件,拷贝和管理都很麻烦。如何解决?针对这个问题,超图软件正在研发采用分布式数据库来存储和管理osgb文件,便于海量OSGB文件的存储、拷贝、管理和服务发布。
值得注意的是,即便我们采用数据库来进行存储和管理,也是直接把每个OSGB小文件放到数据库中,而不是导入OSGB格式——我们坚决不破破坏数据原有的LOD,也坚决捍卫OSGB格式的开放性。彼时,数据的安全性则可以通过数据库本身的安全体系来予以保证。
单体化:切割还是矢量化?
提到单体化,可能很多人说起来都是眼泪。基于倾斜影像,若做人工干预的建模,自然就不存在单体化的问题,生成的模型本来就是单体的。而自动化建 模的成果,由于其生成机理,得到的模型是一个连续的TIN加贴图,并没有根据建筑物划分为一个个可以单独选中的对象。而我们都知道,在GIS管理和应用 中,若倾斜模型不能进行对象的单独选中和查询,就只能和影像一样作为底图浏览,无法进一步深入应用。单体化成为第二大“拦路虎”,我们必须闯关成功。
如何实现单体化才是最好的?
很多技术人员脑海中冒出的第一个直观的想法一定是:对倾斜模型进行切割呀,这样切割之后的模型就和人工建模成果一个样了。
不过很遗憾地说,这种想法貌似很完美,但其实是一条“死胡同”。只要切割一下数据,做一个小小的实验,就会一目了然了。当看到效果的一刹那,大家一定会心凉半截。
图 3 倾斜模型切割后的边缘效果
如上图,这样的边缘效果肯定不是用户所想要的。更重要的是,切割之后,两个主要后续用途都没法实现:
一是替换人工精细建模的模型。看到这样的锯齿边缘,真不知道人工建模的人员如何才能把锯齿边缘接上去。难以想象建模人员的抓狂。
第二个用途是隐藏某种类型的地物。这样露出一个锯齿状的空洞,你说评审专家是让项目不过啊,不过啊还是不过啊?
为什么会有锯齿呢?是切割的技术不够高?完全不是。根源在于倾斜模型数据本身其实就是三角面片加纹理,切割算法无非是根据建筑底面来决定哪些三 角面片保留,哪些三角面片被抛弃;边缘的锯齿其实也就是留下来靠边的三角面片而已。说到底是倾斜模型自动化生成算法所决定了的,和GIS平台真没什么关 系。
第二个问题是,这样的切割后,也抛弃了数据自带LOD的优点,导致GIS平台只能按照普通模型的方法来构建LOD。倾斜模型数据量庞大,想想这性能表现也是醉了。
切割之后存在的第三个问题是:切割必须事先输入对应地物的矢量底面数据。经过漫长的等待,切割出来之后,若发生任何一点变动,对不起,数据还得再返工切一遍。因此,其灵活性几乎为零。
现在,让我们换一个思路来看待倾斜模型:它事实上就是带有TIN作为高程背景的影像。在二维GIS中,有谁见过根据矢量底面来把影像数据切割为 建筑物影像图层、道路影像图层、绿植影像图层的吗?正确的思路是:我们在影像数据上进行矢量化,从而可以在影像+矢量的图层上选中建筑物、道路等地物。若 一定需要把影像上的某种类型地物隐藏,也是通过叠加这种地物的矢量图进行显示过滤。
把GIS的科学原理搞清楚了,我们回过头来再看待如何进行倾斜模型的单体化,就胸中有丘壑了。只要试一下就知道,通过叠加的矢量底面,在渲染层面实现单体化,效果ganggang的:被选中的地物像是被高透膜紧密包裹,底部边缘笔直。
图 4 矢量化后的倾斜模型单体化边缘效果
采用矢量化的方式,在保证效果、不破坏原始数据及LOD的同时,最大的好处还在于它打通了基于三维的倾斜模型和基于二维的矢量面之间的关键“关 卡”,实现三维和二维GIS的完美一体化。基于此,GIS的一系列功能(如图查属性、属性插图、缓存区分析与查询、专题图制作等等)都可轻松实现。至此, 对于倾斜模型的应用,用户可以不用再纠结于选择哪个GIS平台,而是要充分发挥应用的广阔想象力。
它带来的价值还体现在动态性和灵活性的大大提升。由于叠加的矢量面只需要一个简单的图层设置就可以起作用,这也就意味着:在应用过程中,可以随 时更换需要叠加的矢量面。当用户增加数据类型后,不用再大费周章的把数据重新切割一遍,而是点两下鼠标,就可快速搞定。想一想,这是多么惬意的一件事。
当然,当前支撑倾斜摄影应用的GIS技术还不是很完美,想用户之所想,实现基于倾斜模型的更多能力、追求更优化的性能和效果,永远是我们GIS人共同的追求。在这个技术变革“加速度”的时代,快速响应、快速迭代、快速研发成为关键。