89.1 Path Tracing只用于间接光照

根据Path Trace的算法,只有当最终的反射光线撞击到发光材质物体时,才会对最初的撞击点进行“有效”着色,否则着色为“黑色”。这就给图形带来大量的噪声。所以,接下来,我们只将Path Tracing算法用于间接光照;而直接光照部分,则是直接对面积光源进行采样获得,这样可以确保被光源直接照射的点不至于呈现黑色,从而可以减少噪声。注意,直接光照部分是要用到“光源”的,而间接光照部分只是用到“发光材质”。

这里,我们需要注意的是:不要在对直接光照使用Path Tracing算法了,否则直接光照部分的光照强度就翻倍了(因为,我们用面积光源已经计算过一次)。

我们直到光线反射一次之后,对应的depth加一。原始光线和阴影光线(用于求面积光源的直接光照)的depth为0。为了避免直接光照部分被计算两次,我们只需判断撞击到发光材料的反射光线的depth是否为1。如果是1,则说明原始光线经一次反射就撞击到了发光材料物体,这条光线和阴影光线是重复的,所以此时发光材料对Path Tracing算法中的这类光线应该返回“黑色”。如下图示意:

图中红色圈标注的反射光线的depth为1,该光线和绿色圈标注的阴影光线效果上是“重复的”,所以在Path Tracing算法中发光材料应该对红色圈标注的反射光线返回“黑色”。

但是,有个问题:

当原始光线撞击到镜面材质物体时,其反射光线(depth=1)若直接撞击到了发光材质物体,此时的发射光线对应着发光材质在镜中的成像。所以,对于镜面材质,depth=1的光线是不应该返回黑色的。一般情况下,光线反射一次,depth加一。为了解决这个问题,我们设置原始光线撞击镜面材质时,depth加二。

89.2 C++代码实现

新建一个叫做“GlobalTrace”的Tracer子类。该类的trace_ray()方法如下:

接下来则是需要在各种材质中添加相应的global_shade()方法。(在这里,我们只添加Emissive、Matte、Reflective三种材质的path_shade())

另外,World::build()中也要做相应的修改:

89.3 测试图形

这个是Path Tracing算法只用于间接光照,单像素点采样次数为100(耗时1304s)时的生成的Cornell Box:

对比之前的图形(Path Tracing算法用于直接光照和间接光照,单像素点采样次数为100,耗时976s):

对比来看,降噪效果还是比较明显的。

89.4 其他说明

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

Referrance

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

Q89:全局光照(Global Illumination)——Path Tracing(只用于间接光照)相关推荐

  1. Q88:全局光照(Global Illumination)——Path Tracing

    88.1 引入(Introduction) 截至当前,回忆一下我们学过的针对直接光照和间接光照的不同反射模型. 直接光照: Phong反射模型.包含漫反射部分和高光反射部分. 间接光照: 对于镜面材料 ...

  2. (中文详解篇)smallpt: 99行代码完成全局光照Path Tracing

    目录 0. 什么是SmallPT Features 1. 光线追踪需要了解知识 1.1 什么是全局光照? 1.2 渲染方程 2. SmallPT代码分析 2.1 代码块1 2.2 代码块2 2.2.1 ...

  3. 全局光照技术解析Global Illumination Explained

    解析全局光照Global Illumination Explained 前言:Global Illumination全局光照技术是实时渲染的必然发展方向.我参考了一些研究成果,琢磨了一下,让更多的人可 ...

  4. 计算机图形学【GAMES-101】9、蒙特卡洛路径追踪(Path Tracing)(光源采样)

    快速跳转: 1.矩阵变换原理Transform(旋转.位移.缩放.正交投影.透视投影) 2.光栅化(反走样.傅里叶变换.卷积) 3.着色计算(深度缓存.着色模型.着色频率) 4.纹理映射(重心坐标插值 ...

  5. UE4 间接光照缓存

    照亮环境 尽管Lightmass可以生成静态对象上的间接光照的光照贴图,但像角色这样的动态对象 也需要一种接收间接光照的方法.这个问题可以通过Indirect Lighting Cache(间接光照缓 ...

  6. 实时高清渲染:全局光照(Global Illumination)[1]

    目录 基础知识: Radiance: Irradiance: Radiant flux: Radiant Intensity: Solid Angle: Lambertian surface: Lam ...

  7. Unity Global Illumination(Unity 全局光照 ) 官方手册笔记系列之Enlighten

    Enlighten 本文档主要是对Unity官方手册的个人理解与总结(其实以翻译记录为主:>) 仅作为个人学习使用,不得作为商业用途,欢迎转载,并请注明出处. 文章中涉及到的操作都是基于Unit ...

  8. 实时全局光照(Real-time Global Illumination)与Reflective Shadow Maps(RSM)

    文章目录 1 概述 1.1 什么是全局光照(GI)? 1.2 光照模型处理间接光照的方法 1.3 实时全局光照的思想 2 GI的主要问题 3 方法一:Reflective Shadow Maps(RS ...

  9. smallpt: Global Illumination in 99 lines of C++讲解

    smallpt: Global Illumination in 99 lines of C++ 光线追踪 正向光线追踪 逆向光线追踪介绍 蒙特卡罗光线追踪算法 非透明材质 漫反射材质 镜面反射材质 透 ...

最新文章

  1. Spring Cloud Alibaba发布第二个版本,Spring 发来贺电
  2. 《塞洛特傳說》道具系统
  3. 大数据神器Kafka入门
  4. Dynamic ReLU论文解读
  5. Quartz - 作业调度框架-插件化开发
  6. Flask的csrf_token的用法
  7. TypeScript 安装与使用
  8. Java从键盘获取输入各种类型的数据方式
  9. 统计匹配检索规则的物品数量
  10. 20151024-1025-威海-第5届全国高校软件工程专业教育年会参会总结
  11. naked 函数调用
  12. JSONP解决前端跨域问题
  13. python编辑数学公式_最好用的文字与公式编辑器,这套数学笔记神器送给你
  14. FlashFXP 4.2.4 破解版
  15. Ques1,debug模式打不开的原因
  16. 深入Android应用开发_核心技术解析与最佳实践
  17. 【实践*感悟】程序员的品质
  18. 涅普计划-PHP入门
  19. win7连接sftp_WinSCP(SFTP客户端)官方版下载_WinSCP(SFTP客户端) v5.17.7.10640中文版 - Win7旗舰版...
  20. 游戏原画和3D游戏建模,哪个更胜一筹?

热门文章

  1. ios官方菜单项目重点剖析附项目源码
  2. 记一个java和php都能调用的http接口
  3. oracle表连接——处理连接过程中另外一张表没有相关数据不显示问题
  4. LeetCode 34. Search for a Range
  5. 【重点】剑指offer——面试题36:数组中的逆序对
  6. 伴随矩阵,可逆矩阵相关思路分析之一
  7. 变量独立与不相关的区别
  8. Python中容易忽视的知识点
  9. 桌面虚拟化之XenDesktop7
  10. 推荐微软Windows 8 Metro应用开发虚拟实验室