首页 > 其他分享 >16 Ray Tracing (Monte Carlo Path Tracing)

16 Ray Tracing (Monte Carlo Path Tracing)

时间:2023-04-18 17:44:56浏览次数:47  
标签:采样 Monte 光线 16 Tracing 光源 积分 Path

关键点

  • Monte Carlo Integration
  • Distributed Ray Tracing
  • Path Tracing
  • Russian Roulette(RR)
  • Sampling the Light(pure math)

1. Monte Carlo Integration 蒙特卡洛积分

  • 对于没有解析式的对象,可以使用该方法求其定积分。在积分范围内随机采样一个值,作为高,使用区间长度作为宽,则利用长方形面积作为积分值的估计;然后,多次随机采样,利用其结果均值作为积分值。
  • 取某种随机分布,则不同采样值对应一个概率密度函数PDF值p(xi),而且采样值对应一个高度f(xi),按照如下式子进行蒙特卡洛积分。
  • 采样次数越多,越准确。
  • 积分公式中不需要考虑积分域,这是因为pdf已经考虑到了。
  • 采样、积分和pdf都是相对x而言的。

2. Path Tracing 路径追踪

2.1 Whitted-Style Ray Tracing的问题

  • 只是适用于specular reflection镜面反射,不适用于glossy reflection。
  • 不适用于漫反射diffuse reflection,所以全局光照效果不好,比如Color bleeding效果
  • 解决方法:Rendering equation

2.2 Rendering equation 的问题

2.2.1 求解积分

  • 对于一个简单场景:一个像素且只考虑直接光照
  • 蒙特卡洛积分

  • 着色算法

2.2.2 递归方程

(1) Distributed Ray Tracing

上面的算法只适用于直接光照,即检测到光源,如果检测出的是物体而非光源,那么就考虑物体对着色点的radiance,相当于从着色点对该点做一次蒙特卡洛积分(其中光线wi作为该物体的出射光线方向相反为-wi)。得到FYI, Distributed Ray Tracing 分布式光线追踪

(2) Path Tracing
  • 光线爆炸
    当检测光线数量较多时,多次弹射之后数量就会成为指数级变化。

    为此,只检测一条光线,得到方法为Path Tracing 路径追踪
  • Noisy
    在避免多个方向导致光线爆炸的情况下,只取一个方向形成一条Path,但是会有噪声,所以选取多个Path。即在像素内部选取多个位置sample,得到相应的相机到样本的光线cam_to_sample,分别进行一次Path Tracing,然后在path的级别上进行蒙特卡洛积分。
(3) Russian Roulette(RR) 俄罗斯罗盘赌
  • 终止条件
    无论在什么时候结束,都会存在能量损失,所以理论上真实情况下是无限次反弹的。设定一个二值概率,表示是否进行下一次弹射或者终止,如果继续弹射则将弹射结果能量Lo除以弹射概率则为结果,否则结果为零,则其期望就是弹射能量。

    在实现时,通过生成随机数与概率设定阈值进行对比来判断是否终止。
(4) Sampling the Light(pure math)

SPP(samples per pixel)比较少时,噪声就会明显,所以对SPP的要求就会很高。

当光源较大时,少量光线就可能打到光源,否则需要更多光线,这是因为能否达到光源是一个随机结果,因此大量的samples被浪费了。这是因为均匀的向周围采样。

因此,不再对着色点周围的半球面做采样,而是对光源做采样,则光线利用效率就会变高。然而,对光源采样就需要进行对光源表面做积分,否则无法进行蒙特卡洛积分,因此需要重写渲染方程。光源的面积微元与立体角的关系如下,先将dA面向w投影,然后利用立体角定义除以距离平方。

然后做变量替换,同时得到新的积分函数f(x)。然后,对光源进行均匀采样。

将光源部分使用sampling the light,对其他间接光照仍然采用着色点采样,并且判断不是光源。在光源采样部分,因为只做一次,所以不需要RR。

算法如下:

最后,在做渲染方程变换并且光源采样时默认光源一定能够打到位置上,因此需要选取到一个光源采样后先判断能否抵达。

但是,对于点光源不方便做处理,可以转换成面光源。

3. Others

3.1 概念和方法

