由于水利是数字孪生中非常重要的一个领域,因此水面的渲染和大气,云层一样,也是山海鲸的重点攻克的目标。经过了两年的打磨,和与真实项目的磨合,山海鲸目前围绕水的渲染,已经实现了从平面,到波形模拟,到浅水方程式,到粒子的全流程水效的技术实现和快速使用。
GISBox项目的背景,我们在做倾斜摄影项目的过程有大量需要编辑OSGB模型的需求,但目前市面的产品要么就是产品功能单一,要么就是连试用都无法试用。我们希望打造一款真正业内愿意使用,也能一站式的搞定从OSGB编辑,转换,切片,分发完整链路的产品,这样GISBox就诞生了,目前产品正在快速完善中,大家可以下载体验
话说在之前的技术调研中,写白天大气散射和体积云渲染的文章可以说是多如牛毛,具体可以参考我前面的系列文章,但写夜空渲染的文章竟然一个没有。同时UE和Unity似乎也对夜空渲染不感兴趣,在官方的天空中都没有整合夜空的逻辑。UE新版大气散射的介绍视频中倒是提了一句“如果要做夜空只需要整合一张星空贴图即可”,Unity的官方Roadmap中也有提到说很难用基于物理的方式来实现夜空,因此打算提供一些艺术家向的设置来实现夜空的渲染。
实际上雨雪的效果就是一个粒子效果的叠加,这里并没有什么值得一提的。但Cesium本身并不支持法线贴图的输出,雪面的覆盖是需要当前的法线的,因为法线朝上的积雪的可能性是最高的。
为了快速整合,我们对这个算法进行简化,在原来的步进过程中取height为最高处10%的采样点作为卷云层的采样点,剩下的90%的高度重映射为100%之后作为原算法的采样输入,这样只需要在采样函数这里做一次分支就可以几乎不动代码的将卷云层加入进来。
体积云也已经有了海量的文章在解释如果去建模和光照了,我也大体给大家总结一下方案的脉络。体积云目前的方案主要是由地平线最先提出,后期经过寒霜、荒野大镖客等引擎或3A游戏的进一步完善,逐渐形成了一套标准的方案。也就是通过Worley-Perlin噪声贴图进行建模,同时使用太阳和大气对体积云进行光照计算。
山海鲸中默认的效果已经非常逼近Cesium For Unreal的效果了,而且山海鲸默认自带了体积云效果及非常灵活的体积云设置,同样在Unreal中想要达到类似效果需要购买插件或者需要自己用蓝图对体积云进行建模。同时由于山海鲸中整合的是CesiumJS,因此大家可以用自己熟悉的JS语言和CesiumJS接口来对山海鲸中CesiumJS进行二开,之前的CesiumJS项目甚至都不需要改什么代码就可以一键迁移,开发成本和学习难度远远低于Unreal的C++或者蓝图。
同样在这篇文章开始前重申一下:山海鲸并没有使用ThreeJS引擎。但由于ThreeJS引擎使用广泛,下文中直接用ThreeJS同CesiumJS的整合方案代替山海鲸中3D引擎和CesiumJS整合。
上一篇文章里简单介绍了山海鲸中城市大师为了整合GIS系统所做的技术选型的探索,最终我们决定采用先后绘制的形式在单个Canvas上整合山海鲸的3D引擎和CesiumJS。
熟悉山海鲸的朋友应该知道,山海鲸可视化在3.0之后,在软件内部整合了一个3D场景编辑组件-城市大师。城市大师当中不仅实现了体积云天空,Lensflare,雨雪天气,高度指数雾等等特效,也整合了模型库,PBR材质编辑,植被笔刷,标记点,热力图等等非常好用的3D编辑功能。