avatar

Ycyofmine’s Blog

云鸮雨霁

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
首页 GAMES104 06.游戏中地形大气和云的渲染(下)
文章

GAMES104 06.游戏中地形大气和云的渲染(下)

发表于 2024/10/16
作者 Ycyofmine
4 分钟阅读

大气散射理论

Analytic Atmosphere Appearance Modeling

公式有两个参数:向上看的方向与天顶的夹角θ,向上看的方向与太阳的夹角γ

优点:计算简单高效

缺点:局限于地面视角,不能模拟从空中看、参数不能自由修改

Participating Media

也就是空气中的气溶胶。

光线与 Participating Media 的交互包括

  • Absorption 吸收
  • Out-scattering 散射
  • Emission 发光
  • In-scattering 附近的 Participating Media 的 Out-scattering 对打到自己

Volume Rendering Equation(VRE)

Scattering Types

Rayleigh Scattering(瑞利散射)

对于越短的波长(蓝光、紫光)散射得越厉害,长波长(红光)散射很少。

λ是波长,θ是光线和介质的夹角,h是海拔高度(用来表示空气密度)

大多用于计算天空颜色

Mie Scattering

  • 有方向性,沿着光的方向会略强,不考虑波长的影响
  • Mie散射一般表现雾和光晕

公式有问题,请注意

实时大气渲染

Ray Marching

现实中气体散射会影响场景中的光照,上图中山的背面被空气的散射照亮。为了解决这一问题,我们可以使用 Ray Matching 的方式处理。

Ray Marching 主要计算的内容包括光线沿路径的距离、与物体的交点、体积密度、光线的散射和遮蔽等

  • 沿着射线,在固定步长下,一步一步地积分起来。
  • 计算复杂,那么就空间换时间,预先计算,存在表中。

    Precomputed Atmospheric Scattering(重要)

    大气模拟主要看两个参数:transmittance通透度、scattering散射

  • 存 在地球上的任意一个点,视线与天顶的夹角
  • 存 现在所在的海拔高度
  • transmittance LUT存的就是从这么一个点看向这个θ方向,直到大气层的边界处,这些大气的通透度
  • scattering散射要用三个角度算

缺点:

  • multi-scattering很贵

  • 手机端不好生成transmittance LUT

  • 不好生成动态的切换效果,晴天变雨天

Production Friendly Quick Sky and Atmosphere Rendering

好文

先大胆假设,散射在各项分布是同样的。

这些光入射到你的点上,再散射回来的话,就是一个百分比的衰减

(没听懂喵)

云的渲染

Volmentric Cloud Modeling

  • 优点:全动态、形状多变、可以飘

  • 缺点:效率低,运算昂贵

  • Weather Texture:随机的云的分布+云的厚度

  • Noise Functions

    • Perlin Noise:用一个多项式的时间

    • Worley Noise

Cloud Desity Model

Ray Marching

又是他😋

  • 从屏幕射出一条ray

  • 在hit到cloud之前使用big step

  • hit到cloud之后在云里面使用dense step(小一点的步长)

  • 计算从太阳散射到云的radiance

tips:

评论区看到的大气密度拟合式 地球的大气层密度是随着高度大致呈指数下降的, 搜Barometric Density可以得到比较精确的拟合式. 这里贴上我与 @himisa 制作的提升GPU运算性能的拟合式:

1
2
3
4
5
6
7
8
9
float ApproxEarthDensity(float altitude)
{
    const float c0 = +2.452059275959612e-01;
    const float c1 = -1.021307723720660e-04;
    const float c2 = -6.682324198067511e-09;
    const float c3 = +1.421577941465463e-13;
    const float c4 = -1.006813818672577e-18;
    return exp2(c0 + altitude * (c1 + altitude * (c2 + altitude * (c3 + altitude * c4))));
}
GAMES104
games104
本文由作者按照 CC BY 4.0 进行授权
分享

最近更新

  • ROS2中并发连接蓝牙手柄排错过程
  • 自行编译ros2-humble-plotjuggler
  • Ubuntu 22.04上蓝牙无法打开——(MT7922网卡为例)
  • Isaac sim遥操作控制
  • RPC:原理、组成与局限性
外部链接
  • codetime
  •  此博客的 Github 仓库

文章内容

相关文章

2024/11/12

GAMES104 09.高级动画技术:动画树、IK和表情动画

动画混合 Math of Blending: LERP Calculate Blend Weight Align Blend Timeline 把两个循环动画时间归一化,要求动画师对齐两组动画中的关键点。 如果align或者插值没做好,容易出现滑步。 混合空间 1D Blend Space 混合方向,但是没有混合运动速度。 2D Blend S...

2024/11/05

GAMES104 08.游戏引擎的动画技术基础(下)

蒙皮动画的实现:关节与蒙皮 Joint Pose Affine Matrix Orientation 大部分骨骼动画是旋转。 Position Pelvis、特殊的机械结构、facial joints会发生位置的变化。 Scale 对面部进行修改。 Loca...

2024/11/01

GAMES104 08.游戏引擎的动画技术基础(上)

靠,被专周硬控一周,不过好在大概知道C++项目整个流程是什么样的了,也算是有所收获。 2D游戏动画技术 Sprite animation 多张图片顺序播放。 Live 2D 将图片拆分成多个图源,在图源上打上控制点,通过移动控制点来达到图片变换的效果。 3D游戏动画技术 DoF(Degrees of Freedom) 六方向自由度代表可以按 xyz 进行平移或旋转。 Rigid Hi...

GAMES104 06.游戏中地形大气和云的渲染(上)

GAMES104-作业2

© 2025 Ycyofmine. 保留部分权利。

本站采用 Jekyll 主题 Chirpy

热门标签

games104 UE c++ robot OS 装机 计网 essay

发现新版本的内容。