OpenGL 圖形庫(kù)的使用(三十三)—— 高級(jí)光照之Gamma校正Gamma Correction

版本記錄

版本號(hào) 時(shí)間
V1.0 2018.01.19

前言

OpenGL 圖形庫(kù)項(xiàng)目中一直也沒(méi)用過(guò)丁屎,最近也想學(xué)著使用這個(gè)圖形庫(kù),感覺(jué)還是很有意思呼股,也就自然想著好好的總結(jié)一下耕魄,希望對(duì)大家能有所幫助。下面內(nèi)容來(lái)自歡迎來(lái)到OpenGL的世界彭谁。
1. OpenGL 圖形庫(kù)使用(一) —— 概念基礎(chǔ)
2. OpenGL 圖形庫(kù)使用(二) —— 渲染模式吸奴、對(duì)象、擴(kuò)展和狀態(tài)機(jī)
3. OpenGL 圖形庫(kù)使用(三) —— 著色器缠局、數(shù)據(jù)類型與輸入輸出
4. OpenGL 圖形庫(kù)使用(四) —— Uniform及更多屬性
5. OpenGL 圖形庫(kù)使用(五) —— 紋理
6. OpenGL 圖形庫(kù)使用(六) —— 變換
7. OpenGL 圖形庫(kù)的使用(七)—— 坐標(biāo)系統(tǒng)之五種不同的坐標(biāo)系統(tǒng)(一)
8. OpenGL 圖形庫(kù)的使用(八)—— 坐標(biāo)系統(tǒng)之3D效果(二)
9. OpenGL 圖形庫(kù)的使用(九)—— 攝像機(jī)(一)
10. OpenGL 圖形庫(kù)的使用(十)—— 攝像機(jī)(二)
11. OpenGL 圖形庫(kù)的使用(十一)—— 光照之顏色
12. OpenGL 圖形庫(kù)的使用(十二)—— 光照之基礎(chǔ)光照
13. OpenGL 圖形庫(kù)的使用(十三)—— 光照之材質(zhì)
14. OpenGL 圖形庫(kù)的使用(十四)—— 光照之光照貼圖
15. OpenGL 圖形庫(kù)的使用(十五)—— 光照之投光物
16. OpenGL 圖形庫(kù)的使用(十六)—— 光照之多光源
17. OpenGL 圖形庫(kù)的使用(十七)—— 光照之復(fù)習(xí)總結(jié)
18. OpenGL 圖形庫(kù)的使用(十八)—— 模型加載之Assimp
19. OpenGL 圖形庫(kù)的使用(十九)—— 模型加載之網(wǎng)格
20. OpenGL 圖形庫(kù)的使用(二十)—— 模型加載之模型
21. OpenGL 圖形庫(kù)的使用(二十一)—— 高級(jí)OpenGL之深度測(cè)試
22. OpenGL 圖形庫(kù)的使用(二十二)—— 高級(jí)OpenGL之模板測(cè)試Stencil testing
23. OpenGL 圖形庫(kù)的使用(二十三)—— 高級(jí)OpenGL之混合Blending
24. OpenGL 圖形庫(kù)的使用(二十四)—— 高級(jí)OpenGL之面剔除Face culling
25. OpenGL 圖形庫(kù)的使用(二十五)—— 高級(jí)OpenGL之幀緩沖Framebuffers
26. OpenGL 圖形庫(kù)的使用(二十六)—— 高級(jí)OpenGL之立方體貼圖Cubemaps
27. OpenGL 圖形庫(kù)的使用(二十七)—— 高級(jí)OpenGL之高級(jí)數(shù)據(jù)Advanced Data
28. OpenGL 圖形庫(kù)的使用(二十八)—— 高級(jí)OpenGL之高級(jí)GLSL Advanced GLSL
29. OpenGL 圖形庫(kù)的使用(二十九)—— 高級(jí)OpenGL之幾何著色器Geometry Shader
30. OpenGL 圖形庫(kù)的使用(三十)—— 高級(jí)OpenGL之實(shí)例化Instancing
31. OpenGL 圖形庫(kù)的使用(三十一)—— 高級(jí)OpenGL之抗鋸齒Anti Aliasing
32. OpenGL 圖形庫(kù)的使用(三十二)—— 高級(jí)光照之高級(jí)光照Advanced Lighting

Gamma校正前注

當(dāng)我們計(jì)算出場(chǎng)景中所有像素的最終顏色以后奄抽,我們就必須把它們顯示在監(jiān)視器上。過(guò)去甩鳄,大多數(shù)監(jiān)視器是陰極射線管顯示器(CRT)逞度。這些監(jiān)視器有一個(gè)物理特性就是兩倍的輸入電壓產(chǎn)生的不是兩倍的亮度。輸入電壓產(chǎn)生約為輸入電壓的2.2次冪的亮度妙啃,這叫做監(jiān)視器Gamma档泽。

Gamma也叫灰度系數(shù),每種顯示設(shè)備都有自己的Gamma值揖赴,都不相同馆匿,有一個(gè)公式:設(shè)備輸出亮度 = 電壓的Gamma次冪,任何設(shè)備Gamma基本上都不會(huì)等于1燥滑,等于1是一種理想的線性狀態(tài)渐北,這種理想狀態(tài)是:如果電壓和亮度都是在0到1的區(qū)間,那么多少電壓就等于多少亮度铭拧。對(duì)于CRT赃蛛,Gamma通常為2.2,因而搀菩,輸出亮度 = 輸入電壓的2.2次冪呕臂,你可以從本節(jié)第二張圖中看到Gamma2.2實(shí)際顯示出來(lái)的總會(huì)比預(yù)期暗,相反Gamma0.45就會(huì)比理想預(yù)期亮肪跋,如果你講Gamma0.45疊加到Gamma2.2的顯示設(shè)備上歧蒋,便會(huì)對(duì)偏暗的顯示效果做到校正,這個(gè)簡(jiǎn)單的思路就是本節(jié)的核心。

人類所感知的亮度恰好和CRT所顯示出來(lái)相似的指數(shù)關(guān)系非常匹配谜洽。為了更好的理解所有含義萝映,請(qǐng)看下面的圖片:

第一行是人眼所感知到的正常的灰階,亮度要增加一倍(比如從0.1到0.2)你才會(huì)感覺(jué)比原來(lái)變亮了一倍(譯注:這里的意思是說(shuō)比如一個(gè)東西的亮度0.3阐虚,讓人感覺(jué)它比原來(lái)變亮一倍锌俱,那么現(xiàn)在這個(gè)亮度應(yīng)該成為0.6,而不是0.4敌呈,也就是說(shuō)人眼感知到的亮度的變化并非線性均勻分布的贸宏。問(wèn)題的關(guān)鍵在于這樣的一倍相當(dāng)于一個(gè)亮度級(jí),例如假設(shè)0.1磕洪、0.2吭练、0.4、0.8是我們定義的四個(gè)亮度級(jí)別析显,在0.1和0.2之間人眼只能識(shí)別出0.15這個(gè)中間級(jí)鲫咽,而雖然0.4到0.8之間的差距更大,這個(gè)區(qū)間人眼也只能識(shí)別出一個(gè)顏色)谷异。然而分尸,當(dāng)我們談?wù)摴獾奈锢砹炼龋热绻庠窗l(fā)射光子的數(shù)量的時(shí)候歹嘹,底部(第二行)的灰階顯示出的才是物理世界真實(shí)的亮度箩绍。如底部的灰階顯示,亮度加倍時(shí)返回的也是真實(shí)的物理亮度(譯注:這里亮度是指光子數(shù)量和正相關(guān)的亮度尺上,即物理亮度材蛛,前面討論的是人的感知亮度;物理亮度和感知亮度的區(qū)別在于怎抛,物理亮度基于光子數(shù)量卑吭,感知亮度基于人的感覺(jué),比如第二個(gè)灰階里亮度0.1的光子數(shù)量是0.2的二分之一)马绝,但是由于這與我們的眼睛感知亮度不完全一致(對(duì)比較暗的顏色變化更敏感)豆赏,所以它看起來(lái)有差異。

因?yàn)槿搜劭吹筋伾牧炼雀鼉A向于頂部的灰階富稻,監(jiān)視器使用的也是一種指數(shù)關(guān)系(電壓的2.2次冪)掷邦,所以物理亮度通過(guò)監(jiān)視器能夠被映射到頂部的非線性亮度;因此看起來(lái)效果不錯(cuò)(譯注:CRT亮度是是電壓的2.2次冪而人眼相當(dāng)于2次冪唉窃,因此CRT這個(gè)缺陷正好能滿足人的需要)耙饰。

監(jiān)視器的這個(gè)非線性映射的確可以讓亮度在我們眼中看起來(lái)更好纹笼,但當(dāng)渲染圖像時(shí)纹份,會(huì)產(chǎn)生一個(gè)問(wèn)題:我們?cè)趹?yīng)用中配置的亮度和顏色是基于監(jiān)視器所看到的,這樣所有的配置實(shí)際上是非線性的亮度/顏色配置。請(qǐng)看下圖:

點(diǎn)線代表線性顏色/亮度值(譯注:這表示的是理想狀態(tài)蔓涧,Gamma為1)件已,實(shí)線代表監(jiān)視器顯示的顏色。如果我們把一個(gè)點(diǎn)線線性的顏色翻一倍元暴,結(jié)果就是這個(gè)值的兩倍篷扩。比如,光的顏色向量Lˉ=(0.5,0.0,0.0)代表的是暗紅色茉盏。如果我們?cè)诰€性空間中把它翻倍鉴未,就會(huì)變成(1.0,0.0,0.0),就像你在圖中看到的那樣鸠姨。然而铜秆,由于我們定義的顏色仍然需要輸出的監(jiān)視器上,監(jiān)視器上顯示的實(shí)際顏色就會(huì)是(0.218,0.0,0.0)讶迁。在這兒?jiǎn)栴}就出現(xiàn)了:當(dāng)我們將理想中直線上的那個(gè)暗紅色翻一倍時(shí)连茧,在監(jiān)視器上實(shí)際上亮度翻了4.5倍以上!

直到現(xiàn)在巍糯,我們還一直假設(shè)我們所有的工作都是在線性空間中進(jìn)行的(譯注:Gamma為1)啸驯,但最終還是要把所有的顏色輸出到監(jiān)視器上,所以我們配置的所有顏色和光照變量從物理角度來(lái)看都是不正確的祟峦,在我們的監(jiān)視器上很少能夠正確地顯示罚斗。出于這個(gè)原因,我們(以及藝術(shù)家)通常將光照值設(shè)置得比本來(lái)更亮一些(由于監(jiān)視器會(huì)將其亮度顯示的更暗一些)宅楞,如果不是這樣惰聂,在線性空間里計(jì)算出來(lái)的光照就會(huì)不正確。同時(shí)咱筛,還要記住搓幌,監(jiān)視器所顯示出來(lái)的圖像和線性圖像的最小亮度是相同的,它們最大的亮度也是相同的迅箩;只是中間亮度部分會(huì)被壓暗溉愁。

因?yàn)樗兄虚g亮度都是線性空間計(jì)算出來(lái)的(譯注:計(jì)算的時(shí)候假設(shè)Gamma為1)監(jiān)視器顯以后,實(shí)際上都會(huì)不正確饲趋。當(dāng)使用更高級(jí)的光照算法時(shí)拐揭,這個(gè)問(wèn)題會(huì)變得越來(lái)越明顯,你可以看看下圖:


Gamma校正

Gamma校正(Gamma Correction)的思路是在最終的顏色輸出上應(yīng)用監(jiān)視器Gamma的倒數(shù)奕塑√梦郏回頭看前面的Gamma曲線圖,你會(huì)有一個(gè)短劃線龄砰,它是監(jiān)視器Gamma曲線的翻轉(zhuǎn)曲線盟猖。我們?cè)陬伾@示到監(jiān)視器的時(shí)候把每個(gè)顏色輸出都加上這個(gè)翻轉(zhuǎn)的Gamma曲線讨衣,這樣應(yīng)用了監(jiān)視器Gamma以后最終的顏色將會(huì)變?yōu)榫€性的。我們所得到的中間色調(diào)就會(huì)更亮式镐,所以雖然監(jiān)視器使它們變暗反镇,但是我們又將其平衡回來(lái)了。

我們來(lái)看另一個(gè)例子娘汞。還是那個(gè)暗紅色(0.5,0.0,0.0)歹茶。在將顏色顯示到監(jiān)視器之前,我們先對(duì)顏色應(yīng)用Gamma校正曲線你弦。線性的顏色顯示在監(jiān)視器上相當(dāng)于降低了2.2次冪的亮度惊豺,所以倒數(shù)就是1/2.2次冪。Gamma校正后的暗紅色就會(huì)成為(0.5,0.0,0.0)1/2.2 = (0.5,0.0,0.0)0.45 = (0.73,0.0,0.0)禽作。校正后的顏色接著被發(fā)送給監(jiān)視器扮叨,最終顯示出來(lái)的顏色是(0.73,0.0,0.0)2.2 = (0.5,0.0,0.0)。你會(huì)發(fā)現(xiàn)使用了Gamma校正领迈,監(jiān)視器最終會(huì)顯示出我們?cè)趹?yīng)用中設(shè)置的那種線性的顏色彻磁。

2.2通常是是大多數(shù)顯示設(shè)備的大概平均gamma值±晖保基于gamma2.2的顏色空間叫做sRGB顏色空間衷蜓。每個(gè)監(jiān)視器的gamma曲線都有所不同,但是gamma2.2在大多數(shù)監(jiān)視器上表現(xiàn)都不錯(cuò)尘喝。出于這個(gè)原因磁浇,游戲經(jīng)常都會(huì)為玩家提供改變游戲gamma設(shè)置的選項(xiàng),以適應(yīng)每個(gè)監(jiān)視器(譯注:現(xiàn)在Gamma2.2相當(dāng)于一個(gè)標(biāo)準(zhǔn)朽褪,后文中你會(huì)看到置吓。但現(xiàn)在你可能會(huì)問(wèn),前面不是說(shuō)Gamma2.2看起來(lái)不是正好適合人眼么缔赠,為何還需要校正衍锚。這是因?yàn)槟阍诔绦蛑性O(shè)置的顏色,比如光照都是基于線性Gamma嗤堰,即Gamma1戴质,所以你理想中的亮度和實(shí)際表達(dá)出的不一樣,如果要表達(dá)出你理想中的亮度就要對(duì)這個(gè)光照進(jìn)行校正)踢匣。

有兩種在你的場(chǎng)景中應(yīng)用gamma校正的方式:

使用OpenGL內(nèi)建的sRGB幀緩沖告匠。 自己在像素著色器中進(jìn)行g(shù)amma校正。 第一個(gè)選項(xiàng)也許是最簡(jiǎn)單的方式离唬,但是我們也會(huì)喪失一些控制權(quán)后专。開(kāi)啟GL_FRAMEBUFFER_SRGB,可以告訴OpenGL每個(gè)后續(xù)的繪制命令里输莺,在顏色儲(chǔ)存到顏色緩沖之前先校正sRGB顏色戚哎。sRGB這個(gè)顏色空間大致對(duì)應(yīng)于gamma2.2裸诽,它也是家用設(shè)備的一個(gè)標(biāo)準(zhǔn)。開(kāi)啟GL_FRAMEBUFFER_SRGB以后建瘫,每次像素著色器運(yùn)行后續(xù)幀緩沖崭捍,OpenGL將自動(dòng)執(zhí)行g(shù)amma校正尸折,包括默認(rèn)幀緩沖啰脚。

開(kāi)啟GL_FRAMEBUFFER_SRGB簡(jiǎn)單的調(diào)用glEnable就行:

glEnable(GL_FRAMEBUFFER_SRGB);

