Unity-伽馬(gamma)空間和線性空間是什么與他們之間的不同?

譯自:http://www.kinematicsoup.com/news/2016/6/15/gamma-and-linear-space-what-they-are-how-they-differ

線性空間照明的概念越來越多的被開發(fā)人員使用,為了達到下一代真實感使用基于物理(PBR)的渲染。線性空間和其對應(yīng)的伽馬空間是很簡單和重要的概念,下文說明了兩種空間是什么,它們的不同,和它們是如何使用的。

線性空間

首先我們需要了解線性顏色空間的概念。簡單的說,它意味數(shù)值強度與它的感知強度成正比。這意味著可以正確的添加和相乘顏色。一個顏色空間沒有屬性叫"non-linear"。下面是一個雙倍強度值在線性空間和非線性空間的例子。雖然在線性空間中相應(yīng)數(shù)值是正確的,但是在非線性空間中,我們不能簡單的通過加法得到結(jié)果


圖片.png

相機對于光強的感知是基于線性的,業(yè)界的圖片都是存儲在Gamma空間中,那么相機的到最終的圖片就會經(jīng)歷一個編碼過程,也就是Gamma編碼, Vout = Vin(1/2.2) ;

伽馬空間

需要使用伽馬的兩種主要情況:首先屏幕對強度是非線性的相應(yīng)。另一點人眼在暗色的識別比在亮色的識別更好,這意味著圖片壓縮到存儲空間,我們想得到更好的精度對于暗強度,且犧牲了較亮強度。這兩個問題都是通過伽馬矯正來解決的問題,伽馬校正是指將圖片中的每個像素強度他通過冪函數(shù)進行處理。具體來說,gamma是應(yīng)用于圖像的冪的名稱。


圖片.png

下圖顯示了gamma值的不同


圖片.png

Gamma補償

通過相機拍攝的圖片,以gamma空間的存儲格式(sRGB),那么在顯示器上查看圖片,是否也是以(sRGB)顯示的?不是的。
業(yè)界通過對原生自然光進行壓縮,那么一定要將壓縮的圖片轉(zhuǎn)換回來,得到接近自然界的圖像,就是Gamma補償,也叫做Gamma校正。
解壓過程:Vout = Vin2.2
這一步使顯示器自動執(zhí)行

Unity中使用線性空間和Gamma空間

在引擎中的光學(xué)計算(shader)中,是基于線性空間的公式進行的。但是輸入的數(shù)據(jù)是基于gamma空間存儲方式,圖像采樣結(jié)果作為光學(xué)計算公式的輸入,得到的輸出結(jié)果自然是錯誤的。

Gamma空間的處理過程
在gamma空間中,shader進行光學(xué)計算的過程中,直接將圖像采樣的結(jié)果帶入公式進行計算,得到的color存入colorbuff中,然后提交到顯示器,進行一次gamma補償?shù)玫阶罱K顏色

線性空間的處理過程
如果原圖是Gamma空間的sRGB存儲方式,需要勾選sRGB標(biāo)志,這樣在進行shader計算的時候,會先進行一次gamma補償,將顏色從gamma空間轉(zhuǎn)換到線性空間,然后進行正確的光照計算,得到的結(jié)果最后在轉(zhuǎn)換回gamma空間,最后提交到顯示器。

圖片.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容