大气散射(四)穿越大气层的旅程

一、大气密度比率

大气密度比率(Atmospheric Density Ratio)是一个尚未讨论的因素。从逻辑角度来看,大气散射的强度与大气密度成正比是有道理的。每平方米内的分子越多,光子被散射的机会就越多。挑战在于大气的组成非常复杂,由几个具有不同压力、密度和温度的层构成。幸运的是,大气层中的大部分瑞利散射发生在前60公里内。在对流层内,温度呈线性下降,压力呈指数下降。

下面的图表显示了低层大气中密度和高度之间的关系。

<math xmlns="http://www.w3.org/1998/Math/MathML"> ρ ( h ) \rho(h) </math>ρ(h) 的值代表海拔为 <math xmlns="http://www.w3.org/1998/Math/MathML"> h h </math>h米处的大气测量值,被归一化以使其从零开始。在许多科学论文中,(\rho) 也被称为密度比率,因为它也可以定义为:

<math xmlns="http://www.w3.org/1998/Math/MathML"> ρ ( h ) = d e n s i t y ( h ) d e n s i t y ( 0 ) \rho(h) = \frac{density(h)}{density(0)} </math>ρ(h)=density(0)density(h)

将实际密度除以密度 <math xmlns="http://www.w3.org/1998/Math/MathML"> d e n s i t y ( 0 ) density(0) </math>density(0)导致 <math xmlns="http://www.w3.org/1998/Math/MathML"> ρ ( h ) \rho(h) </math>ρ(h)在海平面为1。然而,正如前文所强调的,计算密度(density(h))远非易事。我们可以用指数曲线来近似它;事实上,你们中的一些人可能已经认识到低层大气中的密度遵循指数衰减。

如果我们想用指数曲线来近似密度比率,我们可以这样做:

<math xmlns="http://www.w3.org/1998/Math/MathML"> ρ ( h ) = exp ⁡ { − h H } \rho(h) = \exp\left\{-\frac{h}{H}\right\} </math>ρ(h)=exp{−Hh}

其中(H)是一个称为尺度高度的缩放因子。对于地球低层大气中的瑞利散射,通常假设(H=8500)米。对于米耶散射,通常在1200米左右。

使用的H值并不会给出对 <math xmlns="http://www.w3.org/1998/Math/MathML"> ρ ( h ) \rho(h) </math>ρ(h) 的最佳近似。然而,这并不是真正的问题。本教程中呈现的大多数量都受到严格的近似。为了获得最佳的外观结果,最有效的方法是调整可用参数以匹配参考图像。

二、指数衰减

在本教程的前几部分中,我们推导出了一个方程,显示了如何考虑光线与单个粒子相互作用后所受到的外散射。用于模拟这种现象的量被称为散射系数 (\beta)。我们引入了系数 (\beta) 来考虑这一点。

在瑞利散射的情况下,我们还提供了一个封闭形式来计算每次单个相互作用后受大气散射影响的光量:

[\beta \left(\lambda, h \right )=\frac{8\pi^3 \left(n^2-1 \right )^2}{3} \frac{\rho\left(h\right)}{N} \frac{1}{\lambda^4}]

当在海平面处进行评估时,即使用 (h=0),产生以下结果:

<math xmlns="http://www.w3.org/1998/Math/MathML"> β ( 680 n m ) = 0.00000519673 \beta\left(680nm\right) = 0.00000519673 </math>β(680nm)=0.00000519673

<math xmlns="http://www.w3.org/1998/Math/MathML"> β ( 550 n m ) = 0.0000121427 \beta\left(550nm\right) = 0.0000121427 </math>β(550nm)=0.0000121427

<math xmlns="http://www.w3.org/1998/Math/MathML"> β ( 440 n m ) = 0.0000296453 \beta\left(440nm\right) = 0.0000296453 </math>β(440nm)=0.0000296453

其中 680、550 和 440 是波长,它们大致对应红、绿和蓝。

这些数字的含义是什么?它们表示通过与一个粒子的单个相互作用而丢失的光的比率。如果我们假设一束光具有初始强度 <math xmlns="http://www.w3.org/1998/Math/MathML"> I 0 I_0 </math>I0 并穿过大气的一段,具有(通用的)散射系数 <math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β,那么没有散射丢失的光量是:

<math xmlns="http://www.w3.org/1998/Math/MathML"> I 1 = I 0 ⏟ initial energy − I 0 β ⏟ energy lost = I 0 ( 1 − β ) I_1=\underset{\text{initial energy}}{\underbrace{I_0}} - \underset{\text{energy lost}}{\underbrace{I_0 \beta}}=I_0 \left(1-\beta\right) </math>I1=initial energy I0−energy lost I0β=I0(1−β)

虽然这适用于单个碰撞,但我们有兴趣了解在某个距离上散射了多少能量。这意味着,在每个点上,剩余的光都要经受这个过程。

当光线穿过具有散射系数 <math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β 的均匀介质时,我们如何计算它在行进一定距离后存活下来的数量?

对于那些学过微积分的人来说,这应该听起来很熟悉。每当像 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( 1 − β ) \left(1-\beta\right) </math>(1−β) 这样的乘法过程在连续段上重复时,欧拉数就会出现。光线在行进 x 米后存活下来的数量是:

<math xmlns="http://www.w3.org/1998/Math/MathML"> I = I 0 e x p { − β x } I = I_0 exp \left\{-\beta x \right\} </math>I=I0exp{−βx}

我们再次遇到了指数函数。这与用来描述密度比率 <math xmlns="http://www.w3.org/1998/Math/MathML"> ρ \rho </math>ρ 的指数函数没有任何关系。两种现象都被描述为指数衰减的原因是它们都经受着指数衰减。除此之外,它们之间没有其他联系。

三、均匀透射

在本教程的第二部分中,我们介绍了透射率 <math xmlns="http://www.w3.org/1998/Math/MathML"> T T </math>T 的概念,即光线穿过大气层后存活下来的比例。我们现在已经有了描述它的方程所需的所有要素。

让我们看看下面的图表,看看我们如何计算线段 <math xmlns="http://www.w3.org/1998/Math/MathML"> C P ‾ \overline{CP} </math>CP 的透射率因子。很容易看出,到达 C 的光线穿过了空旷的空间。因此,它们不会受到散射的影响。因此,在 C 处的光量是太阳强度 <math xmlns="http://www.w3.org/1998/Math/MathML"> I S I_S </math>IS。在其到达 P 的旅程中,一些光线会从路径上散射出去;因此,到达 P 的光量 <math xmlns="http://www.w3.org/1998/Math/MathML"> I P I_P </math>IP 将低于 <math xmlns="http://www.w3.org/1998/Math/MathML"> I S I_S </math>IS。

散射光的数量取决于行进的距离。旅程越长,衰减就越强。根据指数衰减定律,(I_P) 处的光量可以计算如下:

<math xmlns="http://www.w3.org/1998/Math/MathML"> I P = I S exp ⁡ { − β C P ‾ } I_P = I_S \exp{\left\{-\beta \overline{CP}\right\}} </math>IP=ISexp{−βCP}

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> C P ‾ \overline{CP} </math>CP 是从 C 到 P 的线段的长度, <math xmlns="http://www.w3.org/1998/Math/MathML"> exp ⁡ { x } \exp{\left\{x\right\}} </math>exp{x} 是指数函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> e x e^{x} </math>ex。

四、大气透射

在本教程的第二部分中,我们假设沿着 <math xmlns="http://www.w3.org/1998/Math/MathML"> C P ‾ \overline{CP} </math>CP 的每个点受到偏转(散射系数 <math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β)的机会是相同的。可悲的是,事实并非如此。

散射系数强烈依赖于大气密度。每立方米更多的空气分子意味着更高的碰撞机会。行星大气的密度不均匀,而是根据海拔高度而变化的。这也意味着我们不能在一步中计算 <math xmlns="http://www.w3.org/1998/Math/MathML"> C P ‾ \overline{CP} </math>CP 上的外散射。为了解决这个问题,我们需要计算每个点的外散射,使用它自己的散射系数。

为了了解这是如何工作的,让我们首先做一个近似。线段 <math xmlns="http://www.w3.org/1998/Math/MathML"> C P ‾ \overline{CP} </math>CP 被分成两部分, <math xmlns="http://www.w3.org/1998/Math/MathML"> C Q ‾ \overline{CQ} </math>CQ 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> Q P ‾ \overline{QP} </math>QP。

我们首先计算从 C 到 Q 到达 Q 的光的量:

<math xmlns="http://www.w3.org/1998/Math/MathML"> I Q = I S exp ⁡ { − β ( λ , h 0 ) C Q ‾ } I_Q = I_S \exp{\left\{-\beta{\left(\lambda, h_0\right)} \overline{CQ} \right\}} </math>IQ=ISexp{−β(λ,h0)CQ}

然后,我们使用相同的方法来计算从 Q 到 P 到达 P 的光的量:

<math xmlns="http://www.w3.org/1998/Math/MathML"> I P = I Q exp ⁡ { − β ( λ , h 1 ) Q P ‾ } I_P = \boxed{I_Q} \exp{\left\{-\beta{\left(\lambda, h_1\right)} \overline{QP} \right\}} </math>IP=IQexp{−β(λ,h1)QP}

如果我们在第二个方程中替换 (I_Q) 并简化,我们得到:

如果 <math xmlns="http://www.w3.org/1998/Math/MathML"> C Q ‾ \overline{CQ} </math>CQ 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> Q P ‾ \overline{QP} </math>QP 都有相同的长度 ds,我们可以进一步简化我们的表达式:

在具有不同散射系数的两个相等长度的段的情况下,可以通过将各个段的散射系数相加,乘以段长度来计算外散射。

我们可以使用任意数量的段重复此过程,以逐渐接近实际值。这导致以下方程:

