TC130:游戏渲染进阶​zhuanlan.zhihu.com

蒙特卡洛积分是图形学中常用的数学工具, 这里就来总结下蒙特卡洛积分的原理和使用方式. 很多教程中把概率分布和积分是混在一起讲的, 个人觉得分开讲比较合适. 这篇文章就先来讲下概率分布变换和随机采样的部分.

概率论基础

这里快速回顾下概率论的基础, 这里不会特别深入精确地描述. 需要的朋友可以参考概率论相关的教材.

是随机变量,

是任意实数, 称函数

为随机变量

的分布函数/CDF, 或称

服从

, 记为

.

分布函数满足:单调不减;

右连续, 即

;

.

从分布函数求概率:

(1) 离散型变量

随机变量

只能取有限个可能的值, 称

为离散型随机变量, 称

的概率分布, 记为

.

可以用矩阵形式表示为:

.

离散型随机变量的概率分布满足

.

比如记掷骰子的点数为

, 得

的分布函数为

(2) 连续型变量

如果随机变量

的分布函数可以表示为:

为连续型随机变量, 称

的概率密度函数/概率密度/PDF, 记为

.

概率密度函数满足

.

对任意实数

, 有

.

取在某个区间的概率为:

比如现在假设

是一个均匀随机分布在

上的连续随机变量, 得

(3) 如果

是定义在样本空间上n个随机变量, 则称

为n维随机变量.

n维随机变量的分布函数定义为

n维随机变量的性质和上面类似, 这里不再一一描述.

随机值采样

在计算机中, 得到一个均匀随机分布在

上的随机数是很简单的, 我们这里用

表示服从

均匀分布的随机变量. 现在我们就来用

来得到我们想要的服从特定概率分布的随机变量.

(1) 离散型随机变量

对于离散型随机变量, 计算过程比较简单, 已知

, 假设从

推导出

的函数为

.

考虑到

上均匀分布, 只需要将

依概率映射到

样本空间中每个值即可. 得到

比如现在要得到

易得

(2) 连续型随机变量

比如现在要得到概率密度为

, 概率分布为

的随机变量

. 设变换函数为

, 即

. 为了下面计算方便, 我们先假设

是一个单调递增函数.

由概率分布定义可知:

已知

是单调递增函数, 可得:

已知

上均匀分布, 可得

可以得到

互为反函数, 即

我们平时遇到的概率分布函数都是不满足单调递增的, 只需要去掉概率密度为0的部分即可.

现在举两个例子:

A. 次方分布

上服从n次方分布, 即概率密度满足

, 设

, 由概率密度性质可知

可以解得:

由此算出

的概率分布函数:

限制在

上, 可得

B. 指数分布

的概率密度满足

.

推导的部分和上面相同, 可得:

这里的

的概率分布和

是相同的, 因此也可以写成

(3) 拒绝式随机

对于一些无法求出解析解的概率分布函数, 或者无法得到

反函数的概率分布函数, 可以用拒绝式随机方法.

假设我们现在想得到一个概率密度为

的随机变量

.

现在我们已有一个概率密度为

的随机变量 , 我们可以任意次得到一个服从

分布的随机变量

, 且其概率密度满足

.

这样, 我们就可以通过下面的方法来随机得到

:取一个服从

分布的随机变量值

;

上随机得到一个变量值

;

如果

, 则该次随机结果被接受, 返回

. 否者该次随机被拒绝, 重新执行第一步.

拒绝式随机方法的效率取决于

之间的贴合程度, 如果二者之间空隙很大, 就可能需要多次随机, 效率会比较低.

一个常见的拒绝式随机法的应用场景就是随机在一个圆中取一个点, 大致过程为:随机在单位圆中取一点

point p;

do {

p.x = rand() * 2 - 1;

p.y = rand() * 2 - 1;

} while(p.x * p.x + p.y + p.y > 1);

return p;

概率分布变换

现在已知一个随机变量

的概率密度为

, 现在我们令

, 现在我们要尝试求出

的概率密度函数

. 为了计算方便, 我们只考虑函数

是严格单调递增的情况, 平时我们需要求解的函数大部分都是满足严格单调递增的.

由概率分布函数定义可知:

对两边一起求导得:

这样, 我们成功计算出了

的概率密度函数.

比如现在有

, 令

, 可算出

的概率密度为:

现在, 让我们来考虑多维随机变量, 设

都是n维的随机变量,

之间的转换关系为

.

为矩阵函数, 即

,

.

可以推导得出:

表示

