转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=507

上一篇“游戏中基于物理的渲染(一)”中介绍了反射方程和Lambert,本篇将介绍基于物理的光源部分。

精确光源

游戏中经典的光源有point, directional和spot,这些局部光源都可以抽象成“精确光源”的概念,表示一个方向确定、大小为无穷小的光源。由于要计算的是到达表面点时的光照,所以不考虑从光源到表面之间的衰减。因此,精确光源都可以用颜色和光源方向向量这两个参数来表示。光源颜色的确切定义是,白色的Lambert表面被平行于表面法线()的光照照亮的颜色。

如何计算这个光源对点的贡献呢?这里需要先引入一个叫做微面光源的概念。顾名思义,微面光源是一个非常小的面光源,中心是,张角是。该微面光源照亮表面的一个点可以用来表示。有两个性质:

第一个性质表示如果入射方向和的夹角大于, 那么亮度为0。第二个性质是从的定义而来,白色表面使得,结合上文所说的反射方程和Lambert,就可以得出性质二。由于要求,所以也表示了当趋近 于0的时候的极限,也就是

因为而且,我们可以认为,所以得到:

也就是

把微面光源带入一般的BRDF,得到的就是当趋近于0时的极限:

所以

入你所见,刚才引入的微面光源已经从公式中消失,剩下的部分又回到了熟悉的几个项。

本系列的第二篇论述了基于物理渲染的光源公式推导,下一篇将讲解BRDF部分,也就是