特效產業裡的色彩管理-合成(Nuke)

Cheng Jian Yu
May 19, 2021

這次要來談的是在合成裡流動的顏色,特別是針對Nuke。我會從慣用的Linear-sRGB開始把前幾篇提到的內容串起來,再來比較和ACES不同的地方。基本上這些都只是特效產業裡的色彩管理-總論這篇的應用。

LINEAR-SRGB

以下畫面皆為ARRI官方網站所提供的影片素材。

LogC-Alexa Wide Gamut

上圖為ARRI自有的Alexa Wide Gamut色域以及LogC曲線的格式在Nuke裡不使用任何觀看LUT所看到的顏色。沒有太特別,就是一般所謂「看起來灰灰的」的log顏色,然後每個像素的數值都會位於0–1的範圍內。

Linear-sRGB

好的,接下來就是將影像從LogC的色彩空間還原至線性的sRGB色彩空間。還記得如何將不同攝影機的影像還原嗎?

(1) Gamma校正

(2) Gamut轉換

這裡注意的是gamut的轉換基本上來說就是色彩的矩陣乘法,而矩陣必須應用在linear的數值上才能正確轉換。將LogC-AWG的影像做gamma修正後,才能乘上Alexa Wide Gamut轉換至sRGB的色彩矩陣。

在這個範例素材中的最亮值大約落在3左右,因此簡單的從grade node裡面把gain調至3來做為圖示講解,而下圖右為nuke render view的曲線,數值範圍為0-1。

Linear-sRGB with sRGB View LUT

接下來就是有趣的部分了。

我就以一般在Viewer掛著sRGB進行作業的情況來做解釋。注意View LUT(VLUT)並不會影響實際工作區域的影像,只是透過VLUT來觀看顏色上圖右側的曲線實際上也應該如linear-sRGB一樣為直線,現在於曲線上也跟著被轉換是為了方便解說為何一般的sRGB LUT並不適合拿來觀看。

在linear-sRGB的範例圖中,我們知道最亮的數值為3,很明顯這樣過曝的數值並不適合直接用於觀看,如log空間。Linear跟log兩者色彩空間的目的有些不同:Log空間是為了讓攝影機能夠紀錄最大量的資訊,保持最大的可編輯性;Linear空間則是為了還原攝影機紀錄當下的場景,以及在所有運算上的正確性。兩者都不適合用於直接觀看。

在範例中,VLUT為一般情況使用的sRGB,這時候問題也就浮現了。因為在Nuke預設的VLUT只是簡單的1D LUT,而由上一篇關於LUT的文章中我們知道1D LUT只包含單純的對比、亮度等等,並無法精準的將影像投射至適合觀看的空間中。

這種作法的劣勢在於大於1的數值在畫面中會直接被強制壓到1,也就是說sRGB VLUT所以呈現不出來那些超過1的數值通通會被壓成水平線,因此亮部幾乎都會呈現過曝的狀態,對於整體來說會出現對比和和飽和度較高。

LogC to Rec.709 LUT from native ARRI LUT

以上圖的結果來說,這就是為什麼我們需要透過VLUT來觀看linear的影像。

在上一篇文章我們討論到,3D LUT可以處理更加複雜的色彩轉換以及更為精準的從一個色彩空間轉換至另一個色彩空間。上圖中,我們可以看到透過3D LUT的轉換後,所有數值都被轉換至0–1的範圍內,相對的也就不會出現過曝或飽和度過高。

通常專業攝影機都會有自家開發商所提供的內建VLUT可以直接套用在拍攝現場,而在後期特效製作時也會使用同樣的VLUT。換句話說,除了螢幕設備本身的差異,理論上我們在特效製作時透過VLUT看到的顏色會等同於在拍攝現場透過相同的VLUT看到的顏色。

ACES

好,我們知道了在Nuke預設的色彩管理中是如何運作,接下來來看看在ACES下又有什麼不同之處。

當Nuke在ACES下讀取素材時,只要在正確選擇色彩空間,gamma和gamut會同時被轉換進linear-ACES_AP1的色彩空間。以往預設的色彩管理方式下需要手動轉換gamma和gamut,然而如果在Nuke的colorspace節點中沒有適合選項的話,也需要額外花時間搜尋正確的轉換矩陣。

ACEScg-AP1

