Cesium中实现下雪覆盖效果

实现原理

下雪覆盖效果的实现原理其实很简单,计算方法如下:

  1. 获取当前像素在世界坐标系下的法线方向 normalWC。
  2. 获取当前像素的上方向 upWC(在 Cesium 中,计算当前像素点的上方向,可以通过简单的将当前位置单位化得到)。
  3. 判断 normalWC 和 upWC 两个向量的接近程度。
  4. 如果 normalWC 越接近 upWC ,则雪覆盖的越多,反之越少。

具体实现

在Cesium中实现下雪覆盖有两种实现方式,后处理或修改模型着色器。

后处理方式实现

后处理实现的优点:

  • 实现方式灵活,与其他部分的代码耦合度低
  • 一次更改适用所有物体

后处理实现的缺点:

  • 计算较复杂

值得注意的是,在后处理中不要使用偏导数计算法向量,会导致闪烁问题

实际效果

后处理雪覆盖

修改模型着色器方式实现

修改模型着色器方式实现的优点:

  • 计算简单

修改模型着色器方式实现的缺点:

  • 需要为各个物体单独改写着色器(如3dtiles的着色器、primitive的着色器、地形的着色器)
  • 容易与其他修改着色器的效果产生冲突

实际效果体验

模型着色器雪覆盖.png


Cesium中实现下雪覆盖效果
https://www.liaomz.top/2022/09/16/cesium-zhong-shi-xian-xia-xue-fu-gai-xiao-guo/
作者
发布于
2022年9月16日
许可协议