伽瑪校正(Gamma correction)是一個經常被誤解的觀念。簡單來說,伽瑪描述了相機或螢幕的非線性反應的現象。當一個相機(模擬或數字)接收到兩倍的光源時,相機並不會把這個資料存成兩倍的RGB數值。有很多原因為什麼相機的記錄系統會有這種記錄方式----這種現象稱為伽瑪。其中一個原因是顯示器感光本身的問題,例如底片具有非線性的感光曲線,另外CRT螢幕也有同樣問題:像素的亮度跟輸入的電壓強度並不是呈現線性關係。
另外一個原因,因為人眼對於黑暗中的細節比明亮中的細節還要更敏感(人眼的感光曲線其實是對數曲線,稱為Weber-Fechner定律)所以人眼視覺是以非線性的方式記錄訊號的。而現代液晶顯示器(TFT)本身雖然沒有先天上的伽瑪問題, 但是為了要迎合傳統的工作流程 TFT螢幕會刻意模擬出伽瑪的效果。
當您打開一張bitmap圖檔 而這張圖檔內嵌gamma,當你開啟圖檔時 你可以選擇是要套用通用gamma數值 還是要讀取圖檔的gamma。有一點很重要的是 bump 或 displacement貼圖你gamma一定要設定為1.0 因為這些是線性資料!
作者是: Zap Anderson (mental ray作者之一)
標題: 為何算圖整個都過曝?
答案是:在你設定正確的色彩空間之前 算出來的圖很容易過曝
- 你之前設定過的場景都是錯的.
- 你之前算過的圖都是錯的.
- 你以前輸入的(材質 燈光)都是錯的.
幾年前,所有的材質shader都是用錯誤的色彩空間在做計算。常見的問題包括,當使用燈光衰減 接近燈光的地方或過亮(因此有任會避免是用燈光衰減)在高光的邊界的地方出現醜陋的過亮問題,就好像2 +2 = 10的效果)
由於這一點,很多人會用某些秘技來解決此問題。方法是把高光與diffuse做單純的add混色 (像photoshop那樣),或只要diffuse強度 。
所有這些技巧是錯的,但最後的效果看啟示真實的,即使這時候的gamma=1。
可悲的是,很多人就是因為這樣反而看慣了不正確的gamma算出來的效果。
請看這兩張CG圖(一個是用Mentalray算的 另外一個是用finalrender算的)。Mentalray的效果是把tonemapper的作用法揮到極致(把過亮的部位去飽和度 增加視覺美感),而finalrender算出來的是難看的gamma=1結果。
你可能會認為finalrender的效果才是正確的 但事實並非如此。你可以看到finalrender把反射算的太亮 產生不真實的感覺。
現在的問題是,當您轉換到正確的色彩空間(finalrender或Mentalray),你輸入的圖檔是錯的 出來的結果當然也是錯的。
重點是,當你在最後套用伽瑪校正,這就表示你接下來做的每件事也要考慮到伽瑪。
顏色不會因為某些錯誤而看起來過亮。顏色之所以會看起來過量是因為你把整個環境弄的過亮....或者因為你將gamma=1的顏色顯示在gamma 2.2的螢幕所以結果反而讓顏色不會過亮!
例如 你看到所有未校正的顏色都是錯的 。他不會是最後會顯示的顏色。
貼圖也有一樣的問題,如果你有一張gamma 1.0的貼圖透過gamma 2.2的螢幕來看 但是看起來卻是正確的顏色 為何呢? 因為其實每張圖片有史以來 都會把伽瑪數值燒到圖片裡面。所以這意味著...這些圖片通通都錯了(...在這樣的歷史原因下。我們可以理解為何要把伽瑪數值燒到圖片裡面,因為這樣的圖片放到當時的CRT螢幕 反而會讓我們認為這張圖片顯示是正確的!)
是的,每一張再看到的數位相機拍出來的照片,你在網上看到,都是錯的(在以上的觀念下)。
錯。所有的圖片都錯了。
那又是為什麼這些圖看起來是正確的呢? 因為你以錯誤的gamma去算圖 然後以錯誤的gamma螢幕來觀看。因此,儘管你最終的貼圖看起來是“正確的”,但是所有的計算式 “光學的計算”過程都是錯誤的。
某些算圖軟體具有色彩校正的功能,當它讀入圖檔的時候 它會自動去gamma(un-gammaed)產生現性色彩空間的貼圖 每套算圖引擎的這類功能不太一樣 很不幸的是某些的作用不正確 某些有bug。
因此,最好的辦法是自己做顏色校正的節點轉換。
mia_exposure_simple就是這樣的節點,它是一種簡單tonemapper。 (它其實只具有亮度/對比度/伽馬控制工具 外加過亮區域的壓縮功能 避免clip現象;))
要知道,當你做了伽瑪校正後 你就會改變原本圖片的紅,綠,藍通道的權重,這就相當於改變了顏色的飽和度。
所以你一開始的時候就必須輸入正確的顏色。
過亮(Overbrights )
tonemappers的最重要工作就是要處理過亮問題。 mia_exposure_simple使用一個簡單的壓縮演算法,把顏色推到'門檻'以上,直到把它漸漸地clip成純白,否則它會直接頂到純白色變成難看的硬clip。
這個方法很重要,其實在底片,數位相機,CCD中也是這樣處理地。
用老的shader,specular highlights很容易就爆光,看起來很難看 由於hard-clipping色彩通道的關係。
這會讓調顏色的人會把顏色條的太弱(相對於真實的物理強度),因為即使是最“弱”的數值相加起來 也會很容易過曝 為什麼?因為這些顏色的加法是建立在非線性的色彩空間
請想想如果“2 +2”不等於“4”,而是“10”!
因此,如果“2 +2 = 10”,你希望效果看起來是“4”(因為你眼睛認為看起來正確),透過試誤法 你發現"2+0.5"的結果看起來像 “4”,所以原本正確應該要用2,你改用0.5 然後你就對這樣的結果滿意。
但是當你把最後的結果,放到正確的tone operator(甚至只使用老式正確伽瑪),它的結果還是會看起來像“2.5”而不是“4”。
這就是為什麼很多人會投降 說gamma真是個爛東西 我以前沒用gamma算圖都不會有這種錯誤,幹!放棄gamma!
而真正的錯誤是你的specular highlight數值太小的。
mia_material能夠正確地處理這類問題的,你會發現,如果你在用它的時候沒有使用伽瑪校正或tonemapping,你會發現最後的highlights太亮。這是因為shader本身是正確的 但是你觀看它的方式是錯的。
根據物理的算圖是很困難的,主要是因為有很多根深蒂固錯誤流程 還有軟體本身的錯誤。
很多人誤以為
Maxwell是神奇的渲染器,而且遠遠優於mental ray,其實原因很簡單這類渲染器一開始的時候就是以physical rendering的流程來寫的,它並沒有陳舊的軟體包袱 與錯誤的流程要煩惱。
Maxwell可以讓所有的顏色正確顯示,然後自動修正所有輸入的圖檔,因為算圖引擎確定最終的輸出方式一定是以物理正確的色彩環境來顯示,透過physical tone mapper來與螢幕觀看!
作者是:Andrew Weidenhammer
標題: 線性工作流程介紹(Linear Workflow Introduction)
讓我們開始談談線性色彩工作流程吧。
你可能已經知道什麼是線性工作流程,但對於那些來不懂的 以下是簡短解釋:
線性工作流程是因為你算圖器本身就是以浮點 (線性)空間來運算的。它會產生8-bit的輸出,而這個圖檔會加入gamma 為了要在螢幕上顯示。真是可惜阿。本來浮點的圖片對於後製合成是很方便的 卻在輸出的時候轉成8-bit。
如果你不了解8-bit, 與32-bit(浮點)圖片的差別,或是螢幕的gamma,那你可能要先爬文。有些好書我可以推薦你讀。The HDRI Handbook這本寫的很不錯,我高度推薦。網路上也有很多關於hdri的資料,hdri在計算機圖形學中,就是利用線性工作流程的概念。了解hdri,你就會更了解線性工作流程。
你可能認為線性工作流程有什麼大不了,因為你已經利用8-bit的方式算出好多年的美麗圖檔。其實只主要的差別,我想 可以歸結為以下:
1。物理正確性
你可以以真實的單位來創建場景,例如使用真實的燭光亮度。
2。真實光照
這說來話長,但在CG燈長久以來是以線性衰減來欺騙觀眾,或是根本就沒有衰減。這是因為燈光的線性衰減並沒有套用正確的伽瑪。這就是為什麼我們的CG前輩phong與 blinn要去研究光線是如何反應的 利用shader模擬光線效果。我們必須跨出歷史 進化到使用物理精確的材質。這就是為什麼現在有這麼多MR (architectural) shaders。它們都是針對物理精確線性流程來設計的。
3。後製的可調性大增
32位元浮點或16位元浮點有能力應付龐大的色彩和曝光調整。當你使用真實浮點的後製軟體如Fusion,大多數的濾鏡都能真實的產生效果。運動模糊效果,光暈,會表現的更真實與自然。
---以下文章翻譯自http://www.creativecrash.com 網站---
作者是 throb
你有沒有想過,為什麼你的GI算圖結果如此黑暗?那麼,事實上,其實結果不是這麼深。問題在於顯示設備(CRT或LCD)及該軟件是沒有作出調整的伽瑪是把我們的顯示圖像。這是伽瑪明確要求sRGB。技術信息sRGB可在該網站上。
讓我們看一下顯示器會如何顯示你輸入的圖檔。這是非線性顯示器。虛線是你輸入的圖檔資料 實線是螢幕根據輸入的強度所輸出的強度 因為這條實線是直線所以這個螢幕是正確地顯示。
要知道 這個螢幕校正並不是跟底片有關。事實上,這跟底片沒什麼關係。它本質上是為了要校正螢幕。
好了,現在我們來看怎樣解決這個問題。是的,這是一個問題:)嗯,朋友,我們只要再套用另外一條反向的曲線,就可以把原本的曲線變成直線了(線性化)。你看到這次實線因為我們套用的曲線而變直了。
再解釋一下,... sRGB是繪圖軟體對螢幕的校正。數位相機會對你的照片套用sRGB 但是你不會察覺這件事. 所以當你利用此照片在真正的線性工作環境中時 事實上你的操作可能會比真實世界的光線反應還要更劇烈一點。我用以下的漸層圖來說明
這是一張漸層圖 圖中是個0到1的數值 共有32階。請注意0.5數值正好在中間。這張是你輸入到螢幕的圖檔。這是一個線性圖檔!
這是你的顯示器顯示出來的樣子。在0.5的位置顯然不是在中間了。這代表螢幕是非線性的。
這是校正後的影像 沒錯 看起來比較亮了 但是這個校正讓你播放在非線性的螢幕上時 圖片顯示的是線性的 以上說明希望讀者能明白
我們再舉一個例子。
這裡有兩張圖。再中間的灰色具有0.18的數值(中間灰色點)。左邊是以sRGB編碼 右邊透過sRGB螢幕校正的影像。這會讓灰色變成.46的數值。
Gamma編碼的圖形會導致灰階的細節消失
線性圖形會保有細節
讓我們將以上觀念以3D軟體進行實戰吧:3DS Max 7.0與VRay的1.46
以上是我們算第一張的結果:
現在,我們必須將這張圖線性化,如果我們希望畫面更逼真。
首先到Customize -> Preferences -> Gamma tab 將數值改變
這樣我們才能在材質編輯器看到正確數值。
- Brazil的用戶,你就快完成了 接下一步吧。
- Mental Ray的用戶 到這裡算是完成了!你本來就是用線性方法在算圖。
- Scanline render用戶-到這裡算是完成了。以後的操作都是線性流程了。
[更多文章]