天天看點

通過 concentric 映射在機關圓盤上生成具有良好分布的樣本

1. 通過直接映射, 在機關圓盤上生成樣本

我們假設 p 和 q 是随機生成的兩個一維均勻分布, 那麼很容易能夠想到利用極坐标的形式就可以将他們映射到機關圓盤上.

但是如果我們用 r = p 和 θ = 2πq 來表示一個點相對于圓心的位置, 實際上, 這樣映射之後的樣本并非均勻分布, 而是會明顯聚集在圓心處.

通過 concentric 映射在機關圓盤上生成具有良好分布的樣本

如果直接使用 p 和 q 作為點的橫縱坐标, 那麼生成的點會均勻的分布在機關正方形中. 我們以 p = 0.5 為例, 對于所有的 q 而言, 這時包圍的面積是 0.5, 這将占據近似一半的點. 而将其映射到圓形區域時, r = p = 0.5, 這個圓盤的面積是 0.25π, 隻占據整個圓盤面積的四分之一. 也就是說有一半的點會聚集在四分之一的面積上, 這就造成了圓心處的聚集.

2. 生成均勻分布的樣本

為了産生正确的均勻分布, 通過一些計算轉換可以得出, 我們需要用 r = sqrt( p ) 和 θ = 2πq 來生成采樣點.

如下圖所示, 這樣樣本會均勻分布在機關圓上

通過 concentric 映射在機關圓盤上生成具有良好分布的樣本

但是這種映射方式有也有問題, 用這種方式将 2D 的随機樣本映射到圓盤上會産生嚴重的扭曲區域. 因為 r 和 p 的坐标系關系以及引入了平方根(凸函數), 原本均勻的 p 被映射到圓的半徑時會産生如下圖所示的扭曲. 這并不是我們想要的結果, 我們希望的是 (p, q) 附近的點被映射到圓盤上之後依然在相近的位置上.

通過 concentric 映射在機關圓盤上生成具有良好分布的樣本

3. concentric 映射

concentric 映射可以很大程度上解決上面提到的問題.

concentric 映射将正方形的楔形子塊映射成圓盤上的一個切片, 其中 1/8 的映射如下, 其餘類似.

我們要把垂直方向上的線段映射成一段圓弧, 注意這是一個等腰直角三角形, 又因為弧長與圓心角成正比, 是以我們要保證的比例就是 y/x = θ / PiOver4. 是以這部分我們可以設定映射: r = x, θ = PiOver4 * (y/x)

通過 concentric 映射在機關圓盤上生成具有良好分布的樣本

concentric 映射的實作分為以下三步:

  1. 将随機值映射到 [-1, 1]^2
  2. 處理原點的特殊情況(0不能做分母, 原點直接映射為(0, 0)即可)
  3. 應用 concentric 映射 (根據 x 和 y 絕對值的大小分為兩種情況)

下圖依次展示了: 直接映射, 均勻映射, 同心映射, 原始樣本

通過 concentric 映射在機關圓盤上生成具有良好分布的樣本

4. Cosine-Weighted Hemisphere Sampling

因為光照的散射方程式用一個餘弦項來作為 BSDF 和入射輻射度的乘積的權重值, 是以一個能生成, 相較于半球底部(餘弦值更小), 更可能接近半球的頂部(餘弦值更大)方向的方法是更有用的.

想象我們的光照, 環境中照亮 p 點的光線, 更多的來自于半球的頂部方向, 越靠近半球底面, 其對 p 點亮度的貢獻就越小, 這也是我們在生成方向時更傾向于讓方向靠近半球頂部的原因.

通過 concentric 映射在機關圓盤上生成具有良好分布的樣本

Malley’s method 可以生成這種方向, 該方法首先在圓盤上生成均勻的樣本(使用 concentric 映射), 然後将這些樣本垂直映射到半球面上, 這樣得到的方向便具有餘弦分布.

通過 concentric 映射在機關圓盤上生成具有良好分布的樣本

我們做一個截面就很好了解了, 如下所示, 用底面上均勻的樣本生成的方向, 非常明顯的聚集在半球頂部.

通過 concentric 映射在機關圓盤上生成具有良好分布的樣本

數學上的推導可以參考 pbrt 的 13.6 2D Sampling with Multidimensional Transformations