線性或伽馬工作流程
Unity Editor 提供線性和伽馬兩種工作流程。線性工作流具有顏色空間交叉地帶,此情況下在伽馬顏色空間中創(chuàng)作的紋理可在線性顏色空間中正確且精確地渲染。請(qǐng)參閱有關(guān)線性渲染概述的文檔,了解伽馬和線性顏色空間的更多信息。
如需進(jìn)一步閱讀這方面的信息,請(qǐng)參閱以下相關(guān)文檔:
線性渲染概述,介紹線性和伽馬顏色空間的背景信息。
采用線性渲染的伽馬紋理,介紹線性工作流程中的伽馬紋理。
線性紋理,介紹如何使用線性紋理。
紋理傾向于保存在伽馬顏色空間中,而著色器期望使用線性顏色空間。因此,在著色器中對(duì)紋理進(jìn)行采樣時(shí),基于伽馬的值會(huì)導(dǎo)致不準(zhǔn)確的結(jié)果。為了解決此問題,可將 Unity 設(shè)置為使用 RGB 采樣器從伽馬采樣跨越到線性采樣。這樣確保了線性工作流程中的著色器的所有輸入和輸出都在正確的顏色空間中,從而產(chǎn)生正確的結(jié)果。
要指定伽馬或線性工作流程,請(qǐng)選擇?Edit?>?Project Settings?>?Player__,然后打開?Player Settings。選擇?Other Settings__ >?Rendering?并將?Color Space?更改為?Linear?或 __Gamma__(具體根據(jù)偏好而定)。

伽馬顏色空間工作流程
雖然線性工作流程可確保更精確的渲染,但有時(shí)您可能需要伽馬工作流程(例如,在某些平臺(tái)上,硬件僅支持伽馬格式)。
為此,請(qǐng)?jiān)?Player Settings 窗口中將?Color Space?設(shè)置為?Gamma__(菜單:__Edit?>?Project Settings?> __Player__)。選擇此選項(xiàng)后,渲染管線將使用伽馬顏色空間中存儲(chǔ)的所有顏色和紋理;在著色器中使用紋理時(shí)不會(huì)從紋理中移除伽馬校正。
請(qǐng)注意,通過(guò)在紋理的?Inspector 窗口中取消選中?sRGB (Color Texture)?復(fù)選框,即可選擇在?Color Space: Gamma?模式下繞過(guò) sRGB 采樣。
注意:即使這些值在伽馬空間中,Unity Editor 的所有著色器計(jì)算仍然按照在線性空間中的方式處理它們的輸入。為了確保獲得可接受的最終結(jié)果,Editor 在將著色器輸出寫入幀緩沖區(qū)時(shí)進(jìn)行調(diào)整以處理不匹配的格式,并且不對(duì)最終結(jié)果應(yīng)用伽馬校正。
線性顏色空間工作流程
使用線性顏色空間比使用伽馬顏色空間提供更準(zhǔn)確的渲染。
為此,請(qǐng)?jiān)?Player Settings 窗口中將?Color Space?設(shè)置為?Linear__(菜單:__Edit?>?Project Settings?> __Player__)。
如果紋理是在線性或伽馬顏色空間中創(chuàng)建的,則可使用線性顏色空間。向線性顏色空間著色器程序提供的伽馬顏色空間紋理將在移除伽馬校正后輸入給著色器。
線性紋理
選擇?Color Space:?Linear?將假設(shè)紋理位于伽馬顏色空間內(nèi)。Unity 在默認(rèn)情況下使用 GPU 的 sRGB 采樣器從伽馬顏色空間跨越到線性顏色空間。如果紋理是在線性顏色空間內(nèi)創(chuàng)建的,則需要繞過(guò) sRGB 采樣。請(qǐng)參閱有關(guān)使用線性紋理的文檔以了解更多信息。
伽馬紋理
從伽馬顏色空間跨越到線性顏色空間需要進(jìn)行一些調(diào)整。請(qǐng)參閱有關(guān)采用線性渲染的伽馬紋理的文檔以了解更多信息。
注意
對(duì)于顏色,此轉(zhuǎn)換是隱式應(yīng)用的,因?yàn)?Unity Editor 在將值作為常量傳遞給 GPU 之前已將值轉(zhuǎn)換為浮點(diǎn)數(shù)。在對(duì)紋理進(jìn)行采樣時(shí),GPU 會(huì)自動(dòng)移除伽馬校正,將結(jié)果轉(zhuǎn)換為線性空間。
這些輸入隨后傳遞給著色器,光照計(jì)算與正常情況下一樣在線性空間中進(jìn)行。將結(jié)果值寫入幀緩沖區(qū)時(shí),可直接對(duì)其執(zhí)行伽馬校正,也可將其保留在線性空間中稍后進(jìn)行伽馬校正,具體做法取決于當(dāng)前的渲染配置。例如,在高動(dòng)態(tài)范圍 (HDR) 中,渲染結(jié)果保留在線性空間中稍后進(jìn)行伽馬校正。
線性和伽馬顏色空間之間的差異
使用線性渲染時(shí),光照方程式的輸入值與伽瑪空間中的輸入值不同。這意味著根據(jù)不同顏色空間得出不同結(jié)果。例如,光線照射表面具有不同的響應(yīng)曲線,并且圖像效果的表現(xiàn)不同。
光衰減
基于距離和基于法線的光照在發(fā)生衰減時(shí)存在兩個(gè)方面的差異:
在線性模式下渲染時(shí),執(zhí)行的額外伽馬校正會(huì)使光源半徑變大。
光照邊緣也顯得更清晰。這更準(zhǔn)確地模擬了表面上的光照強(qiáng)度衰減。

線性強(qiáng)度響應(yīng)
使用伽馬渲染時(shí),提供給著色器的顏色和紋理已經(jīng)應(yīng)用了伽馬校正。在著色器中使用它們時(shí),高亮度的顏色實(shí)際上比預(yù)期亮度值更亮(相對(duì)于線性光照)。這意味著,隨著光照強(qiáng)度的增加,表面會(huì)以非線性方式變亮。這將導(dǎo)致許多位置的光照亮度過(guò)高。此外還可能給模型和場(chǎng)景帶來(lái)褪色的感覺。使用線性渲染時(shí),在表面上產(chǎn)生的響應(yīng)隨著光照強(qiáng)度增加仍保持線性。因此,帶來(lái)的表面著色真實(shí)得多,表面產(chǎn)生的顏色響應(yīng)也好得多。
下面的無(wú)限 3D 頭部掃描圖像展示了在線性光照和伽馬光照模式下人體頭部模型上的不同光照強(qiáng)度。

線性和伽馬混合
當(dāng)混入幀緩沖區(qū)時(shí),混合發(fā)生在幀緩沖區(qū)的顏色空間中。
使用伽馬空間渲染時(shí),非線性顏色會(huì)混合在一起。這種混合顏色的方法在數(shù)學(xué)上不正確,并可能得出不符合期望的結(jié)果,但這種方法是在某些圖形硬件上進(jìn)行混合的唯一方法。
使用線性空間渲染時(shí),混合發(fā)生在線性顏色空間中:這在數(shù)學(xué)上是正確的,并提**確的結(jié)果。
下圖顯示了不同類型的混合:

下:伽馬顏色空間中的混合導(dǎo)致過(guò)度飽和以及過(guò)亮的混合