<math xmlns="http://www.w3.org/1998/Math/MathML"> I P = I S exp ⁡ { − ∑ Q ∈ C P ‾ β ( λ , h Q )   d s } I_P = I_S\exp\left\{ -\boxed{ \sum_{Q \in \overline{CP}} { \beta\left( \lambda, h_Q \right) } \, ds } \right \} </math>IP=ISexp⎩ ⎨ ⎧−Q∈CP∑β(λ,hQ)ds⎭ ⎬ ⎫

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> h Q h_Q </math>hQ是点 Q 的海拔高度。

将一条线段分割成多个段的方法就像我们刚才做的一样,称为数值积分。

如果我们假设接收到的初始光量等于 1,我们得到了关于任意段的大气透射率的方程:

<math xmlns="http://www.w3.org/1998/Math/MathML"> T ( C P ‾ ) = exp ⁡ { − ∑ Q ∈ C P ‾ β ( λ , h Q )   d s } T\left(\overline{CP}\right) =\exp\left\{ -\sum_{Q \in \overline{CP}} { \beta\left( \lambda, h_Q \right) } \, ds \right \} </math>T(CP)=exp{−∑Q∈CPβ(λ,hQ)ds}

我们可以进一步扩展这个表达式,用实际用于瑞利散射的散射系数 <math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β 替换通用的 <math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β :

<math xmlns="http://www.w3.org/1998/Math/MathML"> T ( C P ‾ ) = exp ⁡ { − ∑ Q ∈ C P ‾ 8 π 3 ( n 2 − 1 ) 2 3 ρ ( h Q ) N 1 λ 4   d s } T\left(\overline{CP}\right) =\exp\left\{ -\sum_{Q \in \overline{CP}} { \boxed{\frac{8\pi^3 \left(n^2-1 \right )^2}{3} \frac{\rho\left(h_Q\right)}{N} \frac{1}{\lambda^4}} } \, ds \right \} </math>T(CP)=exp⎩ ⎨ ⎧−∑Q∈CP38π3(n2−1)2Nρ(hQ)λ41ds⎭ ⎬ ⎫

<math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β 的许多因素是恒定的,可以从总和中分离出来:

<math xmlns="http://www.w3.org/1998/Math/MathML"> T ( C P ‾ ) = exp ⁡ { − 8 π 3 ( n 2 − 1 ) 2 3 1 N 1 λ 4 ⏟ constant β ( λ ) ∑ Q ∈ C P ‾ ρ ( h Q )   d s ⏞ optical depth   D ( C P ‾ ) } T\left(\overline{CP}\right) =\exp\left\{ - \underset{\beta\left(\lambda\right)}{ \underset{\text{constant}}{ \underbrace{ \frac{8\pi^3 \left(n^2-1 \right )^2}{3} \frac{1}{N} \frac{1}{\lambda^4} }}} \overset{\text{optical depth}\,D\left(\overline{CP}\right)}{ \overbrace{ \sum_{Q \in \overline{CP}} { \rho\left(h_Q\right) } \, ds}} \right \} </math>T(CP)=exp⎩ ⎨ ⎧−β(λ)constant 38π3(n2−1)2N1λ41Q∈CP∑ρ(hQ)ds optical depthD(CP)⎭ ⎬ ⎫

总和表示的量被称为光学深度 <math xmlns="http://www.w3.org/1998/Math/MathML"> D ( C P ‾ ) D\left(\overline{CP}\right) </math>D(CP),这是我们实际在着色器中计算的内容。剩下的部分是一个乘法系数,只能计算一次,对应于海平面的散射系数。在最终的着色器中,我们只计算光学深度,并提供海平面散射系数 <math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β 作为输入。

总结一下:

<math xmlns="http://www.w3.org/1998/Math/MathML"> T ( C P ‾ ) = exp ⁡ { − β ( λ ) D ( C P ‾ ) } T\left(\overline{CP}\right) =\exp\left\{ - \beta\left(\lambda\right) D\left(\overline{CP}\right) \right\} </math>T(CP)=exp{−β(λ)D(CP)}

如果您对这个主题感兴趣,我还建议阅读 Carl Davidson 关于大气散射的帖子,他使用了这种迭代方法的改进版本。

接下来会是... 这篇文章解释了如何对地球的大气进行建模。在下一篇文章中,我们将开始编写必要的着色器代码来模拟大气散射。

相关推荐
王哲晓1 小时前
第三十章 章节练习商品列表组件封装
前端·javascript·vue.js
理想不理想v1 小时前
‌Vue 3相比Vue 2的主要改进‌?
前端·javascript·vue.js·面试
酷酷的阿云1 小时前
不用ECharts!从0到1徒手撸一个Vue3柱状图
前端·javascript·vue.js
aPurpleBerry2 小时前
JS常用数组方法 reduce filter find forEach
javascript
ZL不懂前端2 小时前
Content Security Policy (CSP)
前端·javascript·面试
乐闻x3 小时前
ESLint 使用教程(一):从零配置 ESLint
javascript·eslint
我血条子呢3 小时前
[Vue]防止路由重复跳转
前端·javascript·vue.js
半开半落3 小时前
nuxt3安装pinia报错500[vite-node] [ERR_LOAD_URL]问题解决
前端·javascript·vue.js·nuxt
理想不理想v4 小时前
vue经典前端面试题
前端·javascript·vue.js