2010年9月2日 星期四

[電腦圖學] Gamma Correction (II)

由先前的討論,知道螢幕輸出的誤差可因資料處理而修正,在此將更進一步的討論修正方法,並舉一些實例來展示差異,可觀察是否具備前篇文章所描述的狀況。

寄件者 Melbourne - 2010.07.17~2010.07.25

透過色階條觀察 gamma correction 的結果,下圖上方的色階條 (color ramp) 是以線性資料直接輸出,是未經任何處理的原始資料,由左至右表是亮度 0.0 到 1.0;而下方的色階條是經過 gamma correction 處理後的結果 (如果看起來沒感覺,請趕快換顆螢幕吧...)。可以明顯感受到經修正後的顏色,亮度分配較為均勻,相較之下原始色調較為黯淡。

以下為此範例的 shader code,首先計算完圖形顏色後直接輸出
Out.Color = In.Color;
return Out;                                //return output pixel

而下面是修正後的結果,選定 gamma 值為0.454
Out.Color =  pow(In.Color, 0.454);            //gamma correction
return Out;                                    //return output pixel

另一個彩度表現的例子,三頂點各給予不同純色(R, G, B)強度為63的效果,右為經過 gamma correction 處理後的結果。可明顯發現彩度與亮度上的差異。


以現實生活中的照片來比較差異性( Hello~, Ollie! 這是我去澳洲旅遊時認識的朋友,很可愛吧! ),由左至右是不同 gamma 數值下的結果,相鄰的兩張照片可以當作是輸出前後的成像,因此若原本影像檔的內容是 gamma 1.0 的圖像,若想將輸出結果不失真,那就需先將影像轉換成 gamma 0.454 的這張圖像,經過顯示器輸出後才會是正確的結果;否則眼睛看到的結果會是最右邊 gamma 2.2 的圖像。

最後附帶一提,顯示器的 gamma 值並非絕對的 2.2 。 2.2 是一個標準,所以或許會隨不同優劣廠商製作的顯示器而有所差異,品質越好的產品越能達到穩定的數值,而劣質的產品則會讓你覺得美台顯示器都很有自己的特色。當然,專業的玩家一定會定期的調整顯示器輸出,並在暗房使用特定工具,降低光害誤差精準的校正,因為不管多好的顯示器,用一段時間後都會產生色偏的狀況。

沒有留言:

張貼留言