Opengl 使用着色渲染行星周围的大气

Opengl 使用着色渲染行星周围的大气,opengl,glsl,shader,lighting,Opengl,Glsl,Shader,Lighting,我创造了一个行星,想在它周围创造一个大气层。所以我指的是这个网站: 我不明白这一点: 正如Nishita等人1993年提出的查找表一样,我们可以从大气中的任何采样点获得光线到太阳的光学深度。我们所需要的是采样点的高度(x)和垂直于太阳的角度(y),然后我们在表格中查找(x,y)。这样就不需要计算一个外散射积分。另外,光线对相机的光学深度也可以用同样的方法计算出来,对吗?嗯,差不多了。当相机在太空中时,其工作方式相同,但当相机在大气中时则不同。这是因为查找表中使用的采样光线从高度x的某个点一直延

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

我不明白这一点:

正如Nishita等人1993年提出的查找表一样,我们可以从大气中的任何采样点获得光线到太阳的光学深度。我们所需要的是采样点的高度(x)和垂直于太阳的角度(y),然后我们在表格中查找(x,y)。这样就不需要计算一个外散射积分。另外,光线对相机的光学深度也可以用同样的方法计算出来,对吗?嗯,差不多了。当相机在太空中时,其工作方式相同,但当相机在大气中时则不同。这是因为查找表中使用的采样光线从高度x的某个点一直延伸到大气顶部。它们不会停留在大气层中间的某个点,就像相机在大气层中所需要的那样。 幸运的是,解决这个问题的方法非常简单。首先,我们从采样点P到相机进行查找,以获得光线穿过相机到达大气顶部的光学深度。然后我们对同一条光线进行第二次查找,但从摄影机开始,而不是从P开始。这将为我们提供光线中不需要的部分的光学深度,我们可以从第一次查找的结果中减去它。检查图16-3中从地面顶点(b1)开始的光线,以获得该点的图形表示

第一个问题-光学深度不是取决于你如何看,也就是说,取决于视角吗?如果是的话,表中只给出了从陆地到大气层顶部的直线光线的光学深度。那么光线穿透大气层到达摄像机的情况又如何呢?在这种情况下,如何获得光学深度

第二个问题-它所说的垂直角是什么…比如,它和我们在极坐标中使用的z轴的角度一样吗

第三个问题——这篇文章讨论了光线向太阳的散射……难道不是相反吗?就像从太阳到某个点

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


提前谢谢

我不是这方面的专家,但我研究过大气散射和各种物理和光学模拟。我强烈建议您考虑以下问题:

它不做全体积积分,只做沿光线的线性路径积分,只做各向同性系数的光线散射。正如你所看到的,它仍然足够好

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

不确定你的第二个问题所指的是什么。散射本身取决于光源、粒子和相机之间的角度。它位于任意平面上。然而,如果地球表面也被考虑到方程中,那么它取决于水平角和垂直角(相对于地形),所以方位角、仰角通常会在相机面向太阳时反射更多的光线(方位角),反射的光线更接近你的仰角。所以我猜这就是水平角的大小说明了从表面反射的光

回答的第3个问题称为反向光线跟踪。您可以从两个方向投射光线(从相机或从太阳),但是如果您从光源开始,您不知道如何击中相机屏幕上的像素,因此您需要投射大量光线,以增加击中的概率,从而填充速度过慢且不准确的屏幕(产生孔洞)。若你们从屏幕像素开始,那个么你们只能投射单波长或每波长的光线,这要快得多。结果颜色相同

[Edit1]垂直角度

好的,我读了一下链接主题,以下是我的理解:


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

谢谢!但是我想知道这个网站谈论的角度是什么(表的y参数)。我不明白它是什么角度。你能帮我弄一下@Spektre吗