2015/07/02

V-Ray for 3dsMax 的Gamma 2.2 或線性工作流程

文 / Hammer Chen

如果我們把機器或是電腦軟體視為一個黑盒子,我們會希望輸入的數值等於輸出的數值(不做任何處理),也就是輸入數值1,輸出也是1,輸入0.2,輸出也是0.2。若是X軸為輸入,Y軸為輸出,最後我們可以得到一條劃過0,0點的直線。這就是線性關係。


但在早期CRT螢幕時代,人們發現,輸入數值1時,輸出的數值會比輸入稍弱(例如0.9),如此以來畫出的線條便不是直線,會是曲線(上圖靠右邊那條)。當時的人就很聰明,如果我們在把圖片放到CRT螢幕顯示前,就先對圖片動手腳,我先對圖片套用一個比較亮的曲線(上圖的左邊那條),那麼當圖片在螢幕上顯示時,是不是『看起來』就剛剛好不過亮也不過暗,變成直線了呢?



也就是這樣,當今幾乎所有的數位相機,手機拍照所產生的照片,軟體都會預先套用一條曲線,燒進圖片中,我們把它稱為gamma 2.2,更準確地說是套用gamma 1/2.2的曲線,讓圖片在gamma 2.2的CRT螢幕上能夠顯示為『線性』。

到這裡我們可以知道,這個我們可以將曲線燒進圖片中,也可以在檢視的時候才套用那條曲線,不一定要把資訊燒進去。而且,檢視的時候也不一定是要用gamma 2.2的曲線,也有可能是其他曲線。很重要的觀念是,這個曲線可以是燒進圖片,也可能是檢視的軟體暫時套用的,所以你最終所看到的,並不一定是圖片實際本身所帶有的資訊,這是很重要的觀念,要放在心上才比較能夠理解整個操作流程。如果你搞不清楚這件事,很有可能你會對圖檔套用兩次的校正曲線,得到錯誤的結果;或者在3ds max存檔時圖片的亮度是正確的,可以一但用其他的看圖軟體,圖片就過亮或是過暗,這些現象如果沒有弄懂以上觀念,還真容易讓人搞的一頭霧水。

關於伽瑪校正與線性工作流程,我們已經在前篇『Gamma correction and Linear workfkow 伽瑪校正與線性工作流程』討論過了。因為V-Ray本身有自己的frame buffer,我們可以把它視為看圖的程式,它本身也附有sRGB的按鈕,如果啟用的話會套用sRGB的曲線到算圖結果上(但沒有燒到圖片裡面,僅僅改變檢視而已)。簡單說來sRGB與gamma 2.2是兩條很接近但是不是100%的曲線,在暗部與亮部的都稍有差異,若是採用了VRay自身的VFB + sRGB按鈕所存出的圖檔會和以3ds Max自身的Gamma 2.2流程所存出的圖檔有稍稍的不同(sRGB的會亮一點點)。

以下這篇aversis網站談論的就是這件事。因為該文強調不喜歡被人翻譯,以下僅節錄並加入站長個人的心得。

# # # 以下為編譯 # # #

原文:Gamma 2.2 setup or linear workflow
作者:www.aversis.be
編譯:Hammer Chen

早在2004年,很多人在論壇討論V-ray的線性工作流程。討論極為熱烈,大家想要理解看似複雜的流程以獲得更好的算圖結果。不管是Vray 與 3ds Max實際上都是以gamma 1.0來進行算圖的,可是產生的圖像要在顯示器上顯示,並非gamma 1.0,如果沒有正確設定,那麼圖片會看起來很暗。


V-ray virtual frame buffer (簡稱VFB)下面有個小按鈕。在預設的狀況就會啟用 ─ 那就是sRGB小按鈕,它會套用sRGB 曲線到VFB。這樣一來就能讓影像正確的顯示為gamma 2.2 ,可是這個功能並沒有實際把gamma 2.2燒進影像當中。如果沒有按下這個按鈕,影像就沒經過校正,看起來很暗,怪怪的。

為了正確儲存影像,我們必須到3dsMax preferences設置。因為sRGB按鈕也是個預覽工具,我們必須要確保當儲存影像時,能把gamma 2.2存到影像的像素中,要不然當你在image viewer檢視儲存的影像時, 看起來是過暗 (因為gamma 2.2曲線沒有真的燒進影像中)。然而問題就出在這裡! sRGB按鈕會套用正確的曲線到影像中,但是這跟3dsMax套用的gamma曲線是一模一樣的曲線嗎? 答案是: 錯! 儘管差異很小,但還不是100%相同。

以下比較3dsMax output = 2.2與Vray frame buffer sRGB按鈕的差異,你會發現sRGB會讓影像亮一點點。(譯者註:圖片請見原文

在真正的線性工作流程裡,你可將影像存成32bit全浮點影像,例如EXR。真正的線性流程表示你可以讓所有軟體,正確地顯示線性圖片,因此影像不會燒上gamma曲線或是sRGB曲線 只有在軟體中,以顯示的方式套用那個曲線 (沒有真的燒進去)

非真正的線性工作流程的Gamma 2.2設置
如果你不希望影像在整個流程中都是用全浮點的格式儲存,儘管全浮點格式線性工作流對於後製合成的人很方便,但是大部分的人可以在存圖檔時把gamma燒進算圖影像中 (譯者註:比較實際一點,因為存成HDR檔案很大)。

狀況一  選擇'color mapping only(no gamma)'
在vray的color mapping下拉式選單中有'color mapping only(no gamma)' ,這個選項表示不會燒進gamma曲線。 當算圖時不會實際影響像素, 這時我們利用sRGB按鈕, 圖像能正確顯示。

狀況二  選擇'none'
可是如果這裡我們選none(不套用任何東西),影像幾乎一模一樣,唯一差異是雜訊變得稍多,GI品質變稍差。

原因是V-Ray的影像採樣是基於某種演算法, 找到影像中哪裡需要多一點採樣或是不需要多點採樣(譯者註:目的是要最佳化採樣,因為採樣越多,算圖越慢) 當V-Ray在很暗的區域採樣時, 會停止採樣, 因為在暗部的雜訊並不會很明顯(譯者註:暗部鄰近像素之間的強度差異比較小)

譯者再註:如果沒有選'color mapping and gamma',則VRay在算圖時前面的pass的自適應判斷(也就是比較相鄰的像素強度彼此間的差異)會比最終套用gamma時要暗,因為比較暗的關係,像素間彼此的差異就小,因為差異小所以V-Ray在之後的pass就會射出比較少的採樣,所以會比較多雜訊。如果選了'color mapping and gamma',對於noise的判斷在算圖過程與最終的畫面套用gamma是一樣的,雜訊就會持平。

最終的影像很暗,顯示看起來亮只是因為有按下sRGB按鈕,因此當你選了'none'模式 vray其實是對非常暗的影像進行採樣, 如果你選'color mapping only' ,V-Ray是對亮一點的影像採樣,但是只是採樣時的計算,並不會把gamma燒進影像中。

狀況三 選擇'color mapping and gamma'
如果選了'color mapping and gamma' 就會對亮的影像採樣,而且還把gamma曲線燒進去,但是因為gamma燒進去了,所以你必須關掉sRGB按鈕,要不然影像看起來會過亮。因為燒gamma曲線的工作是在vray裡面做的,所以我們必須要把3dsMax的output gamma調回1.0 要不然在存檔時 3ds max會再次地燒一次gamma ,也就是做兩次的gamma校正。
譯者註:如上圖,如果你在V-Ray的color mapping選了'color mapping and gamma',在3ds Max的preference就要將其Output Gamma設定為1.0,換句話說燒gamma 2.2這個工作不是由3ds max來做,而是讓V-Ray做。

結論就是sRGB曲線與gamma 2.2曲線並不完全一樣,但是如果你是利用vray的color mapping來燒gamm曲線的話,就沒有差別了。 因為不再會使用sRGB按鈕, 這樣一來VFB上的影像 跟你儲存的影像會一模一樣。


譯者註:上圖為目前大家廣泛使用的設定。燒Gamma2.2在3ds max裡面做,而VRay只做color mapping,'color mapping only(no gamma)'。這種設定如果你是用V-Ray自身的VFB看算圖結果,記得要把sRGB按鈕關掉,否則圖片會看起來過暗,而其實3dsMax在你存檔時會燒gamma 2.2到圖片中

最好的方案、最專業的就是把檔案存成EXR 真正的線性空間。

次佳的方案是透過color mapping套用gamma 2.2 然後關掉sRGB按鈕 ,存檔

依我之見,沒有哪種方法是絕對錯或是對,只看哪種方法最適合你!

# # #
以下為個人的一些想法:
1. V-Ray為什麼不能把sRGB也燒進圖片中,或者這是不需要,或是不利於流程?
2. V-Ray的color mapping本身就會影響到採樣,這可能跟V-Ray算圖分成好幾次pass,而這每個pass都可視為最終輸出的圖片有關?
3. 目前大家普遍使用的3ds max Input/Output Gamma =2.2的流程,跟在VRay color mapping中選擇color mapping and gamma,所產生的結果如果一樣,但是採樣結果不一樣,比方說一個比較密,一個比較疏,那麼各位可能要考慮改變一下既有流程。另一個考量時用VRay的VFB會比用3ds Max的VFB更不消耗記憶體,那麼在VRay中做燒gamma 2.2便是必要的選擇了。


[延伸閱讀]
Gamma correction and Linear workfkow 伽瑪校正與線性工作流程

Gamma 2.2 and Linear Workflow (by Sai)

No comments: