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

“游戏中基于物理的渲染”系列由4-5篇文章组成,介绍了如何在实时渲染中使用基于物理的方法。内容主要来自于SIGGRAPH 2010的course:Physically-Based Shading Models in Film and Game Production。本系列文章讲述的渲染技术用在了KlayGE中。

引言

基于物理的渲染已经提出好多年了,但在游戏中使用的渲染模型仍然是拼凑出来的经验公式(比如Phong)。这些拼凑的模型如果要渲染高质量的图像, 就需要繁复地调参数。而基于物理的、保能量的渲染模型可以很容易地建立出在不同光照环境下都接近真实的材质来。

神奇的是,基于物理的模型并不会比传统上拼 凑的模型更难实现,计算量也差不多。

反射方程

游戏中最常使用的渲染模型描述的是反射,不考虑SSS等。反射方程可以表示成:

$L_0(\mathbf{v})=\int_{\Omega} \rho(\mathbf{l},\mathbf{v}) \otimes {L}_{i}(\mathbf{l}) (\mathbf{n} \cdot \mathbf{l}) d \omega_{i}$

其中,$\rho(\mathbf{l},\mathbf{v})$表示BRDF,$L_i(\mathbf{l})$表示光源给的贡献,$(\mathbf{n} \cdot \mathbf{l})$表示光源和表面法线的夹角。这个积分的结果就是所有光源对一个点的贡献之和。

Diffuse项

最简单的一个BRDF就是Lambert,在游戏中就是用$(\mathbf{n} \cdot \mathbf{l})$来表示。但实际上,$(\mathbf{n} \cdot \mathbf{l})$是属于反射方程的一项,而Lambert则是一个常量:

$\rho_{lambert}(\mathbf{l},\mathbf{v})=\frac{\mathbf{c}_{diff}}{\pi}$

本系列的第一篇就介绍到此,下一篇将介绍如何从这两个公式引出其他的基于物理的渲染公式。