发布网友 发布时间:2023-07-31 16:38
共1个回答
热心网友 时间:2024-07-31 05:25
参考课程:
https://www.bilibili.com/video/BV1X7411F744?p=15
在单位时间内,每个单位面积上接受到的光照的能量。即power per unit area。
做一下对比,之前的Radiant Intensity是 power per unit solid angle
注:这个单位面积必须要和光线垂直,如果不垂直的话要把面积投影到垂直的方向上(图中没有写cos,暂时就一个dA)
类似之前的Biling - Phong里的内容
上面的Lambert’s余弦定理就解释了地球为什么会出现四季变换:当北半球是夏天时,太阳光直射北半球,北半球的Irradiance更多,也就更热;而当北半球是冬天时,光线与地球的表面有一定的夹角,Irradiance减少,所以冬天就更冷。(如上图地球中黑色虚线处)
之前提到过,我们是假设能量集中在一个球壳上,随着球壳的增大,光的强度会有一个r平方的衰减;现在可以用Irradiance正确解释:
在最内部的单位球上, Irradiance(E) = φ/4π,单位面积上接受到的能量就是 φ/4π,
而在外部的球面上, Irradiance(E’) = φ/4πr^2,在单位面积上接受到的能量就是 φ/4πr^ ,所以就是r平方的衰减。
所以就可以知道,在这里衰减的并不是Radiant Intensity(往外走,单位立体角不会变),而Irradiance在衰减(往外走,面积越来越大)。或者不叫衰减,而是分布得更分散了。
如果从球心以一个立体角画一个锥形,就可以知道,随着球面越来越大,立体角的大小是不变的,而立体角对应单位面积的大小却越来越大,所以球面越大时,dA越大,Irradiance也就会越小。
Radiance是描述环境中光的分布的基本场量(fundamental field quantity),它主要用来准确描述光线的一些属性。准确的光线追踪与radiance关系非常大,渲染就是在计算radiance。
The radiance (luminance) is the power emitted, reflected, transmitted or received by a surface, per unit solid angle, per projected unit area.
定义:Radiant Flux(Power) 它在每个单位立体角、每个投影的面上有多少。也就是,某个单位面,往某个单位立体角方向上的发出的能量。
相当于进行了两次微分:
上图中的单位,闫老师没有仔细解释,但是对帮助理解概念是十分有用的。这里我来通过单位的角度,总结一下前面的概念。
以单位的视角,先来从头回顾一下概念:
上面讲到强度时,闫老师同样没有解释单位,虽然课件的图上其实是有写的:
那么单位中的sr是啥呢,其实就是立体角的单位,叫球面度。百度百科中就有:
而candela百度百科也有解释:
其实上面的百度百科,顺便就提到了光亮度的单位,即坎德拉/平方米,这个正是nit(尼特)。
最后,再补充一下lx的百度百科:
现在,参考百度百科,把所有的概念翻译一下,并且补上单位来理解:
这里按照二次微分的思想就得到以下结论:
上面的两条结论,也可以这样理解:
视频剩下的部分,又仔细讲了两者的区别。经过上面从单位角度理解概念,听起来应该不成问题,这里仅仅把闫老师最后的结论放一下:
根据上面Radiance和Irradiance的关系,来重新理解一下反射的概念。
我们之前说反射:如果从一个地方发出光线打到一个镜子,然后光线会反射到另一个方向去;如果打到漫反射物体,那么往四面八方都会去。我们需要有一个函数来描述这种性质:从某个方向进来,并且反射到某个方向去的能量是多少。
反射在我们之前的理解中,是一道光线到达一个表面,然后反射到其他的方向去。这个过程其实也可以看作是从某一个方向来的光线,到达物体表面后,被物体表面所吸收,然后再由物体表面发射到其他方向去。这也就是用到了Radiance和Irradiance来解释反射。
现在来看个例子
如上图,从wi来的光线,打到单位面积dA上,会在这里转化成能量,也就是power,表示为dE(wi):
现在问题就是,我们知道反射点要吸收来自某一个方向的Radiance的能量,把它变Irradiance,之后要反射到四面八方的立体角Radiance上。但是我们不知道反射到某个具体方向(wr)的Radiance会有多少能量。
所以我们就为此定义一个函数,专门来描述这样的一个概念:考虑一个微小的面积dA,从某一个微小的立体角dwi上接受到的Irradiance,会如何被分配到各个立体角上。这里其实求得就是一个比例,是什么比例?
这个比例是:
这就是BRDF的定义,它会告诉我们如何把表面上收集到的能量以某一种比例反射到其他的方向上去。
BRDF能表示从每个入射方向收集到的能量以某种比例反射到每个出射方向上的能量。即某个光线打到物体表面后,往不同方向反射的能量分布。
如果说是镜面反射,那么只有反射方向上会有能量,其他所有方向上都没有能量;如果是漫反射,这个进来的能量会被均等的分布到各个方向上。
忽略推导部分,其实BRDF就是描述了物体和光线之间的相互作用。正是由于BRDF的这种概念,决定了物体不同的材质到底是怎么一回事,也就是BRDF定义了材质。
这里参考一下弹幕:
从上面的分析可以得到, 某个角度入射的能量 最后反射到某个方向上的能量。而在反射的过程,我们并不是只对单一的,来自某一个方向的能量进行反射,而是要将来自四面八方的能量都收集起来,然后反射到某一个角度上。
所以要得到最终的反射效果,应该是:通过BRDF计算出:每个方向接受的能量 它反射到wr方向上的能量是多少。然后把这些能量全部累加起来,得到的就是wr方向上反射的能量,可以用积分表示(H的平方表示的积分面积为整个半球面,下面的整个表达式就是反射方程)
渲染方程与反射方程相比,渲染方程只是多加了一个自己发光的能量。因为我们在考虑物体表面对光进行反射的时候,没有考虑物体自己发光的情况,所以渲染方程就加上了物体自身发光的能量。
渲染效果 = 反射光 + 自身 发光,渲染方程如下:
(我们假设所有方向都是朝外的)
我们首先从反射方程来看,假设有一个点光源。它的反射光=自发光+入射光×BRDF×入射光与法线的夹角
如果有很多点光源,那么自然就是累加,把每一个点光源的照亮这个点的能量加起来。如果有面光源怎么办?面光源我们理解成点光源的集合,也就是进行积分。
但是如果不只是光源,还有其他物体的反射来的光,我们就把其他物体的反射面当成光源。也可以说是从这一点往某个方向辐射出去的Radiance也是依赖着其他的点辐射出来的Radiance,也就是递归过程。
我们对方程进行简写,把 位置+角度 这两个变量用一个概括,变成u以及v,写成了积分的式子
继续把方程写成算子的形式
于是渲染方程被拆解成以光的弹射次数为区分的很多项。把光线弹射的次数的项都加起来,也就是得到了全局光照
上面这一堆公式,就懵*状态看完的……