1. Microfacet BRDF
1.1 菲涅尔项
- 菲涅尔项:反射光线强度与入射角的关系。对于绝缘体而言,观察方向越是平行于平面,反射越强,图像越清晰;因为镜面反射可逆,所以反之亦然。对于金属而言,规律相似,但是变化没有绝缘体那么明显。菲涅尔项的值与角度以及两个介质的折射率有关,可以采用简化公式。
1.2 法线分布
- 法线分布NDF(Normal Distribution Function):微表面法线分布与半程向量一致时,最能反射入camera。通过法线分布的凝聚程度,可以模拟不同的材质。
- 模型有Beckmann和GGX。
- Beckmann NDF:使用\(\alpha\)描述表面粗糙程度,值越小,NDF越收敛,表面越不粗糙。\(\theta_h\)是半程向量与法线夹角,可见各向同性,只与\(\theta\)有关。\(tan\theta_h\)是在slope space,实际上是在单位半球面上方的切面与shading point的连线长度,这样可以保证不会出现面朝下的微表面,如果使用\(\theta\)就会有可能超过90°。但是,仍然不能解决反射光朝下。将半球沿着法线方向投影为单位圆,相应的NDF也投影到圆上,下面的归一化项是保证在该空间中积分为1。
- GGX or TR(Trowbridge-Reitz):Beckmann类似于高斯,衰减很快,但是GGX也会很快衰减但是衰减速度会变慢,所以长尾。中间的值是高光,相应的长尾会造成光晕,则高光边缘的过渡带不尖锐。
- GTR(Generalized Trowbridge-Reitz):通过\(\gamma\)参数,统一Beckmann与GGX,并且可以衍生出其他曲线。
1.3 Shadowing-Masking Term
- Shadowing-Masking Term:微表面之间的自遮挡问题。越是掠射的入射光线或者视线越是会被遮挡。light遮挡成为shadowing,eye遮挡成为masking。因为有遮挡,所以要提供变暗,则从法线方向到grazing angle该值从1到很小。
- 由归一化项可知,当入射或者视线与法线接近垂直时,反射光会很强,则非常量的白色。因此需要该项。
- 该项与NDF相关。可见,角度比较小时没有很大影响,当接近垂直时迅速减小。其中,m是半程向量。
1.4 Kulla-Conty Approximation
- 表面粗糙程度增大时,能量损失变严重。
- 越是粗糙,沟壑越深,反射光线越容易被遮挡,则多次弹射可能性越多,则该模型的能力损失越严重。然而事实上多次反射的能量也会最终出射,所以需要补偿能量。
- Kulla-Conty Approximation
假设Li=1是uniform的,\(\mu\)为\(sin\theta\)则\(\mu d\mu d\phi=sin \theta cos \theta d \theta d \phi\),则该式包含Li、BRDF、cos的反射方程。则积分结果为出射总能量,不同方向的出射能量不同,则E为mu的函数。相应的1-E就是损失的能量。因此考虑设计一个补偿的BRDF,是其积分为1-E(uo),此外考虑到BRDF的对称性,再加入一项为1-E(ui),然后做归一化C,需要积分为1。
相应的该BRDF为:
为了解决积分Eave花费,使用预计算。
效果如下:
- 但是如果有颜色,即合理的能量损失,积分本就小于1。所以,该方法先不考虑颜色,然后考虑到颜色造成的能量损失。
- 此外,对于菲涅尔项考虑到多次反射,定义了平均菲菲尼尔想。
- 相应的Eave是一次反射就可见的能量,所以1-Eave是多次反射的能量,用于对其归一化。
- 一次反射的能量(计入颜色损失)为FavgEavg,相应的多次反射有一个级数颜色项color term,将其乘到多次反射的能量上就可以得到多次反射的能量。
- 有的人会在BRDF上直接加diffuse项,即微表面加上diffuse。
2. Linear Transformed Cosines(LTC)
BRDF是四维的,固定入射方向则变成二维,得到一个lobe对于一个多边形光源,常规方法是做采样。而LTC可以不必采样。
- 找到一个线性变换将BRDF lobe变成余弦分布。同样的,将多边形光源做同样的变换,会定义一个新的光源。意义在于,BRDF与光源都会变化,而通过变换之后BRDF就会固定,而经过线性变换后多边形光源仍然是多边形光源。此外,这个是有解析解的。
- 假设光源是常量,此外已经变换矩阵M,则将立体角替换并将BRDF替换为cosine,相应的替换后的立体角进一步微分得到Jacobi矩阵。其中,M通过预计算得到。
- 但是,这里不考虑阴影。
3. Disney's Princiled BRDF
- 微表面模型只能描述单层材质,无法描述多层材质。
- PBR材质是与物理量相关的,对艺术家不友好,效率太低。
- 公式复杂,计算复杂,且不能适配RTR的常规模型,不适合RTR
4. Non-Photorealistics Rendering(NPR) 风格化
- 要求在快速、可靠的基础上,做风格化,因此NN方法不能适用。
- 思路:首先得到真实渲染,然后在此基础上做风格化
4.1 Outline Rendering
- Boundary边界:不是两条面的公共边界
- Crease折痕:两条面的公共边界
- Material edge材质边界
- Silhouette edge边界:在物体的轮廓上,并且是两条面的公共边界(C的子集)
- shading方法:一般的,法线与观察方向夹角基本上接近90°时,可以看作在轮廓上,即Silhouette edge。通过设置角度阈值,存在不同的效果。如果不采取step,而是类似sigmoid可获得过渡带。问题在于法线变化平滑的地方,要比变化剧烈的地方更粗。
- 几何方法:另一个方法是,首先区分正面模型与背面模型,然后将背面模型扩大并指定为黑色,则形成轮廓。沿着边法线或者顶点法线扩张。
- 图像方法:后期处理,在图像上找到边界,如Sobel detector。
4.2 Color Blocks
- 首先得到正常的shading结果,然后做阈值化。既可以在shading过程中阈值化,也可以对结果做阈值化。
- 阈值化不仅是二值化,也可以量化处理。
- 也可以在不同的材质部分或者其他方式,做不同的风格化。
4.3 Strokes Surface Stylization
- 根据不同位置的明暗程度,转换成线条密度。此外,笔触需要时连续的,因此需要纹理来定义连续的笔触,然后通过密度去作查值。
- 设计不同密度的纹理,根据不同shading point的明暗来到不同纹理上查找,如果相连两个点相近则在同一纹理相邻位置查找,如果有过度也在不同纹理相近位置查找。
- 但是如果物体距离变化,那么纹理密度也会变化,因此采取mipmap,对每一种纹理密度都做一系列mipmap,按照距离进行选取,不管距离多远都在mipmap不同层级上做相同位置的查找。