(本文内容主要来自《pbrt》13.5、13.6)
如果yy满足概率密度分布p(y)p(y),如果要随机地获取一个yy的话,可以先获取一个随机数tt,然后代入它的累积概率密度P(y)=tP(y)=t,然后求解出yy即可。
但是很多情况需要的不仅是对单个变量做采样,往往需要对多个维度下的多个变量进行采样,而这些多个变量之间很有可能有互相关联,并且直接采样也不容易,可以考虑做一些变换来进行采样。

一切推导从一个最基本的式子出发,yyxx的累积概率密度CDFCDF相同,P{Y<=y(x)}=P{X<=x}P\{ Y<=y(x)\}=P\{ X <= x\}
因此Py(Y)=Px(X)P_y(Y) = P_x(X)
两边做一下微分即可得:p(y)dy/dx=p(x)p(y)dy/dx =p(x)
那么如果y和x都是多维的情况,很容易就可以得到p(y)Jy(x)=p(x)p(y)J_y(x)=p(x)Jy(x)J_y(x)yy关于xx的雅克比行列式。

具体的例子:
1.圆面上进行均匀采样。
圆面上的任何一点可以由直角坐标系下的(x,y)(x,y)表达,也可以由极坐标系下的(r,θ)(r,\theta)来表达,并且存在关系:x=rcosθy=rsinθx=rcos\theta,y=rsin\thetaJ=cosθrsinθsinθrcosθ=r J =\begin{vmatrix} cos\theta & -rsin\theta \\ sin\theta & rcos\theta \\ \end{vmatrix} =r
因此可以得到关系rp(x,y)=p(r,θ)rp(x,y)=p(r,\theta)
由于要求在圆面上进行均匀采样,也就是说每一点被采到的概率都应该相同,p(x,y)=1/πp(x,y)=1/\pi,那么p(r,θ)=rπp(r,\theta)=\frac{r}{\pi},进一步可以得到p(r)=02πrπdθ=2rp(r)=\int_{0}^{2\pi}\frac{r}{\pi}d\theta=2r
由此p(θr)=p(r,θ)/p(r)=12πp(\theta|r)=p(r,\theta)/p(r)=\frac{1}{2\pi}
这个结果可以看出θ\thetarr是互相独立的,因此可以分别获取两个随机数a,ba,b,最终的采样结果为:r=a,θ=2πbr=\sqrt{a},\theta=2\pi b

2.半球面上对立体角做均匀采样
立体角被定义为单位球面上的单位面积,于是dw=dA=sinθdθdϕdw=dA=sin\theta d\theta d\phi(dA为单位球上的微元面积),因此p(w)sinθ=p(θ,ϕ)p(w)sin\theta=p(\theta,\phi)
而要求对立体角做均匀采样,于是p(w)=12πp(w)=\frac{1}{2\pi}
p(θ,ϕ)=sinθ/2πp(\theta,\phi)=sin\theta/2\pi
进一步p(θ)=02πsinθ/2πdϕ=sinθp(\theta)=\int_{0}^{2\pi}sin\theta/2\pi d \phi=sin\theta
于是p(ϕθ)=12πp(\phi|\theta)=\frac{1}{2\pi}
可取两个随机数a,ba,b,这样可以得到ϕ\phiθ\thetaϕ=2πa,θ=cos1b\phi = 2\pi a,\theta=cos^{-1}b
进一步代入直角坐标系可以得到x,y,zx,y,z

3.半球面上对立体角做Cosine-Weighted采样
Cosine-Weighted采样指的是立体角方向与竖直方向夹角的余弦值越高,那么该立体角被采样得到的概率就越大的一种采样方式。
也就是说p(w)=cosθcp(w)=cos\theta·c,其中cc是一个常系数
由于对整个半球面做积分,得到值应该为1:H2ccosθdw=1\int_{H^2}c·cos\theta dw=1
代入计算可以得到c=1πc=\frac{1}{\pi},直接使用2的推导可以得到p(θ,ϕ)=p(w)sinθ=sinθcosθπp(\theta,\phi)=p(w)sin\theta=\frac{sin\theta cos\theta}{\pi}
继续往后推导就可以得到具体采样的公式。

但是这里有一个更加简单的方法圆面、球面上的采样方法
如图所示,只需要现在圆面上进行一次采样得到黑色的点,然后把它往上投影到球面上即可。
下面来证明其正确性,也就是要证明通过这样的采样方式是符合p(θ,ϕ)=sinθcosθπp(\theta,\phi)=\frac{sin\theta cos\theta}{\pi}的。
在二维球面上采样可以获得p(r,ϕ)=rπp(r,\phi)=\frac{r}{\pi},不难发现r=sinθr=sin\theta,于是p(sinθ,ϕ)=rπp(sin\theta,\phi)=\frac{r}{\pi}
考虑将p(sinθ,ϕ)p(sin\theta,\phi)变换至p(θ,ϕ)p(\theta,\phi),可得雅克比行列式J=cosθ001=cosθJ=\begin{vmatrix} cos\theta & 0 \\ 0 & 1 \\ \end{vmatrix}=cos\theta
因此p(θ,ϕ)=Jp(sinθ,ϕ)=sinθcosθπp(\theta,\phi)=Jp(\sin\theta,\phi)=\frac{sin\theta cos\theta}{\pi}
这说明这种方法采样得到的结果是符合Cosine-Weighted采样要求的。

相关文章:

  • 2022-12-23
  • 2021-04-05
  • 2021-09-19
  • 2021-04-19
  • 2022-02-24
  • 2021-05-28
猜你喜欢
  • 2021-09-09
  • 2021-11-08
  • 2021-10-02
  • 2022-12-23
  • 2021-08-09
  • 2021-08-15
  • 2021-10-02
相关资源
相似解决方案