Skip to content
Cesium实现点光源

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,会有一个阴影圈,而且效果很一般,如下图所示。

1697783860247.png

因此这边需要模仿可视域分析来做阴影,参考链接在上方,代码逻辑Helsing大神都讲的很清晰了,这边就不赘述了。

效果

Updated at: