材质

材质概述

材质 = BRDF

BRDF具有几个性质

  1. 非负性

  2. 线性可加

  3. 可逆性
    image

  4. 能量守恒
    image

  5. 各向同性的BRDF的性质
    image

根据渲染方程,假设在一个shading point
在一种情况下,入射的光在半球上是均匀的,反射的光也是均匀的漫反射,反射率albedo我们记为\(\rho\)
则任意方向的入射radiance \(L_i\)等于任意方向反射的radiance \(L_o\),且\(L_i(\omega_i)\)是一个常数
得到如下推导,得到了BRDF的值
image

反射与折射

镜面反射的材质计算如下,Blinn-Phong还采用了半程向量来简化计算
我们用球坐标系中的\(\rho\)\(\phi\)来记录坐标
image

折射我们要用到Snell's Law来计算\(\theta\)
image

\(\frac{\eta_i}{\eta_t} > 1\)时,会发生全反射现象,也就是不存在折射,所以光只能从折射率低的物质向折射率高的物质折射
image

不同的材质有不同的Fresnel term,Fresnel term描述了,在不同的角度观察这个材质的物体,存在不同的反射与折射的情况
视线与观察物体的法线夹角较小时,看到的更多是折射,夹角更大时,看到的更多是反射
image
image

Fresnel Term的准确计算如下
image

但图形学中更多地使用Schlick's approximation来估计Fresnel Term
image

微表面理论

在较远处观察一个物体时,看到的是物体的材质,是粗糙的平面
靠得足够近观察该物体时,看到的是他的几何外形,是凹凸不平的而且都是镜面反射
image

比如尼龙材质的微表面如下
image

微表面的法线足够集中,就是glossy的材质,如果法线发散,就是diffuse的材质
image

我们基于微表面的物理模型,可以根据微表面的性质计算出BRDF
\(D(h)\)指的是在半程向量\(h\)方向上,微表面的法线集中程度,反射表面的法线只有在半程向量\(h\)附近,反射光线才能进入相机
\(G(I, o, h)\)用于描述的是,存在部分微表面被其他微表面遮挡住了光,而无法进行反射的情况,特别是在光的入射角度很大时,\(G(I, o, h)\)就用于修正BRDF
image

我们在实际生活中看到的物体表面往往是带有瑕疵,而不是绝对光滑的,渲染图也需要带上瑕疵
image

绝对的光滑产生是因为我们对微表面的法线分布\(D(h)\)项用了过于准确而没有瑕疵的正态分布
image

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

Fresnel Term

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

image

Normal Distribution Function

NDF定义了该点,向朝上半球各个方向上,法线的集中程度

有一些常用的NDF

Beckmann NDF
\(\alpha\)是表面粗糙程度,\(\theta_h\)是半程向量和法线夹角
image

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

image

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

Shadow-Masking

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

image

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

Multiple Bounces

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

image

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

image

我们使用The Kulla-Conty Approximation来给BRDF加回Multiple Bounces的部分

我们可以用如下式子来计算出one bounce释放的能量总和,记为\(E(\mu0)\)
image

image

对于一个白色的物体,能量总和一定为1,则multiple bounces的能量总和,就是\(1 - E(\mu0)\)

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

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

image

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

image

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

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

image

各向同性与各向异性

材质分为两种:各向同性和各向异性

观察材质微表面的法线分布即可知道材质是各向同性还是各向异性
下图中,isotropic的微表面法线和方向没有什么关系,表现出来的就是各向同性,anisotropic的微表面法线和方向关系较大,表现出各向异性
image

从BRDF角度分析也可以知道
对于同一种材质,BRDF是由入射角和反射角决定的
如果入射角和反射角相对位置不变,而绝对位置发生改变,而BRDF变化,材质的外观也发生变化,则这种材质是各项异性
BRDF和外观不变的话则是各向同性
如下,BRDF本来是由4个自变量决定的,但对于各向同性的材质,BRDF只和入射角和反射角的相对位置有关,所以可以剩去一个自变量,降低了分析的维度
image

测量BRDF

物理模型计算出来的BRDF可能不准确,有时候我们需要自己测量BRDF

测量的方式如下,就是用light source照到材质上,camera用于接受反射光,可以记录BRDF
light source旋转360°,camera也旋转360°,记录所有的不同的入射角和反射角的\(\phi\)\(\rho\)组合得到的BRDF
image

