【圖形學】後處理下的HDR、顏色分級、顏色映射與顏色空間

目錄

一、Color Grading

1.1 概念

1.2 內置在Unity/UE4

二、HDR、LDR與VDR

2.1 LDR

2.2 HDR

2.3 VDR

三、Tone Mapping

3.1 概念

3.2 算法發展史

3.3 ACES算法

四、常見的顏色空間標準

參考


一、Color Grading

1.1 概念

Color Grading(顏色分級、顏色校正)俗稱調色,是遊戲後期處理中最常見也是必要的一個環節。它能夠改變或矯正最終圖像的顏色和亮度,你可以把它想象成在Instagram這樣的軟件中應用了濾鏡。

  • 注:儘量不使用LUT(Lookup Texture——標準標準色彩對照表)來校色,因爲它是在調色後生效的,儘量使用Color Grading的參數來得到你要的效果,可以保證偏色效果的一致性。當然,LUT可以快速得到一個效果,通過調整校色參數來得到類似的效果。

1.2 內置在Unity/UE4

Unity下的顏色分級一般可以分爲三種模式

  1. Low Dynamic Range(LDR):爲低端設備提供的方案,將偏色存儲在LUT(標準色彩對照表)中。LDR的Lookup Texture一般使用的是256x16大小,也可以使用1024x32,但是在一個項目中需要使用統一的分辨率,避免多個Volume之間混合時計算錯誤。
  2. High Dynamic Range(HDR):爲支持HDR渲染的平臺提供的方案,所有的顏色操作都將應用於HDR中,並存儲到3D log-encoded的LUT中,以確保有足夠的覆蓋範圍和精度。
  3. External:爲第三方軟件自定義的3D log-encoded Texture提供的方案(類似LUT)。
Unity後處理Color Grading編輯模塊

UE4通過後期盒子編輯調色模塊參數。

UE4後處理Color Grading編輯模塊

二、HDR、LDR與VDR

首先我們來理解DR——Dynamic Range(動態範圍):Dynamic Range是一種用數學方式來描述某個給定場景的亮度層次範圍的技術術語。指圖像中所包含的從“最亮”至“最暗”的比值,也就是圖像從“最亮”到“最暗”之間灰度劃分的等級數;動態範圍越大,所能表示的層次越豐富,所包含的色彩空間也越廣。

2.1 LDR

隧道盡頭的強光的值被約束在1.0,導致一片白光失去細節

LDR,低動態範圍圖像。LDR圖片是8位圖片,我們身邊的電子圖片,幾乎都是LDR。它所採用的色彩模型是目前通用的圖像描述模型——RGB模型。每種色彩都可以用三原色(紅、綠、藍)加上適當的亮度來表示,三原色的亮度梯度各爲256級。也就是說,LDR的顏色一共能有256^3=16,777,216‬種。但LDR也只能算是對現實顏色進行壓縮,看似豐富,但真和現實中的顏色比,還是侷限了許多,一旦需要進行調色等後續加工,便會因爲顏色不夠而難以進行。常用LDR圖片儲存格式有jpg/png等。

要想增加顏色?這便誕生了HDR。單通道位數超過8位,便可稱爲HDR,常見有12位16位

2.2 HDR

通常顯示器被限制爲只能顯示值爲0.0到1.0間的顏色,但是在光照方程中卻沒有這個限制。通過使片段的顏色超過1.0,我們有了一個更大的顏色範圍,這被稱作HDR(High Dynamic Range, 高動態範圍)。有了HDR,亮的東西可以變得非常亮,暗的東西可以變得非常暗,而且充滿細節,同時還讓我們能夠根據光源的真實強度指定它的強度,而這在LDR渲染中是不能實現的,因爲他們會被上限約束在1.0。常用的HDR圖片儲存格式有hdr/tif/exr/raw等。

2.3 VDR

LDR就是一個確定的範圍,HDR是一個寬廣的範圍。即便兩個都是HDR的,但它們的範圍仍可能不同。因此有人把這個稱爲Variable Dynamic Range(VDR),可變動態範圍,因爲此H不一定是彼H。所以,即便在一個HDR世界,也仍然需要tone mapping來改變動態範圍。

三、Tone Mapping

3.1 概念

色調映射(Tone Mapping)指的是轉換HDR值到LDR,是HDR渲染的最終步驟。使用更大範圍的顏色值渲染能夠獲取大範圍的黑暗與明亮的場景細節,但最後需要將所有HDR值轉換成在[0.0, 1.0]範圍的LDR,因爲顯示器只能顯示在0.0到1.0範圍之內的顏色,我們肯定要做一些轉換從而使得當前的HDR顏色值符合顯示器的範圍。

  • 注:Tonemapping是一個整體的效果,理想情況下不要動態調整或者分場景調整,整個項目應該使用同一套參數或效果。
preview
Bloom很強的情況下Tonemapping的效果-UE4官方文檔
preview

Exposure爲3的情況下Tonemapping的效果-UE4官方文檔

 

