其他分享
首页 > 其他分享> > 进阶图形学(二十二)蒙特卡洛路径追踪(Monte Carlo Pathing Tracing)(上篇)

进阶图形学(二十二)蒙特卡洛路径追踪(Monte Carlo Pathing Tracing)(上篇)

作者:互联网

【文章来源于斯坦福大学课件http://graphics.stanford.edu/courses/cs348b-01/course29.hanrahan.pdf,以下为翻译,如有错误还请指出】

 

一:解决渲染方程

为了得到渲染方程,我们先从反射方程开始。

反射的辐照光度(radiance) L_{r} is computed by integrating the incoming radiance overa hemisphere centered at a point of the surface and oriented such that its northpole is aligned with the surface normal.。【译注:这句我不会翻译】。BRDF f_r 即入射光线散射到任何一个方向的概率分布函数。一般来说,这BRDF的两个方向向量将会指向表面外。

几何光学的基本法则之一就是radiance在光学传播过程永远不会改变。(假设没有散射或吸收)。在没有物体的空间中,光会沿直线传播,而radiance在光线传播是不会改变。因此,假设有在接收表面上的一点 \vec x ,看见了源表面的一点 \vec x' ,那么接收表面处的radiance等于发射表面的radiance。

图1.1:在上半球面计算总和

我们使用方向作为两点的函数:

标准方式是将在 \vec x 的入射radiance L_i 使用从接收点 \vec x到发射点 \vec x'的方向参数化。

在两点radiance中引入符号也非常有用。

以及三点的BRDF

注意:此处定义的两点的radiance函数不同于两点在Kajiya的原始论文中定义的强度函数。

