UE5 体积云
何为体积云?
- 体积云是一个基于物理的云渲染系统,该系统使用一种材质驱动的方式,让美术师和设计师可以自由地创建它们所需要的的任意类型的云
- 云渲染系统处理动态时间设置,使用实时捕获的Sky Atmosphere和Sky Light进行补充
- 云渲染系统提供可伸缩的、可由美术定义的、可适用于使用地面视角、飞行及地面到外太空过渡的项目
原理
-
光线打进云中会在云中进行散射,这个散射可能进行多次。因此我们看到的云的颜色可能各个部分都是不同的,所以需要对其进行计算
-
大致计算流程如下
- 这里先以其中一条光线为例,该光线打中云中一点(图中的白色点)
- 为了计算该路径的光强,需要向光源投射另一条光线,计算到达云边所需要的步进,根据步进数求得该点的光线强度。再计算该路径上的所有的白色点,最后将他们累加,所得值即为该路径上的云层到人眼的光线强度
- 最后从观察点投射多个光线
- 这里先以其中一条光线为例,该光线打中云中一点(图中的白色点)
-
UE的体积云
UE的体积云类似一个围绕着大气的Raymarching Shader Object,体积纹理通过raymarching生成云,而云的显现由mask纹理控制
启用体积云
想要使用体积云系统有几个必要的组件和设置需要启用
- Directional Light
- Sky Atmosphere
- Sky Light
- Volumetric Cloud
修改Directional Light设置
- 设置可移动性: Stationary / Movable
- 启用"Atmosphere Sun Light"
修改Sky Light
- 设置可移动性: Stationary / Movable
- 启用"Real Time Capture"
体积云参数
- Layer Bottom Altitude:云层底部的高度,单位km
- Layer Height:云层顶部的高度,单位km
- Tracing Start Max Distance:在该最大距离前开始tracing,单位km
- Tracing Max Distance:云层内部tracing的最大距离,单位km
材质编写
根节点设置
云的颜色
添加mask
本篇使用的纹理在如下位置。该纹理仅仅是一个灰度值
这里对单位进行了转换。因为UE的世界单位是cm,而体积云的单位是km,且UE不允许小数点后六位
走至云的上方可查看效果
边缘
找到以下体纹理
对体纹理进行-1是因为后续需要和2dmask进行求和,因此这里取负
高度
为了控制云的高度和深度,需要用到以下函数
-
Altitude:云在世界坐标下的高度
AltitudeInLayer:云在云层中的高度
NormAltitudeInLayer:归一化后的云在云层中的高度
透光性
需要用到以下函数
- PhaseG:云层的透光性(光学相位函数方向)
- Multi Scattering Contribution:控制光在云层中的散射程度
- Multi Scattering Occlusion:控制光在云层中散射的衰减程度
- Multi Scattering Eccentricity控制光在云层中的散射呈各向异性(0)/ 各向同性(1)
动画
最终效果
reference
https://www.worldofleveldesign.com/categories/ue4/volumetric-clouds-analysis.php
https://docs.unrealengine.com/5.2/en-US/volumetric-cloud-component-properties-in-unreal-engine/
https://zhuanlan.zhihu.com/p/373361388
https://www.youtube.com/watch?v=aYxvN5cs-EU
https://www.youtube.com/watch?v=4QOcCGI6xOU&list=PLFt_AvWsXl0ehjAfLFsp1PGaatzAwo0uK&index=6
https://zhuanlan.zhihu.com/p/560698789