用阴影渲染行星周围的大气

Posted

技术标签:

【中文标题】用阴影渲染行星周围的大气【英文标题】:Rendering an atmosphere around a planet with shading 【发布时间】:2020-06-02 07:49:08 【问题描述】:

我做了一个星球,想在它周围制造一个大气层。所以我指的是这个网站:

Click to visit site

我不明白:

与 Nishita 等人提出的查找表一样。 1993 年,我们可以得到从大气中任何采样点到太阳的光线的光学深度。我们只需要采样点的高度(x)和垂直到太阳的角度(y),然后我们在表格中查找(x,y)。这消除了计算外散射积分之一的需要。此外,光线到相机的光学深度也可以用同样的方法计算出来,对吧?嗯,差不多。当相机在太空中时,它的工作方式相同,但当相机在大气中时,则不然。这是因为查找表中使用的样本射线从高度 x 的某个点一直到达大气层的顶部。它们不会像相机在大气层中时需要的那样停在大气层中间的某个点。

幸运的是,这个问题的解决方案非常简单。首先,我们从采样点 P 到相机进行查找,以获得穿过相机到达大气层顶部的光线的光学深度。然后我们对同一条光线进行第二次查找,但从相机开始而不是从 P 开始。这将为我们提供不想要的光线部分的光学深度,我们可以从结果中减去它的第一次查找。检查从图 16-3 中的地面顶点 (B 1) 开始的光线,以获取其图形表示。

第一个问题 - 光学深度不取决于您的观看方式,即视角吗?如果是的话,这张表只是给了我从陆地到大气层顶部直线的光线的光学深度。那么光线穿透大气层到达相机的情况呢?在这种情况下如何获得光学深度?

第二个问题 - 它所说的垂直角度是多少...比如,它与我们在极坐标中使用的 z 轴的角度相同吗?

第三个问题 - 这篇文章谈到了射向太阳的光线的散射......难道不应该反过来吗?就像从太阳到一个点?

对文章或我的问题的任何解释都会有很大帮助。

提前致谢!

【问题讨论】:

【参考方案1】:

我不是这方面的专家,但我玩过大气散射和各种物理和光学模拟。我强烈建议看看这个:

my VEEERRRYYY Simplified version of atmospheric scattering in GLSL

它不做完整的体积积分,而只是沿着光线的线性路径积分,并且只做与各向同性系数相匹配的 Rayleight。如您所见,它仍然足够好。

在实际散射中,视角会影响实际散射方程,因为不同角度(针对主光源和观察者)的散射系数是不同的,所以第一个问题的答案是肯定的

不确定您在第二个问题中指的是什么。散射本身取决于光源、粒子和相机之间的角度。那位于任意平面上。但是,如果地球表面也被考虑在内,那么它取决于水平和垂直角度(相对于地形),所以方位角、仰角通常在相机面对太阳(方位角)时反射更多的光,并且反射光线更接近你的海拔。所以我的猜测就是水平角的含义 考虑到来自表面的反射光

回答您的第三个问题称为回溯光线追踪。您可以双向投射光线(从相机或从太阳),但是如果您从光源开始,您不知道用哪种方式击中相机屏幕上的像素,因此您需要投射大量光线以增加击中的概率足以填充太慢且不准确的屏幕(产生孔)。如果你从屏幕像素开始,那么你只投射单个或每个波长的光线,而不是这要快得多。结果颜色是一样的。

[Edit1] 垂直角度

好的,我稍微阅读了链接的主题,这就是我的理解:

所以它只是表面法线和投射光线之间的角度。它的缩放比例为vert.angle=0 表示光线和法线相同,vert.angle=1 表示方向相反。

【讨论】:

谢谢!但我想知道网站所说的角度是什么(表格的y参数)。看不懂是什么角度你能帮我解决一下@Spektre

以上是关于用阴影渲染行星周围的大气的主要内容,如果未能解决你的问题,请参考以下文章

GLSL 大气散射不随变换缩放

overriding managed version maven 是啥意思

巨大的木星

前沿100秒MAVEN探测器出使火星

怎样用迅捷画图绘制高端大气的思维导图

怎样用迅捷画图绘制高端大气的思维导图