PBR理论和渲染原理
PBR是什么?
Physically Based Rendering,即基于物理的渲染。这是一种计算机图形学中的着色方法,它基于物理原理,而不是基于像素或顶点的颜色。PBR的主要思想是,物体的外观应该受到光照、材质、视角、距离、光线的影响,而不是受到像素或顶点的颜色影响。其目的在于,让渲染更加真实、更加自然。站在程序角度看,它可以使我们把材质与光照解耦。
PBR理论包括: 微平面模型、能量守恒、菲涅尔反射、线性空间和伽马矫正、色调映射、材质的光学特性、基于物理的光照模型、基于物理的渲染方程。
正因为PBR基于物理原理,这种方式与原来的Phong 或 Blinn-Phong等光照模型相比要更加真实一些。除了看起来更好些以外,由于它与物理性质非常接近,因此我们(尤其是美术师们)可以直接以物理参数为依据来编写表面材质,而不必依靠粗劣的修改与调整来让光照效果看上去正常。
微平面模型
这项理论认为,达到微观尺度之后的任何平面都可以用被称为微平面(microfacet)的小型表面片来近似。微平面是由微观尺度的粗糙度、法线分布和粗糙度分布所决定的。
根据平面粗糙程度的不同,这些细小镜面的取向排列可以相当不一致。产生的效果就是:一个平面越是粗糙,这个平面上的微平面的排列就越混乱。 这些微小镜面这样无序取向排列的影响就是,当我们特指镜面光/镜面反射时,入射光线更趋向于向完全不同的方向 发散 (Scatter)开来,进而产生出分布范围更广泛的镜面反射。 而与之相反的是,对于一个光滑的平面,光线大体上会更趋向于向同一个方向反射,造成更小更锐利的反射:
微平面模型可以模拟出各种各样的材质,包括金属、玻璃、水泥、皮革、木材、水、沙子、石头、水晶、玻璃、水泥、皮革、木材等。
能量守恒
出射光线的能量永远不能超过入射光线的能量
为了遵守能量守恒定律,我们需要对漫反射光和镜面反射光做出明确的区分。 当一束光线碰撞到一个表面的时候,它就会分离成一个折射部分和一个反射部分。 反射部分就是会直接反射开而不进入平面的那部分光线,也就是我们所说的镜面光照。 而折射部分就是余下的会进入表面并被吸收的那部分光线,也就是我们所说的漫反射光照。
渲染方程
L : 辐射率
P : 物体表面上的一个点
v : 视线方向
l : 入射光线方向
n : p点的法线
f : BRDF
在半球域内,对所有入射光线进行积分
BRDF(Bidirectional Reflective Distribution Function) : 双向反射分布函数, 反映了物体表面上不同方向的反射率分布。
菲涅尔方程
菲涅尔方程描述的是光在两种不同折射率的介质中传播时的反射和折射
线性空间
线性空间是指光线的三维空间,它与物体的三维空间不同。在线性空间中,光线的方向是由光源的位置和方向决定的,而物体的位置和形状则是由模型的位置和形状决定的。
伽马矫正
伽马矫正是一种颜色空间转换,它将线性空间中的颜色值转换为非线性空间中的颜色值。在计算机屏幕上,我们通常使用非线性空间来表示颜色,以方便人眼观察。然而,在计算机程序中,我们通常使用线性空间来计算颜色,以方便计算机计算。所以为了使计算机计算的结果真实的显示在显示屏上,我们需要对颜色进行伽马矫正。
监视器所显示出来的图像和线性图像的最小亮度是相同的,它们最大的亮度也是相同的;只是中间亮度部分会被压暗。
PBR材质
通常,美术师们会根据物体的材质属性来制作PBR贴图。材质的贴图通常包括:
- 反射率(Albedo):反照率 (Albedo)纹理为每一个金属的纹素(Texel)(纹理像素)指定表面颜色或者基础反射率。和漫反射纹理类似。
- 粗糙度(Roughness):粗糙度(Roughness)贴图可以以纹素为单位指定某个表面有多粗糙。
- 金属度(Metallic):金属(Metallic)贴图逐个纹素的指定该纹素是不是金属质地的。 根据PBR引擎设置的不同,美术师们既可以将金属度编写为灰度值又可以编写为1或0这样的二元值。
- 环境光遮蔽 (Ambient Occlusion):即AO贴图。AO 贴图为表面和周围潜在的几何图形指定了一个额外的阴影因子。
- 法线(Normal):法线贴图表示物体表面上每个点的法线方向,利用法线贴图可以制造出起伏不平的假象。