close


要弄清楚 AA,只好說明一下取樣(sampling)這個麻煩的東西了。

對於電腦繪圖有些瞭解的讀者,應該已經知道,

目前的電腦繪圖使用的是 2D raster 的顯示方式。

也就是說,畫面是由一大堆有不同顏色和不同亮度的小點,組成一個大的方陣。

這些小點稱為像點,即 pixel,pixel 是 picture element 的縮寫。

很明顯的,像點的數目愈多,圖形就會愈細緻。

我們常說的解析度就是指這些像點的數目。

例如,640×480 這個解析度,就表示畫面是由 307,200 個像點所組成的。



註:解析度在某些領域有不同的意義。

在印刷的情形下,一般所謂的解析度,

通常是以 DPI(dots per inch)為單位,即每英吋中含多少個點。

像是某個印表機,若有 600 DPI 的解析度,

就表示它每英吋可以包含 600 個點

所以,在一張 8.5"×11" 的紙上,

就會有 5,100×6,600 = 33,660,000 個點。

當然,紙愈大的話,點的數目就可以愈多,這是因為點的大小是固定的。

在顯示幕的情形下,不管螢幕有多大,

使用 640×480 這個解析度時,像點的數目都是 307,200 個,

這和印刷的情形是不同的。當然,通常愈大的螢幕能容許愈高的像點數目。



當然,像點的數目是有限多的。

不幸的是,這個世界並不是由有限的小點組成的。

好吧!也許它是由有限的小點組成,

但是這些小點的數目非常的多,

所以以人類巨大的眼睛來看,

就好像是完全連續的一樣。

這樣一來,用有限的像點來表現畫面,就會出現問題。

但是,只要像點的數目夠多,而且像點的大小夠小,

小到人類的眼睛無法分辨的情形下,不就沒問題了嗎?

當然會有問題,不然就不需要 FSAA 了。



問題在哪裡呢?問題在於取樣的方式。

取樣是指把一個連續的訊號,轉換成不連續(離散)的訊號的動作。

因為像點的數目是有限多的,所以它一定是不連續的

所以當然就需要這個取樣的動作了。
下圖是一個取樣的例子:


Sampling figure

上圖中,黑色的曲線是原始訊號,灰色是直線是取樣點,下圖則是取樣的結果。

簡單的說,就是把曲線上面每個取樣點(就是那些灰色直線所在的地方)的數 值取出來,這樣就是取樣的動作。

一般來說,取樣點之間的距離是固定的。以電腦圖形的例子來看,每個像點就是取樣點。不過,

電腦圖形是從一個二維的訊號中, 取樣得到一個二維的陣列。所以,取樣看起來是會損失資訊的。另外,

因為電腦是以數位的方式存放資料,所以還要把取樣的結果進行數位化。

數位化可以看成是 「轉成整數」的動作。例如,假設訊號的範圍是 0 ~ 1 之間,想要數位化成 8 位元的資料,

就是先把它乘上 255(8 位元數字可以表示 0 ~ 255 的範圍),

然後把結果以四捨五入或是直接捨去的方式轉成整數。這個動作當然也會損失資訊。不過,這部分和我們的主題無關。

取樣會牽扯到很多複雜的定理。例如,在做取樣之前,如果先經過一個 low pass filter,把高頻的部分濾掉,

再 設定適當的取樣頻率(通常是比是最高頻率的兩倍還大)。這樣處理過的訊號再去取樣,

就可以完整還原到原來的訊號(指經過 low pass filter 後的訊號,而不是最原始的訊號)。

當然,這篇文章並不是什麼教材,所以不會深入這些地方。不過,low pass filter 等一下會用到,所以先記著比較好。

 

現在我們來看看,在電腦繪圖中,取樣的情形是什麼樣子。為了簡單起見,我們用兩個三角形來做例子。如下圖:

Two Triangles