3.2 其他领域

  • 如何做到采样
  • Importance Sampling 重要性采样理论,如何选择采样的随机分布
  • Low Discrepancy Sequences,如何生成随机数
  • MIS(Multiple Importace Sampling) 结合两种采样方法。
  • Pixel Reconstruction Filter,像素不同位置的path重要性相同吗
  • Gamma Correction 伽马矫正CurvesColor Space,得到的radiance并非颜色,需要做变换

来源

[1]Games101. 闫令琪

标签:采样,Monte,光线,16,Tracing,光源,积分,Path
From: https://www.cnblogs.com/etherovo/p/17329924.html

相关文章

  • JVM系统优化实践(16):线上GC案例
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~列举几个实际使用案例说一下GC的问题。一个高峰期每秒10万QPS的社交APP,个人主页模块是流量最大的那个,而一次个人主页的查询,大概会加载5M的数据。由于并发量太高,导致高峰期年轻代的Eden区被迅速填满,且频繁触发YoungGC,每次YoungGC......
  • 15 Ray Tracing (Rendering Equation)
    关键点BRDF(BidirectionalReflectanceDistributionFunction)ReflectionEquationRenderingEquation1.BidirectionalReflectanceDistributionFunction(BRDF)1.1BRDF反射可以理解为光线打到物体表面被吸收,然后按照某些方向再辐射出去一部分。BRDF定义了从某一个......
  • 未来十年,与人工智能争夺生存机会的16个实用技巧
    如今,许多公司都已经开始利用人工智能和机器学习,并且这些技术的影响只会越来越大。虽然这对于想要提高业绩的企业来说是件好事,但许多员工也担心机器人会在未来几年内取代他们的工作。在未来和AI争夺工作的16个实用技巧虽然人工智能可能会改变某些类型的工作,但它们永远不会完全取代人......
  • DG搭建报错 ORA-16047: DGID mismatch between destination setting and target datab
    最近有需求要给数据库新搭一个DG变为一主两从,搭好之后测试发现一直没有同步,检查问题。从库一直等待接收71855号日志主库有归档日志发送失败的报错,可以看到归档到dest_2(原从库)是成功的,而到desc_3(新从库)则是失败的根据日志提示查看arc2进程的trace日志看到有ora-16058和ora-16047的报......
  • 【2023-04-16】连岳摘抄
    23:59中国哲学儒、墨、道、法各家,传承数千年而蕴涵着中国文化的内涵,各有其普世的价值。这种普世价值,是指在人文精神的照耀下,老、孔、墨、庄的思想多散发出普世的情怀,即老子的贵柔及其宽容心态、孔子的恕道及其家庭伦理、墨子的兼爱与非攻思想、庄子的艺术人生和齐物精神。  ......
  • 锂电池3.7V升5V/5A内置MOS大电流升压IC型号推荐FS2116B
    电源电路是电子产品中必不可少的部分。然而不同的器件或者模块工作电压不一样,所以DC-DC电压转换电路应用中十分常见。例如便携式电子产品,一般都内置电池,如果是单节锂电3.7V供电,通过DC-DC升压电路,从3.7V升压到5V、8V、9V、12V等再给其他电路供电。升压电路属于开关型电路,最关心的就......
  • Robotruck UVA - 1169
    有n个垃圾,第i个垃圾的坐标为(xi,yi),重量为wi。有一个机器人,要按照编号从小到大的顺序捡起所有垃圾并扔进垃圾桶(垃圾桶在原点(0,0))。机器人可以捡起几个垃圾以后一起扔掉,但任何时候其手中的垃圾总重量不能超过最大载重C。两点间的行走距离为曼哈顿距离(即横坐标之差的绝对值加上纵......
  • 4月16日leetcode二叉树前序遍历创建字符串,二叉树的层序遍历
    给你二叉树的根节点root,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对"()"表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。来源:力扣(LeetCode)链接:https://leetcode.cn/pro......
  • 16进制转10进制
            ......
  • CF1646E Power Board 题解
    题目链接:https://codeforces.com/contest/1646/problem/E题目大意:有一个\(n\timesm\)的矩阵,其中第\(i\)行第\(j\)列的格子中的数字是\(i^j\)。问:矩阵中存在多少个不同的数?解题思路:可以很明显地发现,第\(1\)行的数字全部都是\(1\),而且在其它行不会出现数值为\(1\)......