3.2 算法發展史

Tone Mapping這個概念出現以來,有很多的色調映射算法,這些算法致力於在轉換過程中保留儘可能多的HDR細節。隨着GPU、遊戲和電影特效的突飛猛進,Tone Mapping也經歷了一系列的進化歷程。例如基於經驗模型的Reinhard Tone Mapping,到後來基於Tone Mapping的結果來進行擬合出來的Filmic Tone Mapping,再到現在比較常用的Academy Color Encoding System(AECS)等方法,具體可以參考文章:Tone mapping進化論,文章中有很多代碼與算法論文的鏈接。

3.3 ACES算法

Filmic Tone Mapping(左圖)   ACES(右圖)

美國電影藝術與科學學會發明瞭Academy Color Encoding System(ACES),是一套顏色編碼系統,或者說是一個新的顏色空間。它是一個通用的數據交換格式,一方面可以不同的輸入設備轉成ACES,另一方面可以把ACES在不同的顯示設備上正確顯示。不管你是LDR,還是HDR,都可以在ACES裏表達出來。這就直接解決了VDR的問題,不同設備間都可以互通數據。

更好的地方是,這個函數的輸出是線性空間的,所以要接到LDR的設備,只要做一次sRGB校正。要接到HDR10的設備,只要做一次Rec 2020顏色矩陣乘法。Tone Mapping部分是通用的,這也是比它之前提出的幾個算法都好的地方。

preview

然而對於實時渲染來說,沒必要用全套ACES。因爲第一,沒有什麼“輸入設備”。渲染出來的HDR圖像就是個線性的數據,所以直接就在ACES空間中。而輸出的時候需要一次Tone Mapping,轉到LDR或另一個HDR。也就是說,我們只要ACES裏的非常小的一條路徑,而不是紛繁複雜的整套體系。那麼這條路徑有多小呢?只要幾行代碼。

float3 ACESToneMapping(float3 color, float adapted_lum)
{
	const float A = 2.51f;
	const float B = 0.03f;
	const float C = 2.43f;
	const float D = 0.59f;
	const float E = 0.14f;

	color *= adapted_lum;
	return (color * (A * color + B)) / (color * (C * color + D) + E);
}

看着很像Uncharted 2的做法吧,都是多項式擬合。但是式子比Uncharted的簡單,並不需要算兩個多項式並相除,只要算一個,一次搞定。它的曲線是這樣的。

四、常見的顏色空間標準

在歷史上,電影行業和各種銀幕製造商共同制定了很多顏色空間標準。與我們最相關的幾種顏色空間標準如下:

  • sRGB:全稱是standard Red Green Blue。它是由惠普和微軟在1996年制定的一個被用於網絡、Windows、印刷等領域的RGB顏色空間。
  • Rec. 709:全稱是ITU-R Recommendation BT.709,經常被縮寫表示爲Rec. 709、BT.709、ITU 709等。它被用於HDTV(high-definition television)等領域。它的三原色和sRGB的三原色是一樣的,但它們的傳遞函數是不同的。
  • DCI-P3:由美國電影行業制定的一個被用於數字電影放映的RGB顏色空間。在2015年的時候,Apple的iMac成爲第一個內置P3 wide gamut的家用電腦,這個由蘋果爸爸創建的空間被叫做Display P3顏色空間。Display P3使用了和DCI-P3相同的三原色,但使用了電腦顯示更加常用的白點值D65。而且不同於DCI-P3的純2.6伽馬曲線,Display P3使用的是和sRGB一樣的轉換函數。
  • Rec. 2020:全稱是ITU-R Recommendation BT.2020,經常被縮寫表示爲Rec. 2020、BT.2020等。它被用於定義UHDTV(ultra high-definition television)等領域,也是未來的趨勢。

以下給出了上述四種顏色空間標準的各個參數(Transfer Function Parameters指的是正向轉換函數的參數,即從線性顏色值轉換成非線性信號值的伽馬壓縮轉換函數的參數,完整表格可以參見wiki):

preview

可以看到,我們最常打交道的sRGB實際只佔了CIE 1931顏色空間的大約35.9%區域,而sRGB也是遊戲開發領域使用最爲廣泛的一個顏色空間,這意味着大部分遊戲的顯示色域範圍被大大約束了。當然,原因主要還是因爲LDR顯示器仍然是目前最爲普遍的顯示設備,而sRGB是LDR顯示器的行業標準,也就是說LDR設備無法重現出上圖中sRGB三角區域外部的所有顏色。與之相比,Rec. 2020的色域範圍就大大提升了,大約可以佔到整個CIE 1931顏色空間的75.8%,而它也是未來趨勢的顏色空間標準。 

參考

Color Grading | Unity Manual Effects

Color Grading and Filmic Tonemapper | Unreal Engine Documentation

HDR - LearnOpenGL CN

Tone mapping進化論 - 知乎

Unity PostProcess的使用 - 知乎

HDR,ToneMapping,Bloom之間的關係 - 知乎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章