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

上文推出了本系列最重要的方程,本片篇作为这个系列的完结篇,我会提一些未来的工作,并展示一些基于物理的渲染结果。

未来的工作

一个没有解决的问题是specular的power很高,而且非常光滑的表面。这样的材料对于渲染湿的表面这样的东西很重要。但是,精确光源的近似在这种情况下会挂掉,结果就是产生subpixel大小的极端强烈的高光,很不自然。实际上这种情况需要的是反射出光源的形状,这需要快到适合在游戏中使用的面光源近似。

另一个问题是有很多中geometry项,有没有能比$G_{implicit}$提供更好的视觉效果,同时开销很小的函数?候选之一是Kelemen et. al提出的,是对Cook-Torrance的geometry项的近似,但计算开销很小:

$\frac {G_{CT}(\mathbf{l_c}, \mathbf{v}, \mathbf{h})} {(\mathbf{n} \cdot \mathbf{l_c})(\mathbf{n} \cdot \mathbf{v})} \approx \frac {1} {(\mathbf{l_c} \cdot \mathbf{h})^2}$

其中的$(\mathbf{l_c} \cdot \mathbf{h})$在Fresnel项中就有,可以重复利用。这个很接近完整的Cook-Torrance的geometry项除掉校正因子。

第三个问题是diffuse项的Fresnel。在现实中,没有“不带specular的表面”,这样的材质实际上$\mathbf{c}_{spec}$值在0.03-0.06之间,而且$\alpha$的值非常小(0.1-2.0之间)。在很斜的角度下,即使最粗糙的表面也有感觉得到的specular。缺乏这种效果是另一种游戏看起来不真实的原因。

Normalization factor

渲染一个红色塑料球。下面一排图用的specular项是归一化过的系数渲染的,用的$\mathbf{c}_{spec} = 0.05$(差不多是塑料的值)。上一排图不带归一化系数,用的$\mathbf{c}_{spec}$值选成让最左的两张图看着一样。可以看出下一排的高光随着变小而变亮,这是正确的现象——出射光越小就越集中。上一排里,高光变小的时候亮度不变,所以有能量损失,表面反射率也下降了。图片来自Real-Time Rendering, 3rd edition。

更多来自Crytek的图片:

Teapot with different BRDF parametersConsistent lighting

本系列到此结束。谢谢大家的支持,祝大家新年快乐!