Carved Marker

FSAA 補充 [Part 3]

結合各取樣點的結果

在前面討論了各種不同的取樣方式,不過,在拿到很多個取樣點的資料後,要怎麼計算出結果呢?

到目前為止,我們所用的方法,都是所謂的 box filter。所謂的 box filter 就是在一個區域內(不一定是方形的區域,不過在這裡也都是方形的),把這個區域內的數值加總,再求出平均值。在離散的情形下,就是所謂的 unweighted average,也就是把每個取樣點的顏色資料加起來,直接求平均值,就得到這個 pixel 的顏色。

Box filter 的好處是簡單,計算也不複雜,但是它並不能帶來最好的效果。它的主要缺點是在動態影像時表現出來,另外,它常常會讓畫面變得過於模糊,這也可以從訊號理論的角度來分析。不過,我們最好先別提訊號理論,而先從動態影像的角度來看這個問題。

動態影像的問題

我們之前在討論 FSAA 時,都是針對靜態影像進行討論。但是,其實 anti-aliasing 有一個很重要的用處,就是消除動態影像所帶來的失真現象。首先,我們先考慮完全沒有 anti-aliasing 的情形,並考慮一個很小的三角面,以慢速移動時,會發生什麼事:

Motion Aliasing

上圖顯示一個小的三角形,在像點組成的格子點中,慢速移動時產生的現象。藍色的點是位於三角形內部的像點,也是在畫這個三角形時,會被畫出來的像點。可以看到,當三角形在移動時,像點的變化相當不規則。這會讓人覺得這個三角形在閃爍。而且,雖然三角形的面積並沒有改變,但是它所蓋住的像點數目卻都不太一樣,有時蓋住了八個像點,有時卻蓋住九個。這實在不是一個好現象。

事實上,這種形式的失真,對人眼是最敏感的。它的影響甚至要大過邊緣的鋸齒狀所帶來的影響。也許有人會說,畫面上很少會出現這麼小的三角形吧!但是,在 3D 繪圖中,不管物體原來有多大,如果它的距離遠,那就會因為透視投影的關係,而變得很小。如果觀察者不動,那它的移動速度對觀察者來說,也會變慢。所以,這種情形其實是十分常見的。

如果我們不是直接取樣,而是把一個像點中,三角面所佔的面積,來做為這個像點的顏色的話,應該就可以改善這個情形。當然,實際上要算出三角面在一個像點中所佔的面積並不容易,因為三角面可能會一部份會被別的三角面蓋住。這會讓情形變得很複雜。所以,比較簡單的方法,就是像前面所提到的,使用 super-sampling 的方式。也就是在一個像點中,取很多個取樣點,再把這些取樣點的顏色平均。結果大致上會如下圖:

Motion with box filter

可以看到,利用了 box filter 後,像點顏色的變化比較不會那麼突兀。但是,box filter 還是有一個問題。當一個三角面的某一部份都是在像點內部移動,而且所佔的面積都不變的時候,那個像點的顏色也不會改變。上圖中的第一列就是個例子。也就是說,只要三角面只在像點的範圍內部移動,像點的顏色就不會改變。但是,當它開始離開像點範圍時,包括這個像點,和它正在進入的像點,顏色就會開始改變。如果三角面移動的速度不快,那就會變成在大部份時間中,像點的顏色都不變(因為三角面都在這個像點的範圍內),然後突然開始變化(因為三角面開始移動到另一像點)。這樣還是會有一些「閃爍」的感覺。

如果我們現在改用另一個方法,也就是說,不要用一般的平均,而是加上一個權重,也就是 weighted average。給愈靠近像點中心的取樣點更高的權重,而在邊緣的取樣點則給比較小的權重,那即使三角面只在像點內部移動,也會有顏色的變化,那就不會有閃爍的感覺了吧!但是,不幸的是,這樣還是會有問題。當三角面從像點的中心移到邊緣時(但是還沒有超出像點的範圍),三角面的面積並沒有改變。但是,因為邊緣的權重較小,像點的顏色會改變。這樣會很奇怪。事實上,在三角面很小的時候,這樣反而會加強閃爍的現象。

解決這個問題的方法,是使用一個 overlapped filter。我們在前面所用到的 filter,都只是對像點範圍內的取樣點進行計算。但是,我們現在把 filter 的範圍擴大,讓它把周圍像點的一些取樣點也加進來進行計算。如下圖所示:

Overlapped and non-overlapped filters

也許有人會有疑問,使用 overlapped filter 難道不會讓畫面變得太過模糊嗎?不過,要記住,我們使用的是 weighted average,愈靠近 filter 邊緣的取樣點,比重愈低。常用的權重包括 cone filter 和 Gaussian filter,cone filter 較為簡單,但 Gaussian filter 的效果比較好。如果取樣點的位置是固定的,那權重也會是固定的,所以權重可以事先計算,因此使用 Gaussian filter 和 cone filter 的複雜度不會有什麼差別。不過,如果使用隨機的取樣點的話,那 Gaussian filter 就會複雜很多了。

這裡提供一個細長的三角形,在空間中水平移動的例子,以 MPEG-1 格式儲存。有興趣的話,可以看看各種不同的取樣點,和 Gaussian filter 的效果。

下載影像檔(Gamma = 1.0)
下載影像檔(Gamma = 2.2)

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

11/22/2001, Ping-Che Chen


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

Copyright© 2000, 2001 Ping-Che Chen