Rendering & Caching samples 的計算

Geometry, frame relative, 和 uniform samples 的計算方式.

Geometry samples

每個影格要有的 sample 數量.

使用 Geometry samples 可以輕鬆的維持每個影格間的 sample 數量. 根據使用者給出的 samples 數量, 依據快門角度和 interval center, 我們可以計算出 frame relative samples, 在準確的時間點取樣.

Frame relative samples

相對於每一個影格, 取樣時 subframe 的位置.

要根據鏡頭計算相對於每個影格的取樣位置, 需要下面幾個參數.

  • Geometry samples: 每個影格要取樣的數量(整數)
  • 取樣中間點(interval center): 範圍從 -1.0 to 1.0. 0 代表取樣的中間點就是 full frames.
  • 快門持續時間(shutter duration) = 快門角度 / 360

Sample 間距(step size) = 快門持續時間 / (Geometry Samples - 1) 實際 Sample 位置 = Sample 數 * sample 間距 - (快門持續時間 / 2)

每一個 geometry sample 數乘上邊界, 再加上取樣中間點, 產生的數列就是 frame relative samples 的位置. 通常 geometry samples 不會使用偶數, 不然整數 frame 的位置就不會被取樣.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def get_frame_relative_samples(
    samples=3,
    interval_center=0.,
    shutter_angle=180,
    ):
    frame_relative_samples = []
    shutter_duration = Decimal(str(shutter_angle)) / 360.
    step_size = shutter_duration / (samples - 1)
    for cnt in range(samples):
        frame_relative_samples.append(
            cnt * step_size - shutter_duration / 2.0
        )
    return frame_relative_samples

Uniform Samples

均勻分佈在每個影格之間的取樣. 這是比較不經濟也比較不準確的方式. 因為取樣的位置對不上快門時間, 所以效果比較不準確, 而均勻分布的取樣代表如果你會需要更多的 samples 才能矇到接近準確的位置.

舉例來說, 180度快門角度, 兩個 steps , frame 1001~1003, 兩者產生的 sample 位置如下:

  • Frame relative samples 的會取樣七次.
    [1001, 1001.25, 1001.75, 1002, 1002.25, 1002.75, 1003]
  • Uniform sampling, 要取樣到這些sub frame位置需要取樣九次.
    [1001, 1001.25, 1001,5, 1001.75, 1002, 1002.25, 1002.5, 1002.75, 1003]

在運算/拍攝高速旋轉或移動的物體, 需要更快的快門或是更小的快門角度時, 這個差距會拉得更大, uniform sampling 無意義的取樣次數會越多.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 透過每格之間 samples 的數量計算取樣位置.
def get_uniform_samples_by_step_number(steps=3):
    steps = steps + 1
    return [1. / steps * step for step in range(1, steps)]

# 透過每個 sample 之間的距離計算取樣位置.
def get_uniform_samples_by_step_size(step_size=.25):
    return [
        step_size * (1 + cnt) for cnt in range(int(1. // step_size))
    ]

Info

關於快門和取樣

  • 快門速度: 快門速度是指相機的快門打開並允許光線進入感光元件的時間長度. 例如1/50秒, 1/100秒等. 快門速度(秒) = 360 / (frame rate * 快門角度)
  • 快門角度: 快門角度源自攝影機的機械快門設計, 它是一個旋轉的圓盤, 其中一部分被切掉讓光線通過. 快門角度表示快門圓盤的開放/被切掉的部分佔整個圓盤的角度.標準的快門角度是180度.
  • 快門角度增加或是快門速度減慢的時候, 快門打開的時間變長/進光亮增加, 動態模糊的效果也會增強. 快門減慢或角度減少時, 影像則會變得更銳利.
  • 當實拍和 3D 物件合成時需要準確設定 samples, 才能讓兩者的模糊效果一致. 當快門角度減小時(例如從180度到90度),快門打開的時間變短,減少了運動模糊,拍攝的影像更銳利。