您的位置:首页 > 其它

Q87:间接光照(Indirect Illumination)的高光反射(Glossy Reflcetion)

2017-03-15 12:03 274 查看
 

87.1 建立模型

 





 

接下来就是采样啦!

 

之前,我们遇到过的采样一般都是对撞击点处的上半球面进行采样,比如:



这是因为cos分布对应的夹角是光线和法向量的夹角。

但是,我们这里对应的夹角是光线和镜面反射光线r的夹角。所以,我们需要采样的半球面是这个这样子:



 

具体采样过程可以参考“ 问题七十一:环境光遮蔽(AmbientOcclusion)”:

http://blog.csdn.net/libing_zeng/article/details/57639455

(只需要在建立正交基时,将原来的n换成r)

 

但是,有个问题:

有一部分采样点会落在物体表面以下。



 

针对这个问题的处理方式是:将这部分落在物体表面以下的采样点沿着表面翻转到表面以上:



 

在程序中只需做如下处理:



 

87.2 C++代码实现

 





 

87.3 测试图形

 

87.3.1 测试图形(1)

 

相关代码:











 

输出图形:

 

单像素点采样次数为1时:



 

单像素点采样次数为256时:



 

87.3.2 测试图形(2)

 

相关代码:



 

输出图形:

 

接下来测试是:改变“模糊指数”exp(其他所有参数如上方测试程序所示,并保持不变),对比输出图形的效果。

 


exp=10:



 

exp=100:



 

exp=1000:



 

exp=10000:



 

exp=100000:



 

exp=1000000:



 

对比之前的镜面反射模型的图形(之前图形是600*600,现在的图形是400*600):(当“模糊指数exp”足够大时,高光反射模型就非常接近镜面反射模型了。)



 

87.4 其他说明

 

完整的代码,参考:http://download.csdn.net/detail/libing_zeng/9781791

 

Referrance

[1]. Kevin Suffern, Ray Tracing from theGround Up, A K Peters Ltd, 2007.

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: