大部分的特效產業的從業人員應該早就對LUT有些印象或些微理解。你的主管或總監會給你一個 .cube的檔案然後叫你用這個LUT去看你製作中的影像。但講真的,你知道甚麼是LUT嗎? 又或是你需要知道LUT是甚麼嗎?

好的,其實你並不一定要知道。但是如果對於LUT有更進一步的認識、了解LUT如何運作,那你也會比較清楚顏色在製作過程中的轉換,也會幫助你保持顏色的一致性。

而另外一個原因我想在這篇討論LUT,是因為當你對LUT有初步的認識後,那對於之後要談的不同項目像ACES或是講解View Transform的時候也會方便許多。

什麼是LUT?

這是Sony對於LUT簡短的定義

A LUT (Look-Up-Table) 就是一個簡單的查找表,這個查找表是由固定的、純數字的數值所構成,可以被使用在影片上來調整影片的顏色,包括對比或顏色,或是同時改變。 -Sony

可以把LUT想像成一個裡面有函數的盒子,這個盒子可以把所有你扔進去的數值通通經過函數後變成另一個數值,再吐出來給你。感謝有LUT這個東西,現在的我們能夠更快速也更精準的呈現我們想要描述的顏色。

LUT可以簡單地被分為兩種用途 — 技術性LUT and 創意性LUT.

  • 技術性LUT, 又或中性LUT, 用來將攝影機原生的色彩空間轉換至特定的色彩空間,如LogC轉換Rec.709,或REDlogFilm轉換至DCI-P3等等,這類別的LUT通常都由攝影機製造商提供。
  • 創意性 LUT, 用於表現主觀風格的LUT,如不可能的任務中帶有科技感的冷色調,或是瘋狂麥斯中沙漠感的暖色調。

為了瞭解顏色如何在不同的色彩空間中流動以及與目標設備的色彩空間之關係,此篇文章中只討論技術性LUT。

再更細分技術性LUT,可以區分為兩種形式:1D LUT和3D LUT。

1D LUT

1D LUT 是一個可以反轉使用的色彩轉換表,但是只能影響獨立的管道如紅、綠和藍這些在三維立方體中的一維平面。1D LUT可以編輯對比、亮度、黑/白色階,基本上就像是在Photoshop裡面使用的調整功能"對比"、"色階"、"曲線"和"曝光"等等。

1D LUT通常被用來做為Gamma校正,為了還原拍攝現場攝影機捕捉到的光線將transfer function轉換成線性;或是為了可以使用3D LUT而把線性的數值轉換成0-1的範圍,這個部分稍後會提到。

這是一個1D LUT的範例看起來的樣子:

