games104现代游戏引擎学习笔记整理(06游戏中地形大气和云的渲染——天空篇)

简单的大气表现模型:一般通过一个半球形的天空盒表示,给定视角射线与太阳的角度和与天顶的夹角,通过查表(一套解析解)获得应该看到的颜色。这样做会使计算非常有效率,但是坏处是只能做地表的效果,飞上天空的效果是难做的 。此外,所有参数都是写死的,因此下雨之类的不同天气会很难写。

Participating Media:空气中的气溶胶和其它介质,由于这些介质才会产生各种光学现象。光和Participating Media的交互有四种:1.光在气体中被吸收;2.光在气体中的散射;3.气体的自发光(闪电,火焰,很少人做); 4.周围的气体的光打到该气体分子。这四种交互结合起来就是大气发光的原理。用于表示这些交互的函数名为radiative transfer function,简称RTF,中文名为辐射传递方程。

 光从M点经过一系列吸收和反射折射到达P点,其强度的计算主要和两个参数有关:通透度和Scanning power(表示粒子反射折射过来的光),在这两个参数下获得光场,就能知道在P点向M能看到的光强,用于计算这个的方程称为Volume Redering Equation(VRE)。该方程的计算结果实质上就是对RTF的积分。

 真实的大气物理学中,大气的光强主要取决于下面两者的情况:太阳(包含不同波长的光)和大气,大气又包含气体分子(一般小于波长)与气溶胶分子(一般接近波长)。

两种大气散射模型:

Rayleigh Scattering(瑞利散射):空气中介质尺寸远小于波长时,介质对于光的散射偏于均匀,呈花生状。对于越短的波长(蓝紫光),光的散射程度越强;对于越长的波长(红光),光的散射程度越弱。下图公式中,最右边的部分表示形状,中间表示波长的影响,h表示海拔高度,N是标准大气密度。

 Mie scattering(米氏散射):空气中介质接近波长时,光的散射具有很强的方向性,但是对波长本身大小不敏感。这种散射模型一般被用于做雾和傍晚日晕的效果。

光的吸收模型:大气中的甲烷和臭氧是吸收长波长光的主力。实际计算时由于效率问题,会假设臭氧和甲烷均匀分布于大气。

Single scattering和Multiple scattering:单向散射和多方向散射,一个直接通过通透度等参数获得光从大气折射到眼中的效果,一个是计算光在大气中多个粒子弹射并相加获得的结果,简单来说前者直接把整个大气模拟成一个模型,后者则是考虑到了大气中不同的粒子和介质。

 Ray Marching:沿着一条视线不断采样,将沿途的粒子散射方程一步步积分出结果。

大气反射的预计算:

将空间中任意点的海拔高度及该高度下视线和天顶角度作为自变量的一个方程,方程表示了该点处沿角度方向到天顶外壳的通透度,由此可以运用除法算出外壳内某两点之间的通透度。

存储方式:一个四维表,三个输入参数分别是:视线与太阳的角度,视线与天顶轴的角度,太阳与天顶轴的角度,获得的是某个点的通透度。

问题:需要大量的计算,且无法做到天气的逐渐改变,且需要做很多表的插值(因为表存储的是采样)。

现在的方法:在假设周围光是均匀照入的情况下,散射是均匀的,这样只需要算出每次能量的损耗(这个假设是固定的),从而很简单地得出无数次散射后光照的贡献度。

好处:在硬件上十分高效且效果差别不是很大,但是在空气中散射度过高的情况下可能会出现色偏。

云:有三种类型,层云(很薄),层积云,卷云。低空看到的是层云,中部看到层云和层级云,高处看到卷云。

 最经典的方法:用mesh表达,但没多少人用,因为计算会很昂贵。

Billboard Cloud:用很多半透明的插片去做,优点是效率很高,但是视觉效果一般,且云的种类受限。

Volumetric Cloud Modeling:全动态的生成云,云能有多重形态,但是非常复杂,且做不好的话代价会十分高昂。

Weather texture:表示云的贴图,由云在空间中的随机分布和晕的厚度两个参数构成。移动texture就可以表示云的移动,改变参数可以表示云的变化。

Noise Function:生成云的重要噪声函数,两个比较著名的是Perlin Noise和Worley Noise,前者能生成棉花丝一样的图像,而后者则能生成絮状的图像。噪音函数主要是用于实现对云的“腐蚀”,形成云的细节。

 采用Ray Marching的方式渲染云:视线打出后不断采样获得通透度和散射效果,在云中的采样比别处要密集。由于云本身通透度很低,因此可以通过很多假设来加快速度。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值