初入计算机图形学(二):对bidirectional path tracing的一些困惑
本人水平有限,若有错误也请指正~
前文提及了光线追踪的一些常用手法,但是其中path tracing的实现最为简单,但是其最致命的一个缺点就是图像收敛速度很慢。。原因在于从摄影机发射出的每一条光线若不与场景中的光源相交,则这条光线就是无贡献的,或者遇到了一个漫反射表面,该表面反射环境光的值很低,这时候这条光线就成为了一条低贡献的光线,同时也可能增加整体图像的噪点数量。
这时候bidirectional path tracing提出了,其基本思想是从摄影机和光源两个视角出发,如下图所示,

光线分别从视点和光源出发,我们不妨将视点发出的光线为采样光线,光源发出的称为实际光线,该算法即是取采样光线与场景的每一个交点,这些交点与实际光线与场景的每一个交点形成一条连线,对每一条连线应用BRDF,再将这些多个采样值进行加权求和得到一个像素在一次迭代中的采样,这样做实际上提高了每条光线的贡献度,使得图片收敛的速度更快,但是里面仍有一些算法细节还是比较困惑:
1)当场景中存在很多遮挡,例如发生如下情况(这种情况也很常见),

当连线与场景中的一个障碍物有交点时(图中虚线),这时候我们应该在虚线所代表的那个采样值的权重设为0,使得这条虚线不会对最终的采样造成影响。这个方法对于那些障碍物是不透光的实体是可行的,但是如果障碍物是一个透光物体,该如何处理?按理讲应该还是应当将其权重设为0,因为虚线两端连接的光线是无法一次到达的(透光物体折射使得光线偏转,而偏转后的光线再次到达虚线另一端的概率为0),但是设为0着实不太合适,因为如下情况发生也是有可能的:

如上图绿线标注的那样,这条连线也可以使A对A'的采样值产生贡献,但是这时候的贡献权重就很难计算,况且很多情况下的透光物体不像图中那么规则,这时候权重的求解就更麻烦。通过一些hack的方式可以弥补这种情况带来的误差,但是如果hack手段用得多了,就失去了图形渲染的意义(毕竟我们要将正确性放在首位,不然就与那些实时交互性强的游戏没其它优越性可言了。。。)如果简单暴力的将权重置为0,那么会使得图像与真实图像来得暗,而且对于如下的极端情况处理的也不好:

上图中的所有虚线的贡献均为0,使得该采样值为0,这样的误差就比较大了。
2)能量是否守恒

