Cesium实现点光源
点光源:有位置、光的方向从一个点往四周发出、光随着距离有衰减
参考资料
{% link Cesium中实现体渲染,槑,https://www.liaomz.top/2023/02/04/cesium-zhong-shi-xian-duo-guang-yuan/ %}
{% link 3D图像学-光强随距离的衰减公式,gogoda,https://www.liaomz.top/2023/02/04/cesium-zhong-shi-xian-duo-guang-yuan/ %}
{% link 图形学基础-光源,杨鼎超,https://zhuanlan.zhihu.com/p/360821314 %}
{% link Cesium深入浅出之可视域分析,Helsing Wang,https://www.cnblogs.com/HelsingWang/p/13584110.html %}
实现
点光源实现
确定光源属性
- 确定你要使用的点光源的属性。包括位置、颜色、强度等作为uniform 数据传递给着色器
计算光照衰减
- 确定是简单的反比例衰减还是在一定范围内平滑过渡的模型。
- 在实际运用中,通常为了性能考虑,需要对随距离平方衰减的光强再乘以一个窗口函数(参考图形学基础-光源的点光源窗口函数的公式)
计算光照强度
- 通过光照衰减、光照颜色和传入的强度参数计算光照强度
获取视觉坐标和法向量
- 将纹理坐标转换为视觉坐标,获取positionEC和normalEC
计算光照影响
- 通过上述得到的数据在后处理中计算对当前每个像素的影响
合并光照和纹理颜色
- 将光照影响和纹理颜色进行叠加,得到最终的颜色。
阴影实现
如果直接用Cesium自带的shadowMap,会有一个阴影圈,而且效果很一般,如下图所示。
因此这边需要模仿可视域分析来做阴影,参考链接在上方,代码逻辑Helsing大神都讲的很清晰了,这边就不赘述了。