游戏开发 · Game DevelopmentNote
天空大气与体积云
Sky Atmosphere & Volumetric Clouds
天空大气 (Sky Atmosphere) 组件是基于物理的天空与大气渲染:模拟瑞利散射 (Rayleigh)、米氏散射 (Mie) 和臭氧吸收,天色随太阳高度变化,并提供带行星曲率的空气透视,可以从地面平滑过渡到外太空。体积云 (Volumetric Cloud) 组件用材质驱动的三维体积纹理做光线步进,多次散射用若干「八度」近似,云的阴影可以用光线步进或 Beer 阴影贴图。
天空大气
- 它是基于物理的天空与大气渲染技术,近似模拟光在行星大气这种参与介质中的散射;支持日夜变化,并提供空气透视 (aerial perspective),可以按正确的行星曲率从地面过渡到天空再到外太空。(Sky Atmosphere Component in Unreal Engine)理论见 天空与云渲染、参与介质与体积散射。
- 最多两个「大气太阳光」:在定向光上勾选 Atmosphere Sun Light,并设置 Atmosphere Sun Light Index(例如 0 是太阳、1 是月亮),天空中会出现日轮,天色取决于阳光和大气属性。天色随太阳高度变化,也就是随主定向光的方向接近与地面平行的程度变化。(Sky Atmosphere Component in Unreal Engine,光源见 光源类型与静态光照)
| 成分 | 物理含义 | 视觉效果 |
|---|---|---|
| 瑞利散射 | 光与空气分子等小粒子作用 | 天空的颜色 |
| 米氏散射 | 光与灰尘、花粉、污染物等大粒子作用;主要向前散射 | 天空发朦;太阳周围的明亮光晕,用 Mie Anisotropy 控制各向异性 |
| 臭氧吸收 | 吸收层 | 调节天色 |
(Sky Atmosphere Component in Unreal Engine)
体积云
- 过去实时云多用贴在天穹网格上的静态材质。现在体积云系统对一个三维体积纹理做光线步进来表现云层,以材质驱动:云可以在天空中移动、可以是任何类型,并能适应日夜变化;支持地面视角、飞行以及从地面到太空的过渡。(Volumetric Cloud Component in Unreal Engine)
- 多次散射近似:云这种参与介质的完整光照模拟在消费级硬件上太贵,系统改为在体积材质里追踪若干「八度 (octaves)」的透射率来近似多次散射。八度数在 Volumetric Advanced 材质输出节点上设置;八度越多越贵。游戏项目建议只用一个八度,用高 Contribution、低 Occlusion 达到类似效果而不增加开销。(Volumetric Cloud Component in Unreal Engine,材质见 材质系统)
flowchart LR M["云材质<br/>体积纹理 + 噪声"] --> R["沿视线光线步进"] R --> S["每步:向光源方向估计透射率<br/>多次散射按八度近似"] S --> O["累积颜色与透射率"] SH["云阴影:光线步进 或 Beer 阴影贴图"] --> G["地面阴影、大气中的光束"]
图中左边是渲染云本身的步进流程,下方是云投到地面和大气中的阴影。
云阴影
两种模式:默认的光线步进 (Ray Marched),以及 Beer 阴影贴图 (BSM)。BSM 使用级联阴影贴图来支持远距离的云阴影和投射到地面的阴影(级联思想见 级联阴影贴图),从地面看云时通常就够了;在 Xbox One、PS4 级别的平台上推荐用 BSM。在大气光源上开启 Cast Cloud Shadows 后,云可以遮挡场景并在大气中投出光束(俗称 God Rays);Cloud Shadow Map Resolution Scale 决定光束的分辨率和开销,缩小 Cloud Shadow Extent 可以让阴影贴图分辨率更集中、阴影更锐利。(Volumetric Cloud Component in Unreal Engine)
取舍
天空大气与体积云适合需要日夜循环或飞行视角的项目。固定时间的场景用传统天空盒更便宜(见 天空与云渲染 中的讨论;这是对理论页的引用,不是 UE 文档的结论)。体积云的开销主要由八度数、步进和阴影分辨率决定。