图形学数学基础之基本蒙特卡罗尔积分(Monte Carlo Integration)
2017-07-29 11:23
323 查看
作者:i_dovelemon
日期:2017/07/29
来源:CSDN
主题:Monte Carlo Integration
今天要和大家分享的是在解渲染方程中,最常使用的一种数学积分方法-基本蒙特卡罗尔积分,后面会陆陆续续补充一些基于此方法的优化手段。
聪明的科学家们,想出了一些近似的方法来求出该积分,其中在图形学里面被经常用到的就是蒙特卡罗尔积分。
我们假设,下图就是函数f(x)在[0,π]上的曲线:
求这个函数在[0,π]上的积分,实际上就是求曲线与x轴在[0,π]所围图形的面积,如下图所示:
由于这个图形是一个不规则的图形,想要简单的求出面积基本不可能。但是我们知道,对于该面积,当我们将[0,π]的长度π作为宽的时候,必然存在某个值h,使得函数与x轴围成的面积等于A=π∗h,即下图所示:
所以,对于求该函数的积分,就变成了如何求出一个h值,使得他们的面积相同。
实际上,由于宽度为π,就是函数f(x)的作用域,那么高度h很自然的就是整个函数在[0,π]上的平均值。
所以,最后问题就变成了:如何较准确的求出函数在[0,π]范围里面的平均值。对于该问题,图形学里面是通过采样的方式来进行预估的。
虽然前面我们说过对于∫π0f(x)dx,我们没有分析的方法去计算出它的值,但是对于函数f(x)的值,却可以用带入参数的方法,直接计算出来。有了这个前提,我们就能够在函数的作用域范围里面随机的选择参数x的值,然后精确的计算出f(x)的值。
当然,仅仅只通过选取一个随机值,计算出的f(x)值,与实际的函数f(x)的平均值可能相距甚远,所以,我们需要在[0,π]的范围里面,生成大量的随机值,计算f(x)的值,并且将所有这些f(x)的值求一个平均数,就能够得到一个近似的h值了。
上面这段话应该很容易理解,当我们随机采样的数量趋近于无限的时候,这些随机样本所形成的f(x)的平均值,就等于精确的h。当然,在实际情况下,我们无法生成无限的随机样本,所以,误差总是不可避免的。所以现在图形学关于这块的研究,就是如何在有限的样本情况下,使用最少的样本数量,更快的计算出更小误差的h值。
关于函数f(x)的基本蒙特卡罗尔积分,就可以用一个公式来概括,即:∫π0f(x)dx≈πN∑i=1Nf(xi)。
同时,我们可以得出更加通用的公式:∫baf(x)dx≈b−aN∑i=1Nf(xi)
[2] Physically Based Rendering From Theory to Implementation, Third Edition, by Matt Pharr,Wenzel Jakob,Greg Humphreys
日期:2017/07/29
来源:CSDN
主题:Monte Carlo Integration
引言
好久没有写博客了,最近一直在忙于工作,同时GLB库中关于PBR的渲染算法,一直卡住,无法实现下去。不过在这段时间,阅读了大量关于PBR的论文,有了一点心得,所以今天在这里和大家分享下,在准备实现PBR中,所需要准备的一些数学基础知识。今天要和大家分享的是在解渲染方程中,最常使用的一种数学积分方法-基本蒙特卡罗尔积分,后面会陆陆续续补充一些基于此方法的优化手段。
蒙特卡罗尔积分
假设我们有一个函数f(x),我们无法通过分析的方法直接求出如下的积分:∫π0f(x)dx,那么当我们需要知道该积分的值的时候,又该怎么办了?聪明的科学家们,想出了一些近似的方法来求出该积分,其中在图形学里面被经常用到的就是蒙特卡罗尔积分。
我们假设,下图就是函数f(x)在[0,π]上的曲线:
求这个函数在[0,π]上的积分,实际上就是求曲线与x轴在[0,π]所围图形的面积,如下图所示:
由于这个图形是一个不规则的图形,想要简单的求出面积基本不可能。但是我们知道,对于该面积,当我们将[0,π]的长度π作为宽的时候,必然存在某个值h,使得函数与x轴围成的面积等于A=π∗h,即下图所示:
所以,对于求该函数的积分,就变成了如何求出一个h值,使得他们的面积相同。
实际上,由于宽度为π,就是函数f(x)的作用域,那么高度h很自然的就是整个函数在[0,π]上的平均值。
所以,最后问题就变成了:如何较准确的求出函数在[0,π]范围里面的平均值。对于该问题,图形学里面是通过采样的方式来进行预估的。
虽然前面我们说过对于∫π0f(x)dx,我们没有分析的方法去计算出它的值,但是对于函数f(x)的值,却可以用带入参数的方法,直接计算出来。有了这个前提,我们就能够在函数的作用域范围里面随机的选择参数x的值,然后精确的计算出f(x)的值。
当然,仅仅只通过选取一个随机值,计算出的f(x)值,与实际的函数f(x)的平均值可能相距甚远,所以,我们需要在[0,π]的范围里面,生成大量的随机值,计算f(x)的值,并且将所有这些f(x)的值求一个平均数,就能够得到一个近似的h值了。
上面这段话应该很容易理解,当我们随机采样的数量趋近于无限的时候,这些随机样本所形成的f(x)的平均值,就等于精确的h。当然,在实际情况下,我们无法生成无限的随机样本,所以,误差总是不可避免的。所以现在图形学关于这块的研究,就是如何在有限的样本情况下,使用最少的样本数量,更快的计算出更小误差的h值。
关于函数f(x)的基本蒙特卡罗尔积分,就可以用一个公式来概括,即:∫π0f(x)dx≈πN∑i=1Nf(xi)。
同时,我们可以得出更加通用的公式:∫baf(x)dx≈b−aN∑i=1Nf(xi)
总结
这一次通过一个简单的实例,讲解了基本蒙特卡罗尔的方法,下一次将要讲解,图形学里面,常用的优化手段,能够让我们使用更少的样本,更快的计算出,比较精确的积分值。参考文献
[1] Ray Tracing From the Ground Up, by Kevin Suffern[2] Physically Based Rendering From Theory to Implementation, Third Edition, by Matt Pharr,Wenzel Jakob,Greg Humphreys
相关文章推荐
- 2.1 Monte Carlo Integration
- Q73:蒙特•卡罗积分(Monte Carlo Integration)
- 蒙特卡洛模拟(Monte Carlo simulation)
- Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)
- 如何用R进行蒙特卡罗模拟(Monte Carlo Simulation with R)
- Markov Chain - Monte Carlo method and Gibbs Sampling for Latent Dirichlet Allocation
- Monte-Carlo Ray Tracing System (一)原理以及架构设计
- 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
- 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
- Markov Chains Monte Carlo(MCMC)proposal distribution(建议分布)选取的一个原则
- 《reinforcement learning:an introduction》第五章《Monte Carlo Methods》总结
- Monte Carlo Method for simulation
- Computing PI using Monte Carlo method
- 马尔可夫链及吉布斯抽样 入门详解(Markov Chain Monte Carlo and Gibbs Sampling)
- History of Monte Carlo Methods - Part 1
- [RL] 5 Monte Carlo Methods (1)
- 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
- Simple notes for MCTS(Monte Carlo tree search)
- Monte Carlo Method
- 蒙特卡罗方法(Monte Carlo method)