本期为GAMES104《现代游戏引擎:从入门到实践》视频公开课文字实录第16期。本课程由GAMES(图形学与混合现实研讨会)发起,游戏引擎技术专家王希携手游戏引擎一线开发者共同研发。
课程共计22个课时,将介绍现代游戏引擎所涉及的系统架构,技术点,引擎系统相关的知识。为配合学习实践,课程组在 GitHub 上开源了小引擎Piccolo,上线1个月即获得了2900+star, 累计下载量已超过20000+。
以下内容为公开课视频转文字版本,为阅读通顺,有删减
01「基础光照解决方案」
我们要解决的问题还有材质。在此,我们引入基于物理的材质系统(Physical-Based Material)。其实应该是Physical-Based Rendering Material。和基于物理的材质相关的概念较多,比如基于物理的光照(PBR Lighting)、基于物理的相机(PBR Camera)、基于物理的材质(PBR Material)等。
我们先介绍微平面理论(编者注:Microfacet Theory,也称为微面元理论)。微平面理论使用一个假设来解释光学现象,即光线会在一个表面发生无数次反射。而对于一个金属表面来说,看起来粗糙还是光滑,实际上和该表面上法线的聚集度有关。如果表面的所有微表面的法线方向比较集中,表面看起来就会闪闪发光。如果法线都朝向一个方向,就会表现出类似于镜面的效果。而如果法线分散地比较开,表面看上去就会比较粗糙。这符合人类观察的直觉。
一根光线打到物体表面,无非发生两种情况。第一种情况就是表面会将光线反弹回去,反弹的比例取决于物体表面的法线分布,我们用粗糙度(Roughness)来表示。如果表面的法线特别散乱,那么就会向四面八方反射,这时的高光就很发散,还有一些光线会进入物体中。对于金属来说,金属的电子可以捕获这些光子,这些光子就会被吸收。而非金属没有能力捕获光子,光子会在物体中发生若干次反弹,然后从一个随机的方向射出。相当于一束光照射到物体表面,在物体中发生了几次折射之后,又散射出去。这就是漫反射效果。
所以对于PBR材质来说,实际上包括两部分效果,一个就是漫反射项,一般用
表示。实际上是对球面上的所有漫反射能量的积分,这部分可以简单表示为。其中c是进入物体的能量。如下图所示:
另一部分就是表示反射的部分。人们引入了“Cook-Torrance”BRDF模型来表示反射。Cook-Torrance模型中有三项比较重要,分别是DFG项,每一项分别代表一种光学现象。D就是法线分布函数(Normal Distribution Function),本质上描述了表面的法线分布地更加发散还是更加聚集。对于法线分布函数项,大家更习惯于使用GGX分布模型。GGX分布模型大约是2007年提出来的(编者注:“Blinn于1977年的一篇论文中推荐