Cesium中实现下雪覆盖效果
实现原理
下雪覆盖效果的实现原理其实很简单,计算方法如下:
- 获取当前像素在世界坐标系下的法线方向 normalWC。
- 获取当前像素的上方向 upWC(在 Cesium 中,计算当前像素点的上方向,可以通过简单的将当前位置单位化得到)。
- 判断 normalWC 和 upWC 两个向量的接近程度。
- 如果 normalWC 越接近 upWC ,则雪覆盖的越多,反之越少。
具体实现
在Cesium中实现下雪覆盖有两种实现方式,后处理或修改模型着色器。
后处理方式实现
后处理实现的优点:
- 实现方式灵活,与其他部分的代码耦合度低
- 一次更改适用所有物体
后处理实现的缺点:
- 计算较复杂
值得注意的是,在后处理中不要使用偏导数计算法向量,会导致闪烁问题。
实际效果
修改模型着色器方式实现
修改模型着色器方式实现的优点:
- 计算简单
修改模型着色器方式实现的缺点:
- 需要为各个物体单独改写着色器(如3dtiles的着色器、primitive的着色器、地形的着色器)
- 容易与其他修改着色器的效果产生冲突
实际效果体验
Cesium中实现下雪覆盖效果
https://www.liaomz.top/2022/09/16/cesium-zhong-shi-xian-xia-xue-fu-gai-xiao-guo/