材质概述
材质 = BRDF
BRDF具有几个性质
-
非负性
-
线性可加
-
可逆性
-
能量守恒
-
各向同性的BRDF的性质
根据渲染方程,假设在一个shading point
在一种情况下,入射的光在半球上是均匀的,反射的光也是均匀的漫反射,反射率albedo我们记为\(\rho\)
则任意方向的入射radiance \(L_i\)等于任意方向反射的radiance \(L_o\),且\(L_i(\omega_i)\)是一个常数
得到如下推导,得到了BRDF的值
反射与折射
镜面反射的材质计算如下,Blinn-Phong还采用了半程向量来简化计算
我们用球坐标系中的\(\rho\)和\(\phi\)来记录坐标
折射我们要用到Snell\'s Law来计算\(\theta\)
当\(\frac{\eta_i}{\eta_t} > 1\)时,会发生全反射现象,也就是不存在折射,所以光只能从折射率低的物质向折射率高的物质折射
不同的材质有不同的Fresnel term,Fresnel term描述了,在不同的角度观察这个材质的物体,存在不同的反射与折射的情况
视线与观察物体的法线夹角较小时,看到的更多是折射,夹角更大时,看到的更多是反射
Fresnel Term的准确计算如下
但图形学中更多地使用Schlick\'s approximation来估计Fresnel Term
微表面理论
在较远处观察一个物体时,看到的是物体的材质,是粗糙的平面
靠得足够近观察该物体时,看到的是他的几何外形,是凹凸不平的而且都是镜面反射
比如尼龙材质的微表面如下
微表面的法线足够集中,就是glossy的材质,如果法线发散,就是diffuse的材质
我们基于微表面的物理模型,可以根据微表面的性质计算出BRDF
\(D(h)\)指的是在半程向量\(h\)方向上,微表面的法线集中程度,反射表面的法线只有在半程向量\(h\)附近,反射光线才能进入相机
\(G(I, o, h)\)用于描述的是,存在部分微表面被其他微表面遮挡住了光,而无法进行反射的情况,特别是在光的入射角度很大时,\(G(I, o, h)\)就用于修正BRDF
我们在实际生活中看到的物体表面往往是带有瑕疵,而不是绝对光滑的,渲染图也需要带上瑕疵
绝对的光滑产生是因为我们对微表面的法线分布\(D(h)\)项用了过于准确而没有瑕疵的正态分布
我们可以对微表面上一个小区域的法线分布进行观察,这个小区域向相机方向投影对应一个像素,可以得到微表面独特的法线分布
如果在整个微表面上观察法线分布,法线分布会几乎成正态分布。但观察小区域的法线分布,则有不同的表现。下图中是法线分布观察区域逐渐放大的结果,法线分布也逐渐趋于正态分布
各向同性与各向异性
材质分为两种:各向同性和各向异性
观察材质微表面的法线分布即可知道材质是各向同性还是各向异性
下图中,isotropic的微表面法线和方向没有什么关系,表现出来的就是各向同性,anisotropic的微表面法线和方向关系较大,表现出各向异性
从BRDF角度分析也可以知道
对于同一种材质,BRDF是由入射角和反射角决定的
如果入射角和反射角相对位置不变,而绝对位置发生改变,而BRDF变化,材质的外观也发生变化,则这种材质是各项异性
BRDF和外观不变的话则是各向同性
如下,BRDF本来是由4个自变量决定的,但对于各向同性的材质,BRDF只和入射角和反射角的相对位置有关,所以可以剩去一个自变量,降低了分析的维度
测量BRDF
物理模型计算出来的BRDF可能不准确,有时候我们需要自己测量BRDF
测量的方式如下,就是用light source照到材质上,camera用于接受反射光,可以记录BRDF
light source旋转360°,camera也旋转360°,记录所有的不同的入射角和反射角的\(\phi\)和\(\rho\)组合得到的BRDF
通过利用材质的各向同性和可逆性,可以减少测量所用时间
非表面模型
非表面模型概述
很多材质都是非表面模型,光不仅在表面上反射,还能折射进入内部
非表面模型不能用渲染方程,渲染方程只能用于物体表面的shading,和物体的体积等无关
散射介质
像云、雾等物体,就是散射介质
在穿过云时,可能存在冰晶
存在光被吸收和光被冰晶散射的现象
Phase Function规定了散射的方法
渲染散射介质的方法和路径追踪类似,具体如下
- 随机选择一个方向来散射
- 选择光直线传播的路径长度,路径越短代表介质吸收光的能力越强
- 在每一个shading point,都用一个特定的方程来计算直接光照和间接光照带来的shading
头发模型
头发不是一个平面,而是无数条条状纤维,光线和每一条头发作用
Marschner Model是比较好的对头发的建模
Marschner Model中,一根头发是一个类似玻璃材质的圆柱,圆柱外表皮是角质,会对光线产生部分折射和部分反射,内部是皮质,会吸收光
光在一根头发中,会有三种情况,分别为R, TT, TRT
R: Reflection 代表反射,T: Transmission 代表穿过角质发生折射
R情况是光线在第一次接触角质就反射
TT情况是光线穿过头发,总共发生了两次折射
TRT情况是光线先穿过第一层角质,然后在第二层角质处反射,接着穿过第一层角质
光和所有头发作用,就是在和一根头发作用后,又和另一根头发作用,不停进行下去,计算量很大
但动物的毛发和人的毛发结构中都有一个髓质结构,是在圆柱中心的一个半径较小的圆柱。人的髓质比较小,约占毛发横切面的15%,动物的髓质更大
Double Cylinder是更好的毛发模型,考虑了髓质的作用,髓质像一个散射介质,主要作用是对光的散射
光的传播并不一定接触到髓质,所以我们可以在Marschner Model三种情况上进行补充\(TT^s\)和\(TRT^s\)
\(TT^s\):TT过程中在髓质中发生散射
\(TRT^s\):TRT过程中在髓质中发生散射
Granular Material
多个小颗粒构成的大型结构
在远处看类似表面模型,但近看会出现颗粒状
表面模型
Translucent Material
包括玉石和水母:光从一个点折射进入物质内部,在内部又发生散射,从另一个点折射出去。
我们把这种模型叫做subsurface scattering
subsurface scattering可以理解为对反射方程的延申,subsurface scattering中的BRDF我们称为BSSRDF
反射方程中,入射光射到shading point上,反射光从shading point离开
subsurface scattering中,入射光射到shading point上,反射光从其他点离开
所以我们把BRDF的\(f\)项替换成BSSRDF的\(s\)项,\(s\)项规定了入射角度和入射位置,出射角度和出射位置
在计算一点的shading时,需要考虑整个面上其他点对这个点的subsurface scattering影响,所以反射方程改写为对立体角和面积的二重积分
这个计算方程比较麻烦,我们可以用dipole approximation来估计
表面上和表面下都有一个光源,可以模拟subsurface scattering
布料
布料的物理结构:
fiber缠绕形成ply,ply缠绕形成yarn,yarn再用woven或者knitted的方式来织成布料
渲染布料有三种方法
- 当成散射介质
- 一根一根fiber地渲染
- 当成表面,计算BRDF
波动光学
当物体体积小到和光线的波长相当时,就不能再假设光线为直线,需要当作波来处理
Procedual Appearance
对于一个三维物体,记录三维的贴图存储过大,我们用一个三维的噪声函数来记录贴图
在需要用贴图时,就用三维坐标在噪声函数中查询shading值即可,不展示在外面的内部结构就不需要渲染