PBR渲染过程
PBR范畴(Scope of PBR)
-
基于物理的材质(Material)
-
基于物理的光照(Lighting)
-
基于物理适配的摄像机(Camera)
PBR管线
BRDF函数1
光和物体表面是如何作用的?把光简化为一条光束,如下图,从微观世界的角度,光作用到表面后分为三部分:
- 高光反射:一部分光被反射出去了,即蓝色部分。
- 漫反射:一部分光被折射入物体表面并和物体内部的粒子相互作用,最终重新被反射出表面,即绿色部分。
- 转化为热能:还有一部分光转化为热能被物体吸收了,这个部分没有被反射出来。
所以我们只要高光反射、漫反射这两个部分反射出去的光探究明白,理论上来讲,我们就能物理正确的模拟出真实的物体表面。
因此某点观察到的颜色可以看做:
C
o
l
o
r
=
F
(
光照颜色,法线方向,光照方向,固有颜色
)
Color = F(光照颜色,法线方向,光照方向,固有颜色)
Color=F(光照颜色,法线方向,光照方向,固有颜色)
其中
F
F
F就是著名的BRDF函数,Bidirectional Reflectance Distribution Function,即双向反射分布函数。BRDF一般满足两个特性,交换律和能量守恒。
- 交换律是说当摄像机位置和光源位置调换位置,这个函数计算的最终结果是相同的。
- 能量守恒很好理解,就是这个函数的计算结果不能超过光强。
关于光照计算是有很多种流派的,如果某光照计算违反了两者或其中之一,那么它们就不是BRDF,就不是PBR材质。PBR这个词语语境一般就直接代表硬表面材质了,而不是基于物理这个概念,例如3S材质也是基于物理测量的,但是不叫PBR材质。
菲涅尔效应2
首先我们先聊一下菲涅尔效应,如果你站在湖边,低头看脚下的水,你会发现水是透明的,反射不是特别强烈;如果你看远处的湖面,你会发现水并不是透明的,但反射非常强烈。这就是“菲涅尔效应”。
接下来我们讨论一下 F 0 F_0 F0这个变量, F 0 F_0 F0是即 0 度角入射的菲涅尔反射值。后续的数学计算将有一部分的计算是基于F0的。大多数非金属的 F 0 F_0 F0范围是0.020.04,大多数金属的$F_0$范围是0.71.0。对于硬表面PBR材质,我们一般把他们分为金属(导体)和非金属(绝缘体)。其中非金属具有单色/灰色镜面反射颜色。而金属具有彩色的镜面反射颜色。
微表面理论3
表面在微观层面上并不光滑, 而是由大量随机排列的平面碎片组成, 这些平面碎片称为微面片. 图 4展示了平面界面和不规则界面在微观层面上的区别:
只有当微面片的法线方向位于光线方向和视线方向中间时, 它反射的光才能被看见, 如图 5所示.
然而, 并不是所有法向取向正确的微面片都会产生反射光, 因为BRDF会考虑遮蔽和阴影. 如图 6所示.
粗糙度 参数对微面片BRDF的影响很大, 该参数描述了一个表面在微观层面上的光滑程度(低粗糙度)或粗糙程度(高粗糙度). 表面越光滑滑, 排列整齐的面片越多, 反射光越明显. 表面越粗糙, 朝向相机的面片越少, 入射光反射后就会从相机中散射出去, 从而使镜面高光变得模糊.
图 7展示了不同粗糙度的表面以及光线与它们的相互作用.
BRDF公式
输出颜色 = ( 漫反射比例 漫反射 π + 镜面反射比例 镜面高光 × 几何遮蔽 × 菲涅尔效应 4 ( v i d e w D i r ⋅ n o r m a l ) ( l i g h t D i r ⋅ n o r m a l ) ) 光源颜色 ( l i g h t D i r ⋅ n o r m a l ) \begin{split} 输出颜色=(漫反射比例 \frac{漫反射}{\pi}+ 镜面反射比例 \frac{镜面高光 \times 几何遮蔽 \times 菲涅尔效应}{4(videwDir \cdot normal)(lightDir \cdot normal)})\\光源颜色(lightDir \cdot normal) \end{split} 输出颜色=(漫反射比例π漫反射+镜面反射比例4(videwDir⋅normal)(lightDir⋅normal)镜面高光×几何遮蔽×菲涅尔效应)光源颜色(lightDir⋅normal)
函数 | 参数 |
---|---|
漫反射 | 纹理颜色 |
镜面高光 | 法线方向、光照方向、摄像机方向、粗糙度 |
几何遮蔽 | 法线方向、光照方向、摄像机方向、粗糙度 |
菲尼尔方程 | 法线方向、摄像机方向、金属度 |
具体公式可以参考“猴子都能看懂的PBR”4