基于物理的BRDF

From KlayGE
Revision as of 21:38, 27 December 2010 by Gongminmin (Talk | contribs)

Jump to: navigation, search

引言

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

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

反射方程

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

LaTeX: L_0(\mathbf{v})=\int_{\Omega} \rho(\mathbf{l},\mathbf{v}) \otimes L_i(\mathbf{l}) (\mathbf{n} \cdot \mathbf{l}) d\omega_i

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

Diffuse项

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

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