發布時間:2024-01-19閱讀(16)

上圖左是用不正確的Gamma算出來的效果圖,右圖是在正確的Gamma環境調出的結果.VRay在預設的狀況很容易算出艷麗飽和的色調這樣的色調跟mental ray的細致的清色調有很大的差別.其實色調感的關鍵是gamma,反而不是渲染器本身.
伽瑪(Gamma)是舊時代的產物由于當時CRT屏幕輸入一單位電壓并不會產生等量的亮度(非線性)所以為了正確顯示畫面就刻意產生一個曲線關系(輸入與輸入)讓最終輸出的圖像為線性圖像.即使是現代能夠制造出線性反應的屏幕(例如液晶)這種現象仍然深深的影響圖像處理不管是后至合成調色或是3D算圖渲染.
過去因為數位相機拍攝的圖像因為一定會放在屏幕上觀看而數位相機發展的年代當時仍然是CRT所以數位相機會自動在照片中內嵌Gamma的信息讓照片能正常地顯示在CRT屏幕.然而到現代這反而成為一個大問題因為所有渲染引擎VRay,mental ray,Finalrender,Maxwell,..都是以線性環境來計算物體與光的反應所以如果輸入一個帶有Gamma信息的貼圖會造成輸出圖像的錯誤(誤差)甚至產生某種色彩調性(比方說VRay似乎比mental ray更艷麗)的誤解.

mental ray算出來的效果圖
這里翻譯了幾篇不同來源的文章,可以把趁機會把觀念搞懂因為線性工作流程(linear workflow)是未來的趨勢.當浮點運算(16或32bit)的后制剪輯軟件變成主流時每個專業領域的人每天都會與LDR,HDR,Gamma這些東西搏斗.

這是Autodesk 3ds max 2010 Help里面的說明圖這個流程幾乎把所有觀念都講到了,關鍵在于在你給算圖器(renderer)圖檔之前一定要把圖檔改為線性數據這時圖檔就能夠在算圖器這個黑盒子中以正確的數學式計算結果最后在輸出的時候即使結果是正確的你沒有調整到跟屏幕相對的gamma值那也會看起來是錯的圖像!
伽瑪校正(Gamma correction)是一個經常被誤解的觀念。簡單來說,伽瑪描述了相機或屏幕的非線性反應的現象。當一個相機(模擬或數字)接收到兩倍的光源時,相機并不會把這個數據存成兩倍的RGB數值。有很多原因為什么相機的記錄系統會有這種記錄方式----這種現象稱為伽瑪。其中一個原因是顯示器感光本身的問題,例如底片具有非線性的感光曲線,另外CRT屏幕也有同樣問題:像素的亮度跟輸入的電壓強度并不是呈現線性關系。
另外一個原因,因為人眼對于黑暗中的細節比明亮中的細節還要更敏感(人眼的感光曲線其實是對數曲線,稱為Weber-Fechner定律)所以人眼視覺是以非線性的方式記錄信號的。而現代液晶顯示器(TFT)本身雖然沒有先天上的伽瑪問題,但是為了要迎合傳統的工作流程TFT屏幕會刻意模擬出伽瑪的效果。
建議讀者也可以讀讀這篇關于線性色彩空間你就會知道位何在處理HDRI數據時伽瑪校正的重要性。如果你仍然不明白正確處理伽瑪是很重要的,請繼續往下讀。
伽瑪的基本觀念(Gamma 101)
所有的屏幕都有非線性的輸出輸入反應。這是故意的.
大多數的2D軟件都會以線性的顏色模型來處理,所以它假定,255數值的亮度是128數值的兩倍。但由于顯示器對于信號的輸出輸入是非線性的,所以產生的亮度會是不正確的。事實上,大多數屏幕(gamma=2.2),如果你想要顯示出255數值亮度的50%亮度的話那你就必須要輸入(0.5 ^(1/2.2))* 255 = 186的數值。如果你不考慮gamma的問題輸入128數值就只會產生大約(128/255)^ 2.2 = 22%的亮度。
數位相機基本上具有線性的輸出入效果,但因為通常我們會在電腦屏幕上面看拍出來的照片,所以數位相機會故意在照片里面嵌入gamma。(所以。JPG格式是帶有gamma的,但是RAW的格式是即線性資料,當你把RAW檔轉成JPG格式時就會產生非線性的照片了)
因此,如果你用2D軟件去開你照片拍出的jpg圖檔時,您必須要把gamma補償回來(去gamma)。
如果你的圖片是在2D軟件產生的(基本上這張圖是線性的),當你把這張照片顯示在帶伽瑪的屏幕你也要做gamma補償。
更多關于伽瑪
Gamma不是bug,它是一個功能,因為人的眼睛對光線的亮度具有非線性的感光反應。如果你每個顏色只有8 bit來記錄顏色數據,很重要地利用這8 bit正確地重現人眼的感光效果很重要它必須要是非線性的編碼方式。即使是新一點的屏幕仍然有伽瑪:同常顯卡會用8位來處理每種顏色避免色帶問題,這8位必須每個強度看起來間距是等距的。屏幕的廠商有能力制造線性反應曲線的屏幕,但如果你用8位來顯示圖片,效果會很糟。
現今大多數電腦屏幕都以sRGB的標準來顯示,也就是伽馬2.2。
大多數數位相機也以sRGB紀錄相片。如果是掃描進來的圖或是合成圖象就不會帶有伽馬2.2。
幾乎所有的浮點紀錄HDR數據是線性的,即與伽瑪為1.0。
對于圖片而言,“伽馬”代表了強度是如何被記錄的。換句話說:圖檔的gamma是為了要讓圖片在屏幕上能正確地顯示出來。
有些圖片會帶有gamma的標簽,但這是不可靠的,因為很多繪圖軟件會忽略這個標簽。因此,要正確知道圖檔的gamma數值并不容易。
如果您的屏幕有2.2的伽瑪而顯示的圖片看起來有很正常,那該圖片可能本身就帶有伽瑪2.2。
3D算圖引擎會假定光線是以線性的模式來記錄。所以,你丟給算圖引擎任何不是線性紀錄的圖檔(帶有gamma),嚴格說起來這個圖檔呈現出的效果是錯誤的(盡管它可能仍然好看)。
請注意,NVIDIA顯卡驅動程序把gamma復雜性隱藏起來,當你在NVIDIA控制面板中看到:“1.0”,其實就代表是伽瑪2.2。因此,“NVIDIA公司的γ= 1.0”,其實是標準的sRGB伽瑪2.2
什么時候忽略gamma問題時會產生恐怖的錯誤
基本上當你要去編輯像素混合時就會有差。例如:
反鋸齒,特別是在做wireframe渲染或是渲染有高對比的圖像
縮小圖片。所以,高對比度的圖像,會產生更明顯的錯誤
半透明物體
Gamma in 3ds Max
在Preferences菜單中可以控制伽瑪。基本上有三個伽瑪值可以調:
顯示描述了您顯示器的gamma通常,這個會設定成2.2。
當讀取貼圖時自動加載Gamma。這個功能能把圖片線性化(譯注:去gamma)。通常,這個有設定為2.2。注意:如果您打開一張圖檔,這張圖檔嵌入伽瑪信息,3ds Max會套用固定的gamma數值,而不是用你圖檔的gamma數值!當然你可以改變這個設定當你開啟圖檔的時候。
輸出伽馬會處理當你儲存圖檔時。這數值應該是1.0,如果你要儲存線性浮點圖檔格式。如果你只是希望這張圖檔再屏幕顯示,那就用2.2吧。

當您打開一張bitmap圖檔而這張圖檔內嵌gamma,當你開啟圖檔時你可以選擇是要套用通用gamma數值還是要讀取圖檔的gamma。有一點很重要的是bump或displacement貼圖你gamma一定要設定為1.0因為這些是線性數據!
請注意,一些舊的3ds Max算法已調整為“好看”不伽瑪校正,并因此將看起來很有趣,如果你正確的伽瑪。
render farm會遇到的伽瑪問題
當你的render slaves(算圖奴工)不認識你送出的max場景檔里面的gamma數據時算圖就會出現問題所以你可以在每臺算圖奴工中設定respect the gamma state這樣當讀到max場景檔時就會自動加載gamma。
在3ds Max 2009當中使用分布式算圖Distributed Bucket Rendering(DBR)會有某個bug,他會強制加載固定的nput Gamma.這是因為分布式算圖會自動啟動mr Map Manager它會忽略“per bitmap”gamma的設定,所以當你在場景中有使用HDR檔案HDR會受到gamma=2.2影響所以最后會產生太暗的圖像目前解決的辦法是將global input gamma設為1.0然后使用mrs“Utility Gamma/Gain”shader把貼圖去gamma.
伽瑪常被誤解的觀念
錯誤觀念:我已經校正屏幕了-所以我不需要管gamma
錯。當你校正完屏幕,通常代表你校準到標準的sRGB曲線,通常會是伽瑪2.2。當你的屏幕做過校正,這表示你的所有圖檔都必須要做伽瑪2.2的補償
錯誤觀念:我的數位相機會記錄“線性”的照片
有可能你如果是用RAW檔來存盤的話它是線性格式沒錯。但當你把RAW檔轉成JPG格式時就會自動套用gamma,通常這個數值是2.2
本片文章對你有幫助的話留下一個贊和你的評論吧!謝謝你的支持
歡迎分享轉載→http://www.avcorse.com/read-30409.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