• [转]倾斜摄影单体化实现方案


    原文:https://www.jianshu.com/p/8a59d8efd454

    一、单体化的由来

    什么是单体化?“单体化”是指每一个我们想要单独管理的对象,是一个个单独的、可以被选中的实体(Entity);即用鼠标点击时可以显示为不同颜色(称为“高亮”)显示,可以附加属性,可以被查询统计等等。只有具备了“单体化”的能力,数据才可以被管理,而不仅仅是被用来查看。

    对于人工建模而言,单体化是一个不言而喻的事情。即在人工建模的过程中,自然会把需要单独管理的对象(如建筑、路灯、树木等)制作为单独的模型,也是和其它对象分离开的。(当然也有一些时候为了其它方面的一些考虑,人工建模时故意把几栋楼作为一个对象来制作)

     
    倾斜摄影自动化建模过程和机制

    对于倾斜摄影自动化建模而言,其建模机制的原因可简单归纳为如上图所示。即在空三之后,首先对所拍摄的影像像对生成稠密的点云,然后对点云进行抽稀,再构建三角网,最后贴上贴图。在这个过程中,是没有人工干预的,当前的建模算法并不会把建筑、地面、树木等地物区分出来,因此构建出来的是一个连续的TIN网。对于这样的数据, 本身是无法选中单个建筑的,需要进行一定的处理才能实现“单体化”。

    而对于大多数应用(除楼仅仅用来看效果或进行量算)而言,是需要能对建筑物等地物进行单独的选中、赋予属性、查询属性能最基本的GIS的能力。因此,单体化称为倾斜摄影模型在GIS中应用所绕不过的一个坎,是必须要解决的问题。

     
    单体化问题的由来

    二、单体化的三种解决思路

    (1)最直观的思路,就是用建筑物、道路、树木等对应的矢量面,对倾斜摄影模型进行切割,即把连续的三角面网从物理上分割开,从而实现单体化。称之为“切割单体化”。效果如下图所示:

     
    切割单体化效果图

    (2)利用三角面片中每个顶点额外的存储空间,把对应的矢量面的ID值存储起来;即一个建筑物对应的三角面片的所有顶点,都存储了同一个ID值,从而实现在鼠标选中这个建筑物时,该建筑物可以呈现出高亮的效果。这个称之为“ID单体化”。

    ID单体化理解起来相对要难一点,最好能懂一点三维开发的知识。其实就是让同一个建筑模型上,都存储同一个ID值。从而在三维GIS中呈现出现鼠标点击后,能高亮显示这个建筑物。如下图所示:

     
    ID单体化效果图

    (3)在三维渲染的时候,动态的把对应的矢量面叠加到倾斜摄影模型上,类似于一个保鲜膜从上到下的把对应的建筑物等物体的模型包裹起来,从而实现可被单独选中的效果。这种忧郁时渲染时动态呈现的,可以称之为“动态单体化”。如下图所示:

     
    动态单体化效果图

    动态单体化咋一看和ID单体化效果非常像,但它们实现的技术原理是有很大区别的。ID单体化湿需要预先处理数据,把建筑物所对应的模型上存储同一个ID值,而动态单体化则是在渲染时动态绘制出来的。

    动态单体化的另外一个误解:是不是就在用一个半透明的方盒子在倾斜摄影模型外面。其实不是这样,动态单体化类似于半透明的皮肤衣,是从上到下贴合模型表面,并把模型完整全部合在内的效果。如下图所示:

     
    动态单体化矢量面与模型的套合效果

    三、单体化目的回顾及其优缺点分析

    咋一看,第一种思路即“切割单体化”在单体化的道路上最为彻底,毕竟只有这样,才是真正把连片的模型单独切割出来了,之后的选中高亮、赋予属性等也就是顺理成章的事情了。因此,也有人说:只有“切割单体化”才是真正的单体化,其它都是假的单体化。

    但继续深入研究,就会发现后面两种单体化在代价更小的情况下,也能实现对应的要求,且效果更佳。也就是说我们需要审视目的,再综合利弊来考虑和选择途径和方法。

    那么,再来回顾一下单体化的目的到底是什么?

    单体化本质上是为了解决倾斜摄影自动化建模软件输出的三维模型是连片的、无法单独选中要管理的地物;为了能进行查询和管理,我们需要单独选中某个地物,能查询它对应的业务属性;但并不是“必然”要求把这个地物从物理上把它和周边的模型分离开。

    当然,“单体化”这个名称容易给人造成一种误解,似乎必须物理切割了,才是真正的单体化;要是换做“对象化”或“可管理”等名称,理解起来就顺畅多了。

    打破了这个心里障碍,那我们就继续来分析这三种单体化各自存在的优缺点。

    首先我们来看,上述三种单体化的方式,其实都能达成最基本的目标,就是能选中该地物,能赋予属性并进行查询。我们再看数据制作过程,“切割单体化”必须先进行模型物理上的切割,由于倾斜摄影数据量一般都比较大,因此切割是一件费时费力的事情,再有就是切割后模型的底边,会带有非常明显的锯齿(三角面片的边界)。另外由于三维GIS对模型的空间查询和分析计算能力远没有二维GIS对面的能力完善,因此所能进行的下一步分析计算的能力是非常有限的。

    而“动态单体化”则是在三维渲染过程中,动态的把对应的矢量底面套合在模型表面之上,因此就无需提前的预处理,只需要三维GIS软件和所运行的设备上支持该渲染能力即可;套合后的模型底边的平滑度是和显示器屏幕的分辨率一致的,效果会好的太多,另外动态单体化由于是把二维矢量面和三维倾斜摄影模型结合起来了,因此可以充分利用二维GIS平台对面数据的查询计算分析等能力,各类GIS能力都能充分发挥出来,如查询周边地物,制作专题图等等。如下图所示:

     
    动态单体化支持丰富的GIS功能

    对于以上分析,我们可以归纳总结一下表:

    单体化方法技术思路预处理时间模型效果功能小结
    切割单体化 预先物理切割把地物分离开 差,锯齿感明显 非特殊情况不推荐使用
    ID单体化 给对应地物的模型赋予相同ID 一般 一般 一般 在不支持动态渲染的环境中使用
    动态单体化 叠加矢量底图,动态渲染出地物单体化效果 无需 好,模型边缘和屏幕分辨率一致 强,所有GIS功能都能实现 推荐使用

    “切割单体化”,还有一个非常致命的问题在于:倾斜模型本身是带有多层LOD的,切割针对最精细层进行,破坏了数据原生的LOD,也就无法直接加载模型,而只能采用导入的方式。再就是切割一般只是把TIN网分割了,而整块模型所对应的纹理并不会切割开,因此会出现多份纹理,而重复大量的纹理是最耽误三维渲染性能的。这一切,都会导致数据量较大时三维浏览的性能急剧下降。

  • 相关阅读:
    约束
    TCL(事务控制语言)
    MySQL常见约束
    “三大范式”及数据库设计
    同义词(别名)
    分享35个非常漂亮的单页网站设计案例
    Eclipse智能提示 (原创)
    java架构师之路:JAVA程序员必看的15本书的电子版下载地址
    Java初级学习笔记
    Java程序的汉化
  • 原文地址:https://www.cnblogs.com/lyggqm/p/10563590.html
Copyright © 2020-2023  润新知