上圖中,灰色的線是像點的邊界,當然,實際上像點是不會有什麼邊界的,就算有也很細,不會這麼粗。這些邊界只是示意用的。每個像點中的小黑點就是取樣點。取樣的時候,就是取這些小黑點上面的顏色,做為整個像點的顏色。所以,取樣的結果如下圖:

Two Sampled Triangles

我想大家應該都看到鋸齒現象了吧!這就是一般 3D 繪圖中所遇到的情形。為什麼會這樣呢?其實,
這是因為我們在取樣之前,少了一個步驟:low pass filter

因此,原來訊號中的高頻部分並沒有去掉,所以才會出現鋸齒現象。對了,所謂的 low pass filter,

就是指一個只能讓低頻成分通過的過濾器。詳細的細節就不在這裡說明了。現在只要記住一件事就夠了:

box filter 是一種 low pass filter。也就是說,如果我們把一個像點的範圍內,所包含的訊號取其平均值的話,

這樣就會是一個 low pass filter。經過這樣的動作,再來做取樣,會得到下圖:

Two Box Filtered Triangles

把上面的兩個例子都縮小到實際的大小,會得到下圖:

The Sampled Images in Actual Size

兩者之間的差異應該是相當明顯吧!

有些讀者可能會對 low pass filter 有疑問。為什麼用了 low pass filter 消除高頻成分就會有比較好的效果呢?

實際的理論相當複雜,所以不在這裡多說。不過,如果以人眼實際上的觀察方式來看,倒是很合理的。

因為,人眼內部的感光細胞,是會收集它的感光範圍中的所有能量,再送到腦部。所以,

可以看成感光細胞其實就已經包含了一個 box filter。因此,在進行取樣之前,先做 box filter 是很合理的做法。


有一點要特別注意:如果顯示系統的解析度非常的高遠遠超出人眼可以分辨的範圍

那麼 anti-aliasing 的效果就會慢慢消失。以一般習慣上的閱讀距離來說,人眼很難分辨超過 300 DPI 以上的彩色點。

也就是說,對一個對角線為 15" 的顯示器來說,如果解析度高達 3,600×2,700 的話,

那就沒有做 anti-alias 的必要了,反正人的眼睛也沒辦法看到這麼細的像點。

不過,貼圖的 filtering 是不同的事,無論解析度有多高,都需要適當的貼圖 filtering 才不會出現不正常的情形。

http://www.csie.ntu.edu.tw/~r89004/hive/fsaa/page_2.html





近幾年的顯示卡市場,隨著每一款全新的顯示晶片推出,都會帶來高效能的表現以及更多的繪圖技術。不過對於現在市面上的遊戲來說,遊戲的畫面終究都是由繪圖像素所組成,在一般的狀況下,那些組成3D模型的三角形邊緣會看到鋸齒。而這些鋸齒也都是由像素組成的,如果不對這些鋸齒進行處理,始終都會讓畫面有那麼一點缺陷,所以這幾年的顯卡晶片產品,都將反鋸齒這一種技術,作為顯示卡的標準功能之一。



其實,反鋸齒技術在電影電腦特效動畫中,早已廣泛使用。那些似真似假的電腦動畫,就是受惠於軟體的立體貼圖,當然,這些都會加上反鋸齒功能。這種靠軟體運算的方法,優點就是在任何的平臺上都可以執行,不過貼圖的速度會非常的慢,對於FS這種要求即時更新的遊戲來說,是絕對用不上的,我們不可能等待1分鐘才顯示一幅遊戲的畫面,更何況那些用還製作電影特效的電腦,在一般家庭絕對不會出現的設備。



當初反鋸齒技術剛剛推出的時候,因為要犧牲顯示卡的運算速度,所以用處並不多。不過這幾年的顯示卡技術發展突飛猛進,使得反鋸齒技術也達到了能夠在一般家庭電腦應用的水準,這樣我們就看得到漂亮的遊戲畫面。




arrow
arrow
    全站熱搜

    pcman 發表在 痞客邦 留言(0) 人氣()