传统的光线跟踪算法中一般使用的是标准的向量反射公式来模拟规则镜面反射。然而现实世界中却经常不是这样,因为材质表面不可能完全光滑,任何表面细微的凹凸不平都可能导致反射图像的不清晰,如下左图的金属表面呈现出明显的细微凹凸,因此映射于其上的反射图案也会因此变得模糊(下右图)
不仅镜面反射能够出现模拟,折射也会出现这种情况:
一种较简单的处理一般镜面模糊反射的方法是使用分布式光线跟踪算法(distribution ray tracing),该算法又称随机光线跟踪(stochastic ray tracing),它在处理每一被跟踪光线时,在光线与景物表面的焦点处不仅朝其镜面反射方向和规则折射方向发射光线,并且依据该处的光照性质朝其反射和折射方向附近的立体角内亦发射采样光线。如果取Phong镜面反射分布函数作为表面反射和折射的分布函数,则分布式光线跟踪所对应的光照模型为:
可以预见的是,当场景内非理想漫反射物体较多,而采样次数线性增大时,计算量会呈指数级上升(这是因为物体间的相互反射或折射作用造成的)。
分布式光线跟踪还能模拟半影,景深,运动模糊等效果,同时能很好地处理由于二次光线导致的走样现象,下图租为传统光线跟踪图样(上)和分布式光线跟踪模拟的模糊反射(下)的对比:
模拟参数为:采样次数40次,采样偏移范围为单位化向量各个分项±0.025f,分布函数为均匀分布....,所以效果实际上是各向同性的模糊,若想模拟更为复杂的模糊效果,需要更加复杂的分布函数定义。
注:本文参考了http://www.neilblevins.com/cg_education/aniso_ref/aniso_ref.htm
本文部分图片来自网络