在Day21時,嘗試講解內建Skybox Shader是怎麼寫的,後來踩到了一些坑,裡面就碰到幾個我不知道的知識點:
今天要來理解甚麼是Gamma
在網路或書籍中,會找到Gamma是代指一個值,Gamma Correction是利用這個值進行的操作,所以要理解的是「為什麼要執行Gamma Correction」?
就我們所知的物理世界,只要光線加強一倍,亮度也會加強一倍,這個就是線性,從以前陰極射像管(大屁股螢幕)的時代,顯示圖像的電壓增加一倍,亮度並不會增加一倍,也就是說並不是線性的。後來找到亮度增加的量等於等於電壓的增加量的2.2次方,這就是Gamma值。
from wiki
把這個2.2的Gamma平衡到物理世界的亮度,就是Gamma校正(Gamma Correction),那麼要怎麼校正了?
其實下圖就可以很直觀的理解,給出一個次方為1/2.2的Gamma空間,與螢幕的2.2次方的Gamma空間相互處理就可以得出線性的空間了
簡單說一下甚麼是sRGB,全名是standard Red Green Blue,而sRGB當初創建就是為了解決上述顯示器的所說的問題,它的顏色空間會對應到Gamma 1/2.2的空間中
把上面的知識延伸到Unity上。
大機率會碰到一個問題,「素材進入引擎後,可能顯示不對」,又或著是說,怪怪的,就有可能是Gamma的問題,可能是素材import進引擎後,沒有做Gamma校正,又或是,根本不用做。
假設素材是sRGB的,那我們要先把它轉回線性空間,就是取消「Gamma校正」,統一素材的顏色空間,並統一的交由Unity的渲染引擎做事。