一、图形学中的材质
不同的物体表面有着不同的材质,而不同的材质意味着它们与光线的作用不同。那么我们之前在介绍辐射度量学和渲染方程提到过其中一个函数,叫做BRDF,而在实际上,也就是BRDF定义了不同的材质。BRDF决定了光如何被反射。
1.漫反射材质
之前我们在布林冯着色模型中根据经验定义的漫反射系数,在我们学习了辐射度量学和BRDF之后可以将它精确的定义出来。我们以上图为例,定义一个漫反射材质,它不吸收光,也就是说来了多少光就要反射出去多少,我们人为做一个场景,假设四面八方来的Radiance是均匀的,而因为它是漫反射材质,反射出去的Radiance也应该是均匀的,同时因为能量守恒进出的能量是一样的,那么入射的Radiance和反射出去的Radiance也应该相等。由此我们可以把渲染方程化简得到此时的BRDF=1/π,而这就是完全不吸收能量的BRDF。我们再定义一个反射率(albedo),这个反射率ρ可以是一个数或R,G,B三个通道或者是光谱,但是ρ∈[0,1],这样我们就可以定义不同颜色的BRDF,这样我们就知道一个漫反射的BRDF应该是在0到1/π之间。
2.Glossy材质
Glossy材质我们之前提到过,它并不是完美的镜面反射,例如打磨的金属。它们的反射接近镜面但又不是绝对的镜面,如上图右上角的反射示意图。
3.理想反射/折射材质
这种材质不仅在表面会发生反射还会发射折射,如玻璃,水面等。右边这幅图有颜色,说明光折射进入球壳之后被部分吸收了。
二、反射和折射
1.反射
关于反射,我们知道反射角等于入射角,这也是反射定律。而关于反射定律我们有两种理解方式。
第一中如上图左,给定入射方向和反射方向还有法线方向我们可以知道它们的关系,入射方向向量+反射方向向量根据平行四边形法则应该是法线方向,且长度为平行四边形的对角线,这里也就是菱形,那也就是对反射方向/入射方向向量做一个法线上的投影再乘以2就是最终的结果,最终把除了反射方向的项都移到右边,就得到了公式ωo = -ωi + 2(ωi·n)n,这样给定任意入射方向ωi和法线方向n我们就可以求出它的反射方向。
另一种理解方式如上图右,我们在左图垂直上方观测会得到右面这张图,我们之前讲到立体角,讲到过球坐标,那么这里的Φo,Φi就相当于球坐标中的水平方位角决定水平反向,而入射角和反射角则决定了竖直方向的角度。在水平方位角上,我们可以很容易的发现Φo=(Φi+π)mod2,也就是反射方向的水平方位角始终等于入射方向的水平方位角+π再对2π取模即可。(关于取余和取模运算不了解的朋友可以自行搜索了解,这里不做赘述)
2.折射
折射定律:不同的材质有不同的折射率,如上图的ηi和ηt,入射角和反射角的正弦,上图的sinθi和sinθt,那么则有ηi·sinθi=ηt·sinθt。与此同时我们仍然像可以反射一样得到方位角φ之间的关系。
而根据折射定律,我们很容易得到折射角的余弦,它一定是一个实数,也就是上面根号内的值一定要≥0,而不能<0,如果<0,那么说明ηi/ηt>1,也就是光从光密介质射向光疏介质,并且入射角大于等于临界角时全反射现象才会发生。
而全反射会导致一种现象,如上图,人在水底向上看的视野只有一小片区域。这提示了我们之前在接受Path Tracing的时候没有提到,而实际上在做Path Tracing的时候是要把这么个问题考虑进去的。我么们之前说过BRDF可以来描述反射,那么折射用什么来描述呢?这里叫做BTDF,而BRDF和BTDF可以统称为BSDF。
3.菲涅尔项
如上图,一本书靠着墙在桌子上放着,我们分别俯视,半俯视,平视地看这本书,发现在桌子上反射出的书的“倒影”逐渐变明显,也就是说反射的明显程度是和我们视线和反射平面的角度相关的,这就是菲涅尔现象。
这也说明了,有多少能量被反射其实是与入射光的方向和和法线方向的夹角有关系的。且通过菲涅尔项,我们可以知道到底有多少能量被反射,又有多少能量被折射。
如上图(某种折射率=1.5的绝缘体的菲涅尔项)中的红色线表示,当法线方向和光的方向为90°的时候,也就是垂直的时候,所有的能量都会反射出去,而法线方向和光在一条线上的时候,反射为0,光会直接从表面穿过发生折射。(P和S两条线表示光的极化性质,与光的波动性有关,但在这里我们不考虑,截止目前还没有渲染器把光的极化性质考虑在内)
如上图,显示为某种导体的菲涅尔项,显然我们发现导体和非导体的菲涅尔项存在着很大的不同,如非常光滑的金属,即使我们垂直这表面去看,仍然能看到比较强的反射。包括在上图中我们还看到当光线与法线接近90°的时候反射的能量还有一个先降后增的效果。
上图是菲涅尔项的计算公式,其中Rs和Rp是我们上面提到的极化,它们由折射率和夹角确定,最终我们想得到无极化的曲线把它们两个平均起来即可,但是这个公式过于复杂,人们通常用一种简化的近似形式如下图。
Schlick's approximation—Schlick近似法
Schlick近似法,思想是我们认为每个菲涅尔项都有一个初始值为R0,然后逐渐增长,到90°的时候为1。基准反射率为R0,也就是垂直时候的反射率,对于非导体我们可以将R0设置的低一些比如0.1以下,而对于导体我们可以把R0设置的高一些比如0.9,最终我们拟合出一条近似的曲线来近似它的菲涅尔项。
三、微表面模型
什么是微表面模型呢?看上图中从太空中拍摄的地球照片,我们可以看到一大片的高光,但是实际上地球的表面并不是完全光滑的,有各种各样的地形起伏,高楼等等,那我们为什么能看到高光呢?因为我们离的足够远,而足够远意味着我们看不到所谓地形,高低起伏等细节,只能看到一个总体的光线反射分布。而微表面模型正是根据这一特点提出来的。
微表面模型认为,表面是有起伏凹凸不平的,但是如果我们从远处(宏观)l来看,我们可以把它当作是平面,并且它是粗糙的。从近处看(微观),它是凹凸起伏的,但是表面的每个微元都是光滑的,也就是发生完美的镜面反射。这也说明了,我们从远处看看到的是外观,而近处看看到的是几何。
而通过微表面模型,我们可以用法线的分布来描述物体的粗糙程度,如上图的glossy材质,在微观上表面的法线朝向接近垂直向上,也就是完美的平面那它的反射就相对集中一些会形成一定范围的高光,而diffuse材质,表面法线分布非常分散,所以反射出的光也很分散,那么高光效果就会弱。
而由此我们可以定义出微表面的BRDF,其中F为菲涅尔项;D为法线分布,h是我们之前布林冯着色模型中提到过的半角向量,我们知道只有当半角向量h和法线n一致的时候,才能把光从入射方向反射到出射方向上去,因为我们规定了微表面上发生的都是完美的镜面反射,而D项就是在求有多少微表面的法线n和半角向量h方向一致进行一个查询。G又叫几何项,它用来表示有多少能量因为自遮挡失效了,因为微表面是有起伏的,如果从上图微表面左几乎平行地面打过来一束光,那么右边许多地方是接受不到光照的,也就是说微表面会产生自遮挡现象。而G项就是用来表示这个问题的。光线几乎平行于表面的入射角度我们称之为Grazing angle,也就是无论是入射方向还是观察方向,只要接近Grazing angle,那么G项就会起作用。
各向同性/各向异性材质
对于微表面模型,我们可以分为两种,各项同性和各项异性。各向同性表示它的法线虽然分布朝四面八方,但是各个方向的发现分布相对均匀,如上图中的第一幅图。而各向异性,如打磨过的金属,它的微表面的法线分布有明显的方向性,如上图第二幅图,水平和竖直方向的发现分布存在着明显的差异。
而反映在BRDF上也可以看到,各项异性的BRDF和各向同性的BRDF也不同。我们之前说过的BRDF是各个方向分布均匀的,而各向异性则不同,各项异性的入射角和出射脚不仅和相对方位角有关,还和绝对方位角有关。
四、BRDF性质的小结
非负性:BRDF描述的是能量分布,所以一定≥0
线性:我们之前是把漫反射,高光的BRDF项分别加在一起求出最终的结果。
可逆性:在同一点颠倒出射方向和入射方向得到的BRDF是一样的。
能量守恒:BRDF的存在不会让能量变多,如果全都反射那么最终结果就=1,部分被吸收则<1。
各项同性和各项异性:如果是各向同性的BRDF,那么就只于相对方位角有关,那么本来是四维的BRDF我们可以把最后两项合并变为方位角之差,又因为BRDF具有可逆性,所以方位角之差可以不考虑正负,变为绝对值即可,得到最终的各向同性BRDF:fr=(θi,θr,|Φr-Φi|)。
五、BRDF的测量
为什么要做BRDF的测量呢?我们之前所说的模型基本都是基于许多假设和简化的,所以实际上并不准确,甚至有时候相差非常大,其次,如果我们通过测量得出了BRDF的数值,那就不需要进行计算,而是拿来直接使用就可以了。
BRDF怎么测量呢,我们知道它实际上就是两个方向的函数,一个入射方向一个出射方向。假如我们现在就对一个着色点观测,我们用一个光源从四面八方去照亮它,再用一个摄像机从四面八方去拍,这样我们就覆盖了所有可能的方向。
从上面的思路中我们得到了一个非常简单粗暴的算法,也就是枚举所有相机的拍摄方向和枚举所有的光源照射的方向,而2x2我们得到了一个四维的数据,而要想全部枚举完,四维是一个非常庞大的数据量,那怎么办呢?我们之前提到过如果我们策测量一个各项同性的材质,它的BRDF其实是一个三维的数据,而又因为BRDF的可逆性,我们可以把数据量再次减少一半。再者我们不一定要测出所有方向,我们可以只测量若干个方向,而其它方向的BRDF我们可以估计出来。
而不仅是BRDF的测量,BRDF的存储,压缩也有很多问题需要研究,这里就不介绍了,感兴趣的朋友自行了解。
参考:
Lecture 17 Materials and Appearances_哔哩哔哩_bilibili
GAMES101_Lecture_17 (ucsb.edu)