原文地址:https://blog.csdn.net/zhmxy555/category_8558707.html
原文是浅墨大大【基于物理的渲染(PBR)白皮书】的博客,有些思维导图看不清楚可以去原文查看原图。
一、 PBR 核心理论与渲染原理
基于物理的渲染(Physically Based Rendering,PBR)是指使用基于物理原理和微平面理论建模的着色/光照模型,以及使用从现实中测量的表面参数来准确表示真实世界材质的渲染理念。
基础理论
微平面理论(Microfacet Theory)
能量守恒 (Energy Conservation)
菲涅尔反射(Fresnel Reflectance)
万物皆有菲涅尔反射,F0 是0度角入射的菲涅尔反射值,大多数非金属的 F0 范围是0.02~0.04,大多数金属的 F0 范围是0.7~1.0。线性空间(Linear Space)
色调映射(Tone Mapping)
物质的光学特性(Substance Optical Properties)
非金属具有单色/灰色镜面反射颜色,金属具有彩色的镜面反射颜色,即非金属的 F0 是一个 float。而金属的 F0 是一个 float3。
反射和折射
- 反射:微表面理论
- 折射:不同材质的结果不同
对于金属,折射光会立刻被自由电子吸收;对于非金属(绝缘体),一旦光在其内部折射,就表现为常规的参与介质,表现出吸收和散射两种行为。
次表面散射
- 光的折射现象建模为漫反射还是次表面散射,取决于观察的尺度。
PBR 的范畴
- 基于物理的材质(Material)
- 基于物理的光照(Lighting)
- 基于物理适配的摄像机(Camera)
二、渲染方程与 BxDF
渲染方程只是比反射方程多了一个自发光项。
- BRDF
- BTDF:双向透射分布函数
- BSDF:双向散射分布函数
- BSSRDF:双向散射表面分布函数
其中,BSDF = BRDF + BTDF。因为游戏和电影中的大多数物体都是不透明的,用BRDF就完全足够,BSDF、BTDF、BSSRDF往往更多用于半透明材质和次表面散射材质。
BRDF 分类
BRDF的各个模型,红色的代表各向同性模型,绿色的代表各向异性模型。(一大堆模型就认识三个……)
三、迪士尼原则的BxDF
核心理念
- 应使用直观的参数,而不是物理类的晦涩参数;
- 参数应尽可能少;
- 参数在其合理范围内应该为0到1;
- 允许参数在有意义时超出正常的合理范围;
- 所有参数组合应尽可能健壮和合理。
BRDF参数
包含一个颜色参数和十个标量参数:
baseColor(基础色):表面颜色,通常由纹理贴图提供。
subsurface(次表面):使用次表面近似控制漫反射形状。
metallic(金属度):0为电介质,1为金属,这是两种不同模型之间的线性混合。金属模型没有漫反射成分,并且还具有等于基础色的着色入射镜面反射。
specular(镜面反射强度):入射镜面反射量,用于取代折射率。
specularTint(镜面反射颜色):对美术控制的让步,用于对基础色的入射镜面反射进行颜色控制。掠射镜面反射仍然是非彩色的。
roughness(粗糙度):表面粗糙度,控制漫反射和镜面反射。
anisotropic(各向异性强度):各向异性程度,用于控制镜面反射高光的纵横比。0为各向同性,1为最大各向异性。
sheen(光泽度):一种额外的掠射分量(grazing component),主要用于布料。
sheenTint(光泽颜色):对光泽度的颜色控制。
clearcoat(清漆强度):有特殊用途的第二个镜面波瓣(specular lobe)。
clearcoatGloss(清漆光泽度):控制透明涂层光泽度,0 为缎面(satin)外观,1 为光泽(gloss)外观。
BSDF参数
与 BRDF 相比多了两个与透明度相关的参数。
四、漫反射BRDF模型
五、镜面反射BRDF模型
Specular D
较为主流的法线分布函数是GGX(Trowbridge-Reitz):
Specular F
对于菲涅尔项,一般都采用 Schlick 的 Fresnel 近似,因为计算成本低廉,而且精度足够:
Specular G
比较常用的是 Smith 联合遮蔽阴影函数(Smith Joint Masking-Shadowing Function)中的 分离遮蔽阴影函数(Separable Masking and Shadowing Function)。
该模型将几何项G分为两个独立的部分:光线方向(入射时被遮挡)和视线方向(出射时被遮挡),并对两者用相同的分布函数来描述。
UE4 的方案是 Schlick-GGX 模型:
后面还有三部分内容:基于物理的环境光照、离线渲染、进阶渲染。但是我现在看不太懂,而且暂时用不到,所以先放一放,这一篇就先写到这里了。