序:说了几天的Unity,今天回到渲染吧,毕竟图形学才是我的最爱。
看到一个名字PBR,给人高大尚的感觉,下面我和大家一起扫雷,给不了解和想要了解的人学习学习。
PBR(Physicallly-Based-Rendering), 基于物理的渲染,有时也叫PBS(Physicallly-Based-Shading),(其实Unity自带的Standard就是一个完整的PBR,实际中需要对官方的性能调优)。为什么叫基于物理的,因为目标是基于与现实世界的物理原理基本相符的理论构成渲染技术。这样美术就可以直接以物理参数为依据来编写材质,不论光照如何材质看上去都是正确的。
PBR光照模型的三个条件:1.基于微平面的表面模型; 2.能量守恒;3.应用基于物理的BRDF。
1.微平面模型:
PBR基于微平面理论,即达到微观尺度后任何平面都可以用被称为微平面的细小镜面来描绘。平面越粗糙,微平面的排列越混乱,镜面反射时就会向完全不同的方向发散开来。我们可以用统计学的方法估算粗糙程度,而粗糙程度表示微平面上平均取向和半程向量(下段介绍半程向量)的方向一致的概率。
Blinn-Phong模型不依赖于反射向量,而是采用了所谓的半程向量,即光线与视线夹角一半方向上的一个单位向量。当半程向量与法线向量越接近时,镜面光分量就越大。当视线正好与(现在不需要的)反射向量对齐时,半程向量就会与法线完美契合。所以当观察者视线越接近于原本反射光线的方向时,镜面高光就会越强。如图:
(Blinn-Phong与冯氏模型唯一的区别就是,Blinn-Phong测量的是法线与半程向量之间的夹角,而冯氏模型测量的是观察方向与反射向量间的夹角。除此之外,冯氏模型与Blinn-Phong模型也有一些细微的差别:半程向量与表面法线的夹角通常会小于观察与反射向量的夹角。所以,如果你想获得和冯氏着色类似的效果,就必须在使用Blinn-Phong模型时将镜面反光度设置更高一点。通常我们会选择冯氏着色时反光度分量的2到4倍。)
半程向量:H = (L + V) / || L + V || ;