自此,你渲染的圖像就被進(jìn)行g(shù)amma校正處理实夹,你不需要做任何事情硬件就幫你處理了橄浓。有時(shí)候,你應(yīng)該記得這個(gè)建議:gamma校正將把線性顏色空間轉(zhuǎn)變?yōu)榉蔷€性空間亮航,所以在最后一步進(jìn)行g(shù)amma校正是極其重要的荸实。如果你在最后輸出之前就進(jìn)行g(shù)amma校正,所有的后續(xù)操作都是在操作不正確的顏色值缴淋。例如准给,如果你使用多個(gè)幀緩沖,你可能打算讓兩個(gè)幀緩沖之間傳遞的中間結(jié)果仍然保持線性空間顏色重抖,只是給發(fā)送給監(jiān)視器的最后的那個(gè)幀緩沖應(yīng)用gamma校正露氮。

第二個(gè)方法稍微復(fù)雜點(diǎn),但同時(shí)也是我們對(duì)gamma操作有完全的控制權(quán)钟沛。我們?cè)诿總€(gè)相關(guān)像素著色器運(yùn)行的最后應(yīng)用gamma校正畔规,所以在發(fā)送到幀緩沖前,顏色就被校正了恨统。

void main()
{
    // do super fancy lighting 
    [...]
    // apply gamma correction
    float gamma = 2.2;
    fragColor.rgb = pow(fragColor.rgb, vec3(1.0/gamma));
}

最后一行代碼叁扫,將fragColor的每個(gè)顏色元素應(yīng)用有一個(gè)1.0/gamma的冪運(yùn)算,校正像素著色器的顏色輸出畜埋。

這個(gè)方法有個(gè)問(wèn)題就是為了保持一致莫绣,你必須在像素著色器里加上這個(gè)gamma校正,所以如果你有很多像素著色器悠鞍,它們可能分別用于不同物體兔综,那么你就必須在每個(gè)著色器里都加上gamma校正了。一個(gè)更簡(jiǎn)單的方案是在你的渲染循環(huán)中引入后處理階段狞玛,在后處理四邊形上應(yīng)用gamma校正软驰,這樣你只要做一次就好了。

這些單行代碼代表了gamma校正的實(shí)現(xiàn)心肪。不太令人印象深刻锭亏,但當(dāng)你進(jìn)行g(shù)amma校正的時(shí)候有一些額外的事情別忘了考慮。

1. sRGB紋理

因?yàn)楸O(jiān)視器總是在sRGB空間中顯示應(yīng)用了gamma的顏色硬鞍,無(wú)論什么時(shí)候當(dāng)你在計(jì)算機(jī)上繪制慧瘤、編輯或者畫(huà)出一個(gè)圖片的時(shí)候戴已,你所選的顏色都是根據(jù)你在監(jiān)視器上看到的那種。這實(shí)際意味著所有你創(chuàng)建或編輯的圖片并不是在線性空間锅减,而是在sRGB空間中(譯注:sRGB空間定義的gamma接近于2.2)糖儡,假如在你的屏幕上對(duì)暗紅色翻一倍,便是根據(jù)你所感知到的亮度進(jìn)行的怔匣,并不等于將紅色元素加倍握联。

結(jié)果就是紋理編輯者,所創(chuàng)建的所有紋理都是在sRGB空間中的紋理每瞒,所以如果我們?cè)阡秩緫?yīng)用中使用這些紋理金闽,我們必須考慮到這點(diǎn)。在我們應(yīng)用gamma校正之前剿骨,這不是個(gè)問(wèn)題代芜,因?yàn)榧y理在sRGB空間創(chuàng)建和展示,同樣我們還是在sRGB空間中使用浓利,從而不必gamma校正紋理顯示也沒(méi)問(wèn)題挤庇。然而,現(xiàn)在我們是把所有東西都放在線性空間中展示的贷掖,紋理顏色就會(huì)變壞嫡秕,如下圖展示的那樣:

紋理圖像實(shí)在太亮了,發(fā)生這種情況是因?yàn)橛鹱剩鼈儗?shí)際上進(jìn)行了兩次gamma校正淘菩!想一想,當(dāng)我們基于監(jiān)視器上看到的情況創(chuàng)建一個(gè)圖像屠升,我們就已經(jīng)對(duì)顏色值進(jìn)行了gamma校正潮改,所以再次顯示在監(jiān)視器上就沒(méi)錯(cuò)。由于我們?cè)阡秩局杏诌M(jìn)行了一次gamma校正腹暖,圖片就實(shí)在太亮了汇在。

為了修復(fù)這個(gè)問(wèn)題,我們得確保紋理制作者是在線性空間中進(jìn)行創(chuàng)作的脏答。但是糕殉,由于大多數(shù)紋理制作者并不知道什么是gamma校正,并且在sRGB空間中進(jìn)行創(chuàng)作更簡(jiǎn)單殖告,這也許不是一個(gè)好辦法阿蝶。

另一個(gè)解決方案是重校,或把這些sRGB紋理在進(jìn)行任何顏色值的計(jì)算前變回線性空間黄绩。我們可以這樣做:

float gamma = 2.2;
vec3 diffuseColor = pow(texture(diffuse, texCoords).rgb, vec3(gamma));

為每個(gè)sRGB空間的紋理做這件事非常煩人羡洁。幸好,OpenGL給我們提供了另一個(gè)方案來(lái)解決我們的麻煩爽丹,這就是GL_SRGB和GL_SRGB_ALPHA內(nèi)部紋理格式筑煮。

如果我們?cè)贠penGL中創(chuàng)建了一個(gè)紋理辛蚊,把它指定為以上兩種sRGB紋理格式其中之一,OpenGL將自動(dòng)把顏色校正到線性空間中真仲,這樣我們所使用的所有顏色值都是在線性空間中的了袋马。我們可以這樣把一個(gè)紋理指定為一個(gè)sRGB紋理:

glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

如果你還打算在你的紋理中引入alpha元素,必究必須將紋理的內(nèi)部格式指定為GL_SRGB_ALPHA秸应。

因?yàn)椴皇撬屑y理都是在sRGB空間中的所以當(dāng)你把紋理指定為sRGB紋理時(shí)要格外小心虑凛。比如diffuse紋理,這種為物體上色的紋理幾乎都是在sRGB空間中的灸眼。而為了獲取光照參數(shù)的紋理卧檐,像specular貼圖和法線貼圖幾乎都在線性空間中墓懂,所以如果你把它們也配置為sRGB紋理的話焰宣,光照就壞掉了。指定sRGB紋理時(shí)要當(dāng)心捕仔。

將diffuse紋理定義為sRGB紋理之后匕积,你將獲得你所期望的視覺(jué)輸出,但這次每個(gè)物體都會(huì)只進(jìn)行一次gamma校正榜跌。


衰減

在使用了gamma校正之后闪唆,另一個(gè)不同之處是光照衰減(Attenuation)。真實(shí)的物理世界中钓葫,光照的衰減和光源的距離的平方成反比悄蕾。

float attenuation = 1.0 / (distance * distance);

然而,當(dāng)我們使用這個(gè)衰減公式的時(shí)候础浮,衰減效果總是過(guò)于強(qiáng)烈帆调,光只能照亮一小圈,看起來(lái)并不真實(shí)豆同。出于這個(gè)原因番刊,我們使用在基本光照教程中所討論的那種衰減方程,它給了我們更大的控制權(quán)影锈,此外我們還可以使用雙曲線函數(shù):

float attenuation = 1.0 / distance;

雙曲線比使用二次函數(shù)變體在不用gamma校正的時(shí)候看起來(lái)更真實(shí)芹务,不過(guò)但我們開(kāi)啟gamma校正以后線性衰減看起來(lái)太弱了,符合物理的二次函數(shù)突然出現(xiàn)了更好的效果鸭廷。下圖顯示了其中的不同:

這種差異產(chǎn)生的原因是枣抱,光的衰減方程改變了亮度值,而且屏幕上顯示出來(lái)的也不是線性空間辆床,在監(jiān)視器上效果最好的衰減方程佳晶,并不是符合物理的。想想平方衰減方程佛吓,如果我們使用這個(gè)方程宵晚,而且不進(jìn)行g(shù)amma校正垂攘,顯示在監(jiān)視器上的衰減方程實(shí)際上將變成(1.0/distance2)2.2。若不進(jìn)行g(shù)amma校正淤刃,將產(chǎn)生更強(qiáng)烈的衰減晒他。這也解釋了為什么雙曲線不用gamma校正時(shí)看起來(lái)更真實(shí),因?yàn)樗鼘?shí)際變成了(1.0/distance)2.2=1.0/distance2.2逸贾。這和物理公式是很相似的陨仅。

我們?cè)诨A(chǔ)光照教程中討論的更高級(jí)的那個(gè)衰減方程在有g(shù)amma校正的場(chǎng)景中也仍然有用,因?yàn)樗梢宰屛覀儗?duì)衰減擁有更多準(zhǔn)確的控制權(quán)(不過(guò)铝侵,在進(jìn)行g(shù)amma校正的場(chǎng)景中當(dāng)然需要不同的參數(shù))灼伤。

我創(chuàng)建的這個(gè)簡(jiǎn)單的demo場(chǎng)景,你可以在這里找到源碼以及頂點(diǎn)和像素著色器咪鲜。按下空格就能在有g(shù)amma校正和無(wú)gamma校正的場(chǎng)景進(jìn)行切換狐赡,兩個(gè)場(chǎng)景使用的是相同的紋理和衰減。這不是效果最好的demo疟丙,不過(guò)它能展示出如何應(yīng)用所有這些技術(shù)颖侄。

總而言之,gamma校正使你可以在線性空間中進(jìn)行操作享郊。因?yàn)榫€性空間更符合物理世界览祖,大多數(shù)物理公式現(xiàn)在都可以獲得較好效果,比如真實(shí)的光的衰減炊琉。你的光照越真實(shí)展蒂,使用gamma校正獲得漂亮的效果就越容易。這也正是為什么當(dāng)引進(jìn)gamma校正時(shí)苔咪,建議只去調(diào)整光照參數(shù)的原因锰悼。


附加資源

  • cambridgeincolour.com:更多關(guān)于gamma和gamma校正的內(nèi)容。
  • wolfire.com: David Rosen關(guān)于在渲染領(lǐng)域使用gamma校正的好處悼泌。
  • renderwonk.com: 一些額外的實(shí)踐上的思考松捉。

后記

本篇已結(jié)束,下一篇關(guān)于陰影馆里。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隘世,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸠踪,更是在濱河造成了極大的恐慌丙者,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件营密,死亡現(xiàn)場(chǎng)離奇詭異械媒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)纷捞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痢虹,“玉大人,你說(shuō)我怎么就攤上這事主儡〗蔽ǎ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵糜值,是天一觀的道長(zhǎng)丰捷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)寂汇,這世上最難降的妖魔是什么病往? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮骄瓣,結(jié)果婚禮上停巷,老公的妹妹穿的比我還像新娘。我一直安慰自己累贤,他們只是感情好叠穆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布少漆。 她就那樣靜靜地躺著臼膏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪示损。 梳的紋絲不亂的頭發(fā)上渗磅,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音检访,去河邊找鬼始鱼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脆贵,可吹牛的內(nèi)容都是我干的医清。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼卖氨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼会烙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起筒捺,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤柏腻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后系吭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體五嫂,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沃缘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躯枢。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖槐臀,靈堂內(nèi)的尸體忽然破棺而出闺金,到底是詐尸還是另有隱情,我是刑警寧澤峰档,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布弯予,位于F島的核電站,受9級(jí)特大地震影響掠归,放射性物質(zhì)發(fā)生泄漏芹啥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一欢顷、第九天 我趴在偏房一處隱蔽的房頂上張望槽棍。 院中可真熱鬧,春花似錦抬驴、人聲如沸炼七。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)豌拙。三九已至,卻和暖如春题暖,著一層夾襖步出監(jiān)牢的瞬間按傅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工胧卤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唯绍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓枝誊,卻偏偏與公主長(zhǎng)得像况芒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叶撒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容