如上图,从视点发射出的两条光线的采样值(图中两条与光源的灰色连线)会产生相同的贡献度,在像素的呈现上就会呈现相同的颜色,这是不对的,要解决这个问题就需要引入距离权重,会使得求解方程的形式更复杂,同时距离权重的引入还要处理好能量守恒的问题。这一方面看起来也是挺麻烦的。。。
以上就是学习bidirectional path tracing后的一些困惑。。从其他利用了bdpt算法的人渲染出的图片来看,他们处理上述情形处理的很好,不知道用了何种补偿措施,希望知道如何处理的大神们给出一条指导性的建议~
初入计算机图形学(二):对bidirectional path tracing的一些困惑的更多相关文章
- 初入计算机图形学——BVH结构的实现
摘要: 本人水平有限,若有错误也请指正~ 光线追踪作为全局光照解决方案的一个重要思想,其与场景大量三角形的求交效率高低直接影响最终算法的速度,典型的一些渲染器都采用二叉树来将场景进行划分,最近自己实现 ...
- 初入计算机专业,学习c语言的第一周作业问答
2019年9月17日下午3点30,我来到了1117教室准备上我进入大学的第一堂计算机专业课,并需要完成以下作业. 2.1 你对软件工程专业或者计算机科学与技术专业了解是怎样? 我所了解的计算机就是一台 ...
- 初入Spring-boot(二)
一.入口类 Spring boot通常有一个名为*Application的入口类,入口类里有一个main方法,这个main方法其实就是一个标准的java应用的入口方法.在main方法中使用Spring ...
- 回顾bidirectional path tracing
最近因为研究需要,回顾了一下BDPT,主要看VEACH的那篇论文,同时参考了pbrt,mitsuba的实现,自己写了一份新的bdpt实现.以前实现的那一份BDPT不是基于物理的,而且无法处理镜面和透明 ...
- 初入码田--ASP.NET MVC4 Web应用开发之二 实现简单的增删改查
初入码田--ASP.NET MVC4 Web应用之创建一个空白的MVC应用程序 初入码田--ASP.NET MVC4 Web应用开发之一 实现简单的登录 2016-07-29 一.创建M002Adm ...
- 0x00linux32位汇编初入--前期准备
0x00汇编初入--前期准备 一.汇编工具 在linux平台下常用的编译器为as,连接器为ld,使用的文本编辑器为vim,汇编语法为att 以下是一些工具: addr2line 把地址转换为文件名和行 ...
- Mathematics for Computer Graphics数学在计算机图形学中的应用 [转]
最近严重感觉到数学知识的不足! http://bbs.gameres.com/showthread.asp?threadid=10509 [译]Mathematics for Computer Gra ...
- 计算机图形学 opengl版本 第三版------胡事民 第三章更多的绘图工具
opengl 计算机图形学 第三版 第二部分 第三章更多的绘图工具 3.1 概述 第2章中 我们绘图使用的是屏幕窗口的基础坐标系 以像素为单位 屏幕坐标从左下角x从0延伸到scr ...
- 计算机图形学——梁友栋-Barsky算法
梁算法是计算机图形学上最经典的几个算法,也是目前唯一一个以中国人命名的出现在国内外计算机图形学课本的算法,我之前在介绍裁剪算法的时候介绍过这个算法 https://www.cnblogs.com/wk ...
随机推荐
- 浅析 Jndi / DataSource / ConnectionPool 三者
最近有个用户量 5W-10W 的 web 应用,频繁导致 weblogic 崩溃,让运维组很难受. 通过几天跟踪系统日志和 weblogic 运行状况,发现报错的姿势有很多,其中对定位问题比较关键的报 ...
- 个人php开发之工具--listary(一)
摘要:俗话说:工欲善其事,必先利其器.作为一名开发者来说,熟练的使用工具可以达到事半功倍的效果,我就我自己使用的工具说自己的看法.当然,每个人对某个软件都有自己的看法或使用经验,还是那句老话,什么是最 ...
- Java 中字两个字符串判断是否相等(转载)
java中判断字符串是否相等有两种方法:1.用"=="运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b=&q ...
- ST-LINK调试完成
今天真是一波三折啊. 买回来的st-link刚开始不会用,各种百度,还好有两个很好的教程.连接发在下面吧. http://blog.csdn.net/TXF1984/article/details/4 ...
- Nodejs进阶:MD5入门介绍及crypto模块的应用
本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 简介 MD5(Message-Digest Algorithm) ...
- js日期转化(计算一周的日期)
之前做项目的时候遇到过一个日期转化的问题,一个日期控件和近一天,近七天和近一月的的联动效果.发现自己不会,后来就百度了一下解决了这个问题. 现在抽空又写了一个时间转化的案例(计算一周的日期),因为之前 ...
- windows下批量换程序——运维常用
Windows一批机器,需要批量换程序.写个脚本给大家. net stop sharedaccess (关闭防火墙) del /s d:\*.log d:\*.vbs d:\*.pdb d:\*.vb ...
- Logback Pattern
Logback日志配置示例 <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppe ...
- .net之简单工厂模式
//抽象一个生产笔的方法 namespace simpleFactory{ public abstract class AbstractPen { public abstract void creat ...
- OpenMP 入门教程
前两天(其实是几个月以前了)看到了代码中有 #pragma omp parallel for 一段,感觉好像是 OpenMP,以前看到并行化的东西都是直接躲开,既然躲不开了,不妨研究一下: OpenM ...