Cesium中实现阴影率分析
看到群里有人在研究这个,所以看了一下。主要是模仿超图的 阴影率分析 ,实现原理超图有做回答:
但其实超图的这个实现方式还是过于复杂,原因是:既然是获取太阳的日照阴影,而 Cesium
中原本就存在太阳,且能投射阴影,因此其实并不需要再次计算太阳位置并计算视锥获取深度图,直接使用 Cesium
原生的太阳深度图即可。
改进后的实现原理
改进的方向主要是直接利用原本就存在的太阳阴影深度图:
- 生成测试点。
- 开启阴影效果,设定时间范围,并使时间开始流动。
- 时钟每次
tick
都获取一次当前的深度图。 - 计算每个测试点投影回太阳深度图上的位置和深度。
- 通过比较深度判断是否在阴影里。
- 统计结果并展示
加速计算
事实上如果直接按照上面的思路来会发现,计算效率很低,会导致浏览器的卡顿。那么怎么提升计算效率呢?
通过观察可以发现,上面的计算过程其实就是每个测试点都进行一次相同的操作,这种计算就非常适合放到 GPU
中进行。
因此我们其实可以创建一个 DrawCommand
,传入所有点的位置和当前的阴影信息,编写着色器完成上述计算,将结果输出成纹理,最后从纹理上读取结果即可。
更多
不要忘记一键三连,栓 Q!
Cesium中实现阴影率分析
https://www.liaomz.top/2023/04/18/cesium-zhong-shi-xian-yin-ying-lu-fen-xi/