OpenGL學習腳印:色差補正坡形(Gamma Correction)
來源:互聯網
上載者:User
OpenGL學習腳印:色差補正坡形(Gamma Correction) :http://blog.csdn.net/wangdingqiaoit/article/details/52974486
總結:
1. CRT Gamma , Cout = Cin ^ 2.2, 因為顏色rgb都是[0,1] 所以,0.5^2.2 = 0.218 所以,CRT顯示器的Gamma是變小的。
2. 色差補正坡形(Gamma Correction), 就是 CRT Gamma 的逆過程, Cout = Cin ^ (1 / 2.2) .
3. 紋理 儲存的顏色RGB 大多數都是預先處理過的,儲存的顏色資訊已經是色差補正坡形了的, 也就是 Cout = Cin ^ (1 / 2.2) .
4. OpenGl構造紋理對象時,指明紋理的內部格式為sRGB ,SRGB就是我們所說的已經校正後的非線性顏色,當按上述方式指明時OpenGL將會自動將其轉換到線性空間, 也就是說,如果指定紋理格式是sRGB的話,那麼就表示這張紋理儲存的顏色資訊是 已經是色差補正坡形了,Cout = Cin ^ (1 / 2.2),那麼,OpenGL 在使用這張紋理的時候,會進行 Cout = Cin ^ 2.2, 得到線性RGB顏色資訊。
Unity3D 的 gamma,linear
參考:
[Unity3d]總結Gamma Space與Linear Space : http://blog.csdn.net/ngrandmarch/article/details/46407017
1. 當選擇Gamma色彩空間的時候,Texture的sRGB是否勾選,Unity預設都是使用Texture的原圖的顏色,也就是 儲存的顏色資訊已經是色差補正坡形了,Unity不會自動處理在Shader的運算結果。
2. 當選擇Linear色彩空間的時候,
Texture的sRGB勾選了的情況,那麼 在Shader採樣的時候,紋理的顏色會被處理,就會從 Gamma -> Linear, 所以採樣後得到的顏色就是Linear,就用Linear顏色來運算, 在Shader運算完結果之後,GPU自動把運算結果進行處理,Linear -> Gamma。
Texture的sRGB 沒有勾選了的情況,那麼 在Shader採樣的時候, 得到的是Gamma顏色,在Shader運算的時候,用的是Gamma顏色,最後,GPU自動把運算結果進行處理,Gamma -> Gamma, 這裡就得到的結果就是,輸出的顏色都增強了。