由于水利是数字孪生中非常重要的一个领域,因此水面的渲染和大气,云层一样,也是山海鲸的重点攻克的目标。经过了两年的打磨,和与真实项目的磨合,山海鲸目前围绕水的渲染,已经实现了从平面,到波形模拟,到浅水方程式,到粒子的全流程水效的技术实现和快速使用。
上一篇文章里简单介绍了山海鲸中城市大师为了整合GIS系统所做的技术选型的探索,最终我们决定采用先后绘制的形式在单个Canvas上整合山海鲸的3D引擎和CesiumJS。
体积云也已经有了海量的文章在解释如果去建模和光照了,我也大体给大家总结一下方案的脉络。体积云目前的方案主要是由地平线最先提出,后期经过寒霜、荒野大镖客等引擎或3A游戏的进一步完善,逐渐形成了一套标准的方案。也就是通过Worley-Perlin噪声贴图进行建模,同时使用太阳和大气对体积云进行光照计算。
实际上雨雪的效果就是一个粒子效果的叠加,这里并没有什么值得一提的。但Cesium本身并不支持法线贴图的输出,雪面的覆盖是需要当前的法线的,因为法线朝上的积雪的可能性是最高的。
话说在之前的技术调研中,写白天大气散射和体积云渲染的文章可以说是多如牛毛,具体可以参考我前面的系列文章,但写夜空渲染的文章竟然一个没有。同时UE和Unity似乎也对夜空渲染不感兴趣,在官方的天空中都没有整合夜空的逻辑。UE新版大气散射的介绍视频中倒是提了一句“如果要做夜空只需要整合一张星空贴图即可”,Unity的官方Roadmap中也有提到说很难用基于物理的方式来实现夜空,因此打算提供一些艺术家向的设置来实现夜空的渲染。
GISBox现在支持从导入模型,到高斯球编辑,对齐坐标系,发布服务一站式的高斯切片处理,这样大家就不用先用一个模型处理软件,在切换到GISBox中进行切片了。
一般来说,我们在拿到具体的DWG之后,如果是地方2000坐标系,那么你会收到一系列参数,你只需要将这些参数,构造为WKT之后,输入到GISBox的自定义坐标中,就可以直接使用了。
目前对于大范围的高斯模型而言,还无法像3dtiles一样能够分片分层在Cesium加载,因此一定程度限制了3d高斯在gis场景中的应用。山海鲸团队希望能够在工具链和Cesium渲染两个层面来解决3D高斯的这个短板,让3D高斯能够真正能够进入Cesium生态。
同样在这篇文章开始前重申一下:山海鲸并没有使用ThreeJS引擎。但由于ThreeJS引擎使用广泛,下文中直接用ThreeJS同CesiumJS的整合方案代替山海鲸中3D引擎和CesiumJS整合。
为了快速整合,我们对这个算法进行简化,在原来的步进过程中取height为最高处10%的采样点作为卷云层的采样点,剩下的90%的高度重映射为100%之后作为原算法的采样输入,这样只需要在采样函数这里做一次分支就可以几乎不动代码的将卷云层加入进来。