Carved Marker

FSAA 補充 [Part 2]

取樣點的問題

FSAA 簡介文章中,比較了 RGSS 和 OGSS 這兩種取樣方式。不過,事實上,取樣的方式還有很多種。在這裡我們就簡單介紹一些適合硬體實作的取樣方式。

為了展示取樣方式的不同,我們用一張簡單的圖片為例。這張圖是由 sin(x * x + y * y) 產生的。下圖是沒有進行任何 anti-aliasing 的例子:

No FSAA

上圖完全沒有任何 anti-aliasing 動作,所以可以看到明顯的鋸齒狀。另外,在右下角則有圓形條紋。這都是不應該出現的。

注意:本頁中所有的 FSAA 圖片,都應該在 gamma 值為 1.0 的條件下觀看。如果無法調整 gamma 值,這裡提供了 gamma 2.2 的圖片。

過去在 3D 繪圖系統中,因為系統設計上的限制,所以通常都是使用 OGSS。為了避免 OGSS 的一些不良性質,通常使用 64 倍的取樣(8×8)。以下對上圖做 64 倍 OGSS 的結果:

64X OGSS FSAA 16X OGSS FSAA
64X OGSS 16X OGSS

可以看到 64 倍 OGSS 提供相當不錯的效果。不幸的是,64 倍 OGSS 實在是太昂貴了(理論上它需要 64 倍的計算量)。要在即時繪製的系統上,提供 64 倍的 OGSS 恐怕是相當困難的。而且,即使是利用其它技術來減少計算量(像是只在邊緣部份進行超取樣),如果不是使用 deferred renderer,它還需要 64 倍的 frame buffer 空間。這在目前恐怕也是十分困難。

如果使用 16 倍(4X4)的 OGSS,當然就比較容易。但是,16 倍的 OGSS 並不能提供像 64 倍 OGSS 這麼好的品質。它看起來比較粗糙,而且右下角還是可以看到圓形失真條紋。

為了改善這個問題,可以使用非格狀的取樣點,像是 RGSS。非格狀的取樣點的好處,在 FSAA 簡介中也有簡單介紹過。下圖就是使用 16 倍非格狀取樣的效果:

16X jittered subsampling FSAA 16X OGSS FSAA
16X jittered subsampling 16X OGSS

可以看出 16 倍非格狀取樣的效果,和 16X OGSS 差不多,但是鋸齒狀稍微少一些,而且圓形條紋也減少了。不過,不幸的是,圓形條紋並沒有完全消失。

為什麼會有這種圓形條紋呢?這是因為人的眼睛會傾向把亮度或顏色類似的東西,當成同一個東西,即使它們是分開的。所以,雖然這些線是分開的,但是它們之間如果有亮度類似的部份,就會被人眼認定成是同一個東西。這就是人眼對於失真現象敏感的原因之一。

要完全消除這種現象,就要試圖去除取樣點的規則性。前面所用的取樣方式,對每個 pixel 來說,其取樣點的位置都是固定的。如果對每個 pixel 都採用不同的取樣點,那就可以消除這種規則性,也就是由「雜訊」取代「失真」。因為人眼對隨機雜訊較不敏感,所以這是可行的。下圖就是兩個例子:

16X random jittered subsampling FSAA 16X pseudo Poisson disc subsampling FSAA
16X random jittered subsampling 16X pseudo Poisson disc subsampling

可以看到,圓形失真條紋已經是完全看不到了。而且鋸齒狀的現象,也比 16X OGSS 或 16X 非格狀取樣要稍微減少了一些。

在上圖中,左圖是以格狀的取樣點為基礎,對每個取樣點做一個隨機的移動(移動範圍不超過取樣點包含的範圍)。因此,每個 pixel 的取樣點位置都會不同。不過,因為沒有對取樣點的位置有什麼限制,所以有時取樣點可能會太靠近、或是離得太遠。所以,它產生的「雜訊」就會比較多。而右圖則是對取樣點位置做了限制,也就是兩個取樣點之間的最短距離不能低於某個數字(在這裡是約 0.7)。這樣可以避免取樣點會太靠近或太遠的情形,因而減少了一些「雜訊」。

[Part 1] [Page 2] [Part 3]

10/16/2001, Ping-Che Chen


Sorry, Traditional Chinese only. This page is encoded in UTF-8.

Copyright© 2000, 2001 Ping-Che Chen