GAMES101 学习16——光线追踪4(蒙特卡洛积分、路径追踪)

lutianfei 发表于 2022/05/11 18:45:16 2022/05/11
【摘要】 一、Monte Carlo Integration蒙特卡洛积分定积分本质上是求解曲线在区间内与坐标轴所围成的面积。Monte Carlo Integration 是一种近似求解积分的方法,它在所求定积分的函数中随机取样多次,分别对取样得到的 f(x) 值和定积分上下限的矩形求面积,然后将这些面积平均,以近似求解定积分。1.Why Monte Carlo Integration为了解决定积分...

一、Monte Carlo Integration蒙特卡洛积分

定积分本质上是求解曲线在区间内与坐标轴所围成的面积。Monte Carlo Integration 是一种近似求解积分的方法,它在所求定积分的函数中随机取样多次,分别对取样得到的 f(x) 值和定积分上下限的矩形求面积,然后将这些面积平均,以近似求解定积分。

1.Why Monte Carlo Integration
为了解决定积分

2.What &How
①蒙特卡洛积分:
不同于黎曼积分(分为多个微小的部分),蒙特卡洛积分为:用一个随机的采样的方法。随意取一个点,对应f(x)为高,a→b为宽,(假设为长方形)来近似线下的面积,重复多次采样,最后平均起来长方形的面积。
②定义:
image.png

当然,采样次数越多,该方法求解的定积分结果就越准确。

eg:如果在a→b均匀的采样,pdf=1/b-a
image.png

用蒙特卡洛来算
image.png

一个特殊情况:随机变量的采样是均匀的
一个结论:任何一个积分的蒙特卡洛形式:
image.png

注意:定义在x域上,采样也要在x域上(定义和采样要在一个域)

二、路径追踪

为了解决 Whitted-Style Ray Tracing 中的一些问题,让渲染更加真实。

2.1 Whitted-style光线追踪的两个问题

2.1.1 问题1:Whitted-Style Ray Tracing 在处理光照反射时总是沿着镜面反射方向进行,这适用于镜面材质,但却不适用于 Glossy 之类的材质

image.png

2.1.2 问题2:Whitted-Style Ray Tracing 不考虑物体表面漫反射会进一步反射,但实际上漫反射物体仍会继续反射光线

image.png
以及 color bleed现象。

2.2 渲染方程解决Whiteed-style问题

相较于这些问题,渲染方程的结果是对的,所以我们只需要按照渲染方程来求解物体表面的着色问题即可:
image.png

2.3 蒙特卡洛方法具体过程

先考虑简单情况(直接光照情况,且不考虑自发光项)
image.png
image.png

为了求解这个在球面上的积分,这里就需要 Monte Carlo 方法来近似求解:
image.png
image.png

进一步看如果来自某一物体的反射的间接光源时应如何处理:
image.png

image.png

通过上述公式就可以简单描述出求解着色的步骤:

  1. 随机采样 N 次入射方向
  2. 根据采样的入射方向,针对能够反射到光源的部分,计算 L i ( p , ω i ) f r ( p , ω i , ω o ) ( n ω i ) L_{i}\left(p, \omega_{i}\right) f_{r}\left(p, \omega_{i}, \omega_{o}\right)\left(n \cdot \omega_{i}\right)
  3. 累加该次求解结果
  4. 平均,完成着色

同时,还需要考虑反射如果打到物体表面,物体会吸收光源进行二次反射着色过程。

但是这里还存在几个问题:

问题1:光线数量会爆炸

物体表面在进行反射的过程中,反射的光线数目应该为多少?
image.png

如果反射的光线数目为 N,反射 次数为 M,那么对于一个像素上的射线的计算量都有可能为: N M N^{M} ,这个计算量是相当大且呈指数增长的。为了减少计算量,人们将反射的光线数目设为1,而在每个像素处打入多条射线来解决这个问题(即路径追踪的概念):
如下图所示 红色、黑色、蓝色都表示穿过同一像素的路径
image.png

这一步可以在一个循环里面做,即对于一个像素选取不同的位置打入射线以求解着色:
image.png

问题2:递归无法停止问题

着色何时停止,即当光线反射多少次后,不再进行反射?这里采用了 Russian Roulette (RR) 来解决这个问题。

当满足概率为 P 时,返回除以该概率的着色结果: L o / P L_{o} / P ,当概率为 (1-P) 时,就停止反射光线,通过这种方式,我们仍然能够得到正确的着色结果。

image.png

转换为伪代码就是:
image.png

此时已经是一个正确的路径追踪算法实现了,但效率不高。

image.png

我们希望通过低采样率也能获得高采样率的效果。

问题3:效率低下->不浪费算法推导

光线在反射的过程中打到光源是存在一定概率的,它往往与光源自身大小相关,如果光源过小,会使得大量光线无法打到光源,以致出现光线浪费现象。
image.png

原始蒙特卡洛方程是在着色点上进行积分的,这里需要考虑在光源上进行积分。
image.png

因此要找到光源出dA和立体角dw之间的关系
image.png

即先将光源投影到立体角方向 d A c o s θ dAcos\theta' ,再计算其余x点的距离平方,即可得到立体角的关系。

由此,就可以重写改变积分阈的渲染方程:
image.png

这里的做法就是将物体表面接收到的 radiance 分解为两部分:来自光源和来自其他反射物体。

  • 对于来自光源的部分,直接在光源上进行采样即可,采样过程就是换积分域的过程
  • 对于来自其他反射的光源,仍然按照RR算法求解
    image.png

伪代码如下:
image.png

问题4:判断半球到光源之间有没有被挡:

解决方法:点到光源取一条连线,打一条光线,看中间有没有打到其他的物体
image.png

一些注解:
①Path Tracing很难实现

②还是入门吗? 算进阶
③Path Tracing 几乎100%正确
image.png

三、Ray Tracing:过去的光追VS现在的概念

  1. 以前:基本都是指Whitted-style 的光线追踪
  2. Now(老师自己的定义):所有光线传播方法的大集合
    • (Unidirectional & bidirectional) path tracing
    • Photon mapping
    • Metropolis light transport
    • VCM / UPBP…

四、我们没有说的话题

  1. Uniformly sampling the hemisphere
    怎么均匀采样?怎么采样?

  2. Monte Carlo integration allows arbitrary pdfs, What’s the best choice?
    importance sampling 重要性采样理论

  3. Do random numbers matter? 随机数重要吗?
    Yes! (low discrepancy sequences)比如蓝噪音

  4. I can sample the hemisphere and the light, Can I combine them?
    Yes! (multiple imp. sampling) 可以结合半球和光源采样吗?

  5. The radiance of a pixel is the average of radiance on all paths passing through it
    不同Path的Radiance平均起来,为什么平均起来就是pixel的Radiance?
    Why? (pixel reconstruction filter)

  6. Is the radiance of a pixel the color of a pixel? Pixel的Radiance就是它的颜色吗?
    No. (gamma correction(radiance到color的对应关系), curves(HDR), color space)

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请发送邮件至:cloudbbs@huaweicloud.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。