GIS融合之路(六)-Cesium的雨雪风雷电效果

终于来到系列第六篇了,也来到大家最喜闻乐见天气效果

系列传送门:

山海鲸可视化:GIS融合之路(一)技术选型CesiumJS/loaders.gl/iTowns?

山海鲸可视化:GIS融合之路(二)CesiumJS和ThreeJS深度缓冲区整合

山海鲸可视化:GIS融合之路(三)CesiumJS和ThreeJS相机同步

山海鲸可视化:GIS融合之路(四)如何用CesiumJS做出Cesium For Unreal的效果

山海鲸可视化:GIS融合之路(五)给CesiumJS加上体积云(Volumetric Cloud)和高度雾(Height Fog)

实际上山海鲸的孪生中已经有了所有的雨雪风电效果,甚至可以直接绑定实时数据来展示天气,具体可以参照隔壁文章:

山海鲸可视化:山海鲸如何实现动态天气

实际上雨雪雷电本身在Cesium上的直接展示基本不需要做任何的特殊处理,我们可以先看下效果:

那么和Cesium的整合有什么特别之处吗,实际上雨雪的效果就是一个粒子效果的叠加,这里并没有什么值得一提的。但Cesium本身并不支持法线贴图的输出,雪面的覆盖是需要当前的法线的,因为法线朝上的积雪的可能性是最高的。

那么Cesium中获取法线信息的方式有哪几种呢

1.倾斜摄影中可以直接通过CustomShader,只要转出来的3dtiles的顶点上有法线信息,就可以直接获取。

2.对于底图和地形,需要改写Cesium的源码修改Shader

对于1来说,一方面要求倾斜摄影转换的时候带了法线信息,同时也只能应用在倾斜摄影中当中

对于2来说,侵入性修改Cesium会导致后续的跟随升级将带来巨大的麻烦,那么剩下的选项就只有通过后处理方式获取法线了,我们现在有的信息一张ColorMap,一张DepthMap,那么留给我们的选项就只有通过dFdx和dFdy来将DepthMap转换为法线贴图。

这个过程相对简单,我们读取depthmap后直接通过以下shader代码进行处理:

scss 复制代码
vec3 vNormalW = normalize( cross(dFdy( positionW.xyz ),dFdx( positionW.xyz )) );

但由于直接的dFdx和dFdy方法输出的法线非常的闪烁,因此我们还需要在这个基础上做一次降噪让法线更加的平滑,由于我们只是用法线来做雪面覆盖,并不需要十分精确,因此我们选择采用联合双边滤波的形式来进行降噪处理,我们结合color和depth在两个维度来进行滤波,最终得到一个相对稳定的雪面覆盖结果:

相关推荐
时间的情敌16 小时前
Cesium 建筑单体化、3DTiles 分类、楼层显隐、分户高亮(BIM + 倾斜孪生高频)
前端·3d·cesium
总要学点什么2 天前
第96篇:三维数据加载-城市建筑白模样式+着色器——让色带按体量上色,最白的那档却涂不上去
前端·gis·webgl·cesium·着色器·空间分析·白模
慧都小妮子2 天前
Wyn商业智能国产数据库适配:数据接入、分析缓存与审计日志验证清单
数据库·数据分析·数据可视化·审计日志·商业智能
总要学点什么3 天前
第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算
前端·gis·webgl·cesium·着色器·空间分析·白模
Flynn Liang3 天前
Apache Superset 重要特性详解(三):语义层 / 权限 / 缓存 / 嵌入的实战最佳实践(2026 版)
大数据·clickhouse·数据可视化·架构设计·superset·数据分析平台
一晌小贪欢3 天前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
我喜欢就喜欢4 天前
倾斜摄影 OSGB 进 Cesium 对不齐?先核 SRS、原点偏移和瓦片路径
gis·cesium·倾斜摄影·osgb·3d tiles
时间的情敌5 天前
Cesium 加载 3D Tiles 倾斜摄影、压平、样式设置(Vue3 实战)
vue.js·3d·cesium
报表开不开发6 天前
用开源报表工具SpringReport做车间大屏+Excel 导出,我踩过的一些坑,基于最初版本的设计开发
数据可视化
QuZhengRong6 天前
【Luck‑Report】 AI 智能报表助手 + RAG 知识库 + 报表引擎 V2.0.9 更新
github·agent·报表·开源项目·数据可视化