的雅可比矩阵的行列式的绝对值,

的雅可比矩阵为:

现在来看下实际应用的例子:

A. 极坐标系

极坐标系的变换为

假设我们现在已知关于极坐标的概率密度函数

, 现在来计算直角坐标系的概率密度.

对应的雅可比矩阵为:

求得行列式值为

. 这样, 我们得到两种坐标系之间的变换公式为:

B. 球坐标系

球坐标系到直角坐标系变换为:

可解得雅可比矩阵行列式值为

, 相应的概率密度为:

现在来考虑在单位球面上的情况. 在球坐标系中, 我们从立体角的定义可以得到:

立体角在某个

范围内的概率为:

得到概率密度的转换为:

二维随机变量采样

现在可以来尝试从二维随机变量中采样.

(1) 联合概率密度

在开始之前, 我们还需要来简单回顾下联合概率密度的概念.

设现在有二维连续型随机变量

, 二维随机变量的联合概率密度为

,

的联合分布函数为

二维随机变量的概率密度满足

的边缘概率密度为:

的条件下,

的条件概率密度为:

(2) 单位半球面采样

在单位半球面上均匀采样时, 每个立体角上都是等可能的. 由此得关于立体角的概率密度

是常数, 令其为

, 得

解得

, 由前面得到的结论可知

.

先来计算

, 得到

的边缘概率密度为:

再得到

的条件概率密度为:

的概率密度在

确定时是固定的, 这和我们的直觉是相同的. 接下来来计算相应的概率分布函数:

求相应的反函数, 并将

替换为

, 得到:

将结果用直角坐标系来表示:

(3) 随机单位球面采样

推导过程和上面的几乎一模一样, 这里不再赘述. 最终结果为:

(4) 随机单位圆采样

一个常见的错误是随机取半径, 随机取角度, 使用

来采样. 这样得到的结果会使得在圆的中心区域概率比边缘部分要高.左边是错误的采样方式得到的分布, 右边是正确的方式得到的分布

在单位圆上均匀采样时, 关于面积的概率密

是个常数, 可解得

. 转换为极坐标系下得表示为

. 使用和前面一样得推导过程得:

确定时, 因为圆的对称性,

是个固定常数. 进一步计算分布函数并取反函数可求得:

另外一种方式是使用正方形随机采样, 然后同心映射到圆上.

其中一个1/8部分的映射公式为:

另外七个部分的映射公式可用相似的方式得到.

(5) 单位半球面余弦权重采样

求解图形学中的渲染方程时, 许多BRDF方程都是和夹角余弦相关的, 因此按照余弦采样是很有必要的. 即

, 求解概率密度为:

这样, 我们就可以继续使用上面的方式来推导出结果.

不过这里要介绍下Malley方法的实现, Malley方法就是先在单位圆上随机采样, 然后将单位圆上的点作为半球面上点的投影, 来得到半球面上的点.

下面我们来验证一下这种方式的正确性:Malley方法得到半球面上按余弦权重采样点

已知单位圆上随机采样的点极坐标为

, 概率密度为

. 单位半球面上对应的点极坐标系为

, 两个坐标的关联为

. 这样得到雅可比矩阵为:

行列式值为

, 变换概率密度分布得:

刚好符合上面我们想要得概率密度函数, 这样就可以从单位圆采样得到单位半球面上得采样.

其余的在锥形区域, 三角形, 长方形区域随机采样的过程和结果都是类似的, 这里不再给出. 这样我们可以随意按照自己想要的概率密度进行随机数采样, 下一篇会讲述如何使用随机数来实现蒙特卡洛积分.

