还记得我写过得上一篇关于倾斜处理的终极优化方案:倾斜处理终极优化方案
经过这段时间的用户反馈,看来我还是高兴的太早了,这篇文章虽然解决了处理基础架构问题和最终的效率问题,但是依然有大量的数据处理不出来。
1,主要反馈的问题是 崩溃 ,这就是所谓的致命问题,也让我很崩溃。
由于倾斜数据庞大,动辄几十G,几百G,所以倾斜处理是个慢过程,给我们解决bug带来了相当大的麻烦:1,用户不愿意或者不能够提供给我们出错的数据。2,每处理一遍好几个小时的等待,就为了崩溃那一下,这调试起来效率有多低。
为了解决这个问题,我们再次优化处理方案,我们的倾斜处理分为两个过程:1)osgb对b3dm的一对一转换。2)对于顶层块的重建(以前版本的海量模式)。而我们发现几乎所有的崩溃都是由于重建过程出错的,为了解决这个错误。我们就修改代码能够只进行顶层合并处理(原来的代码必须完成一对一转换后才能合并),加速排查问题。所以这一版更新后,你们会发现倾斜处理V3界面上用户可以选择勾选这两个过程,也就意味着其实我们代码内部已经完全分离两个过程的耦合性。
倾斜处理的两个过程
经过若干个熬夜,终于我们排查出一些问题,重建过程中有一定的内存泄露,导致内存占用严重,最终导致程序崩溃,现在已经修复了内存泄漏,降低了内存的使用量。并且优化了重建过程,重建速度至少翻倍。
2,用户反馈的第二个问题重建后的黑边问题,我们先放图对比下:
这是我把这次优化后的无黑边效果和原来有黑边的效果做了个gif对比(使用CesiumLab三维可视里的模型视口功能)
本来以为这个问题不好解决,后来发现我们的重建的纹理已经很好的用透明度区分了这个黑色数据,我们只需要把gltf里的纹理使用png存储稍作设置即可。
3,实时倾斜转换服务
还是原来那个问题,由于倾斜的数据量特别大,我们处理过程很缓慢(尤其做纹理优化,更是慢如蜗牛),我们考虑如何最快速让用户看见的自己倾斜模型。刚好也是为了我们解决上述的问题,我们增加了这个重磅功能。
服务管理--倾斜实时转换服务
我们只需要在界面上设置倾斜目录(到Data),我们立即获得一个3dtiles的服务地址,加载到场景中直接可以预览。实时转换当然实现仅仅是上述我们提到的一对一转换过程,也就是可以把一对一转换实时完成,并不需要预先跑一遍,虽然没有合并顶层块,但是能最快速的看到数据也是很好呀。
几种使用方式:
1) 无需处理,直接浏览osgb模型。
2) 通过设置缓存目录,可以把已经完成转换3dtiles的数据存到硬盘上,下次无需再转换。
3) 可以实时做纹理压缩,原来不做压缩会浏览崩溃的数据,现在可以选择实时压缩(当然如果选择纹理,综合优化(crn格式),每个块出现的时间很久,建议此时可以选择 减小显存(ktx)格式),每个块可以秒出,而且显存资源占用不高。
4)可以和上述说的 仅合并顶层的结果配合起来用,也就是处理过程只做顶层合并,其他的可以进行实时一对一转换。
最后说明,实时转换服务仅对付费客户(具有授权)开放,做为一项付费用户福利,感谢大家一直以来对CesiumLab的支持和厚爱,谢谢。
Cesium实验室---国内最大的Cesium开发者社区
网友评论