FSAA 補充 [Part 2]
取樣點的問題
在 FSAA 簡介文章中,比較了 RGSS 和 OGSS 這兩種取樣方式。不過,事實上,取樣的方式還有很多種。在這裡我們就簡單介紹一些適合硬體實作的取樣方式。
為了展示取樣方式的不同,我們用一張簡單的圖片為例。這張圖是由 sin(x * x + y * y) 產生的。下圖是沒有進行任何 anti-aliasing 的例子:
上圖完全沒有任何 anti-aliasing 動作,所以可以看到明顯的鋸齒狀。另外,在右下角則有圓形條紋。這都是不應該出現的。
注意:本頁的 FSAA 圖片是為 gamma 2.2 的顯示器設計的。如果您已經做了 gamma 校正,則請參考本頁。
過去在 3D 繪圖系統中,因為系統設計上的限制,所以通常都是使用 OGSS。為了避免 OGSS 的一些不良性質,通常使用 64 倍的取樣(8×8)。以下對上圖做 64 倍 OGSS 的結果:
![]() |
![]() |
| 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 | 16X OGSS |
可以看出 16 倍非格狀取樣的效果,和 16X OGSS 差不多,但是鋸齒狀稍微少一些,而且圓形條紋也減少了。不過,不幸的是,圓形條紋並沒有完全消失。
為什麼會有這種圓形條紋呢?這是因為人的眼睛會傾向把亮度或顏色類似的東西,當成同一個東西,即使它們是分開的。所以,雖然這些線是分開的,但是它們之間如果有亮度類似的部份,就會被人眼認定成是同一個東西。這就是人眼對於失真現象敏感的原因之一。
要完全消除這種現象,就要試圖去除取樣點的規則性。前面所用的取樣方式,對每個 pixel 來說,其取樣點的位置都是固定的。如果對每個 pixel 都採用不同的取樣點,那就可以消除這種規則性,也就是由「雜訊」取代「失真」。因為人眼對隨機雜訊較不敏感,所以這是可行的。下圖就是兩個例子:
![]() |
![]() |
| 16X random jittered subsampling | 16X pseudo Poisson disc subsampling |
可以看到,圓形失真條紋已經是完全看不到了。而且鋸齒狀的現象,也比 16X OGSS 或 16X 非格狀取樣要稍微減少了一些。
在上圖中,左圖是以格狀的取樣點為基礎,對每個取樣點做一個隨機的移動(移動範圍不超過取樣點包含的範圍)。因此,每個 pixel 的取樣點位置都會不同。不過,因為沒有對取樣點的位置有什麼限制,所以有時取樣點可能會太靠近、或是離得太遠。所以,它產生的「雜訊」就會比較多。而右圖則是對取樣點位置做了限制,也就是兩個取樣點之間的最短距離不能低於某個數字(在這裡是約 0.7)。這樣可以避免取樣點會太靠近或太遠的情形,因而減少了一些「雜訊」。
10/16/2001, Ping-Che Chen
Sorry, Traditional Chinese only. This page is encoded in UTF-8.
Copyright© 2000, 2001 Ping-Che Chen





