复习一下数学。也不是特别严谨的数学,但是太严谨有点钻牛角尖了。
参考:
开局,我们只有两个服从 $U(0, 1)$ 的随机变量 $\xi_0$ 和 $\xi_1$。我们需要用它们构造出在圆面或者球壳上均匀分布的点。
逆变换采样
首先讲一下如何使用一个 0-1 均匀分布的随机变量得到累积分布函数已知的随机变量。直观理解就是:随机那个变量的 CDF 值,然后通过逆函数就可以得到那个变量。
Wiki 上是这么说的:对于任何一个实数域上的随机变量 $X\in\mathbb R$,随机变量 $F^{-1}_X(U)$ 服从与 $X$ 相同的分布,其中 $F^{-1}_X$ 是 $X$ 的累积分布函数(CDF) $F_X$ 的广义逆分布函数,$U$ 是 0 到 1 的均匀分布。称之为广义是因为有的 CDF 不是严格递增,那么这个时候 $F^{-1}(p) = \inf{x\in \mathbb R: F(x)\ge p}$,即下确界(最大下界)。
简单证明一下:
- 假设 CDF $F_X$ 是单调的,尝试找到一个 $T: [0, 1]\rightarrow\mathbb R$ 使得 $T(U)$ 与 $X$ 分布相同
- 由 CDF 定义,$F_X(x)=P(X\le x)$
- 代入,$F_X(x) = P(T(U)\le x)$
- 两边应用逆函数,$F_X(x) = P(U\le T^{-1}(x))$
- 对于 0-1 均匀分布的 $U$,$P(U\le u) = u$
- 则 $F_X(x) = T^{-1}(x)$,等价于 $F^{-1}_X(u) = T(u)$
圆、球的均匀采样
所以问题的关键就是求出 CDF。
既然都是圆就用圆的坐标系求了,极坐标系极径 $\rho\in[0, 1]$,极角 $\theta\in[0, 2\pi]$;球坐标系距离 $\rho\in[0, 1]$,天顶角 $\theta\in[0, \pi]$,方位角 $\phi\in[0, 2\pi]$。
圆面均匀采样
圆面积元是 $\rho\mathrm{d}\rho\mathrm{d}\theta$,每个面积元的概率是 $1\over\pi$,所以概率密度函数 $f(\rho, \theta) = \frac{\rho}{\pi}$。然后求边缘概率分布:
CDF:
所以生成方式是:
球壳均匀采样
球面的面积元是 $\sin\theta\mathrm d\theta \mathrm d\phi$,概率密度 $f(\theta, \phi) = \frac{\sin\theta}{4\pi}$,边缘概率分布:
CDF:
生成:
球体均匀采样
球的体积元是 $\rho^2\sin\theta\mathrm d\rho\mathrm d\theta \mathrm d\phi$,概率密度 $f(\rho, \theta, \phi) = \frac{3}{4\pi}\rho^2\sin\theta$,边缘概率分布:
CDF:
生成,这里多用了一个随机变量:
半球壳余弦采样
许多 BRDF 是按照余弦分布采样的,即 $p(\omega)\propto\cos\theta$,也就是如下的积分结果成立:
分部积分算出常数 $c=\frac{1}{\pi}$,概率密度 $f(\theta, \phi) = \frac{\cos\theta\sin\theta}{\pi}$。
继续分部积分:
pbrt 上有另外一种方法(Malley’s method)以及证明,用到了概率分布变换。
概率分布变换
比较详细的解释,相当于从 0-1 随机变量生成任意分布变量的推广。简记一下:
由已知分布的随机变量 $X\sim f_X$ 与映射 $Y = T(X)$ 计算 $Y$ 的概率密度:
多维变量的话就是微分换成雅可比矩阵。