Version 1
From 0 1
Length 4096
Components 1
{
0.0000000000e+00
1.0989011498e-03
2.1978022996e-03
3.2967033330e-03
4.3956045993e-03
5.4945056327e-03
6.5934066661e-03
7.6923076995e-03
8.7912091985e-03
9.8901102319e-03
1.0989011265e-02
1.2087912299e-02
...

這個LUT為OCIO檔案包裡面線性轉換成Rec.709色彩空間的1D LUT。你可以看到在這個範例裡面雖然只有列出17個,實際上有4096個色彩點。只要計算出輸入值是在哪一個編號就會得到那個編號相對應的輸出值。而4096指的是這是一個 2¹² = 12-bit 的1D LUT,涵蓋洪、綠、藍三個通道共 4096³ = 68,719,476,736種顏色.

3D LUT

3D LUT,如字面上的意思,是一個三維的LUT用來描述更精準的色彩轉換。 因為3D LUT在轉換單一通道的時候會連帶影響剩下的兩個通道,三個維度同時運算。因此它能夠處理比1D LUT更複雜的轉換,如色相或是飽和度。

這樣說吧,如果有一個準確度100%的3D LUT,假設是用來描述8-bit的影像,那它應該會有256條索引,意思就是這一個8-bit,包含16,777,216個顏色的影像,每一個點都會只會有一個相對應的索引輸出值。但是,這個3D LUT的檔案大小會變得非常重,即使對於高端電腦來說也會變得吃力,且也有違LUT就是要輕便快速的目的。

為了能夠讓LUT運算的效率提升,那就必須降低LUT的索引數量。目前3D LUT常用的索引數量一般為17x17x17,33x33x33,最高至65x65x65的校正色彩點。 校正色彩點的數量越高,那由鄰近的校正色彩點估算出來的色彩點也會越精準,只是相對的也會增加記憶體空間。

我們來看看另一個由Alexa LogC轉換至Rex.709 3D LUT的範例。

# Alexa conversion LUT, logc2video, itu709. Full in/full out.
# created by alexalutconv (2.09)
LUT_3D_SIZE 65
0.000000 0.000000 0.000000
0.000000 0.000000 0.000000
0.000000 0.000000 0.000000
0.000000 0.000000 0.000000
0.002121 0.000000 0.000015
0.013123 0.000000 0.000095
0.024927 0.000000 0.000181
0.037641 0.000000 0.000273
0.051407 0.000000 0.000373
0.066735 0.000000 0.000489
0.082548 0.000000 0.000629
0.098897 0.000000 0.000797
0.115951 0.000000 0.001000
...

Size 65指的是這是一個65x65x65,總共有35,937個校正索引點的 3D LUT。大部分的3D LUT都預期輸入數值的範圍介於0-1之間,而輸出數值同樣位於0-1。值得留意的地方是我們無法從一個3D LUT的內容來判別從什麼色彩空間轉換至什麼色彩空間,因此在檔案上正確且清楚的命名就變得非常重要。

SHAPER LUT (PRELUT)

由於3D LUT只接受0-1的範圍作為輸入值,超過1的部分會直接被當成1進行索引,因此在需要3D LUT進行色彩轉換的線性數值無法正確地進行轉換。因此一個較小的1D LUT會在3D LUT之前進行運算,將高動態範圍的數值壓縮成介於0-1之間且不會影響到色相和飽和度,方便3D LUT運算的數值,稱作Shaper LUT。

Shaper LUT通常使用在無法以浮點數運算的軟體。

CSPLUTV100
3D
BEGIN METADATA
END METADATA
4096
0.001186 0.001189 0.001193 0.001196 0.001200 0.001203 0.001207 ...
0.000000 0.000244 0.000488 0.000733 0.000977 0.001221 0.001465 ...
4096
0.001186 0.001189 0.001193 0.001196 0.001200 0.001203 0.001207 ...
0.000000 0.000244 0.000488 0.000733 0.000977 0.001221 0.001465 ...
4096
0.001186 0.001189 0.001193 0.001196 0.001200 0.001203 0.001207 ...
0.000000 0.000244 0.000488 0.000733 0.000977 0.001221 0.001465 ...
65 65 65
0.000000 0.000000 0.000000
0.000000 0.000000 0.000000
0.003420 0.000000 0.000000
0.011150 0.000000 0.000000
0.020507 0.000000 0.000000
0.029807 0.000000 0.000000
0.038688 0.000000 0.000000
0.046986 0.000000 0.000000
0.054977 0.000000 0.000000
0.063405 0.000000 0.000000
0.072741 0.000000 0.000000
0.083196 0.000000 0.000000
0.094621 0.000000 0.000000
...

同樣的,這個範例來自OCIO給Maya ACEScg轉換至Rec.709的LUT。通常Shaper LUT會跟3D LUT綁在一起,如上述範例,一個12-bit的1D shaper LUT把數值轉換進0-1的範圍內後才由另一個65x65x65的3D LUT將數值轉換成Rec.709的色彩空間。

不同格式的3D LUT會有對於標題有各自要求的格式。在此範例中的標題即為 “CSPLUTV100”。

最後一件事,有些人就算是使用LUT觀看但仍不清楚這樣的顏色到底是不是正確的顏色。因此請確認給LUT運算的色彩空間是不是和LUT要你輸入的色彩空間一樣。

讓我再拿一次Alexa LogC轉換至Rec.709的LUT當例子,撇除螢幕的不同,使用LUT之後的顏色應該要和拍攝現場的螢幕上看到的顏色一模一樣。在有些軟體裡,如Nuke,在轉換色彩空間的過程中可能會將色彩空間轉換回線性空間方便繼續作業,但如此就會是不正確的顏色。要確認在使用LUT之前以及使用後觀看都是在Alexa廣色域以及LogC的gamma曲線下。

--

--