GAMES101渲染部分(3)

这部分主要包括一切和PBR相关的。顺便,第一次听这部分课程的时候真的很迷惑。导致我很长一段时间内都认为PBR/GI/光追这几个概念是相关的,闫老师讲这部分的初衷可能是想说PBR这个理论天生就和光追有着很好的适配性,但是就会让人认为好像PBR无法应用于光栅化一样。如今看来PBR和GI以及光追分别都不是一个领域的概念。说实话这部分我确实觉得闫老师可能有些执着于讲一些高阶的知识而忘记了很多概念的解释以及阐述了。

说实话PBR这一部分我一直觉得学的都有些囫囵吞枣,但是PBR确实在这几年已经几乎成为游戏中标配的存在,所以不学总觉得过于拉胯,还是得好好研究研究。

辐射度量学

动机:对于BlinnPhong模型中定义的许多参数,物理意义是什么呢?

Blinn Phong是经验模型,并不是正确的模型,因此我们需要物理上对光进行一定讨论。

辐射度量学定义了光的若干属性

Radiant flux, intensity, irradiance, radiance

在物理上准确定义光照的方法

Radiant Energy and Flux

光辐射出能量,我们用Q代表,单位为J(焦耳)。

Radiant Flux

定义单位时间的能量。我们用 \(/phi\) 代表,单位是瓦特或者lm(流明)。

Radiant Intensity, Irradiance, Radiance

image-20211109201921492

Radiant Intensity

Power per solid angle,单位立体角的功率

image-20211109202034853

立体角:面积除以半径平方

一般用w代表一个方向,可以用theta phi进行定义。同时计算这个方向上的单位立体角

image-20211109202748325

Irradiance

Power per projected unit area

这里的unit area必须和光线垂直,如果不垂直的话需要把光线投影的垂直area的方向。

image-20211109203937524

irradiance falloff

image-20211109204217292

注意一点:intensity是没有变的,而irradiance是在衰减的。

(因为对于单位立体角来说,传播的越远对应的area越大)

Radiance

Power per unit solid angle per projected unit area

需要做两次微分

image-20211109220817034

和前面两个量联系起来

Incident Radiance 入射Radiance

(Irradiance per solid angle)

相当于计算一个区域在特定方向上可能会接收到的功率大小

image-20211109221038461

Exiting Radiance 出射Radiance

Intensity per projected unit area

image-20211109221500539

这里闫老师提到了,这种联系可以为我们提供一些启示,但是他也没有说清楚究竟是什么启示。其实结合后面BRDF可以看出,这里的启示实际上是在说我们怎么利用Radiance去统一入射和出射这两种光照现象,这两种现象归根结底都是Radiance的一种,我们可以看作单位时间单位立体角单位面积下能量的转移,无非是能量进入或者能量输出。有了这样的统一,我们才可以在之后的BRDF中将入射和出射的关系考虑的更加清晰:

反射光线的Radiance是入射光线Radiance在单位立体角上的微分。

在BRDF下,我们统一入射和出射,在其他更广泛的BSSDF下,我们就可以利用这些物理量来统一入射和散射或者其他更准确的光学现象。

Irradiance vs Radiance

Irradiance相当于对Radiance做球面积分

image-20211109215147741

BRDF

反射

在辐射度量学的角度来看,就相当于一个区域吸收一部分入射光线的能量,再辐射到特定方向上去。

BRDF:计算当前面积的Irradiance,再计算当前面积特定出射角的Radiance,求得比例,就是BRDF的定义

这里的等式一来自之前所述的Irradiance和Radiance的关系。

我们是可以通过各种信息得知入射的Radiance应该是多少的,但是我们无法得知由于这个入射进入的能量在特定角度会有怎样的输出。

这张图其实让人迷惑的地方有很多,一个是Irradiance和Radiance的关联,这个其实复习一下之前的PPT就可以明白。

更让人有些难以理解的是为什么入射是用Radiance表示,而出射确实用Radiance的一个微分去表示。其实图中也提到了,我们这里相当于是在得到入射Radiance的情况下,再对每个出射角做微分。并且这里的入射能量只考虑入射角进入的Radiance。

image-20211109222652644

有了前面的阐述,我们这里也更能明白为什么BRDF的单位不是一个比例值而是单位角单位的倒数。因为反射光线正是对入射光线的Radiance对立体角做了一次微分。

image-20211109223356442

反射方程

image-20211109223825482

如何得到反射方程,我们可以考虑这样一个式子: \(L_{r}(\text{p}, \omega_{r}) = \int_{H^{2}} \text{d}L_{r}(\text{p}, \omega_{r}) \text{d}\omega_{i}\) 相当于是对球面的每个入射方向,判断在当前出射方向的Radiance微分,最终做积分。

这个公式看起来就会自然一些,我们再结合之前BRDF的定义对式子中出射光线Radiance微分部分做替换,就可以得到幻灯片中的式子。

渲染方程

image-20211109224945459

下面的部分不再讲解,个人觉得超纲过多了,其实现在再看,闫老师这部分可能是想说明渲染方程如何转化成一个较为明晰的形式,以及如何把渲染方程和光追结合起来。但是问题在于初次理解还没有来得及明白渲染方程就做这些变换,容易让人抓不住重点。甚至第一次提到全局光照也是在这里,信息太过爆炸,初学者根本来不及提取有效信息。

我反正第一次看到这里的时候满脑子都是在数学系学高代的日子。当时突然觉得还不如去学数学呢。

image-20211109230000874

image-20211109230016081

image-20211109230032073

image-20211109230346152

这里提到了光追对于全局光照的优越性。

材质

材质 = BRDF 材质并不是BRDF

材质更像是是BRDF的组合

对于diffuse材质,一般认为BRDF在半球上均匀分布,即

image-20211111204953973

注意brdf应该是一个颜色!即常说的albedo

折射

Snell’s Law

image-20211111205720322

折射对应的系数为BTDF(Transmit)

和BRDF统称可以成为BSDF(相当于考虑整个球体的radiance分布?)

菲涅尔

绝缘体菲涅尔:

当入射角达到一定大小的时候反射占比就会变大。

image-20211111210516001

导体菲涅尔:

我们可以看到,导体的反射率不管在什么角度都很大。

image-20211111210536713

一般采用下述模拟

image-20211111210734473

Microfacet

远处看是材质,近处看是几何

image-20211111211108474

我们将表面的粗糙程度用法线分布表示

image-20211111211221218

对于自遮挡现象,在光线贴着表面的时候,自遮挡项最明显,因此在这个角度(掠射角)附近自遮挡项最明显。

微表面模型有很多种。

各向异性

image-20211111211839002

BRDF性质