摘要
我们提出了一种全新且精确的方法,能够实时渲染从地面到外太空任意视点的大气效果,同时考虑瑞利散射和米氏多重散射。该方法可再现光散射的多种效果,例如不同视角和光线方向下的日光与晨昏天空颜色、空中透视,以及大气中的地球阴影和山体阴影(光轴)。此方法基于可预计算所有视点、视角和太阳方向的光传输方程公式,我们展示了如何紧凑存储这些数据,并提出一种适用于 GPU 的算法,可在几秒内完成预计算。这些预计算数据使我们能在运行时以恒定时间评估光传输方程,无需任何采样,同时兼顾地面的阴影和光轴效果。
1. 引言
在众多应用中,大气效果对增强户外场景的真实感至关重要。天空颜色能提供一天中时间的关键信息,空中透视则是判断距离的重要线索。在许多游戏或应用(如飞行模拟器、谷歌地球等地球浏览器)中,需要实时、连续地从地面到太空渲染这些效果,对于追求真实感的应用(如 Celestia 或美国国家航空航天局的 WorldWind)尤其如此。然而,这些应用目前采用非常基础的模型,无法呈现逼真图像。
本文提出一种方法,可从地面到太空的任意视点实时渲染这些效果,且考虑多重散射 —— 这对正确渲染晨昏现象或大气中的地球阴影(见图 8)至关重要。该方法基于适度简化假设,相比先前研究能得到更优的渲染方程近似解,其中大部分项可预计算。这是首个兼顾所有视点、所有视角和太阳方向及多重散射的实时方法。
下文结构如下:第 2 节介绍物理模型和渲染方程并回顾相关工作;第 3 节提出可预计算的求解方法;第 4、5 节介绍预计算和渲染算法;第 6 节提供实现细节并展示结果。
2. 大气模型
渲染大气光照涉及两方面:局部介质特性的物理模型,以及到观察者眼睛的全局光照交换模拟,包括与地面的交换(可建模为具有反射率 α(x,λ)、法向量 n (x) 等高度场的朗伯表面)。
多数计算机图形学(CG)论文(从 [NSTN93] 开始)基于包含空气分子和气溶胶粒子的介质物理模型(见第 2.1 节)。但在大气 CG 模型中,尤其是交互式渲染中,很少完全考虑参与介质的经典渲染方程。第 2.2 节重新阐述一般模型,第 2.3 节介绍先前 CG 模型中的近似。
2.1. 物理模型
CG 中常用的晴空模型基于两种成分:空气分子和气溶胶粒子,位于密度递减的球形薄层中(介于 Rg=6360 km 和 Rt=6420 km 之间,见图 1)。
在任意点,光被散射到与入射方向成 θ 角的比例由散射系数 β^s 和相位函数 P 的乘积决定。β^s 取决于粒子密度,P 描述角度依赖性。对于空气分子,β^s 和 P 由瑞利理论给出 [TS99]:
其中 h = r-Rg 为高度,λ 为波长,n 为空气折射率,N 为海平面 Rg 处的分子密度,HR=8 km 为大气密度均匀时的厚度。如 [REK∗04],对于 λ=(680,550,440) nm,使用 β_R^s=(5.8,13.5,33.1)×10^-6 m^-1。气溶胶密度也呈指数递减,高度尺度更小(HM≈1.2 km),其相位函数由米氏理论给出,用 Cornette-Shanks 相位函数近似 [TS99]:
与空气分子不同,气溶胶会吸收部分入射光,由吸收系数 β_M^a 衡量,进而得到消光系数 β_M^e=β_M^s+β_M^a(典型值见图 6,空气分子的 β_R^e=β_R^s)。注意,折射率随高度的变化会导致光线轻微弯曲(小于 2 度 [HMS05]),为简化计算此处忽略。
2.2. 渲染方程
参与介质渲染方程应用于大气时,记 L (x, v, s) 为太阳在方向 s 时,从方向 v 到达 x 的辐射亮度,x_o (x, v) 为射线 x+tv 的端点(见图 1)。x_0 要么在地面,要么在大气顶边界 r=Rt。x_0 和 x 之间的透射率 T、x_0 处反射光的辐射亮度 I、x 处沿 - v 方向散射光的辐射亮度定义如下(见图 2):
图 1:我们的方法。左:参考解决方案包括单次散射(a)和多重散射(b),从 x 积分到 xₒ,考虑遮挡;右:我们的近似,从 x 积分到 x̄ₒ,忽略遮挡(通过 xₛ间接考虑,影响较小)。(a)不变,(b)因忽略二次散射的遮挡产生正负偏差,影响较小。
图 2:定义。(a)大气透明度 T 由吸收和外散射导致;(b)ℐ[L] 是 xₒ处反射的光,在大气顶边界为零;(c)𝒥[L] 是 y 处沿 v 方向散射的光 L;(d)𝒮[L] 是 x 到 xₒ间沿 x 方向散射的光。
大气顶边界上 I 为零。结合这些符号,渲染方程为 [TS99]:
其中 L₀是到达 x 前被 T (x,xₒ) 衰减的直接太阳光 L_sun,若 v≠s 或太阳被地形遮挡(x₀在地面),则 L₀为零。ℛ[L] 是 x₀处反射并在到达 x 前衰减的光,𝒮[L] 是 x 与 xₒ之间沿 x 方向散射的光(见图 2)。
2.3. 先前的渲染方法
方程 8 求解复杂,CG 中常做简化假设以寻找近似解(见 [Slo02] 综述)。多数实时方法忽略多重散射,此时方程 8 简化为 L=L₀+ℛ[L₀]+𝒮[L₀],但即使𝒮[L₀] 求解也较复杂。部分作者通过理想化(如平坦地球与恒定大气密度 [HP02]、无米氏散射 [REK∗04])得到解析解,但平坦地球假设仅限地面观察者;否则𝒮[L₀] 通常通过数值积分计算 [O'N05]。
忽略多重散射对日光可接受,但对晨昏不行 [HMS05]—— 因日落 / 日出时太阳光穿过的大气更厚。部分作者提出考虑多重散射的方法:[PSS99] 用解析模型拟合双散射蒙特卡洛模拟结果,但仅对地面观察者有效;[NDKY96] 和 [HMS05] 用体积辐射度算法,却远非实时(每张图像需几分钟到几小时)。
本文方法受 [SFE07] 启发,扩展了多重散射、视角 - 太阳角度参数、更优的预计算表参数化及新的光轴方法,可从地面到太空任意视点实时渲染天空和空中透视,同时考虑多重散射。
3. 我们的方法
为兼顾效率与真实感,我们尽可能预计算 L,仅做最小近似:零散射和单散射精确计算,多重散射则通过遮挡效应近似。为获正确地面颜色、阴影和光轴,零散射和单散射考虑详细地面形状;多重散射为便于预计算,用具有恒定反射率的完美球体近似地面。
符号说明
记 L̄=L̄₀+(ℛ̄+𝒮̄)[L̄] 为恒定反射率ᾱ的完美球形地面时方程 8 的解。L̄₀、ℛ̄、𝒮̄、x̄₀等定义同上,但针对球形地面。因地面球对称性,x 和 v 可简化为高度和视角天顶角,故 L̄或𝒮̄[L̄] 等可简化为 4 个参数的函数(x、v 各 2 个,s2 个)。此外,L(或 L̄)可用ℛ和𝒮(或ℛ̄和𝒮̄)的线性算子级数表示,第 i 项对应恰好反射和 / 或散射 i 次的光:
零散射和单散射
渲染时精确计算 L₀和ℛ[L₀]:用阴影算法计算太阳遮挡(见方程 9),用预计算的 2 参数透射率表 T(见第 4 节)。𝒮[L₀] 较复杂,因 L₀中的遮挡项,阴影区域的被积函数为零(形成光轴)。假设阴影点在 xₛ和 x₀之间(见图 1,一般情况见第 5 节),则积分简化为受光段 [x,xₛ],且遮挡可忽略(通过 xₛ已考虑),即 L₀可用 L̄₀代替,故𝒮[L₀]=∫ₓˣˢT𝒥[L̄₀]。借鉴 [O'N05] 和 [SFE07] 的思想,重写为∫ₓˣ̄₀T𝒥[L̄₀]-∫ₓˢˣ̄₀T𝒥[L̄₀],最终得到用 2 参数和 4 参数可预计算函数 T∗和𝒮̄[L̄₀] 的公式:
多重散射
尽管存在遮挡,L₀和 L₁可精确计算,但 L₂+...=ℛ[L₊]+𝒮[L₊] 中的遮挡难以处理。好在白天多重散射效应较单散射小,地面未受太阳直射时贡献也小,故近似为:𝒮[L₊]≈∫ₓˣˢT𝒥[L̄₊](积分不考虑遮挡的多重散射贡献);用地面切平面的水平半球环境遮挡 1+n・n̄近似ℛ[L₊] 中的遮挡,得ℛ[L₊]≈ℛ̂[L₊]:
结合方程 13 的重写规则,记𝒮̄[L]|ₓ=𝒮̄L,最终得:
其中前三项可借助预计算的 2D 表 T 和ℰ̄[L̄₊] 快速计算,𝒮[L] 可预存在 4D 表中。下文介绍如何将其预存在合理大小的表中。
4. 预计算
预计算 T (x,x̄ₒ(x,v)) 并存储在 2D 表𝕋(x,v) 中。因球对称性,T 仅依赖 r=|x | 和 μ=v・x/r [O'N05],利用恒等式 T (x,y)=T (x,v)/T (y,v)(v=(y-x)/‖y-x‖)计算。
用算法在表𝔼和𝕊中预计算ℰ̄[L̄₊] 和𝒮̄[L̄],逐次计算各散射阶 Lᵢ,用中间表 Δ𝔼、Δ𝕊、Δ𝕁存储ℰ̄[L̄ᵢ]、𝒮̄[L̄ᵢ]、𝒥[Lᵢ],每次迭代后将 Δ𝔼和 Δ𝕊添加到结果表中(ℛ̄[L] 用恒等式ℛ̄[L](x,v,s)=T(x,x̄ₒ)ᾱ/π·ℰ̄[L](x̄ₒ,s)计算,见算法 4.1)。
角度精度
4D 表𝕊的大小随分辨率快速增长,故角度分辨率有限,仅米氏强前向散射存在精度问题。为此,将单米氏散射项与其他项分离,运行时再应用相位函数:重写𝒮̄[L] 为 Pₘ𝒮̄ₘ[L̄₀]+Pᵣ𝒮̄ᵣ[L̄₀]+𝒮̄[L̄₊],分别存储 Cₘ=𝒮̄ₘ[L̄₀] 和 C₊=𝒮̄ᵣ[L̄₀]+𝒮̄[L̄₊]/Pᵣ,需𝕊中每个条目含 6 个值。为提高效率,可仅存储 Cₘ的红色分量 C.r,其他分量用比例规则近似(Cₘ≈C₊・Cₘ,ᵣ/C₊,ᵣ・βᵣ,ᵣˢ/βₘ,ᵣˢ・βₘˢ/βᵣˢ)。
参数化
为将𝒮̄[L̄] 存入𝕊,需建立 (x,v,s) 到 [0,1]⁴表索引的映射。简单方案是用 r=‖x‖及视角天顶角、太阳天顶角、视角 - 太阳角的余弦 μ=v・x/r、μₛ=s・x/r、v=v・s(从 [Rg,Rt]×[-1,1]³ 线性映射到 [0,1]⁴)。
但该参数化对空中透视采样需极高 μ 分辨率(如观察 100 km 外的山,Δμ=0.016≪1,易产生伪影,见图 3)。
图 3:视角参数。左:用 μ 产生伪影;右:用 u_μ=dₒ/dₕ或 dₒ/d_H 解决问题(预计算天空辐射度表𝕊中用 128 个 μ 或 u_μ 值)。
为此,用 u_μ 替代 μ,u_μ 定义为距离 dₒ=‖x̄ₒ-x‖与 x 到地平线的距离 dₕ(或到地平线后大气边界的距离 d_H)的比率(见图 3)。此时 Δu_μ=0.11≫0.016,128 个 u_μ 样本即可避免伪影。
另一个问题是𝕊在地平线处因视线长度不连续而不连续,连续映射会导致跨不连续的线性插值伪影。解决方案是让 u_μ 在地平线处本身不连续(见图 4)。
图 4:参数化 uᵣ、u_μ、u_μₛ作为 r、μ、μₛ的函数。
最后,对 r 和 μₛ采用非线性映射,以在地面附近和太阳天顶角接近 90° 时提高精度。最终映射定义为:
1/2−(rµ−∆+H2)/(2ρ+2H),否则
其中 ρ=(r²-Rg²)¹/²,H=(Rt²-Rg²)¹/²,Δ=r²μ²-ρ²
图 5:l 的评估。左:因假边界 b 和 c,计算的长度 Δz-Δn・zₐₜₘ> 实际长度 l,钳位到 zₘᵢₙ可修正;右:视点在阴影中,仅用挤压边会误判为受光,将后向面投影到近平面可解决 [HHLH05]。
5. 渲染
渲染天空和空中透视时,在每个像素处评估方程 16。L̄₀用 T 高效计算;ℛ[L̄₀] 计算涉及 T、α(xₒ)、n (xₒ) 及 x₀是否受光的阴影测试;𝔼和𝕊用于计算ℛ̂[L̄₊] 和𝒮̄[L̄]。x 为相机位置(太空时为视线与大气边界的最近交点),唯一非平凡参数是 xₛ(依赖地形阴影,产生光轴)。
多数光轴算法沿视线采样或切片做数值积分,用阴影图判断受光样本,需每条射线多达 100 个样本以消除离散采样伪影 [IJTN07]。本文提出受阴影体积启发的新方法 [HHLH05],不依赖数值积分,故无此类伪影。先说明精确计算虽可能但不适合 GPU,再提出更适合 GPU 的近似方案:用预计算积分𝕊计算沿视线各受光段 [xᵢ,xᵢ₊₁] 的散射光(T (x,xᵢ)𝕊|ₓᵢ-T (x,xᵢ₊₁)𝕊|ₓᵢ₊₁)。xᵢ在地形阴影体积的边界上,可通过阴影体积算法(如 [HHLH05])找到,但该算法会生成不对应光 - 阴影边界的假表面(见图 5),需忽略否则结果错误,而检测假表面是不适合 GPU 的非局部操作。
图 6:验证。鱼眼视图中的天空亮度 S(彩色)及相对天顶亮度。ᾱ=0.1、βₘˢ=2×10⁻⁵m⁻¹、βₘˢ/βₘᵉ=0.9、g=0.76、Hₘ=1.2 km 时,得到基于实际测量的 CIE 晴空模型 [ZWP07]。
解决方案:用阴影体积算法计算阴影段总长度 l,替换为射线 “地面” 端的单个该长度段(见图 5)。假边界会高估 l,可将 l 钳位到阴影体积最近面和最远面的距离,多数情况得正确结果,其他情况得近似值。算法细节:为每个像素关联 4 个值 Δn、Δz、zₘᵢₙ、zₘₐₓ(初始为 0、0、∞、0);第一步,对阴影表面的前向面(或后向面),Δn 减 1(或加 1),Δz 减(或加)片段深度 z,用 z 更新 zₘᵢₙ和 zₘₐₓ;第二步(见图 5):
看向地面时用上述公式;看向天空时:
6. 实现、结果和讨论
预计算
在 GPU 上实现预计算算法,用片段着色器处理数值积分,便于快速更改大气参数并节省磁盘空间(NVidia 8800 GTS 上 5 秒内计算 5 个散射阶)。𝕋(r,μ) 和𝔼(r,μₛ) 存储在 64×256 和 16×64 纹理中;𝕊(uᵣ,u_μ,u_μₛ,uᵥ)=[C₊,Cₘ,ᵣ] 存储在 32×128×32×8 表中(视为打包在单个 32×128×256 RGBA 纹理中的 8 个 3D 表,第 4 个坐标用手动线性插值)。优化的参数化使 4D 表精度更高、空间更小(16 位浮点数的𝕊为 8 MB,而 [SFE07] 的 128³ 纹理为 12 MB)。
渲染
分四步渲染:
-
仅在深度缓冲区绘制地形;
-
将地形阴影体积绘制到 Δn、Δz、zₘᵢₙ、zₘₐₓ纹理,用 ADD 和 MAX 混合函数,禁用深度写入,几何着色器挤压(从太阳视角的)轮廓边,并将后向面(从太阳视角的)沿 - s 投影到近平面 [HHLH05];
-
绘制地形、其他带空中透视的物体及天空,用方程 17 和 18。透明物体(如云层)需在混合前计算空中透视,用 Δn 计算ℛ[L₀] 中的遮挡,用上述计算的 l 获 xₛ;
-
应用全局色调映射函数。
结果
用美国国家航空航天局地球观测站的高度场和反射率纹理测试 [SVS∗05],结果见图 8 和 9。如图 6 和 7,模型能高精度再现 CIE 晴空模型(基于地面实际测量数据拟合 [DK02])。因天空颜色和空中透视通过每个像素少数纹理获取(<10 次)计算,算法速度快:1024×768 分辨率下,NVidia 8800 GTS 上无轴光时 125 fps(含 5 ms 非阴影地形、0.4 ms 方程前三项、2.6 ms 其余项),有轴光时 25 fps(前两步约 32 ms)。相比之下,重新实现的 [O'N05] 方法(每条射线 10 个样本)为 50 fps。
局限性
假设气溶胶特性仅依赖高度且恒定,而实际中会随大气条件大幅变化 [Slo02]。虽预计算快可快速更改特性,但仍为均匀分布。
7. 结论
本文提出首个实时方法,可从所有视点渲染天空和空中透视,兼顾多重散射、地形阴影和光轴,且随所有视角和太阳角度正确变化。该方法基于最小简化假设,获渲染方程近似解(大部分项可预计算),易扩展到更复杂物理模型(更多成分或波长)。
未来工作:模拟云对地面照度和空中透视的影响,消除晴空假设 —— 多云时需考虑地面与云的相互反射 [BNL06] 及云对空中透视的影响,这方面尚未有相关研究。
实现源代码见evasion.inrialpes.fr/~Eric.Brune…。
致谢
本工作部分由 Natsim ANR ARA 项目资助,感谢 Antoine Bouthors 和 Cyril Soler 校对。
参考文献
[BNL06] BOUTHORS A., NEYRET F., LEFEBVRE S.: 层积云的实时真实感照明和着色。见《Eurographics Workshop on Natural Phenomena》(2006 年 9 月)。
[DK02] DARULA S., KITTLER R.: 定义亮度分布的 CIE 一般天空标准。eSim(2002)。
[HHLH05] HORNUS S., HOBEROCK J., LEFEBVRE S., HART J. C.: ZP+:正确的 Z 通道模板阴影。见《ACM Symposium on Interactive 3D Graphics and Games》(2005 年 4 月),ACM 出版社。
[HMS05] HABER J., MAGNOR M., SEIDEL H.-P.: 基于物理的晨昏现象模拟。《ACM Trans. Graph.》24,4(2005),1353-1373。
[HP02] HOFFMAN N., PREETHAM A. J.: 实时渲染户外光散射。《游戏开发者大会论文集》(2002)。
[IJTN07] IMAGIRE T., JOHAN H., TAMURA N., NISHITA T.: 带光散射效果场景的抗锯齿实时渲染。《Vis. Comput.》23,9(2007),935-944。
[NDKY96] NISHITA T., DOBASHI Y., KANEDA K., YAMASHITA H.: 考虑多重散射的天空颜色显示方法。见《Pacific Graphics 论文集》(1996),117-132 页。
[NSTN93] NISHITA T., SIRAI T., TADAMURA K., NAKAMAE E.: 考虑大气散射的地球显示。见《SIGGRAPH 93》(1993),ACM,175-182 页。
[O'N05] O’NEIL S.: 精确的大气散射。见《GPU Gems 2: Programming Techniques for High-Performance Graphics and General-Purpose Computation》(2005),Addison-Wesley Professional。
[PSS99] PREETHAM A. J., SHIRLEY P., SMITS. B. E.: 实用的日光解析模型。见《SIGGRAPH 99》(1999)。
[REK∗04] RILEY K., EBERT D. S., KRAUS M., TESSENDORF J., HANSEN C. D.: 大气现象的高效渲染。见《Rendering Techniques》(2004),374-386 页。
[SFE07] SCHAFHITZEL T., FALK M., ERTL T.: 带大气的行星实时渲染。见《WSCG International Conference in Central Europe on Computer Graphics, Visualization and Computer Vision》(2007)。
[Slo02] SLOUP J.: 地球大气建模与渲染综述。见《SCCG ’02: Proceedings of the 18th spring conference on Computer graphics》(2002),ACM,141-150 页。
[SVS∗05] STOCKLI R., VERMOTE E., SALEOUS N., SIMMON R., HERRING D.: 蓝色大理石下一代 —— 含 MODIS 季节性动态的真彩色地球数据集。美国国家航空航天局地球观测站(2005)。
[TS99] THOMAS G. E., STAMNES K.: 《大气和海洋中的辐射传输》。剑桥大学出版社,1999。
[ZWP07] ZOTTI G., WILKIE A., PURGATHOFER W.: Preetham 天空模型的批判性综述。见《WSCG 2007 Short Communications Proceedings I》(2007 年 1 月),23-30 页。
图 7:验证。不同太阳天顶角和视角天顶角(视角与太阳方位角为零)下的相对天顶亮度,对比我们的模型(α=0.1、βₘˢ=2.2×10⁻⁵m⁻¹、βₘˢ/βₘᵉ=0.9、g=0.73、Hₘ=1.2 km)与基于实际测量的 CIE 天空模型。地平线附近(视角接近 ±90°)有高估,[ZWP07] 指出 Preetham 模型 [PSS99] 也有此问题,可能源于 CG 中使用的物理模型。
图 8:结果。(a)从上到下:[SFE07]、单散射、多重散射和照片。[SFE07] 因缺少 ν 参数无阴影,单散射过暗;(b)太空视角的日落;(c)性能测试视图。
图 9:结果。我们的结果(无框)与网络真实照片(红框)对比,色调映射可能导致部分图像天空色调差异(照片未校准)。