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.
相关文章推荐
- Q85:对比“直接光照”和“间接光照”的反射模型
- 高光反射-逐顶点光照
- unity shader (6)--实现高光反射光照模型
- 基本光照模型实现-高光反射
- unity shader中高光反射光照模型之顶点光照
- Shader自学笔记 2.2.1 逐顶点高光反射光照模型
- unityshader中高光反射--像素光照
- UnityShader初级篇——实现逐顶点高光反射光照模型
- Unity3D - Shader - 高光反射光照模型
- Shader自学笔记 2.2.2 逐像素高光反射光照模型
- UnityShader初级篇——实现逐像素高光反射光照模型
- unity shader (7)--实现高光反射光照模型--逐像素光照
- unity shader学习笔记(三)——在Unity中计算高光反射光照
- 高光和金属反射光照模型
- 《unityshader 入门精要》漫反射光照与高光反射光照模型学习笔记
- 高光反射-逐像素光照(Blinn-Phong)
- Unity shader学习之高光反射光照模型
- Unity Shader入门精要笔记(十):Unity 的基础光照——高光反射的实现
- 高光和金属反射光照模型
- 逐像素光照( ray trace ) (一)[反射光]