2024-12-01 01:25:47
参考课程:
https://www.bilibili.com/video/BV1X7411F744?p=17
我们研究材质,其实是研究材质如何与光线作用,也就是研究BRDF,这个思想将是这节的核心。
对于漫反射材质,之前我们经验性地定义过漫反射系数。在Blinn Phong的时候,我们用 Intensity/R² 来不准确地定义到达着色点的能量。现在我们给漫反射项的系数来一个准确的定义。
定义材质是漫反射,也就是无论哪个方向的光进来,都会被均匀地反射到四面八方去。
我们现在人为地做这么一个场景。我们认为空间中从任何一个方向进来的光,它的Radiance都是一样的,也就是让进来和反射的光都是uniform(均匀)的。
有了以上条件之后,假设这个点不发光且不吸收光,我们就可以利用能量守恒,也就是进来的光的能量多少,出去也得多少。总结一下,入射和出射的Irradiance是相等的并且Radiance都是uniform(均匀)的,所以可知 入射光和出射光的Radiance是一样的。
有了这个观察总结以后,渲染方程中的入射光可以从积分里拿出来,然后进行半球上cosθ的立体角积分就是 π 。然后能量守恒 L i = L o ,于是我们得到 f r = 1 / π 时,就是完全不吸收能量的BRDF。
我们可以定义一个反射率(albedo),可以是单通道的数,也可以是三通道的RGB,它在0到1之间,于是有了它就可以引入不同颜色的BRDF,也就是 f r =ρ/π,所以漫反射系数的大小是0到1/π。
反射情况介于镜面反射和漫反射之间的材质,我们称为Glossy material。它不是完全的镜子,比镜子粗糙一些,就像铜镜。
反射和折射都有的材料的,类似玻璃与水,我们称之为 Ideal reflective / refractive material
如图,wo+wi就是沿法线长度的那个向量,大小就是那个平行四边形的对角线,也就是2倍红线的长度。而红线的长度,就是wi点乘法线向量n。最终的公式,就知道了,根据入射光,如何求出射光向量。
从球坐标,方位角的方式来理解,即从顶部往下看,出射和入射正好差了π,然后2π循环,求余一下。
下图为完美镜面反射的效果图。我们用BRDF来描述完美镜面反射的时候,要用到δ函数,写出正确的BRDF有些困难。
闫老师认为翻译成焦散,并不准确。因为发生这个现象是因为聚焦,而不是散射。光线打到凹凸不平的海水表面,会往不同的方向折射。对于海底的某个点,有几率接受来自不同方向打过来的光,都正好打在某个位置,就像拿放大镜把光聚到一块,在某些地方就会产生条状的亮纹。
这个现象对渲染来讲,计算量非常大。
入射角正弦值×入射材质折射率=折射角正弦×出射材质折射率
参考 https://www.zhihu.com/question/29969687/answer/916899633
折射是我们学习过的第一批光学现象,它看起来非常简单,光从一种介质射入另一种介质将会在界面处改变方向,折射率越大的介质,传播方向越靠近法线——我们还学习过一个定量计算的“斯涅尔定律” (Snell’s law),其中n1和n2是两种介质的折射率,θ1和θ2是入射光和折射光与法线的夹角。
通过上面的公式,可以计算折射角的余弦:
根据这个公式,折射发生时,cos θt是一个有意义的实数。也就是说当出现以下条件时,折射不可能发生:
也就是说,如果入射介质的折射率大于折射介质的折射率,就会出现没有折射的现象,即全反射。
这种现象的实际意义在于,在做光追时,如果光线折射进入一个玻璃物体内,就有可能发生全反射。
折射也需要对应一种 “BRDF”,但是我们知道BRDF的R是反射(Reflectance),所以折射应该叫BTDF,T为折射(Transmittance)。把这两个统称起来我们可以叫做BSDF,S表示散射(Scattering)。不管反射折射我们都认为是一种散射,BSDF(散射) = BRDF(反射) + BTDF(折射)
我们有这么一个例子,一本书靠在墙边,我们从上到下不同视角看它。我们发现一个问题,我们类似垂直看下去,几乎看不到什么反射;但是几乎平着看过去,反射特别明显。所以有多少光被反射,是和入射光与法线的角度有关系的。用菲涅尔项我们就可以判定有多少能量被反射,有多少能量被折射。
举个例子,在生活中,比如坐在大巴车上,我们看自己旁边的窗户,比较容易看到外面去,但是看着前后几排的窗户,可能只有反射
对于导体来说又是另一种菲涅尔项。所以古代用铜镜和银镜,其实也是因为它们在任何情况下反射率都挺高的。并且先降再升的曲线也很神奇。
我们要怎么样准确计算菲涅尔项呢?有很复杂的公式,S和P是两个极化方向,平时我们把它们平均起来就好。我们也有简化的公式,施利克近似—Schlick’s approximation
为什么要引入菲涅尔项,是因为我们要引入真正基于物理的材质——微表面模型。
我们先从卫星图引入,可以看出拍摄的地球有一个高光在澳大利亚,这个高光挺完美,和球面似的。但是我们会觉得不对,因为地球表面有山啊树啊地形啊什么的,应该是一个相当复杂的表面。但是现在却看到类似平面高光,还有一定粗糙程度。这说明从远处看,我们看不到各种细节,只会看成一个表面,带点粗糙程度的样子。
微表面模型做了这么一个事情:它假设物体表面是粗糙的,从远处看是一个粗糙的平面( 从远处看到的是外观 )。从近处看可以看到凹凸不平的表面,并且每一个表面的微元都是完完全全镜面反射的物体,都有各自的朝向和法线( 从近处看到的是几何 )。
我们为什么要研究这个呢?我们可以研究这些微表面本身法线的分布,这些分布可以代表不同粗糙程度的材质。
我们可以看到微表面模型的一些例子:
如果提到PBR(Physically Based Rendering / Shading)就一定会提到微表面模型。微表面模型也有一些缺点,Diffuse比较少,有时要加额外的漫反射的东西。微表面模型是统称,其实有很多不同的模型,但是都遵守微表面这一套。
下图是电梯间内部的图,电梯间的小灯打出的高光是条状的,这和我们之前椭圆状的高光的认识不符,这也是由于材质造成的, 这是被磨过的金属造成的高光。 于是我们引出了接下来区分材质的方法,各向同性与各向异性材质。
反映在BRDF上的效果,如果这个BRDF在方位角上旋转得不到相同的BRDF,我们就叫它是各向异性材质。
交换入射和出射,结果一致
能量要么前后一致,要么变小(被吸收),最后的能量结果是收敛的。
各向同性:BRDF只与相对方位角有关。根据可逆性,BRDF可以不用考虑方位角的大小,只需要他们差的绝对值,便于储存。
实际测量出来的BRDF和推算出来的BRDF经常会有很大差距。如果可以测量的话,也就不用推导模型,直接用数据了。