posted @ 2020-04-15 20:31 闪之剑圣 阅读(1522) 评论(0) 推荐(0) 编辑
摘要:
在进行路径追踪时,一个要解决的问题是怎样以有限的资源来无偏估计具有无限长度路径的光照贡献。俄罗斯轮盘是解决这个问题的一种方法,它基于这样一种思路:对于物理正确的光照传输,长度越长的路径其反射的光照越小,因此可以将贡献量足够小的路径剔除掉。 为了应用俄罗斯轮盘,我们在每次要投射一条新的路径的时候,设定 阅读全文
摘要:
C++11有一个非常重要的新功能,就是推出了右值引用的概念。那么什么是右值引用,它的意义在什么地方,本文将对此予以解释。 ###为什么要有右值引用 我们先来看一段代码: class A { public: A() { std::cout << "construct A" << std::endl; 阅读全文
posted @ 2020-04-08 21:00 闪之剑圣 阅读(706) 评论(0) 推荐(0) 编辑
摘要:
上面两篇博客主要讲述了路径追踪渲染的理论,这次来展示一下它的代码实现。这部分代码主要是我参考PBRT写的,没有实现光的折射,但也足以帮助理解路径追踪算法的原理。 首先,是遍历图片中的所有像素,对每个像素进行采样,注意需要将得到的RGB值进行gamma矫正: 具体采样的代码如下,就是在像素内部随机选一 阅读全文
posted @ 2020-04-04 20:37 闪之剑圣 阅读(1086) 评论(0) 推荐(0) 编辑
摘要:
之前介绍了 "重要性采样" 对于蒙特卡洛路径追踪技术减少积分方差的意义。但是在现实中,只用一种采样方式不一定能得到理想的结果,可能需要将多种采样结合起来,这就是复合重要性采样(Multiple Importance Sampling,MIS)。 复合重要性采样提供一个策略使得可以从多个不同的分布中抽 阅读全文
posted @ 2020-03-27 18:01 闪之剑圣 阅读(579) 评论(0) 推荐(0) 编辑
摘要:
自从2018年起我就一直在阅读《Physically Based Rendering:From Theory to Implementation》这本书,花了差不多1年的时间把它看了个大概。之后利用业余时间实现了书中介绍的路径追踪(Path Tracing)算法。今天来讲一讲该算法的理论推导。 pb 阅读全文
posted @ 2020-03-11 17:18 闪之剑圣 阅读(771) 评论(0) 推荐(0) 编辑
摘要:
这周我在写path tracing的时候遇到了一个很奇怪的bug:光线追踪深度设为1的时候结果看起来是正常的,但是深度高于1的时候就会出现很奇怪的渲染结果,如下图所示(为了便于调试,我用了一个cornell box的场景,mesh的颜色是统一的,并且设置的只是点光源): 我仔细排查了逻辑上的代码,并 阅读全文
posted @ 2020-03-08 16:52 闪之剑圣 阅读(360) 评论(0) 推荐(0) 编辑
摘要:
计算机目前由R、G、B三个维度来表示颜色,每个颜色可以由8个比特共256个灰度来描述,那么一共可以描述256 256 256=16777216种颜色。 过去大多数显示器都是阴极射线管显示器(CRT),这些显示器输出的亮度和存储的颜色值并不是线性的关系,因此在最终由显示器输出颜色的时候,其实会对颜色做 阅读全文
posted @ 2020-03-01 12:36 闪之剑圣 阅读(1038) 评论(0) 推荐(0) 编辑
摘要:
在平常的开发中,排序是一个经常会用到的功能。Python提供了sort和sorted函数来进行排序。 sort函数是list类型的一个方法,调用后直接对list本身进行排序。sorted则是输入一个list对象作为参数,返回一个排序完毕的list。 如下代码所示: 当然上面是一个非常简单的案例,我们 阅读全文
posted @ 2020-02-21 18:47 闪之剑圣 阅读(1473) 评论(0) 推荐(0) 编辑