均匀采样问题总结

摘要

均匀采样问题是图形学中常遇到的一类问题,这类问题的描述如下:

如何用[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(Xx)

其中, 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(Yy(x))=Pr(Xx)

因此:

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/x1Tn/x1T1/xnTn/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/ry/rx/θ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(XY),表示为:

P r ( X ∣ Y ) = P r ( X ∩ Y ) P r ( Y ) Pr(X|Y) = \frac{Pr(X\cap Y)}{Pr(Y)} Pr(XY)=Pr(Y)Pr(XY)

他们的概率密度函数满足:

p ( x ∣ y ) = p ( x , y ) p ( y ) p(x|y)=\frac{p(x, y)}{p(y)} p(xy)=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,以求得各个变量与给定均匀分布的关系。

  1. 用PDF来描述题目要求,求出所有变量的联合PDF
  2. 求出第一个变量的边缘PDF
  3. 根据已知的边缘PDF或条件PDF,依次求其余变量的条件PDF
  4. 求所有变量的CDf,并令其分别等于 ξ i \xi_i ξi
  5. 求出各个变量和 ξ 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θ=1cosθ=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θ=21cosθ=arccos(12ξ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θ=21cos2θ=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,θ,ϕ)=JTp(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=21cosθ=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θϕ=R3ξ1 =arccos(12ξ2)=2πξ3

这个结果与球面均匀采样和圆盘均匀采样有一定的相似性。

三角形均匀采样

问题:如何用[0,1]之间的均匀采样获得在任意三角形内的均匀采样?

对三角形的均匀采样看起来比较容易,但是推导起来反而最麻烦。当然,也有一种简单的方法,比如对三角形的矩形凸包进行采样,然后将三角形外部的点映射到三角形内部(沿一条边的中点做对称),这个方法也可以获得对三角形的均匀采样,但是这个方法有几个问题

  1. 需要构建一个凸包,这个操作对平面三角形还不麻烦,但是对三维空间的三角形就相对繁琐;
  2. 需要对一半的点做映射;

我们希望避免这些操作,仍旧用前面提到的方法进行分析。

首先对问题进行细化。假设任意三角形 Δ 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 =uABcosA+vAC=uABsinA

其中, u u u v v v满足 1 − u − v > 0 1-u-v > 0 1uv>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} JTJT=(u,v)(x,y)=(ABcosAABsinAAC0)=ABACsinA

再回到采样问题上。对面积的均匀采样,意味着定义域内 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=ABACsinA2

接下来,把 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)=01up(u,v)dv=2(1u)p(vu)=p(u)p(u,v)=1u1

这里有一个细节,在求 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,1u],而不是 [ 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=2uu2=0vp(vu)dv=1uv

令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)无关,因此可以简单地推广到三维甚至高维。

参考资料

  1. 立体角(Solid Angle)详解
  2. Physically based rendering, 3rd edition.
  3. StackExchange上对这个问题的讨论:q18686,但是这个讨论里面的答案都是从特例证明这个结论的正确性,个人觉得证明不够完善。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页