上圖範例中的顏色呈現不正常是因為ACEScg的色域是使用AP1的定義,而我們的LED螢幕為sRGB的色域沒有辦法正確的呈現AP1的顏色,但依然為linear的素材,未使用任何VLUT。

ACEScg-AP1 with Output-sRGB view LUT

上圖呈現了在ACES中是如何讓整個流程中的顏色保持一致性。基本上,所有的input transform和output transform以及VLUT都是由ACES團隊所開發,使幾乎所有的色彩空間都可以轉換進或轉換出ACES家族的色彩空間。

注意在ACES系統下,所有的色彩空間都是先轉換至ACES2065–1後再轉換至旗下ACES家族如專門設計給特效產業使用的色彩空間ACEScg,只是這些運算皆隱藏在背景中我們不會看到。

因為ACES團隊所開發的VLUT都是由1D LUT和3D LUT所組成,所以我們可以看到在亮部區域比起預設的sRGB的曲線更加的平滑。若在現場拍攝時使用ACES家族ACESproxy且透過ACES-Output Transform觀看的話,也會等同於在後期特效製作的軟體中同樣的ACES — OCIO設定下所看到的顏色。

在這部分中ACES最重要的特色為,不管linear最高的數值為何,ACES下output用的色彩轉換都會將高動態範圍投射至適合在設備上顯示的範圍內(display-referred)。

套用VLUT的方式

我相信看到這裡,再加上先前討論LUT的文章,應該都有抓到一些概念了,從這邊我就來延伸一些Nuke的部分。

下面兩張圖為用不同方式應用VLUT,結果的顏色是一致的。

Two ways to apply 3D LUT

根據我知道的情況,多數的合成師都是使用第二種方式,先將素材從logc轉換至linear進行gamma校正後,再使用OCIOFileTransform節點以Alexa LogC套用VLUT,最後再用一個colorspace節點轉換回LogC空間。

在這串動作背後的過程稍稍複雜但弄懂前面觀念的話其實不難理解。根據Nuke官方對於OCIOFileTransform的定義,OCIOFileTransform的流程會是先從linear空間轉換到你指定的空間,如Alexa LogC,進行3D LUT色彩空間投射,如LogC_to_Rec709,再轉換回linear空間。

而因為轉換回linear空間了,但是上一篇提過3D LUT預期由log空間直接轉換進指定空間,因此這裡需要額外的colorspace把linear轉換回LogC空間中觀看才是正確的顏色。

注意以上步驟中,gamut皆保持在Alexa Wide Gamut

我們再回來看看第一種做法,由於我們以Raw的方式解讀素材,意思等同於我們不去定義它。圖中的範例來說,相對意思也就是這個素材會呈現原始LogC的gamma曲線,以及Alexa Wide Gamut的顏色。

若OCIOFileTransform的指定色彩空間選擇linear,那意思就是指OCIOFileTransform從頭到尾都是linear,等於不定義,也等於素材一直處在LogC-AWG。而這也符合3D LUT的input預期為LogC-AWG的定義,因此在第一種方法中反而不需要額外用colorspace節點轉換回LogC空間。

當然,也還有其他方式可以達成一樣的顏色,但是如果可以理解在這兩種方式的步驟,那也應該能夠找出自己習慣的作法,相對的在顏色不正確時能夠快速找出哪個環節出錯了。這裏其實也只有一種規則:套用3D LUT之前請確認待在這個3D LUT預期它需要從哪個色彩空間轉換出去的那個色彩空間。在此例中就是在實際進行3D LUT的轉換前都維持色彩空間在LogC曲線和Alexa Wide Gamut的色域。

最後我想談的是ACES下以output為導向的色彩空間和預設系統下一樣的色彩空間有什麼不同。下圖為ACEScg — AP1的顏色,通常都是需要有output導向的VLUT下進行觀看,但這裡我先以普通的sRGB做解釋。

ACEScg-AP1 with sRGB view LUT

有時候合成師們仍然需要普通的colorspace節點來轉換不同的色彩空間,但是由於ACES以output為導向的色彩空間如Output — sRGB,如上述是由1D LUT+3D LUT構成並帶有s曲線讓影像有”電影感(Filmic Look)”。這樣的方式與普通的sRGB就有很明顯的不同。

因此假設應該用Output - sRGB但你卻用預設的sRGB來觀看ACEScg-AP1的素材,恩…也不能說這樣是錯的,但是相對會呈現較詭異的顏色,且這並不是建議在ACES下的作法。請注意這點。

--

--