通过利用材质的各向同性和可逆性,可以减少测量所用时间

非表面模型

非表面模型概述

很多材质都是非表面模型,光不仅在表面上反射,还能折射进入内部
非表面模型不能用渲染方程,渲染方程只能用于物体表面的shading,和物体的体积等无关

散射介质

像云、雾等物体,就是散射介质
image

在穿过云时,可能存在冰晶
存在光被吸收和光被冰晶散射的现象
Phase Function规定了散射的方法
image

渲染散射介质的方法和路径追踪类似,具体如下

  1. 随机选择一个方向来散射
  2. 选择光直线传播的路径长度,路径越短代表介质吸收光的能力越强
  3. 在每一个shading point,都用一个特定的方程来计算直接光照和间接光照带来的shading
    image

头发模型

头发不是一个平面,而是无数条条状纤维,光线和每一条头发作用
Marschner Model是比较好的对头发的建模
Marschner Model中,一根头发是一个类似玻璃材质的圆柱,圆柱外表皮是角质,会对光线产生部分折射和部分反射,内部是皮质,会吸收光
image

光在一根头发中,会有三种情况,分别为R, TT, TRT
R: Reflection 代表反射,T: Transmission 代表穿过角质发生折射
R情况是光线在第一次接触角质就反射
TT情况是光线穿过头发,总共发生了两次折射
TRT情况是光线先穿过第一层角质,然后在第二层角质处反射,接着穿过第一层角质
image

光和所有头发作用,就是在和一根头发作用后,又和另一根头发作用,不停进行下去,计算量很大

但动物的毛发和人的毛发结构中都有一个髓质结构,是在圆柱中心的一个半径较小的圆柱。人的髓质比较小,约占毛发横切面的15%,动物的髓质更大
Double Cylinder是更好的毛发模型,考虑了髓质的作用,髓质像一个散射介质,主要作用是对光的散射
image

光的传播并不一定接触到髓质,所以我们可以在Marschner Model三种情况上进行补充\(TT^s\)\(TRT^s\)
\(TT^s\):TT过程中在髓质中发生散射
\(TRT^s\):TRT过程中在髓质中发生散射
image

Granular Material

多个小颗粒构成的大型结构
在远处看类似表面模型,但近看会出现颗粒状
image

表面模型

Translucent Material

包括玉石和水母:光从一个点折射进入物质内部,在内部又发生散射,从另一个点折射出去。
我们把这种模型叫做subsurface scattering
image

subsurface scattering可以理解为对反射方程的延申,subsurface scattering中的BRDF我们称为BSSRDF
反射方程中,入射光射到shading point上,反射光从shading point离开
subsurface scattering中,入射光射到shading point上,反射光从其他点离开
image

所以我们把BRDF的\(f\)项替换成BSSRDF的\(s\)项,\(s\)项规定了入射角度和入射位置,出射角度和出射位置
image

在计算一点的shading时,需要考虑整个面上其他点对这个点的subsurface scattering影响,所以反射方程改写为对立体角和面积的二重积分
image

这个计算方程比较麻烦,我们可以用dipole approximation来估计
表面上和表面下都有一个光源,可以模拟subsurface scattering
image

布料

布料的物理结构:
fiber缠绕形成ply,ply缠绕形成yarn,yarn再用woven或者knitted的方式来织成布料
image

渲染布料有三种方法

  1. 当成散射介质
  2. 一根一根fiber地渲染
  3. 当成表面,计算BRDF

波动光学

当物体体积小到和光线的波长相当时,就不能再假设光线为直线,需要当作波来处理
image
image

Procedual Appearance

对于一个三维物体,记录三维的贴图存储过大,我们用一个三维的噪声函数来记录贴图
在需要用贴图时,就用三维坐标在噪声函数中查询shading值即可,不展示在外面的内部结构就不需要渲染
image

Nonphotorealistic Rendering

粗边

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

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

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

Sobel Operator
用Sobel Operator检测高频区域
image

多重信息
还可以同时利用Normal map和Depth map来找出轮廓
![image]
(https://img2022.cnblogs.com/blog/2621691/202208/2621691-20220823232742101-53134234.png)

色块

在shading时,给不同区域,比如高光区域、影子区域,加上不同的均匀颜色即可
image

素描

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

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

LTC

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

image

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

image

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

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

image

posted @ 2022-02-06 20:05  wcvanvan  阅读(589)  评论(0)    收藏  举报