TC130:游戏渲染进阶
123 赞同 · 6 评论文章 蒙特卡洛积分是图形学中常用的数学工具, 这里就来总结下蒙特卡洛积分的原理和使用方式. 很多教程中把概率分布和积分是混在一起讲的, 个人觉得分开讲比较合适. 这篇文章就先来讲下概率分布变换和随机采样的部分. 概率论基础这里快速回顾下概率论的基础, 这里不会特别深入精确地描述. 需要的朋友可以参考概率论相关的教材. 设 分布函数满足:
从分布函数求概率: (1) 离散型变量 随机变量 可以用矩阵形式表示为: 离散型随机变量的概率分布满足 比如记掷骰子的点数为
(2) 连续型变量 如果随机变量 称 概率密度函数满足 对任意实数
比如现在假设
(3) 如果 n维随机变量的分布函数定义为 n维随机变量的性质和上面类似, 这里不再一一描述. 随机值采样在计算机中, 得到一个均匀随机分布在 (1) 离散型随机变量 对于离散型随机变量, 计算过程比较简单, 已知 考虑到
比如现在要得到 易得
(2) 连续型随机变量 比如现在要得到概率密度为 由概率分布定义可知:
已知
已知
可以得到 我们平时遇到的概率分布函数都是不满足单调递增的, 只需要去掉概率密度为0的部分即可. 现在举两个例子: A. 次方分布 设 可以解得: 由此算出 将 B. 指数分布 设 推导的部分和上面相同, 可得: 这里的 (3) 拒绝式随机 对于一些无法求出解析解的概率分布函数, 或者无法得到 假设我们现在想得到一个概率密度为 现在我们已有一个概率密度为 ![]() 这样, 我们就可以通过下面的方法来随机得到
拒绝式随机方法的效率取决于 一个常见的拒绝式随机法的应用场景就是随机在一个圆中取一个点, 大致过程为: ![]()
概率分布变换现在已知一个随机变量 由概率分布函数定义可知:
对两边一起求导得: 这样, 我们成功计算出了 比如现在有 现在, 让我们来考虑多维随机变量, 设 可以推导得出: 现在来看下实际应用的例子: A. 极坐标系 极坐标系的变换为 假设我们现在已知关于极坐标的概率密度函数 对应的雅可比矩阵为: 求得行列式值为 B. 球坐标系 球坐标系到直角坐标系变换为: 可解得雅可比矩阵行列式值为 现在来考虑在单位球面上的情况. 在球坐标系中, 我们从立体角的定义可以得到: 立体角在某个 得到概率密度的转换为: 二维随机变量采样现在可以来尝试从二维随机变量中采样. (1) 联合概率密度 在开始之前, 我们还需要来简单回顾下联合概率密度的概念. 设现在有二维连续型随机变量 二维随机变量的概率密度满足 在 (2) 单位半球面采样 在单位半球面上均匀采样时, 每个立体角上都是等可能的. 由此得关于立体角的概率密度 解得 先来计算 再得到 求相应的反函数, 并将 将结果用直角坐标系来表示: (3) 随机单位球面采样 推导过程和上面的几乎一模一样, 这里不再赘述. 最终结果为: (4) 随机单位圆采样 一个常见的错误是随机取半径, 随机取角度, 使用 ![]() 在单位圆上均匀采样时, 关于面积的概率密 在 另外一种方式是使用正方形随机采样, 然后同心映射到圆上. ![]() 其中一个1/8部分的映射公式为: ![]() 另外七个部分的映射公式可用相似的方式得到. (5) 单位半球面余弦权重采样 求解图形学中的渲染方程时, 许多BRDF方程都是和夹角余弦相关的, 因此按照余弦采样是很有必要的. 即 这样, 我们就可以继续使用上面的方式来推导出结果. 不过这里要介绍下Malley方法的实现, Malley方法就是先在单位圆上随机采样, 然后将单位圆上的点作为半球面上点的投影, 来得到半球面上的点. 下面我们来验证一下这种方式的正确性: ![]() 已知单位圆上随机采样的点极坐标为 行列式值为 刚好符合上面我们想要得概率密度函数, 这样就可以从单位圆采样得到单位半球面上得采样. 其余的在锥形区域, 三角形, 长方形区域随机采样的过程和结果都是类似的, 这里不再给出. 这样我们可以随意按照自己想要的概率密度进行随机数采样, 下一篇会讲述如何使用随机数来实现蒙特卡洛积分. |
|手机版|小黑屋|九艺游戏动画论坛
( 津ICP备2022000452号-1 )
GMT+8, 2023-6-10 19:19 , Processed in 0.048907 second(s), 18 queries .
Powered by Discuz! X3.4 © 2001-2017 Comsenz Inc.