Cesium高级教程-后处理体积云-体积云原理
体积云与普通材质云
体积云与普通材质云最大的区别就是体积云有厚度(体积感),能够进入云中,更加具有真实感。
普通材质云,效果可到 进阶教程-示例效果 中查看
示例效果可到 xt3d 官网 运行查看
体积云,本章要实现的效果
示例效果可到 xt3d 官网 运行查看
体积云原理
目前实现体积云最常用的方式是云图噪声+光线步进
通过云图噪声生成云的基本形状,然后通过光线步进采样云的密度
-
云图噪声
云图噪声
主要用来生成云的形状,噪声的生成可以通过glsl
实时生成,也可以通过工具将其生成为2D/3D纹理
数据,方便加载使用,比如 shadertoy柏林+沃利噪声 -
光线步进
因为云的形状是
不规则
的,所以无法使用简单的几何算法判断交点,而光线步进
则可以很好地解决云的求交问题。 因为光线步进的原理是模拟光的前进,所以光从哪儿前进,每次前进多少,最多前进多远这些参数的设置对程序的性能有很大影响。对于局部的体积云,一般使用一个Box来表示云的范围,为了提高程序性能,光线步进一般只在该Box中进行,所以对于每条光线,首先需要获取其在Box上的起点和终点。
关于体积云更多的知识及原理可以参考以下文章,大部分都是基于游戏引擎的,因为体积云最早就是出现在游戏引擎中。
也可以百度搜索 `体积云` 查看更多信息
在Cesium中实现体积云
体积云不是实体,所以是没有顶点信息的,因此我们只能通过片元着色器来实现。在Cesium中主要有以下两种实现方式
-
图元
基于
Primitive
的方式可见体渲染
一章中体渲染的实现,此种方式是通过将体内的计算结果显示到Geometry
表面上来,所以虽然看起来像体,但其实还是Geometry
表面渲染。 -
后处理
基于
后处理
实现体渲染,更接近真实的体渲染效果,但是此方式需要在片元着色器中还原世界坐标,相对麻烦一点,不过在后处理中还原世界坐标的相关知识,相信对于此阶段的您已不成问题,如果相关知识您还不会,可以先看看进阶教程
。
本章优先使用后处理进行体积云的实现,学完后您也可以使用
图元
的方式进行改写。
要实现体积云,我们可以先参考游戏引擎的相关代码,作者实现体积云也是参考的其他引擎的代码,所以本章的重点在于讲解在Cesium的整体实现思路,至于涉及到的着色器里面的计算原理,作者也是shader
菜鸡,也只能看懂大概的执行过程,至于里面的一些数学计算方法也是懵逼得很,所以涉及到的着色器计算不会一一讲解。
更多内容见 Cesium高级教程-教程简介