您的位置:首页 > 其它

图形学数学基础之重要性采样(Importance Sampling)

2017-08-06 19:31 1066 查看
作者:i_dovelemon

日期:2017/08/06

来源:CSDN

主题:Importance Sampling, PDF, Monte Carlo

引言

前面的文章图形学数学基础之基本蒙特卡罗尔积分(Monte Carlo Integration)中提到过,我们可以通过使用数值的方法来求解一些无法通过分析方法解决的积分问题。并且,我提到过后面会讲解,如何通过对基本蒙特卡罗尔积分方法进行改进,从而加快求解积分的速度。所以,今天就来和大家讲解在图形学里面,一种非常重要的加快积分的手段-重要性采样(Importance Sampling)。

重要性采样(Importance Sampling)

我们先回顾下基本蒙特卡罗尔积分的内容,如下所示:∫baf(x)dx≈b−aN∑i=0Nf(xi)前面提到过,我们是通过在[a,b]的区间里面,进行均匀分布的进行采样,以此来构造平均值h。可事实上,这些均匀分布的点所在的值对最终的积分贡献度实际上不一样的,只有当函数本身是均匀的时候,比如下图所示:



对于这样的函数,我们使用均匀分布的采样,他们计算出来的值对最终的积分的贡献度实际上是一样的,所以能够通过这种方法来进行计算。但是在实际情况下,我们遇到的积分都是不均匀的,比如下图所示的这样:



对于这样的函数,直观上来说,两边的值对最终的积分贡献度要小,而中心的值对最终的积分贡献度要大,所以我们就说中心部分相比于两边部分要“重要(Importance)”,所以当我们采样的时候,最好是能够多在中心部分采样,这样相比于均匀分布采样,相同采样数的情况下,这种方法更加的精确,这就是重要性采样(Importance Sampling)。



概率密度函数(Probability Density Function)

从前面的描述中可以看出,我们需要根据被积分函数本身的形状来构造采样点的分布。所以这里就引进了一个概率中的函数概率密度函数(Probability Density Function, PDF),这个函数就是我们将要主要打交道的函数,所以有必要好好的讲解下它的特性。

随机变量X

随机变量X,表示的是在某个指定的区间里面,事件A发生的概率。比如说,有一个随机变量X表示了今天要下雨的概率,扔一个骰子,点数大于3的概率,以及向一个圈里面扔石子,落在某个区域A的概率等等。

随机变量一般分为两个大类,分别是离散型随机变量,比如扔骰子的点数的概率;连续型随机变量,比如向一个圈里面扔石子,落在某个区域A的概率。

在图形学里面,我们主要用到的是连续型随机变量。连续型随机变量相比于离散型随机变量的一大特点是,虽然它也拥有样本区间,但是样本区间里面的样本数量是无限的,而单个样本事件发生的概率没有实际的意义,对我们来说,更重要的是研究落在样本区间里面的子区间的概率。

概率密度

对于连续型随机变量来说,概率密度函数就是描述了在样本区间里面子区间发生概率的一种函数,它和随机变量X的关系如下所示:X([a,b])=∫bap(x)dx。其中X([a,b])表示的就是事件发生在样本区间[a,b]中的概率。而p(x)就是随机变量X的概率分布函数。所以随机变量X和概率密度函数p(x)之间就是积分关系。这也就说明了,对于单一事件发生的概率在该积分中是没有意义的。

除了上面的公式之外,概率密度函数还有一个重要的特性:∫+∞−∞p(x)dx=1这个特性表示,事件发生在整个概率区间里面的概率为1。

新的积分器函数

在明白了上面的内容之后,我们就可以得出一个新的积分函数:∫baf(x)dx≈1N∑i=0Nf(xi)p(xi)其中p(x)就是概率密度函数。这里之所以要除以p(xi),是因为当我们的采样点为xi的时候,我们可以通过p(xi)计算出该采样点对最终积分的一个贡献度权重值,这样一除就能够得到最终的积分值。

细心的读者可能会发现,好像我们只要找到一个采样点xi,然后求出p(xi)和f(xi),在使用f(xi)p(xi)就已经能够得到最终的积分值了啊,干么还要采样那么多的数据,然后在求个平均值?这是因为,在解决实际问题的时候,我们往往很难精确的求出某个函数f(x)对应的概率密度函数p(x)。这时候的概率密度函数,就依靠于我们选取的采样策略来定义,它实际上是与最终的概率密度函数接近的一个函数,并不是真真的概率密度函数,所以需要通过多次采样,求平均值的方法来抵消这种近似带来的误差。关于这段内容,等到后面讲解对BRDF进行采样的时候,大家就能够理解。我们对BRDF进行采样的时候,往往很难求出BRDF本身的PDF,而是通过选取合适的采样策略,比如对GGX进行采样来逼近。

同时,从我们新的积分器,也能够得出前面一篇文章中讲解的基本蒙特卡罗尔积分器来,只要将:p(x)=1b−a带入新的积分器中,就能够得到。

总结

今天给大家讲解了图形学里面一种重要的求解积分的手段。希望大家能够通过我的文章对这块内容有一个大体的认识。

不过这里我只讲解了你在获取了采样点之后,如何进行积分的过程。而如何获取采样点本身的操作并没有详细描述。后面会有专门的文章来讲解,如何根据一个概率密度函数来得出合适的采样点。同时需要提醒读者,如何获取采样点的知识,相当的复杂,我自己也只掌握了皮毛,后面的文章也仅仅供大家参考,给大家指明一个方向,更深入的了解,需要大家自行去学习。

参考文献

[1] Ray Tracing From Ground Up

[2] Physically Based Rendering From Theory to Implementation

[3] Spherical Harmonic Lighting: The Gritty Details
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学 图形