🏮

反射

Diffuse/Lambertain Material(BRDF)

notion image
我们可以定义在不同点上可以有不同的漫反射系数,虽然都是漫反射,但是各个点光被吸收的部分不同,所以会显示出不同的颜色。
💡
同样道理,我们还可以定义其他各种各样不同的反射方式。

Diffuse / Lambertian Material

以前 blinn-phong 模型中定义漫反射系数用的是 Intensity ,多少 Intensity 到达并吸收。再给个颜色,并且在 0~1 之间,也就是会被吸收多少。而这是一个经验性的定义
而现在我们可以把漫反射系数给定义好。
notion image
左图的材质是漫反射,意味着任何的光线从不同方向进来,都一定会被均匀地反射到周围的各个不同的方向上去。
那么可以假设空间中从任何一个方向进来的光,radiance 都是一样的,进来的光都是 uniform 的,反射的光肯定也是 uniform 的。这样假设可以利用能量守恒,如果这个点不发光也不吸收光(假设物体是白的),这就意味着光进来多少就要反射多少出去。从能量考虑的话,这个着色点周围的小的区域接受的能量就是 power per unit area——irradiance,进来多少 irradiance,出去就是多少 irradiance。
我们假设了 diffuse 漫反射材质,还假设了入射光是 uniform 均匀的,入射和出射的 irradiance 是相等的,并且 radiance 都是 uniform 的,这就意味着入射光和出射光的 radiance 也是一样的。这就可以直接用渲染方程,得出右边的式子。
  • 是任何方向进来的入射光
  • 是漫反射,其 BRDF 是常数
  • 经过漫反射,反射到 上,
假设入射的 radiance 是常数,diffuse BRDF 也是常数,就可以把这两个拿到积分外,就能看到这其实就是对半球上 cos 函数的积分。因为半球上对立体角积分是 2π,对 cosθ 积分是 π。 又因为入射光和出射光的 radiance 是一样的,Li = Lo,所以最后得出 BRDF = 1/π,这就是完全不吸收能量的漫反射 BRDF。
我们还能定义一个反射率 albedo(单通道、RGB或者光谱),在 0~1 之间,这样可以引入不同的颜色的 BRDF,所以 BRDF 的值就是 albedo / π,所以 BRDF 是 0~1/π 的。

Glossy material(BRDF)

notion image
notion image
这种入射光一根打到这个物体上,然后反射出去一个方向。很像镜面反射,但又不是镜子,比镜子要粗糙一些。就像抛光了的金属,古代的铜镜。打磨得足够光滑,但又比不上现在的镜子,这种叫 Glossy 材质

Ideal reflective / refractive material (BSDF*)

notion image
进来只有一根光线打到这里,然后有一部分能量沿着镜面反射出去了,有一部分能量进到物体中。发生了反射与折射,这种材质就是玻璃或者水之类的。
notion image
右边的球有颜色,颜色在玻璃球壳内,这说明光在折射到球里面传播的时候,被部分吸收了,但也不是完全吸收,因为如果完全吸收就没有光出来,就会变成黑的了。

Perfect Specular Reflection

💡
反射和折射还可以研究得更深一点
notion image
出射角等于入射角。通过这个定律,可以写出反射定律,其中有两种不同的理解方式。
notion image
一个是用反射的定律来,入射光的方向和出射光的方向,两个的正中间方向一定是法线方向。这样可以利用这个平行四边形法则, 一定沿着 方向,一半的长度是红颜色长度,是入射方向投影到法线方向的长度。得出:
另一个是更简单的解决方式,把这些角度投影到局部的坐标系上去。我们认为任何一个方向与法线的方向的夹角(仰角)是 =0,说明入射光沿着法线方向。=90°,说明是平着往右边去。另外定义一个 φ 角度,我们规定,在某一个平面上, 都在这个平面上,认为 φ = 0。如果这个平面绕着 在转,就引起方位角 φ,这样就可以把任何角度拆成 θ 和 φ。
对于左边的场景,从上往下看,就是上图右的场景。入射方向(假设朝外)和出射方向的方位角的朝向正好是相反的,角度相差一个 π。因此求角度时可以加上一个 π 对 2π 求模:
💡
之前在提 Blinn-Phong 模型的时候,这个模型和 Phong 模型的区别是要考虑 half vector ,入射光和视角方向的中间方向是不是足够接近,不考虑反射光和出射方向是否一致。因为算反射方向不是很简单,有点乘有加法。肯定不比 视角方向和入射方向加起来 normalize 简单。

Perfect Specular Reflection BRDF

反射算对了,就可以得到下图。
notion image
💡
所有的反射都可以拿 BRDF 描述,镜面反射肯定也能用 BRDF 描述,BRDF 的值是多少,就很麻烦。要涉及狄拉克 δ 函数。 BRDF 我们理解的是在一个固定的入射方向之后,在出射方向应该是一个分布。而镜面反射的分布就集中在镜面反射方向上,因此写出正确的 BRDF 不容易,折射上更是如此。