点到点的函数非常清晰而且符合直觉,所以非常有用。比如,如果\vec x 能看见 \vec x',那么 \vec x'也能看见 \vec x 。这种相互可见性表示为两点可见性函数, V(\vec x,\vec x') ,如果两点之间能够直接用线段连接而不被其他物体阻断,那么值就为1,否则为0。

图片1.2:两点几何体

反射方程涉及上半球的积分。通过将变量从固体角改为区域面积,可以很容易将积分改为曲面上的积分。只需要把固体角与源到表面积区域相关联就很容易做到。

投影固体角就会变成

其中

在这些方程中,我们区分了用于在曲面上指定点 \vec x ,以及我们所使用的积分,即差分方程 dA(\vec x) 。但很多时候不会那么严格,而只用 dAdA' 去代表 dA(\vec x)dA(\vec x’) 。几何体因子 G 与differential form factor有关,即

最后反射方程就会变成如下形式的积分:

在这个方程中, \vec x\vec w 是独立变量,而我们使用参数 \vec x' 来积分表面区域。因此,入射方向 \vec w_i 以及 L_o 的方向是这些位置的函数。

最后一步是保证能量守恒。

而出射(outgoing)的radiance是发射(emission)和反射(reflection)的radicance之和。在每个表面使用发射函数可以创建区域光源。将反射方程代入能量守恒方程,就得到了渲染方程。

为了更加清晰明了,我们将出射radiance的下标o去掉了。

渲染方程将接收表面的radiance(即等式右侧第一项)和其他表面的radiance(等式右侧的积分项)结合起来。这个等式适用于环境任何表面的任何点。我们要弄清楚我们知道哪些,不知道哪些。发射函数 L_e 和BRDF f_r 是已知的,因为它们由场景的几何体,材质以及光源决定。我们不知道的是所有表面上的radiance L 。为了计算出radiance我们必须解开这个等式。因为未知数 L 在积分符号里面,所以相当于积分等式。解开这个等式就是Mante Carlo Path Tracing的主要目标。

渲染方程有时候以算子的形式更加紧凑地写出。算子就是将一个函数映射到另一个函数的方法。在这里,这个函数就是radiance。

有时候将算子 K 拆分成两个算子 TS 非常有用。 T 是transfer算子,用于把一个表面出射光转变到另一个表面。

S 是散射或反射算子,可以由入射光分布计算出出射光分布。

要解开渲染方程可以用迭代法。

注意到 K^0 = I ,而 I 是标识符算子(identity operator)。最终结果就是诺伊曼级数(Neumann Series)的形式解(formal solution),而非计算解(computed solution)。

另一种解决诺伊曼级数的方法是使用类比:

渲染方程

那么解法就是

注意到 (I - K)^{-1} 只是发射函数的一个算子,把发射光传播到所有表面。

写成这样的形式解也很有用

我们来考虑其中一项:

这个积分在几何和物理上都是很容易理解的。这代表了一簇(family)光线路径。每个路径都被反弹数和或长度 n定义。给定长度,有许多可能的路径。而路径被一组顶点所指定。第一个顶点是光源,而接下来的顶点就是反射表面。给定长度的所有路径的总贡献由所有可能的光和表面位置积分而来,也就是在表面上积分 n 次。但我们必须权衡好,特定的路径积分包含了一系列几何体和反射项。等式的最终解决方法就是把所有长度的路径的总和相加,或简单来说,所有可能的光路。

注意到这是非常高维的积分,比如路径长度为n,那么积分就是2n维的空间。积分也同时包含可见项和非常复杂的反射方程,这也就是为什么使用Monte Carlo方法来解决渲染等式。

首先是一个非常易于实践的步骤,与渲染等式的解和到摄像机里的图形变换有关。这个等式就是Measurement Equation

响应函数 R(\vec x,\vec w,t) 取决于像素过滤器(由 \vec x 决定)和小孔(aperture,由 \vec w 决定),和快门(shutter,由 t 决定)。其他因子比如光线经过透镜系统的变换和光谱可见性也可添加进来。但简单起见我们将忽略这些东西。

如上所示,图像的像素值是由与嵌套积分有关的函数决定。这些积分非常复杂,但我们可以采样函数来估算它。

在x,y,u,v和t上采样之前已经讨论过了。采样光源并且用半球积分也已经讨论过。最后剩下的就是采样路径。

 

二:蒙特卡洛路径追踪

首先,先来介绍一些符号。每个路径都终止于于眼睛或者光源。

E —— 眼睛。

L —— 光源。

每次光线反弹都意味着于一个表面的互动,即反射或是穿过(transmission)。有许多不同的函数,可以将它们符号化:

D —— 漫反射或是传输

G —— 光泽(glossy)反射或传输

S —— 高光 (specular)反射或传输

漫反射说明光有可能被散射到任何方向。高光意味着只有一个方向,也就是说,给定一个入射方向,那么只有一个特定的出射方向与之对应。最后,glossy就是两者之间。

特定的光线追踪技术使用特定的方法实现:

这组路径追踪使用正则表达式来表示,这最早由Shirley提出。所有路径都必须有光L,眼睛E,以及至少一个表面,所有路径最短长度为3。

但这个符号很棒的地方就是当不必追踪某些路径,或不用考虑某种特定的光线传输时非常清晰。例如,Appel的算法只追踪路径长度为3的,而忽略了其他路径,因此,只有直接光照会被考虑。Whitted的算法会追踪所有长度的路径,但忽略了通过镜面的光线,因此没有下面的E(D|G)*L项。分布式光线追踪和路径追踪包括很多次反射以及非高光散射,例如E(D|G)*L,但

现在来介绍基本的蒙特卡洛路径追踪算法

第一步:选择一个光线,给定参数(x,y,u,v,t)

第二步:找到与这个光线最近的一个表面交点处

第三步:随机决定是否计算发射(emitted)或反射(reflected)光。

第三步A:如果计算发射光:返回 weight * Le。

第三步B:如果计算反射光:weight *= reflectance,BRDF pdf随机散射,返回第二步。

这个算法将会在光到达光源时终止。简单起见,我们假设所有光源使用与表面有关的发射项。知乎我们将讨论如何更好地处理光源。

这个算法的一个变种是从反方向追踪光线,从光源到摄像机。我们假设反射表面永远不会吸收光线,而摄像机可以完美地吸收任何光线。

第一步:根据光源强度分布随机选择一个光源,根据自身密度函数产生一束光,weight = 1

第二步:跟踪光线并找到与表面的交点

第三步:随机决定是散射还是吸收光线

第三步A:如果散射,weight *= relfectance,根据BRDF随机散射光,然后返回第二步。

第三步B:如果被摄像机幕吸收,则记录x,y的权重,返回第一步。

第一个算法是前向传播。前向光线追踪里光线从眼睛开始传播到光源。而反向光线传播从光源开始,以眼睛结束,但在物理上来说两者并没有什么区别,因为光线方向的改变不会影响的其他性质。这两个方向各有优缺点,最好能结合起来用。

以上是简单的蒙特卡洛路径追踪算法,但我们现在仍然面临两个挑战:

挑战1:如何不失偏颇地采样无限数量的路径

挑战2:找到使用很少变量的估算方法。

【这才翻译了一半,原文实在太长,因此剩下的放到另一篇文章里。】

哗啦cl 发布了194 篇原创文章 · 获赞 8 · 访问量 1万+ 私信 关注

标签:反射,Monte,radiance,进阶,光线,积分,路径,图形学,函数
来源: https://blog.csdn.net/qq_43439240/article/details/104590699