开始
国外一篇挺不错的简述PBR中三种函数模型的博客,我慢慢分几块翻译吧,因为是在Unity里面实现,所以也非常友好!
原文地址:http://www.jordanstevenstechart.com/physically-based-rendering
我的小站地址:【翻译】Write PBR Algorithms In Unity ①
让我们聊聊基于物理渲染
基于物理的渲染(PBR)这几年非常热门,Unity5、虚幻4、寒霜甚至是ThreeJS,还有更多的游戏引擎正在使用它。许多3D模型软件将工作流迁移到了PBR管线,例如八猴或者是Substance套件。今天,几乎每一位艺术家都熟悉这一套管线,但是很难找到工程师或者技术美术能完全解释清楚这背后的工作原理。我希望能够通过这个教程来分解PBR渲染,让初学者也能更容易地入门。
是什么让PBR符合物理规律
在过去的三到四十年间,我们对周围世界科学与数学上的了解有了飞速的突破,这些也对渲染技术有着深远的影响。站在巨人的肩膀上,有些大佬总结出了一系列对于光、视觉、表平面的规律结论,以及这三者是如何互相影响的。这些之中最大的成就就是BRDF(双向反射分布函数)的思想,其中蕴含的就是能量守恒的思想。
为了理解光以及你的视点与平面的交互,你必须首先了解平面本身,当光线照在一个绝对平滑的表面,它会以一个几乎完美的轨迹反射出去。当光射到粗糙表面,它将无法以相似的方式反射出去。这可以被描述为微表面的存在。
当我们看向一个物体,我们必须假定这个平面并非绝对平滑,并且其由无数的微小平面组成,这些每一个微小表面都可以被看成完美的镜面表面。这些微小平面的法线分散于这个光滑平面的法线。这些微表面法线与光滑平面表面的区别决定于这个表面的粗糙度。这个平面越粗糙,更多高光就会可能被遮挡。因此,粗糙表面有更大更加黯淡的高光。光滑表面可以产生更小更锐利的高光。
现在我们回到BRDF函数。双向反射分布函数是一种描述表面反射率的函数。现在有很多种不同的BRDF模型以及算法,它们必须遵循能量守恒原则。能量守恒原则表示了平面反射的光照必须少于平面接收到的总光照量。平面反射的光必须小于所有微平面光照的总和。
BRDF算法模型比其他的光照模型更加复杂也更加精确。这种光照模型由三个部分组成:
- 微表面分布函数(Normal Distribution Function)
- 几何阴影函数(Geometric Shadowing Function)
- 菲涅尔函数(Fresnel Function)
他们三者组成了这个算法,我们在后面会将它们逐一分解。
为了了解BRDF,了解这三个函数如何组成BRDF是非常重要的。让我们逐个击破,来看看它们是如何在光照模型中运作的。