摘要
均匀采样问题是图形学中常遇到的一类问题,这类问题的描述如下:
如何用[0,1]之间的均匀采样获得在xxx上的均匀采样?
其中,xxx可以是圆盘、球面、球体等。我们可以利用的只有[0,1]之间的均匀采样,这个可以通过程序的伪随机实现。
总的来说,这类问题有着类似的思路和解决方案,都可以利用概率论知识一步步推导出来。本文将介绍相关方法,并给出几个常用的示例。
理论
概率论知识回顾
注:如果基础比较扎实,可以直接跳到求解思路
累积分布函数 随机变量 X X X的累积分布函数(cumulative distribution function,缩写为CDF)记为 P ( x ) P(x) P(x):
P x ( x ) = P r ( X ≤ x ) P_x(x)=Pr(X\leq x) Px(x)=Pr(X≤x)
其中, P r ( . . ) Pr(..) Pr(..)表示某事件的概率。
概率密度函数 随机变量 X X X的概率密度函数(probability density function,缩写为PDF)记为 p ( x ) p(x) p(x),满足:
P x ( x ) = ∫ − ∞ x p x ( t ) d t P_x(x)=\int_{-\infty}^xp_x(t)dt Px(x)=∫−∞xpx(t)dt
反过来,有:
p x ( x ) = d d x P x ( x ) p_x(x) = \frac{d}{dx}P_x(x) px(x)=dxdPx(x)
CDF和PDF有一些非常实用的性质,例如
∫ − ∞ ∞ p x ( x ) d x = 1 \int_{-\infty}^{\infty} p_x(x)dx = 1 ∫−∞∞px(x)dx=1
即PDF在整个定义域上积分为1,其物理意义是所有可能的事件的概率和为1。
所谓的“均匀采样”,也就是说PDF得是常量。但是这个PDF必须是采样对象的,将采样对象的PDF列出来是解题的第一步。
随机变量之间的转换
假设随记变量 Y Y Y和随机变量 X X X满足: Y i = y ( X i ) Y_i=y(X_i) Yi=y(Xi),那么:
P r ( Y ≤ y ( x ) ) = P r ( X ≤ x ) Pr(Y\leq y(x)) = Pr(X\leq x) Pr(Y≤y(x))=Pr(X≤x)
因此:
P y ( y ) = P y ( y ( x ) ) = P x ( x ) p y ( y ) d y d x = p x ( x ) p y ( y ) = ( d y d x ) − 1 p x ( x ) \begin{aligned} P_y(y)=P_y(y(x)) & =P_x(x) \\ p_y(y)\frac{dy}{dx} & =p_x(x) \\ p_y(y) & =\left(\frac{dy}{dx}\right)^{-1}p_x(x) \end{aligned} Py(y)=Py(y(x))py(y)dxdypy(y)=Px(x)=px(x)=(dxdy)−1px(x)
如果随机变量 X X X和 Y Y Y是多维的,令 Y = T ( X ) Y=T(X) Y=T(X),那么 d y d x \frac{dy}{dx} dxdy就变成了 T T T的雅克比矩阵 J T ( x ) J_T(x) JT(x)的行列式:
p y ( y ) = p x ( x ) ∣ J T ( x ) ∣ p_y(y)=\frac{p_x(x)}{|J_T(x)|} py(y)=∣JT(x)∣px(x)
雅克比矩阵定义为:
J T ( x ) = ( ∂ T 1 / ∂ x 1 ⋯ ∂ T 1 / ∂ x n ⋮ ⋱ ⋮ ∂ T n / ∂ x 1 ⋯ ∂ T n / ∂ x n ) J_T(x) = \begin{pmatrix} \partial T_1/\partial x_1 & \cdots & \partial T_1/\partial x_n \\ \vdots & \ddots & \vdots \\ \partial T_n/\partial x_1 & \cdots & \partial T_n/\partial x_n \\ \end{pmatrix} JT(x)=⎝⎜⎛∂T1/∂x1⋮∂Tn/∂x1⋯⋱⋯∂T1/∂xn⋮∂Tn/∂xn⎠⎟⎞
例如,对于对于极坐标:
x = r cos θ y = r sin θ \begin{aligned} x & = r\cos \theta \\ y & = r\sin \theta \\ \end{aligned} xy=rcosθ=rsinθ
它的雅克比矩阵为:
J T ( x ) = ( ∂ x / ∂ r ∂ x / ∂ θ ∂ y / ∂ r ∂ y / ∂ θ ) = ( cos θ − r sin θ sin θ r cos θ ) J_T(x) = \begin{pmatrix} \partial x/\partial r & \partial x/\partial \theta \\ \partial y/\partial r & \partial y/\partial \theta \\ \end{pmatrix}= \begin{pmatrix} \cos \theta & -r\sin \theta \\ \sin \theta & r\cos \theta \\ \end{pmatrix} JT(x)=(∂x/∂r∂y/∂r∂x/∂θ∂y/∂θ)=(cosθsinθ−rsinθrcosθ)
那么它的行列式为 ∣ J T ( x ) ∣ = r cos 2 θ + r sin 2 θ = r |J_T(x)|=r\cos^2\theta + r\sin^2\theta = r ∣JT(x)∣=rcos2θ+rsin2θ=r。因此
p ( r , θ ) = r p ( x , y ) p(r,\theta)=rp(x,y) p(r,θ)=rp(x,y)
同理,对于求坐标:
x = r sin θ cos ϕ y = r sin θ sin ϕ z = r cos θ \begin{aligned} x & = r\sin\theta\cos\phi \\ y & = r\sin\theta\sin\phi \\ z & = r\cos\theta \end{aligned} xyz=rsinθcosϕ=rsinθsinϕ=rcosθ
它的雅克比矩阵的行列式 ∣ J T ( x ) ∣ = r 2 sin θ |J_T(x)|=r^2\sin\theta ∣JT(x)∣=r2sinθ,因此
p ( r , θ , ϕ ) = r 2 sin θ p ( x , y , z ) p(r,\theta, \phi)=r^2\sin\theta p(x,y,z) p(r,θ,ϕ)=r2sinθp(x,y,z)
边缘概率
边缘概率相当于对多元概率分布函数进行降维,只考虑其中一维时的概率分布函数:
p ( x ) = ∫ p ( x , y ) d y p(x) = \int p(x,y) dy p(x)=∫p(x,y)dy
条件概率
假设 X X X和 Y Y Y为两个随机事件,而且 P r ( Y ) > 0 Pr(Y)>0 Pr(Y)>0,则事件 Y Y Y发生的条件下事件 X X X发生的条件概率记为 P r ( X ∣ Y ) Pr(X|Y) Pr(X∣Y),表示为:
P r ( X ∣ Y ) = P r ( X ∩ Y ) P r ( Y ) Pr(X|Y) = \frac{Pr(X\cap Y)}{Pr(Y)} Pr(X∣Y)=Pr(Y)Pr(X∩Y)
他们的概率密度函数满足:
p ( x ∣ y ) = p ( x , y ) p ( y ) p(x|y)=\frac{p(x, y)}{p(y)} p(x∣y)=p(y)p(x,y)
立体角
另外需要补充的一点是,有时候我们会用立体角(solid angle)来计算光线,立体角 ω \omega ω的微分形式是:
d ω = s i n θ d θ d ϕ d\omega = sin\theta d\theta d\phi dω=sinθdθdϕ
关于这个公式是怎么来的,可以参考[1],在此不再赘述。
求解思路
通常来说,对于多变量的均匀采样问题,我们要求的是一个映射关系,能够把[0,1]上的均匀分布 ξ i \xi_i ξi映射到要求的空间,并且满足均匀分布。解题思路是首先要用PDF来描述题目要求,并求出所有变量的联合PDF。然后先求出第一个变量的边缘PDF,再根据这个边缘概率分布求其他变量的条件PDF。最后用这些PDF求CDF,并令这些CDF分别等于 ξ i \xi_i ξi,以求得各个变量与给定均匀分布的关系。
- 用PDF来描述题目要求,求出所有变量的联合PDF
- 求出第一个变量的边缘PDF
- 根据已知的边缘PDF或条件PDF,依次求其余变量的条件PDF
- 求所有变量的CDf,并令其分别等于 ξ i \xi_i ξi
- 求出各个变量和 ξ i \xi_i ξi的关系
只说思路显得有些空洞,接下来看一下对一些常见问题的求解细节。
实践
单位圆盘均匀采样
问题:如何用[0,1]之间的均匀采样获得在单位圆盘上的均匀采样?
由于我们要在圆盘上面均匀采样,即 p ( A ) p(A) p(A)是常数,其中A表示圆盘的面积。而 d A = d x d y dA=dxdy dA=dxdy,所以 p ( x , y ) p(x,y) p(x,y)是常数。考虑到PDF在定义域的积分为1,再加上半径 r = 1 r=1 r=1,那么求出
p ( x , y ) = 1 π p(x,y) = \frac{1}{\pi} p(x,y)=π1
对于圆盘采样来说,用极坐标系会更方便一些,因此我们将 p ( x , y ) p(x,y) p(x,y)改写为 p ( r , θ ) p(r,\theta) p(r,θ):
p ( r , θ ) = r p ( x , y ) = r π p(r,\theta)=rp(x,y)=\frac{r}{\pi} p(r,θ)=rp(x,y)=πr
有了联合PDF,接下来先求边缘PDF:
p ( r ) = ∫ 0 2 π p ( r , θ ) d θ = 2 r p(r) = \int_0^{2\pi}p(r,\theta)d\theta=2r p(r)=∫02πp(r,θ)dθ=2r
以及条件PDF
p ( θ ∣ r ) = p ( r , θ ) p ( r ) = 1 2 π p(\theta | r)=\frac{p(r,\theta)}{p(r)}=\frac{1}{2\pi} p(θ∣r)=p(r)p(r,θ)=2π1
然后求他们的CDF:
P ( r ) = r 2 P ( θ ) = θ 2 π \begin{aligned} P(r) & = r^2 \\ P(\theta) & = \frac{\theta}{2\pi} \end{aligned} P(r)P(θ)=r2=2πθ
令CDF等于均匀分布 ξ 1 \xi_1 ξ1和 ξ 2 \xi_2 ξ2:
r = ξ 1 θ = 2 π ξ 2 \begin{aligned} r & = \sqrt{\xi_1}\\ \theta & = 2\pi\xi_2 \end{aligned} rθ=ξ1=2πξ2
这就是获得圆盘上均匀采样的方法。也可以将其转换成直角坐标系。
单位半球面均匀采样
问题:如何用[0,1]之间的均匀采样获得在单位半球面上的均匀采样?
对半球面的均匀采样同样是面积,但是与圆盘采样不同的是,半球面的面积可以用立体角 ω \omega ω表示,即 p ( ω ) p(\omega) p(ω)是常量,求得:
p ( ω ) = 1 2 π p(\omega) = \frac{1}{2\pi} p(ω)=2π1
而同样的,我们得把 ω \omega ω的PDF转换成球坐标基底r、 θ \theta θ、 ϕ \phi ϕ的PDF,考虑到 d ω = sin d θ d ϕ d\omega=\sin d\theta d\phi dω=sindθdϕ,有:
p ( θ , ϕ ) = p ( ω ) sin θ = sin θ 2 π p(\theta, \phi) = p(\omega)\sin\theta=\frac{\sin\theta}{2\pi} p(θ,ϕ)=p(ω)sinθ=2πsinθ
有了PDF,接下来就球边缘PDF和条件PDF就可以了:
p ( θ ) = ∫ 0 2 π p ( θ , ϕ ) d ϕ = sin θ p ( ϕ ∣ θ ) = p ( θ , ϕ ) p ( θ ) = 1 2 π \begin{aligned} p(\theta) & = \int_0^{2\pi}p(\theta, \phi)d\phi=\sin\theta\\ p(\phi | \theta) & = \frac{p(\theta, \phi)}{p(\theta)} = \frac{1}{2\pi} \end{aligned} p(θ)p(ϕ∣θ)=∫02πp(θ,ϕ)dϕ=sinθ=p(θ)p(θ,ϕ)=2π1
以及CDF:
P ( θ ) = ∫ 0 θ sin θ ′ d θ ′ = 1 − cos θ P ( ϕ ) = ∫ 0 ϕ 1 2 π d ϕ ′ = ϕ 2 π \begin{aligned} P(\theta) & = \int_0^\theta\sin\theta'd\theta' = 1 - \cos\theta\\ P(\phi) & = \int_0^\phi\frac{1}{2\pi}d\phi' = \frac{\phi}{2\pi} \end{aligned} P(θ)P(ϕ)=∫0θsinθ′dθ′=1−cosθ=∫0ϕ2π1dϕ′=2πϕ
求得:
θ = arccos ( 1 − ξ 1 ) ϕ = 2 π ξ 2 \begin{aligned} \theta & = \arccos(1-\xi_1) \\ \phi & = 2\pi\xi_2 \end{aligned} θϕ=arccos(1−ξ1)=2πξ2
如果把半球面改为球面,思路基本一致,只不过有几个数值会改变:
p ( ω ) = 1 4 π p ( θ , ϕ ) = p ( ω ) sin θ = sin θ 4 π p ( θ ) = ∫ 0 2 π p ( θ , ϕ ) d ϕ = sin θ 2 P ( θ ) = 1 − cos θ 2 θ = arccos ( 1 − 2 ξ 1 ) \begin{aligned} p(\omega) & =\frac{1}{4\pi} \\ p(\theta, \phi) & = p(\omega)\sin\theta=\frac{\sin\theta}{4\pi} \\ p(\theta) & = \int_0^{2\pi}p(\theta, \phi)d\phi=\frac{\sin\theta}{2} \\ P(\theta) & = \frac{1 - \cos\theta}{2}\\ \theta & = \arccos(1-2\xi_1) \end{aligned} p(ω)p(θ,ϕ)p(θ)P(θ)θ=4π1=p(ω)sinθ=4πsinθ=∫02πp(θ,ϕ)dϕ=2sinθ=21−cosθ=arccos(1−2ξ1)
单位半球面余弦采样
问题:如何用[0,1]之间的均匀采样获得在单位球面上的余弦采样?
余弦采样指的是采样点在半球面分布的概率 p ( ω ) p(\omega) p(ω)与角度 θ \theta θ的余弦 cos θ \cos\theta cosθ正相关,可以求出:
∫ p ( ω ) = 1 ∫ 0 2 π ∫ 0 π 2 c cos θ sin θ d θ d ϕ = 1 c = 1 π p ( θ , ϕ ) = 1 π cos θ sin θ \begin{aligned} \int p(\omega) & = 1 \\ \int_0^{2\pi}\int_0^\frac{\pi}{2} c \cos\theta \sin\theta d\theta d\phi &= 1 \\ c & = \frac{1}{\pi} \\ p(\theta, \phi) & = \frac{1}{\pi}\cos\theta\sin\theta \end{aligned} ∫p(ω)∫02π∫02πccosθsinθdθdϕcp(θ,ϕ)=1=1=π1=π1cosθsinθ
接下来的求解思路与前几个例子一致,先求边缘PDF和条件PDF:
p ( θ ) = ∫ 0 2 π p ( θ , ϕ ) d ϕ = 2 cos θ sin θ = sin 2 θ p ( ϕ ∣ θ ) = p ( θ , ϕ ) p ( θ ) = 1 2 π \begin{aligned} p(\theta) & = \int_0^{2\pi}p(\theta, \phi)d\phi= 2\cos\theta\sin\theta = \sin 2\theta \\ p(\phi | \theta) & = \frac{p(\theta, \phi)}{p(\theta)} = \frac{1}{2\pi} \end{aligned} p(θ)p(ϕ∣θ)=∫02πp(θ,ϕ)dϕ=2cosθsinθ=sin2θ=p(θ)p(θ,ϕ)=2π1
以及CDF:
P ( θ ) = ∫ 0 θ 2 cos θ ′ sin θ ′ d θ ′ = 1 − cos 2 θ 2 P ( ϕ ) = ∫ 0 ϕ 1 2 π d ϕ ′ = ϕ 2 π \begin{aligned} P(\theta) & = \int_0^\theta 2\cos\theta'\sin\theta'd\theta' = \frac{1-\cos 2\theta}{2} \\ P(\phi) & = \int_0^\phi\frac{1}{2\pi}d\phi' = \frac{\phi}{2\pi} \end{aligned} P(θ)P(ϕ)=∫0θ2cosθ′sinθ′dθ′=21−cos2θ=∫0ϕ2π1dϕ′=2πϕ
令CDF等于均匀分布 ξ 1 \xi_1 ξ1和 ξ 2 \xi_2 ξ2:
θ = arccos ( 1 − ξ 1 ) ϕ = 2 π ξ 2 \begin{aligned} \theta & = \arccos(\sqrt{1-\xi_1}) \\ \phi & = 2\pi\xi_2 \end{aligned} θϕ=arccos(1−ξ1)=2πξ2
这个最终结果有点耐人寻味,如果我们定义 r = sin θ r=\sin\theta r=sinθ,那么有:
r = ξ 1 r = \sqrt{\xi_1} r=ξ1
此时可以发现, r r r、 ϕ \phi ϕ的取值跟前面圆盘均匀采样是一致的。这个结果相当于,我们只需要进行一个圆盘均匀采样,然后把平面上的采样点映射到半球面上,得到的就是半球面余弦采样。这个小技巧可以用在具体的实现中,避免反三角函数运算。
球体均匀采样
问题:如何用[0,1]之间的均匀采样获得在球体上的均匀采样?
对半径为 R R R的球体的均匀采样是体积采样,因此单位体素内的样本数量是常数:
p ( x , y , z ) = c p(x,y,z) = c p(x,y,z)=c
结合PDF的积分为1,求得:
p ( x , y , z ) = 3 4 π R 3 p(x,y,z) = \frac{3}{4\pi R^3} p(x,y,z)=4πR33
把直角坐标系转换为球坐标系:
p ( r , θ , ϕ ) = ∣ J T ∣ p ( x , y , z ) = r 2 sin θ ⋅ 3 4 π R 3 = 3 sin θ r 2 4 π R 3 \begin{aligned} p(r,\theta, \phi) = |J_T| p(x,y,z) & = r^2\sin\theta \cdot \frac{3}{4\pi R^3}\\ & = \frac{3\sin\theta r^2}{4\pi R^3} \end{aligned} p(r,θ,ϕ)=∣JT∣p(x,y,z)=r2sinθ⋅4πR33=4πR33sinθr2
然后求边缘PDF和条件PDF:
p ( r ) = ∫ 0 2 π ∫ 0 π p ( r , θ , ϕ ) d θ d ϕ = 3 r 2 R 3 p ( θ ∣ r ) = ∫ 0 2 π p ( r , θ , ϕ ) d ϕ p ( r ) = sin θ 2 p ( ϕ ∣ r , θ ) = p ( r , θ , ϕ ) p ( θ ∣ r ) p ( r ) = 1 2 π \begin{aligned} p(r) & = \int_0^{2\pi}\int_0^{\pi}p(r,\theta,\phi)d\theta d\phi = \frac{3 r^2}{R^3} \\ p(\theta|r) & = \frac{\int_0^{2\pi}p(r,\theta,\phi)d\phi}{p(r)} = \frac{\sin\theta}{2} \\ p(\phi | r, \theta) & = \frac{p(r,\theta, \phi)}{p(\theta|r) p(r)} = \frac{1}{2\pi} \end{aligned} p(r)p(θ∣r)p(ϕ∣r,θ)=∫02π∫0πp(r,θ,ϕ)dθdϕ=R33r2=p(r)∫02πp(r,θ,ϕ)dϕ=2sinθ=p(θ∣r)p(r)p(r,θ,ϕ)=2π1
以及CDF:
P ( r ) = r 3 R 3 P ( θ ) = 1 − cos θ 2 P ( ϕ ) = ϕ 2 π \begin{aligned} P(r) & = \frac{r^3}{R^3}\\ P(\theta) & = \frac{1-\cos\theta}{2} \\ P(\phi) & = \frac{\phi}{2\pi} \end{aligned} P(r)P(θ)P(ϕ)=R3r3=21−cosθ=2πϕ
令CDF等于单位均匀分布 ξ 1 \xi_1 ξ1、 ξ 2 \xi_2 ξ2、 ξ 3 \xi_3 ξ3:
r = R ⋅ ξ 1 3 θ = arccos ( 1 − 2 ξ 2 ) ϕ = 2 π ξ 3 \begin{aligned} r & = R\cdot\sqrt[3]{\xi_1} \\ \theta & = \arccos(1-2\xi_2) \\ \phi & = 2\pi\xi_3 \end{aligned} rθϕ=R⋅3ξ1=arccos(1−2ξ2)=2πξ3
这个结果与球面均匀采样和圆盘均匀采样有一定的相似性。
三角形均匀采样
问题:如何用[0,1]之间的均匀采样获得在任意三角形内的均匀采样?
对三角形的均匀采样看起来比较容易,但是推导起来反而最麻烦。当然,也有一种简单的方法,比如对三角形的矩形凸包进行采样,然后将三角形外部的点映射到三角形内部(沿一条边的中点做对称),这个方法也可以获得对三角形的均匀采样,但是这个方法有几个问题
- 需要构建一个凸包,这个操作对平面三角形还不麻烦,但是对三维空间的三角形就相对繁琐;
- 需要对一半的点做映射;
我们希望避免这些操作,仍旧用前面提到的方法进行分析。
首先对问题进行细化。假设任意三角形 Δ A B C \Delta ABC ΔABC,为了方便起见,我们将坐标轴原点设置在 A A A所在的位置,并令 x x x轴和 A C AC AC重合,那么对于三角形内的任意点 P ( x , y ) P(x,y) P(x,y),它的坐标 ( x , y ) (x,y) (x,y)可以写为:
( x , y ) = u A B → + v A C → x = u ∣ ∣ A B cos A ∣ ∣ + v ∣ ∣ A C ∣ ∣ y = u ∣ ∣ A B sin A ∣ ∣ \begin{aligned} (x,y) & = u\overrightarrow{AB} + v\overrightarrow{AC} \\ x & = u||AB\cos A|| + v||AC|| \\ y & = u||AB\sin A|| \end{aligned} (x,y)xy=uAB+vAC=u∣∣ABcosA∣∣+v∣∣AC∣∣=u∣∣ABsinA∣∣
其中, u u u和 v v v满足 1 − u − v > 0 1-u-v > 0 1−u−v>0。
根据坐标之间的关系,求出雅克比矩阵 J T J_T JT:
J T = ∂ ( x , y ) ∂ ( u , v ) = ( ∣ ∣ A B cos A ∣ ∣ ∣ ∣ A C ∣ ∣ ∣ ∣ A B sin A ∣ ∣ 0 ) ∣ J T ∣ = ∣ ∣ A B ⋅ A C sin A ∣ ∣ \begin{aligned} J_T & = \frac{\partial(x,y)}{\partial(u,v)} = \begin{pmatrix} ||AB\cos A|| & ||AC|| \\ ||AB\sin A|| & 0 \\ \end{pmatrix} \\ |J_T| & = ||AB \cdot AC\sin A|| \\ \end{aligned} JT∣JT∣=∂(u,v)∂(x,y)=(∣∣ABcosA∣∣∣∣ABsinA∣∣∣∣AC∣∣0)=∣∣AB⋅ACsinA∣∣
再回到采样问题上。对面积的均匀采样,意味着定义域内 p ( x , y ) p(x,y) p(x,y)是常数,即
p ( x , y ) = 1 S = 2 ∣ ∣ A B ⋅ A C sin A ∣ ∣ p(x,y) = \frac{1}{S} = \frac{2}{||AB \cdot AC\sin A||} p(x,y)=S1=∣∣AB⋅ACsinA∣∣2
接下来,把 p ( x , y ) p(x,y) p(x,y)改写为 p ( u , v ) p(u,v) p(u,v)的形式
p ( u , v ) = p ( x , y ) ∗ ∣ J T ∣ = 2 \begin{aligned} p(u,v) & = p(x,y) * |J_T| = 2 \end{aligned} p(u,v)=p(x,y)∗∣JT∣=2
这个结果倒是有些意外地简洁。然后求边缘PDF和条件PDF:
p ( u ) = ∫ 0 1 − u p ( u , v ) d v = 2 ( 1 − u ) p ( v ∣ u ) = p ( u , v ) p ( u ) = 1 1 − u \begin{aligned} p(u) & = \int_0^{1-u}p(u,v)dv = 2(1-u) p(v|u) & = \frac{p(u,v)}{p(u)} = \frac{1}{1-u} \end{aligned} p(u)=∫01−up(u,v)dv=2(1−u)p(v∣u)=p(u)p(u,v)=1−u1
这里有一个细节,在求 p ( u ) p(u) p(u)的时候,我们需要对 p ( u , v ) p(u,v) p(u,v)在 v v v上做积分,此时 v v v的取值范围是 [ 0 , 1 − u ] [0,1-u] [0,1−u],而不是 [ 0 , 1 ] [0,1] [0,1]。
然后求CDF:
P ( u ) = ∫ 0 u p ( u ′ ) d u ′ = 2 u − u 2 P ( v ) = ∫ 0 v p ( v ′ ∣ u ) d v ′ = v 1 − u \begin{aligned} P(u) & =\int_0^up(u')du'=2u-u^2 \\ P(v) & =\int_0^vp(v'|u)dv'=\frac{v}{1-u} \end{aligned} P(u)P(v)=∫0up(u′)du′=2u−u2=∫0vp(v′∣u)dv′=1−uv
令CDF等于单位均匀分布 ξ 1 \xi_1 ξ1、 ξ 2 \xi_2 ξ2:
u = 1 − ξ 1 v = ξ 2 ξ 1 \begin{aligned} u & = 1-\sqrt\xi_1 \\ v & = \xi_2\sqrt\xi_1 \end{aligned} uv=1−ξ1=ξ2ξ1
这样,利用 ξ 1 \xi_1 ξ1、 ξ 2 \xi_2 ξ2求得了 u u u、 v v v之后,再求出 x x x和 y y y,就能获得一个采样点了。
P = ( 1 − ξ 1 ) A + ( ξ 2 ξ 1 ) B + ( ξ 1 ( 1 − ξ 2 ) ) C P = (1-\sqrt\xi_1)A + (\xi_2\sqrt\xi_1)B + (\sqrt\xi_1(1-\xi_2))C P=(1−ξ1)A+(ξ2ξ1)B+(ξ1(1−ξ2))C
注意到这个公式与 ( x , y ) (x,y) (x,y)无关,因此可以简单地推广到三维甚至高维。
参考资料
- 立体角(Solid Angle)详解
- Physically based rendering, 3rd edition.
- StackExchange上对这个问题的讨论:q18686,但是这个讨论里面的答案都是从特例证明这个结论的正确性,个人觉得证明不够完善。