概率密度变换公式 雅可比矩阵_看懂蒙特卡洛积分(一) 概率分布变换与随机采样...相关推荐

  1. 概率密度变换公式 雅可比矩阵_机器人雅可比矩阵的理解和常用公式

    雅可比矩阵就是一种特殊的矩阵导数 考虑一个简单的问题: .其中x是自变量,y是因变量.对两边求导可得: .这里的 表示可以使式子成立的一个和a有关的一个值. 将上面的问题拓展到多维情况,可以得到: , ...

  2. 概率密度变换公式 雅可比矩阵_雅克比行列式在连续型随机变量函数分布密度中应用.doc...

    雅克比行列式在连续型随机变量函数分布密度中应用 雅克比行列式在连续型随机变量函数分布密度中应用 摘 要:为了使二维随机变量函数概率密度计算公式得到简化,本文首先利用雅克比行列式,应用变量变换定理给出了 ...

  3. 概率密度变换公式 雅可比矩阵_的联合概率密度函数f(x,y).ppt

    的联合概率密度函数f(x,y) 解:(X,Y)的概率密度为 变换为 解出逆变换为 雅可比行列式为 在变换之下,区域G={(x,y)|x>0,y>0}与 G*={(u,v)|u>0,v ...

  4. 概率密度变换公式 雅可比矩阵_【转载】雅克比矩阵与雅克比行列式

    最近接触了一点雅克比的东西,以前学习雅克比矩阵和雅克比行列式是在高数上,就知道个二重积分的时候可以用一下,其他的真没遇到过.最近在学习随机过程,在涉及到随机变量转化求解概率密度函数时,猛然冒出雅克比行 ...

  5. 概率密度变换公式 雅可比矩阵_雅可比行列式【1】定义及一些推导

    最近在做应用多元统计的学习的时候再一次遇到了雅可比矩阵这个东西,发现完全想不起来这是什么东西,只记得学习高代和概率论的时候背过这个公式.学数学分析的时候也没有好好学习向量微积分的知识.今天跑步的时候想 ...

  6. 概率密度变换公式 雅可比矩阵_从理解到认识雅可比矩阵

    最近在做应用多元统计的学习的时候再一次遇到了雅可比矩阵这个东西,发现完全想不起来这是什么东西,只记得学习高代和概率论的时候背过这个公式.学数学分析的时候也没有好好学习向量微积分的知识.今天跑步的时候想 ...

  7. 概率密度变换公式 雅可比矩阵_学习笔记之——Jacobian matrix(雅可比矩阵)

    在<斯坦福大学公开课--机器人学>视频课程中一开始就提到了Jacobian matrix的重要性.为此写下本学习笔记介绍雅可比矩阵.本博客的内容来自于网络的各种资料的总结,已经给出参考引用 ...

  8. 概率密度变换公式 雅可比矩阵_干货 | 从雅可比矩阵你还能得到什么?(雅可比矩阵下篇)...

    本文转载自微信公众号ROBOTICS原作者:CC编辑:古月居 复习 首先我们在学习完正运动学--即如何将关节空间的位置映射到操作空间的位置及朝向这个问题之后,第二个问题就是瞬时运动学--如何将关节空间 ...

  9. 概率密度变换公式 雅可比矩阵_雅克比行列式在连续型随机变量函数分布密度中的应用...

    龙源期刊网 http://www.qikan.com.cn 雅克比行列式在连续型随机变量函数分布密 度中的应用 作者:赵微 来源:<新教育时代> 2014 年第 12 期 摘 要:为了使二 ...

最新文章

  1. IANA定义的常见服务的端口号列表
  2. python个人项目-软工作业个人项目wc.exe(python实现)
  3. Frighting的日常:第6天
  4. 工作流activity_开源、强大的工作流引擎:camunda入门介绍
  5. system函数-linux
  6. 方舟服务器修改错误,方舟进服务器提示网络错误怎么办 | 手游网游页游攻略大全...
  7. everyday words
  8. 前端学习(2591):刷新页面vuex消失
  9. html的技术标准网站,HTML5标准最新技术预览
  10. stl vector 函数_vector :: front()函数以及C ++ STL中的示例
  11. 设计模式之单例模式8种实现方式,其五:懒汉式(线程不安全,同步代码块)
  12. 权重计算(1)——客观赋权法
  13. UI设计中的原型图用什么工具?怎么做?给谁看?
  14. 约分最简分式java
  15. 2023年天津天狮学院专升本市场营销专业《市场营销学》考试大纲
  16. python调用gephi_利用Python和Gephi制作人物关系网络图
  17. 生成的分子图像是否可以识别为SMILES,然后再将识别后的SMILES转换为图像?
  18. 华为云数据库跃进式发展
  19. Java Swing JButton:按钮组件
  20. hihocoder 1054

热门文章

  1. 12期 1月期刊自荐
  2. office2007中公式编辑器
  3. 大众点评点餐小程序开发经验 - 发布与推广
  4. C++ 纯虚函数和抽象类
  5. x86 和 x64平台下数据类型大小
  6. TS 类型体操 之 extends,Equal,Alike 使用场景和实现对比
  7. 【MySQL】MySQL autocommit 以及隐式 自动提交 语句列表
  8. document.getElementById()方法使用
  9. Windows下使用命令结束后台进程
  10. 中职c语言程序设计案例教学,中职C语言教学中案例教学法新探.doc