【高质量实时渲染01】基于物理的渲染(PBR)

PBR全称Physically-Base Rendering,基于物理的渲染。

从字面意思上看这个概念特别大,应该包含关于渲染的方方面面(材质,光照,相机等等)。但实际上,在实时渲染的领域内,当我们谈到PBR,大多时候在说的就只有关于材质的部分。

相比与离线渲染中应用的各种各样的材质,PBR在实时渲染中比较落后,这种落后主要表现在材质的丰富程度和质量上。在实时渲染中,为了让材质快速的被渲染,不得不牺牲很大一部分的质量。例如对于头发的渲染,头发在离线渲染中已经做的非常非常好了,但是由于其超级复杂性,在实时渲染中表现的就没有那么出色。

PBR在实时渲染中主要有两种:

  • 基于物体表面定义的:微表面的BRDF(microfacet) 和 迪士尼标准的BRDF
  • 在体积上定义的: 光线在云,烟,雾,皮肤,头发这些体积内的作用

微表面

在这里插入图片描述
微表面理论就是说,表面看起来是平的物体,在围观尺度上,由各个朝向各不相同的微表面组成。在PBR中,这些微表面被看成是一个个小镜面。
在这里插入图片描述
在微表面中,有几个非常重要的像。

  • F:菲涅尔像,它描述不同的表面,分别有多少的能量会被反射。
  • D:法线分布,描述微面元法线分布的概率,即正确朝向的法线的浓度。即具有正确朝向,能够将来自l的光反射到v的表面点的- - 相对于表面面积的浓度。
  • G:几何函数(Geometry Function):描述微平面自成阴影的属性,即m = h的未被遮蔽的表面点的百分比。
  • 分母 4(n·l)(n·v) :校正因子(correctionfactor),作为微观几何的局部空间和整个宏观表面的局部空间之间变换的微平面量的校正。

菲涅尔像

在这里插入图片描述
菲涅尔像告诉我们如果入射角度不同,有多少能量会被反射。从上例中可以看出,当入射角越小,反射越强,我们能看到的东西越多。
更明显的例子是水面的反射,如果我们朝水面看过去,会发现近处的水面很通透,能够看到水下的情况,而远处的水面很晃眼,像一面镜子。正是因为看近处时,入射角大,反射很弱,能轻易的看进去,看远处时,入射角小近似于掠射,反射很强,已经近似于镜面反射了。

在这里插入图片描述
对于菲涅尔像的计算,可以近似成下面的公式,n1和n2表示两个平面的反射率。

法线分布

在这里插入图片描述
法线分布越密集,物体表面越光滑,越像一个镜面。
法线分布越松散,物体表面越粗糙,形成一个漫反射的效果。

有很多不同的模型可以描述法线分布函数(NDF),其中最常用的有两种

  • Beckmann模型
  • GGX模型

Beckmann NDF

在这里插入图片描述
Beckmann NDF从图像上看很像一个高斯函数,中间高两边低。
α:粗糙程度,控制高斯函数的胖瘦,α越小,表面越不粗糙,函数越高瘦。

GGX NDF

也是一个高斯函数,但相比与Beckmann,更加“长尾”。
在这里插入图片描述
这种长尾,表现在具体材质上会形成一圈非常自然的类似光晕的效果,能够更好的描述粗糙表面。
在这里插入图片描述
根据尾巴的长度,实际应用中GGX又有更多的扩展
在这里插入图片描述

几何函数

几何函数G解决微表面产生的自遮挡问题。
在这里插入图片描述

对于虚线部分,从法线朝向上看,本该能够被反射,但却被遮挡住了。显而易见的是,当我们从正上方垂直入射的时候,这种遮挡应该非常小,当处于掠射时,遮挡应该很大,图像应该变暗一些。
在这里插入图片描述
在这里插入图片描述
两种NDF(GGX和Beckmann)的G像如右图所示,当垂直入射时,G为1几乎不起作用。

Kulla-Conty方法

在这里插入图片描述
如上图所示,当粗糙程度越来越大,由于光在物体表面来回反射造成了更多的能量损失(我们在微表面考虑G项时,只做了一次入射遮挡和出射遮挡),会导致材质整体看起来会比较暗。

如何解决这个问题,在离线渲染中通常会做路径追踪,能够精细的描述出能量的损失,但这种方法在实时渲染中效率太低。

但其中一个基本的思想是没错的,把损失的能量补回来:Kulla-Conty就是一种经验性的方式补偿能量损失的方法。

论文链接:https://fpsunflower.github.io/ckulla/data/s2017_pbs_imageworks_slides_v2.pdf

LTC

迪士尼的BRDF

非真实感渲染

猜你喜欢

转载自blog.csdn.net/qq_35595611/article/details/129434519