材质
材质概述
材质 = BRDF
BRDF具有几个性质
-
非负性
-
线性可加
-
可逆性
![image]()
-
能量守恒
![image]()
-
各向同性的BRDF的性质
![image]()
根据渲染方程,假设在一个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)\)项用了过于准确而没有瑕疵的正态分布

我们可以对微表面上一个小区域的法线分布进行观察,这个小区域向相机方向投影对应一个像素,可以得到微表面独特的法线分布
如果在整个微表面上观察法线分布,法线分布会几乎成正态分布。但观察小区域的法线分布,则有不同的表现。下图中是法线分布观察区域逐渐放大的结果,法线分布也逐渐趋于正态分布

Fresnel Term
其中Fresnel Term定义了,根据入射角和半程向量关系的变化,得到的反射比例
我们用Schlick's Approximation来估计

Normal Distribution Function
NDF定义了该点,向朝上半球各个方向上,法线的集中程度
有一些常用的NDF
Beckmann NDF
\(\alpha\)是表面粗糙程度,\(\theta_h\)是半程向量和法线夹角

GGX,也叫TF
比起Beckmann,具有长尾的性质,也就是从1过渡到0更加平滑,这也使得GGX比起Beckmann更符合实际


GTR
可以通过\(\eta\)控制曲线

Shadow-Masking
由于微表面上有起伏,会出现将光线遮挡的情况
一是会使光线无法照亮一些部分,也就是Shadow,二是使眼睛无法看见一些部分,就是Masking

我们常用The Smith Shadow-Masking Term
对不同的NDF有不同的Shadow-Masking Term

Multiple Bounces
由于应用微表面理论的公式时,我们只计算了在表面上一次bounce得到shading
而对于Diffuse的物体,表面起伏比较大,很多光线会在表面上做多次弹射,再进入人眼

因为我们忽略掉了Multiple Bounces,对于Diffuse物体,有很多能量没被考虑,导致颜色较暗

我们使用The Kulla-Conty Approximation来给BRDF加回Multiple Bounces的部分
我们可以用如下式子来计算出one bounce释放的能量总和,记为\(E(\mu0)\)


对于一个白色的物体,能量总和一定为1,则multiple bounces的能量总和,就是\(1 - E(\mu0)\)
对于multiple bounces的能量,我们可以用一个BRDF来拟合,这个BRDF在半球上的积分,一定是\(1 - E(\mu0)\)
这个BRDF,我们记为\(f_{ms}\),验证过为如下式子,只要把\(f\)和\(f_{ms}\)加在一起,做积分,就是完整的shading了

其中\(E(\mu0)\)和\(E(avg)\)的计算都比较困难,我们用预计算的方式保存起来

加上Multiple Bounces后,就是正常的结果了

但对于有颜色的物体,能量是不为1的,我们对multiple bounces的BRDF乘上一个系数

其中\(F_{avg}\)为Fresnel Term的平均

各向同性与各向异性
材质分为两种:各向同性和各向异性
观察材质微表面的法线分布即可知道材质是各向同性还是各向异性
下图中,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
![image]()
头发模型
头发不是一个平面,而是无数条条状纤维,光线和每一条头发作用
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值即可,不展示在外面的内部结构就不需要渲染

Nonphotorealistic Rendering
粗边
NPR很多时候会需要给图像的轮廓加粗

对于加粗有几种方法
Normal
当shading point表面法线和视线方向基本垂直时,代表是物体的轮廓,给shading point加黑即可

Backface Fattening
在建模时,给物体被挡住的面扩展,而且写为黑颜色

Sobel Operator
用Sobel Operator检测高频区域

多重信息
还可以同时利用Normal map和Depth map来找出轮廓
![image]
(https://img2022.cnblogs.com/blog/2621691/202208/2621691-20220823232742101-53134234.png)
色块
在shading时,给不同区域,比如高光区域、影子区域,加上不同的均匀颜色即可

素描
通过给物体贴上预制好的纹理来制作素描效果

通过采用不同密度的纹理,得到平滑过渡。比较暗的地方就是密度较高,否则密度较低

LTC
Linearly Transformed Cosine是对微表面模型做多边形光源shading的方法
直接根据The Rendering Equation对BRDF做积分比较困难
可以将BRDF转换为一个cosine function,同样的把光源做一致的转换,就可以对积分有解析解

把积分域,光源方向等都做同样的转换,\(M^{-1}\)是预计算好的

以下就是把渲染方程转换成BRDF是cosine的形式,其中光照我们当作均匀的

LTC的缺点在于无法做出阴影,以下是效果图






浙公网安备 33010602011771号