最近回想起 GDC 2010 有一場由《祕境探險 2》(《Uncharted 2》) 的繪圖工程師以「HDR Lighting」為主題的演說,分享他們如何將一個想法與概念透過繪圖技術達到,演講過程十分精彩。
遊戲中的色調設計,即便對於有經驗的美術總監而言都是十分嚴峻的考驗,但對於新人絕對是最容易被忽略的細節之一。為什麼色調的定義如此重要?因為它屬於最核心的一種設定,引響遊戲風格,控制著玩家對時間、氣候與環境氛圍的感受。因此能明確的定義色調,才能引領著龐大的美術團隊朝正確的目標前進。對於色調的了解真的如此重要嗎!...我想只有痛過一次你才知道。因此我響探討 Gamma Correction 的議題,為什麼要這麼做以及其影響。
寄件者 Melbourne - 2010.07.17~2010.07.25 |
首先我們對色調的認知是,一般的電腦都採用所謂的全彩24位元的色階,所有顏色的組成會以三原色表示,也就是紅、綠、藍 (R、G、B) 並均分得8位元,因此每種原色各有256種不同的強度(亮度),總共的組合就可表示16777216種顏色。顏色具有線性的特質,可滿如下的狀況:
32 + 64 = 96
16 * 3 = 48
...
不過我們不會以整數當作強度而會把 0~255 的數值對應到 0.0~1.0 的浮點數,之後的討論也以福點數為主。顏色的表現與操作就是這麼簡單,還有甚麼好談論或修正的;情況在於,我們的應用與需求已超越了線性系,首先第一個遇 到的問題,我們的螢幕輸出裝置,無論是 CRT 或是 LCD 並非以線性的方式輸出,通常標準的顯示器輸出強度會與顏色表現數值的關係呈現如下:
F(x) = x ^ 2.2
這樣的結果導致幾種現象的發生。首先是解析度不均勻, 例如原本預期輸出值是 0.5 ,但經過訊號的轉變後強度只剩下 0.21763... ,這也意味著原本有一半的色域會被壓縮至 1/4 的空間內,因此在暗色的部分容易造成明顯色塊以及巨齒等現象。第二,整體亮度會明顯的變暗,由於所有數值的縮小,導致整體強度變弱因而影像轉暗。第三,對比色的調整不易,由於色調對應非線性,所以很難全局的調整其對比,須要有許多區域性的設定。
一種簡單的補償機制,我們期望找到一個公式 g(x) 預先補償訊號的變化:
f(g(x)) = g(x) ^ 2.2 = x
得到補償公式
g(x) = x ^ 1/2.2
所以欲得到正確的影像呈現,我們必須將訊號作 gamma 值(2.2)的修正,也就是輸出螢幕前先套用 g(x) 來讓訊號強化。
http://en.wikipedia.org/wiki/Gamma_correction
沒有留言:
張貼留言