Carved Marker

FSAA 補充 [Part 1]

上次的 FSAA 簡介文章,把當時流行的硬體 FSAA 實作方式,作了簡單的介紹。不過,當時限於時間等因素,並沒有把所有的問題都加以介紹。所以,本篇文章的目的,就是要補充一些上次沒有提到的部份。

Gamma 的問題

在 3D 繪圖中,通常有一個很重要的假設,就是線性的反應曲線。所謂的線性反應曲線,就是說,如果把亮度值 1.0 和亮度值 0.5 相比的話,1.0 在螢幕上看起來,應該剛好是 0.5 的兩倍亮。這是一個非常重要的假設,因為只有在這個假設之下,才能很容易地進行亮度值的運算。舉例來說,如果兩個光源照在同一點上,我們會直接把兩個光源產生的亮度值相加,得到最後的亮度。但是,這只有在線性反應的情形下,才是正確的。

不幸的是,一般的螢幕,很少是線性反應的。大部份的螢幕的反應曲線是接近一個指數的曲線。這個指數曲線的指數部份,我們就把它稱為 gamma 值。當 gamma 值為 1.0 時,就是線性反應。一般常見的 CRT 螢幕,其 gamma 值則通常在 2.0 到 2.6 之間。這時,就需要一個修正(gamma correction)讓螢幕的顯示看起來和線性反應相同。

不過,在很多情形下,不正確的 gamma 設定,並不會帶來太大的困擾(除了畫面看起來會太暗或太亮之外)。不過,在有 FSAA 時,gamma 值的設定就顯得特別重要了。因為如果 gamma 值太大,FSAA 的效果就會不足,而使得結果看起來還是有鋸齒狀。而如果 gamma 值太小(小於 1.0),那 FSAA 的效果就會太過,而使畫面顯得比較粗。這個效應非常明顯,所以要得到理想的 FSAA 效果,一定要設定正確的 gamma 值。

那要如何找出螢幕的 gamma 值呢?這並不是個非常容易的事。不過,如果只想要找出「大概」的 gamma 值,那可以參考下面的圖(此圖由 PNG 發展小組提供):

Gamma Correction

這個圖的使用方式,是先把螢幕的 contrast(通常以半黑半白的圓形表示)調到最高,並把亮度調低,直到黑色部分成為真正的黑色(不能是深灰色)。然後和螢幕保持一定距離,看看對哪一個數字的區塊中,左右兩半的亮度最接近。要注意的是,很多因素都會影響到 gamma 值,包括螢幕的亮度設定(brightness)、四周的照明等等。同時,這個方式只能找出一個大概的 gamma 值,並不是很精確。

目前大部份的顯示晶片都提供 gamma 值設定的功能。所以,在找出螢幕的 gamma 值後,可以設定顯示晶片的 gamma 修正功能。經過 gamma 修正後,上圖中亮度最像的應該會是 1.0 的區塊。以下是 NVIDIA 的 Detonator 系列 driver 中,設定 gamma 值的畫面:

Gamma setting

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

10/16/2001, Ping-Che Chen


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

Copyright© 2000, 2001 Ping-Che Chen