一篇翻譯國外的關(guān)于線性工作流程專業(yè)技術(shù)文章,可以清楚的了解線性工作流,LWF的理念是跨越渲染器和三維軟件的,無論是maya、max、mentalray還是vray用戶,如果想了解什么是Liner Workflow(線性工作流),請耐心閱讀。
注:本文中有的地方用gamma曲線替代了sRGB曲線來進行描述,實際上這兩者非常接近,統(tǒng)一用gamma 2.2來描述對LWF使用者來說更不容易混淆。畢竟學習LWF的目的是為了實際應用。
線性工作流程和gamma的解釋
為什么要用線性工作流程?
許多使用3d軟件時不使用線性工作流,覺得這沒有意義,其實,在線性工作流程下,燈光的計算和從渲染設(shè)置到后期處理的整個顏色的處理過程,都是正確的。如果想渲染更具真實度,那么就需要這么做。
線性流程是一個關(guān)于gamma如何工作的術(shù)語。要理解它,需要知道什么是gamma,為什么它會存在以及如何控制。
先來看一個例子,這是一個沒有進行g(shù)amma矯正的圖像例子??梢钥吹綗艄鉀]有充滿于房間,即使場景是用vray的GI渲染。GI:是Indirect Illumination的縮寫,中文含義是“間接照明”。在渲染器在全局光的選項里。
在渲染完成以后,后期調(diào)整圖像的gamma,燈光變得正確充滿了屋子。但是問題是這結(jié)果看起來有點曝光,而且顏色的色溢也計算錯誤。在地板上的顏色球,被賦予的是一個來自max的純凈的材質(zhì)球,所以他們的顏色是正確的。然而,地面的材質(zhì)的顏色和墻上的那副油畫的顏色,是不正確的。飽和度和對比度都沒有很好的被修正。
正確的設(shè)置(線性工作流),顏色和燈光都是正確的。
用線性流程也會有其他的優(yōu)點,例如每通道信息都有32位。常規(guī)的圖像(像jpg)每個通道(只有R,G,B通道)只有8位,雖然最后的輸出結(jié)果也夠好了,但是它并不包含足夠的信息供后期處理使用。8位的圖像并不“知道什么被隱藏”于白色的像素下,因此當曝光度降低的時候,它會變灰。而且,如果在后期做一些景深和鏡頭效果(glare/bloom
現(xiàn)在,解釋gamma這個術(shù)語之前,需要說一個物理世界的常識。人類所擁有的感知,并不是線性的方式的。舉個例子:如果手里拿著2.5公斤的物體,再加上0.1公斤,可以很容易感覺到重量的變化,但是如果拿著25公斤的物體,再加上0.1公斤的物體,幾乎感覺不到有什么不同。這種現(xiàn)象同樣會出現(xiàn)在聽覺和視覺方面。
那么,人類是怎樣感知燈光的改變?
這條曲線描述了人類如何感知燈光的亮度。
是的,那意味著jpeg是一個非線性編碼格式。實際上jpeg以及幾乎所有的8位的圖像都是以同樣的像人類感知燈光的曲線來進行編碼。這條曲線就gamma2.2.
注意過在max中,拾色器是如何從0到255的范圍進行拾色的嗎?
三色圖
這里解釋了8位的圖像是如何進行編碼的:
注意色板在暗部區(qū)域的密度,和在亮部區(qū)域的寬度。這個結(jié)果顯示在暗部區(qū)域有更多的信息,所以在這樣的情況下,可以通過集中數(shù)據(jù)在暗部區(qū)域來利用人類對燈光的感知特點。
在應用編碼以后,實際上圖片在后臺發(fā)生的是,這個圖像變灰了。
像這樣:
過去使用CRT顯示器的時候,有幸見到輸入的圖像和輸出的圖像分別是什么樣的。實際上,這個亮度的規(guī)律,正好和人類的感知光線的規(guī)律是相反的。(用的是進行過編碼的圖像)
注意亮度信息是怎樣隨著電壓的增加而慢慢升高的,當它達到一定的電壓值,就會突然上升。如圖所見,這條曲線正好和人類感知燈光的并且用來編碼的曲線相反。
當gamma編碼和CRT冪律函數(shù)在一起,中和以后整個結(jié)果應該是這樣的:
今天用的平板顯示器,沒有當初老的CRT顯示器那樣的顯示效應。但是為了得到同樣的結(jié)果,今天的顯示器也會預置一個gamma曲線,是為了得到正確的圖像顯示。換句話說,原則和之前一樣。
那么,渲染的時候需要做些什么呢?
其實,十分簡單。當要在3ds max中制作一個逼真的渲染的時候,用線性的方式去處理所有圖像數(shù)據(jù)時非常關(guān)鍵的。因為它非常容易計算,而且也因為真實世界中并沒有非線性的現(xiàn)象。那就意味著,在處理顏色、燈光、貼圖,每件事需要做的事情的時候,需要轉(zhuǎn)換成線性空間。之所以叫線性,因為它不再是一條曲線了,而是直線,其被稱作:gamma1.0。
進一步解釋一下。當在非線性空間下計算的時候,會發(fā)生的是,在亮度上,他們在各個位置的比率是不一樣的,于是實際輸出亮度也就不匹配了。
如果在線性空間下計算,那么他們的比率就匹配了,如圖所示:
下邊看看如何在整個工作流程中如何控制他們。
直接在顯示器上看線性空間的東西,會顯得有點發(fā)灰。這是由于所有的東西都在后臺以線性空間處理了,即給渲染和各種圖層一個gamma2.2的矯正。換句話說,所有東西都是在gamma1的情況下計算的,只是你在gamma2.2的環(huán)境下觀察。
來看看3ds max是如何設(shè)置的。首先,啟用Gamma/LUT Correction.
進入菜單Customize/Preferences/Gamma and LUT;這是首先要看的地方。
勾選Materials and Colors下的兩個選項。會發(fā)現(xiàn)色板和材質(zhì)球都發(fā)灰了,(有時候需要刷新材質(zhì)面板才能看到結(jié)果)看起來有點奇怪。但是別擔心,這可以確保渲染時正確的。
display中的gamma設(shè)為2.2。這只會通過影響顯示器來影響視窗、渲染結(jié)果的顯示(并不會在后臺實際改變圖像的gamma)。
input gamma:告訴max它要以gamma2.2的矯正來處理貼圖。除了HDRI圖像,你的所有貼圖(在大部分情況下)都會被gamma2.2矯正。這個接下來會詳細說明。
output gamma:指定max如何保存他們的渲染結(jié)果。設(shè)置成1,是為了完整的保持線性的輸出結(jié)果以在后期處理軟件中更好的使用和處理。如果在渲染以后不想進行線性工作流了,比如要保存一個jpg的圖像,那么需要把它設(shè)置成2.2。
如果用的是max自帶的幀緩存,系統(tǒng)gamma設(shè)置將起作用,對最后看到的結(jié)果起作用。這只是看起來是這樣的,但不意味著圖像會被那么處理而保存。
如果用的Vray的幀緩存,需要啟用sRGB按鈕(在vray幀緩存窗口的下面),來觀察最后的結(jié)果。
注意:如果是用mental ray進行渲染,需要告訴mentalray以32位的方式進行圖像顯示。mentalray默認是16位的圖像顯示方式。
現(xiàn)在,制作一個場景,嘗試一下這種方法。確保圖像是以每通道32位的方式保存的。推薦用exr格式,注意,ps并不能很好的處理這類的圖像,但是大部分合成軟件都可以。這里用的AE,并確保工程被設(shè)置為32bpc,確保AE能識別圖像通道的所有信息。
當導入一個32位的圖像或者任何exr圖像,AE會自動識別它為線性圖像,然后自動以線性方式去處理。如果正確的對圖像進行任何操作,它在AE中都將是正確的。及時這個圖像還沒有被gamma矯正,AE也可以立刻進行矯正。當導出你圖像時,是否作為視頻格式,AE在保存信息的時候,都會添加一個正確的gamma矯正。
別的任何東西都不用再設(shè)置。
如果有不同的通道,比如反射層,使用的疊加方式:Add。只要這個工程是在線性空間下,那么計算就是正確的。而Screen疊加模式,實際上是一個在處理非線性圖像的時候,模擬正確數(shù)學算法的模式。
當用vray的時候,會出現(xiàn)一個問題。vray在渲染的時候是自適應采樣的,那意味著在較暗的地方,vray不會用太高的采樣。這個方式叫做vray DMC采樣(確定性蒙特卡洛采樣)。問題在于,當進行了線性工作流程的設(shè)置后,vray在判定明暗度區(qū)域的時候,不能得到正確的結(jié)果。這是因為在進行計算的時候,vray是在底層進行圖像計算的。
為了修復這個問題,需要調(diào)整一些設(shè)置。
首先,需要告訴vray是在線性空間中進行工作。vray在gamma設(shè)置方面有一些過時了,所以不得不把下面的這個屬性設(shè)置成2.2。
然后勾選Don’t affect colors (adaptation only)選項。
可以注意到,沒有勾選Linear workflow選項。這是一個過時的方法。
現(xiàn)在vray的DMC采樣就正確了。
之前和之后的結(jié)果: