一、前言
Gamma矯正其實(shí)也屬于我前面落下的一塊內(nèi)容,打算把它補(bǔ)上,其它的沒補(bǔ)是因?yàn)槲抑皩懙腉AMES101筆記里已經(jīng)涵蓋了,而Gamma矯正在101里面確實(shí)沒提到,于是打算把它補(bǔ)上,這塊內(nèi)容并不難,但是想通透的理解我覺的還是有難度的,尤其是關(guān)于Gamma矯正,它的原理其實(shí)很簡單,就是1-1=0,但是想要完全解釋的明白我覺得還是有一定困難,而且網(wǎng)上的絕大部分的資料講解的有一定誤導(dǎo)性,也可能是我理解的有問題,并不是說他們說錯(cuò)了,而是他們講解的很容易讓人產(chǎn)生困惑和疑問以及誤區(qū),包括我自己也是,所以結(jié)合我自己所理解的,打算把這塊跟大家說明白。(本篇不全是百人的內(nèi)容)
二、線性空間與Gamma空間
相信大家都看過這張圖,我也就不賣關(guān)子了,上面那一條是人眼覺得均勻的變化的亮度(Gamma空間),下面那一條是實(shí)際上真實(shí)世界物理上的均勻變化的亮度(線性空間)。
簡單點(diǎn)說人眼感知的均勻和物理上的均勻是不一樣的,人眼對(duì)暗部變化感受明顯,對(duì)亮部變化感受不明顯。我們把它們兩個(gè)均勻之間做一個(gè)映射就會(huì)得到這么一條曲線如下圖。
三、Gamma矯正
上圖就是Gamma矯正的過程,之間用一個(gè)傳遞函數(shù)來作為線性空間和Gamma空間之間的映射轉(zhuǎn)換,和。
你可能會(huì)問,我們要的不就是人眼看著均勻變化嗎?為什么不直接把第一張圖的結(jié)果拿出來顯示在屏幕上呢?
這里是一個(gè)思維誤區(qū),雖然圖像顯示在屏幕上了,但是屏幕上的圖像還要經(jīng)過你的眼睛然后變成視覺信號(hào)進(jìn)入你的大腦皮層,你的眼睛自帶非線性映射功能,所以你才會(huì)覺得第一張圖“異常的亮”,因?yàn)樗弧疤崃痢绷藘纱巍R簿褪钦f雖然我們以我們的眼睛為標(biāo)準(zhǔn),但是我們更希望看到的是線性空間,因?yàn)檠劬ψ詭мD(zhuǎn)換功能,也正是因?yàn)檫@樣,我們往往覺得白天的時(shí)候非常的亮,而較黑的地方很少。
四、為什么要進(jìn)行Gamma矯正
我們現(xiàn)在常用的為sRGB顏色空間,也就是傳遞函數(shù)gamma=2.2的顏色空間。而常用的存儲(chǔ)格式RGBA32格式,每個(gè)通道只有8位存儲(chǔ),也就是0~255這個(gè)范圍,這顯然不能表現(xiàn)出所有的線性空間的亮度值,于是我們打算為我們的眼睛著想,存儲(chǔ)Gamma空間也就是我們?nèi)搜壅J(rèn)為均勻的值。我們前面說了人眼對(duì)暗部感受明顯,對(duì)亮部感受不明顯,所以我們打算犧牲亮部而多存儲(chǔ)暗部的值,這也就是我們前面提到的映射曲線的原理。
關(guān)于另一個(gè)早期CRT陰極顯像管顯示器的電壓和屏幕亮度承次冪關(guān)系的原因我并不想提,因?yàn)楝F(xiàn)在的顯示器已經(jīng)沒有這個(gè)問題了,而且說完這個(gè)會(huì)有很多誤解和問題,混亂和迷惑,因?yàn)槟愫茈y將這個(gè)與前面的原因聯(lián)系起來,所以既然CRT顯示器已經(jīng)被淘汰了,咱們也就不用管了,感興趣的朋友可以自己看看,這里就不具體說了。
五、線性工作流
線性工作流存在的意義就是確保我們?cè)谄聊簧峡吹降牧炼扔肋h(yuǎn)是正確的符合物理真實(shí)世界的。因此當(dāng)涉及到渲染和光照計(jì)算,我們都會(huì)在線性空間完成,這樣才能確保計(jì)算結(jié)果正確。我舉兩個(gè)例子:
1.假設(shè)我弄了一張?jiān)贕amma空間下亮度為0.5的圖,那么當(dāng)它在顯示器上顯示時(shí),它的實(shí)際亮度應(yīng)該是0.218,這個(gè)時(shí)候如果我想對(duì)它做亮度乘以2的這么一個(gè)操作,如果在Gamma空間下的話,它的亮度就變成了1,然后經(jīng)過顯示器的矯正變?yōu)榫€性空間時(shí)它仍然是1,但是這是錯(cuò)誤的,我們應(yīng)該在線性空間下進(jìn)行計(jì)算,也就是說在對(duì)這張圖進(jìn)行亮度翻倍的操作時(shí)應(yīng)該先把它映射到線性空間,這樣0.218*2=0.436,然后變換會(huì)Gamma空間,經(jīng)顯示器再變換回線性空間,這樣得到的結(jié)果是0.436,才是正確的亮度。
2.再舉一個(gè)渲染器的例子,渲染器它是物理模擬渲染的,也就是說再渲染器里,光線是線性空間的,但如果我們的貼圖沒有經(jīng)過處理,直接丟進(jìn)渲染器進(jìn)行計(jì)算,實(shí)際上貼圖是在Gamma空間中的,這顯然是錯(cuò)誤的,我們應(yīng)該先對(duì)貼圖處理把它映射到線性空間然后再丟進(jìn)渲染器和光線運(yùn)算,這樣得出的結(jié)果才是正確的。使用Shader時(shí)也是一樣。
六、Unity中的顏色空間?
當(dāng)選擇Gamma Space時(shí),Unity不會(huì)做任何處理。當(dāng)選擇Linear Space時(shí),引擎的渲染流程則會(huì)在線性空間計(jì)算?。
理想情況下項(xiàng)目使用線性空間的貼圖顏色,不需要勾選貼圖上的sRGB選項(xiàng),如果在貼圖選項(xiàng)上勾選了sRGB的選項(xiàng),Unity則會(huì)通過硬件特性在采樣時(shí)進(jìn)行線性轉(zhuǎn)換。
?
主要由兩個(gè)硬件特性來支持:
sRGB Frame Buffer
- 將Shader的計(jì)算結(jié)果輸出到顯示器前做Gamma校正
- 作為紋理被讀取時(shí)會(huì)自動(dòng)把存儲(chǔ)的顏色從sRGB空間轉(zhuǎn)換到線性空間
- 調(diào)用ReadPixels()、ReadBackImage()時(shí),會(huì)直接返回sRGB空間下的顏色
- sRGB Frame Buffer只支持每通道為8bit的格式,不支持浮點(diǎn)格式
- HDR開啟后會(huì)先把渲染結(jié)果繪制到浮點(diǎn)格式的Frame Buffer中,最后繪制到sRGB Frame Buffer上輸出。
sRGB Sampler
- 將sRGB的貼圖進(jìn)行線性采樣的轉(zhuǎn)換。
使用硬件特性完成sRGB貼圖的線性采樣和shader計(jì)算結(jié)果的gamma校正,比起在shader里對(duì)貼圖采樣和計(jì)算結(jié)果的校正要快。
七、資源導(dǎo)出問題
1.Substace Painter
Substace Painter貼圖導(dǎo)出時(shí)是Gamma空間,顏色偏亮,所以導(dǎo)入到Unity時(shí)要把貼圖的sRGB選項(xiàng)勾選上,把它返回線性空間。
2.PhotoShop
如果使用線性空間,一般來說Photoshop可以什么都不改,導(dǎo)出的貼圖只要勾上sRGB就可以了。你也可以調(diào)整PhotoShop的伽瑪值為1,導(dǎo)出的貼圖在Unity中也不需要勾選sRGB了。
PhotoShop對(duì)顏色管理特別精確,Unity里看到的顏色要經(jīng)過顯示器的伽瑪變換,而PhotoShop不會(huì),PhotoShop會(huì)讀取顯示器的Color Profile,反向補(bǔ)償回去。
PhotoShop有第二個(gè)Color Profile,叫做Document Color Profile。通常它的默認(rèn)值就是sRGB Color Profile,和顯示器的Color Profile一致,顏色是被這個(gè)Color Profile壓暗了,所以PhotoShop中看到的結(jié)果才和Unity中一樣。
線性空間中的半透明圖片制作
Photoshop的圖層和圖層之間做混合的時(shí)候,每個(gè)上層圖層都經(jīng)過了伽馬變換,然后才做了混合,這個(gè)方式是設(shè)置中的默認(rèn)值。你需要在設(shè)置中更改它,選擇“用灰度系數(shù)混合RGB顏色”,參數(shù)設(shè)置為1,這樣圖層直接就是直接混合的結(jié)果。(sRGB編碼是為了增加8位顏色的精度,如果你是用了32位浮點(diǎn)數(shù)的貼圖格式,PhotoShop自動(dòng)使用的是線性空間,沒有做任何伽瑪變換的)
參考
2600_伽馬校正1_嗶哩嗶哩_bilibili
2600_伽馬矯正 (qq.com)
Gamma校正與線性工作流入門講解_嗶哩嗶哩_bilibili
對(duì) Gamma 校正的個(gè)人理解 - 知乎 (zhihu.com)文章來源:http://www.zghlxwxcb.cn/news/detail-653177.html
Unite 2018 | 淺談伽瑪和線性顏色空間 - GameRes游資網(wǎng)?文章來源地址http://www.zghlxwxcb.cn/news/detail-653177.html
到了這里,關(guān)于[自學(xué)記錄06|*百人計(jì)劃]Gamma矯正與線性工作流的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!