一般来说,我们在拿到具体的DWG之后,如果是地方2000坐标系,那么你会收到一系列参数,你只需要将这些参数,构造为WKT之后,输入到GISBox的自定义坐标中,就可以直接使用了。
CesiumJS是一款开源的3D GIS框架,目前使用率非常高,应该是3D GIS中应用最广的GIS框架,可以将地理数据非常好看的展现出来。而DWG文件是在工程领域应用非常广的文件格式,基本上在工程施工前,招标过程中都会产生非常多的DWG文件。
GISBox现在支持从导入模型,到高斯球编辑,对齐坐标系,发布服务一站式的高斯切片处理,这样大家就不用先用一个模型处理软件,在切换到GISBox中进行切片了。
目前对于大范围的高斯模型而言,还无法像3dtiles一样能够分片分层在Cesium加载,因此一定程度限制了3d高斯在gis场景中的应用。山海鲸团队希望能够在工具链和Cesium渲染两个层面来解决3D高斯的这个短板,让3D高斯能够真正能够进入Cesium生态。
上一篇文章里简单介绍了山海鲸中城市大师为了整合GIS系统所做的技术选型的探索,最终我们决定采用先后绘制的形式在单个Canvas上整合山海鲸的3D引擎和CesiumJS。
同样在这篇文章开始前重申一下:山海鲸并没有使用ThreeJS引擎。但由于ThreeJS引擎使用广泛,下文中直接用ThreeJS同CesiumJS的整合方案代替山海鲸中3D引擎和CesiumJS整合。
山海鲸中默认的效果已经非常逼近Cesium For Unreal的效果了,而且山海鲸默认自带了体积云效果及非常灵活的体积云设置,同样在Unreal中想要达到类似效果需要购买插件或者需要自己用蓝图对体积云进行建模。同时由于山海鲸中整合的是CesiumJS,因此大家可以用自己熟悉的JS语言和CesiumJS接口来对山海鲸中CesiumJS进行二开,之前的CesiumJS项目甚至都不需要改什么代码就可以一键迁移,开发成本和学习难度远远低于Unreal的C++或者蓝图。
体积云也已经有了海量的文章在解释如果去建模和光照了,我也大体给大家总结一下方案的脉络。体积云目前的方案主要是由地平线最先提出,后期经过寒霜、荒野大镖客等引擎或3A游戏的进一步完善,逐渐形成了一套标准的方案。也就是通过Worley-Perlin噪声贴图进行建模,同时使用太阳和大气对体积云进行光照计算。
为了快速整合,我们对这个算法进行简化,在原来的步进过程中取height为最高处10%的采样点作为卷云层的采样点,剩下的90%的高度重映射为100%之后作为原算法的采样输入,这样只需要在采样函数这里做一次分支就可以几乎不动代码的将卷云层加入进来。
实际上雨雪的效果就是一个粒子效果的叠加,这里并没有什么值得一提的。但Cesium本身并不支持法线贴图的输出,雪面的覆盖是需要当前的法线的,因为法线朝上的积雪的可能性是最高的。