本文分享辐射度量学(Radiometry)的基础知识
辐射度量学是BRDF的预备知识, 而BRDF是PBR的理论基础.
辐射度量学有几个关键的基础概念, 只有抓住了这几个关键概念, 后面的公式部分才能比较容易理解.
说在前面
在开始之前, 个人说一些学习和理解渲染的心得. 因为实时渲染是一个门槛比较高的领域, 要涉及到很多其它分支领域的知识, 比如我们今天要介绍的光学分支-辐射度量学, 还有数学(微积分, 线性代数, 概率论), 甚至还有生物学(比如眼睛的感光), 摄影学(比如相机的构造), 材料学(比如物体材质如何看起来更真实)等等. 所以要学好理解好实时渲染其实是一个比较艰难的过程(放心, 除了天才的大部分都会这么认为, 作者担保).
而大部分在工业界的同学其实并不需要做游戏引擎, 在日常的开发中涉及到的实时渲染方面的工作也不会太多. 当然, 如果对理论基础有一些理解和研究, 有助于大家更好的做出效果比较好的作品, 同时也有了挑战更高难度工作的资本. 所以学习和实践渲染的理论还是十分有必要的.
我们在工业界其实更关注实践, 也就是更多的是实践主义者, 理论很好, 但是也需要能够在项目中使用才行, 所以很多学界的理论知识在工业界实践的时候更多的会采取近似的方式, 毕竟只要渲染出来的画面能够欺骗眼睛, 它是不是符合理论也显得不是那么重要了. 所以工业界才有那么多的经验模型, 大家可都是实用主义者.
上面说了一大堆废话其实只是想告诉大家, 对于我们工业界的同学而言, 理论和实践是两个截然不同的事物, 实践才是我们的重点, 通过实践来印证理论才是我们需要关注的, 如果大家在学习渲染理论时有些东西难以理解, 比如大家深恶痛绝的数学公式, 大可以不必太过纠结, 因为大部分在具体实现的时候的公式都远比理论公式更简单, 更容易实现和理解, 所以尽可将理论公式当做科普内容来看, 只关注其中要表达的意义而不必拘泥于其细节, 也就是不用死记硬背, 也不用觉得自己笨, 因为大部分都会觉得不好理解, 看多了自然就理解了. 好了, 废话不多说, 开始今天的内容.
几个关键的基础概念
在大家陷入各种复杂的公式和符号之前, 作者先将今天的重点挑选出来:
- 立体角(solid angle): 平面角在三维空间的延伸, 就理解为三维的角度即可.
- 辐射通量(radiant flux): 单位时间内辐射的能量.
- 辐射强度(radiant intensity): 单位时间内在单位立体角上辐射的能量.
- 辐射度或者辐射亮度(radiance): 单位时间内在单位立体角上辐射的并照射到单位投影面积上的能量.
- 辐照度(irradiance): 单位时间内辐射的并照射到单位面积上的能量, 也就是各个角度上辐射度总和.
其中辐射强度, 辐射度和辐照度比较容易混淆, 也是最不容易理解的地方.
我们现在可以先简单的理解, 有一个先期的印象:
- 辐射强度就是光线朝着某个角度(立体角)辐射的能量, 不会因为距离而变化, 因为角度没有变化
- 辐射度就是辐射强度描述的能量照射到物体表面上的能量, 因为辐射强度没有变化, 会随着照射的面积的变化而变化
- 辐照度就是所有方向所有光线的辐射度加起来
立体角(solid angle)
我们先回忆下什么是弧度.
弧度(radian)的定义为: 如果一个圆心角对应的弧的弧长为半径, 那么说这个角为1rad. 也就是说
r
a
d
=
l
c
rad=\dfrac l c
rad=cl?,
r
a
d
rad
rad是randian, 弧度的单位.
弧度用来表示圆心角的大小, 角度用来表示圆心角所占圆的比例. 相同角度的弧度不变, 弧度可以看做是角度的另一种表现形式或者单位.
那为什么需要弧度呢? 一句话总结: 弧度比角度更方便. 这里的方便指测量和使用上的方便.
在最初的设计中, 弧度可以用来将圆周运动转化为直线运动, 如图:
1弧度表示一段与半径相同长度的弧的长度, 而
2
π
2\pi
2π弧度代表与周长长度相同的弧的长度, 我们知道, 圆的周长定义为
2
π
r
2 \pi r
2πr, 而其弧度正好是
2
π
=
2
π
r
r
2\pi = \dfrac{2\pi r} {r}
2π=r2πr?.
而弧度与角度的关系为
r
a
d
2
π
=
θ
360
°
\dfrac{rad}{2\pi} = \dfrac{\theta}{360\degree}
2πrad?=360°θ?, 那么角度转弧度或者弧度转角度可以简单推导出来.
而立体角就是平面角在三维空间的延伸, 也有对应的三维弧度, 就是所谓球面度或者球弧度(setradian), 其定义为: 如果一个立体角对应的球面面积为半径的平方, 那么说这个立体角为1sr. 也就是说
s
r
=
A
R
2
sr=\dfrac{A}{R^2}
sr=R2A?,
s
r
sr
sr是steradian, 球面度的单位. 平时会直接以立体角单位, 其实说的是球面度.
只要将二维与三维的关系联系起来就很好理解了, 平面角=>立体角, 弧度=>球面度.
我们知道一个球的表面积为
A
=
4
π
r
2
A=4\pi r^2
A=4πr2, 那么整个球面的立体角就是
s
r
=
A
r
2
=
4
π
r
2
r
2
=
4
π
sr=\dfrac{A}{r^2}=\dfrac{4\pi r^2}{r^2}=4\pi
sr=r2A?=r24πr2?=4π.
如果使用球面坐标来描述, 球的表面积为
A
=
R
θ
R
sin
?
θ
φ
A = R\theta R\sin\theta \varphi
A=RθRsinθφ, 其中
θ
\theta
θ为水平方向上的角度,
φ
\varphi
φ为竖直方向上的角度, 如图所示:
使用微积分来描述**单位立体角公式(也就是对应球面积为半径平方的立体角)**为:
d
Ω
=
d
A
R
2
=
d
θ
sin
?
θ
d
φ
d\Omega={\dfrac{dA}{R^2}}={d\theta}{\sin\theta}{d\varphi}
dΩ=R2dA?=dθsinθdφ.
而整个球的立体角公式为:
Ω
=
∫
d
A
R
2
=
∫
∫
d
θ
sin
?
θ
d
φ
=
∫
0
π
d
φ
∫
0
2
π
sin
?
θ
d
θ
=
4
π
\Omega=\int{\dfrac {dA}{R^2}}=\int\int{d\theta}{\sin\theta}{d\varphi} =\int_0^\pi{d\varphi}\int_0^{2\pi}{\sin\theta}{d\theta}=4\pi
Ω=∫R2dA?=∫∫dθsinθdφ=∫0π?dφ∫02π?sinθdθ=4π.
上面的公式应该比较简单, 相信大家都能看懂.
辐射通量(radiant flux)
辐射通量比较简单, 顾名思义, 就是单位时间辐射的能量, 也可以理解为功率, 如果我们将光看做一个一个光粒子, 辐射通量也可以看做是单位时间内通过某个区域的光粒子数量. 其单位为瓦特(watt), 也就是
J
/
s
J/s
J/s(焦耳每秒).
辐射通量一般使用符合
Φ
\Phi
Φ来表示.
辐射强度(radiant intensity)
辐射强度稍微有一些难度, 定义为单位立体角的辐射通量, 在辐射通量的基础上, 限制了通过的区域为单位立体角. 可以简单的理解为光线往某个角度辐射的能量.
只要立体角不变, 同时变化半径和球表面积, 辐射强度不会变化. 也就是说只要辐射通量不变, 单位立体角的辐射强度不会变化.
辐射强度一般使用
I
I
I来表示.
使用微分表示为:
I
=
d
Φ
d
Ω
I=\dfrac{d\Phi}{d\Omega}
I=dΩdΦ?. 其中
Ω
\Omega
Ω(或者使用
ω
\omega
ω), 是使用向量来代表某个方向上的单位立体角.
辐照度(irradiance)
辐照度也叫辐射入射度, 指的是单位面积上的接收到的辐射通量, 是所有方向上的光线能量的总和.
辐照度使用
E
E
E来表示.
使用微分表示为:
E
=
d
Φ
d
A
E=\dfrac{d\Phi}{dA}
E=dAdΦ?.
注意区分这里的单位面积和辐射强度的单位立体角. 这里的单位面积指的是被照射的面积. 如图画框的部分:
同一束光线从光源辐射出去, 辐射强度相同, 但是因为照射面积不同而导致两个框的亮度不同.
辐射度(radiance)
辐射度又被称为辐亮度, 是整个辐射度量学中最重要的概念, 用来表示我们平时对光线明暗的感知数值, 就是平时所说的亮度, 也就是渲染中所谓的颜色(这个颜色本质上是反射的亮度, 辐射度也可以表示反射或者入射或者吸收等).
辐射度的正式定义是: 单位时间内, 通过单位立体角辐射后, 照射到物体表面的单位投影面积上的能量. 通俗的说就是光线在单位时间内, 朝着单位角度(立体角)辐射能量, 然后照射到物体表面的某一块区域内的能量经过平均到单位面积之后的数值.
辐射度使用
L
L
L表示.
下图的黄框部分代表被光线照射到的物体表面积
d
A
dA
dA, 红框部分中的蓝色表面表示其在光线方向上的投影面积
d
A
⊥
dA_{\perp}
dA⊥?.
投影面积会随着光线与物体表面法线的夹角
θ
\theta
θ的变化而变化, 它们的关系是:
d
A
⊥
=
d
A
cos
?
θ
dA_{\perp}=dA\cos\theta
dA⊥?=dAcosθ.
而辐射度就是用来衡量光线在单位时间内, 沿着某个单位立体角辐射出来, 照射到这个投影面积上的能量:
L
=
d
Φ
d
ω
d
A
⊥
=
d
Φ
d
ω
d
A
cos
?
θ
L=\dfrac{d\Phi}{d\omega dA_\perp}=\dfrac{d\Phi}{d\omega dA \cos\theta}
L=dωdA⊥?dΦ?=dωdAcosθdΦ?,
也可以说在投影面积
d
A
⊥
dA_{\perp}
dA⊥?上的辐射强度:
L
=
d
I
d
A
⊥
=
d
I
d
A
cos
?
θ
L=\dfrac{dI}{dA_\perp}=\dfrac{dI}{dA\cos\theta}
L=dA⊥?dI?=dAcosθdI?,
还可以说投影面积上的辐照度在
ω
\omega
ω方向上, 分量:
L
=
E
⊥
d
ω
=
E
d
A
cos
?
θ
d
ω
L=\dfrac{E_\perp}{d\omega}=\dfrac{E}{dA\cos\theta d\omega}
L=dωE⊥??=dAcosθdωE?.
当光线垂直照射时, 两个面积相等, 此时辐射度最大, 当光线与物体表面法线垂直时, 辐射度最小.
我们后面文章要介绍的BRDF就是基于辐照度和辐射度, 所以理解本文的概念是十分必要的.
好了, 今天的分享就到这里, 希望对大家有所帮助.
|