連猴子也會的MAYA Linear Workflow流程

其實是因為這個問題牽扯範圍很廣, 不寫猴子系列大概會花掉很多時間在上面….

關於線性流程(Linear Workflow)是一個會讓很多人迷惑的觀念, 也許更多人根本就不知道有這件事情但是照樣做的出漂亮的影像. 我自己也看了很多篇有關Linear Workflow的文章, 也曾經迷惑很多次, 希望在這篇文章中可以幫助更多人釐清這個觀念。

什麼是線性流程? 光是要解釋完這件事情就足以寫出一大篇文章, 比如鼎鼎有名的3DLight作者的經典文
http://3dlight.blogspot.com/2008/09/linear-workflow-for-maya-mental-ray.html
但是相信我, 即使你看完看懂了每一個字, 去吃個中飯, 抽根菸, 回到桌前打開MAYA開始想自己重新整理一下線性流程的道理時, 你會發現自己又走入了迷宮搞不清楚現在自己身在何方.  這是因為linear workflow牽扯到三個地方, 你的螢幕(Render view), 3D軟體, 還有合成軟體. 每一個地方都各牽扯到linear跟sRGB, 所以至少會有2*2*2個變數非常的令人迷惑.

那什麼是linear workflow? 請GOOGLE, 老外那邊有一堆專門解釋的部落格文. 這邊就不詳細介紹了.
台灣人玩動畫裡也有一篇整理老外翻譯的文章, 看完就知道Linear, gamma這些是多麼擾人的玩意
http://hammerbchen.blogspot.com/2009/10/gamma-correction-and-linear-workfkow.html

那到底linear啦,ga不gamma的會對做3D有什麼影響呢?

簡單的說就是以前映像管螢幕時代因為技術上的關係本來應該是要呈現linear(所算及所見)的影像在螢幕上會呈現gamma 0.45(魔術數字1, 請先記著)的亮度。 那怎麼辦呢? 當時的補救的辦法就是在圖片中(一般照像機照出來的jpeg都是)嵌入了gamma 2.2(魔術數字2, 請先記著) 補償. 如此一來在螢幕上看起來就會"接近" linear的影像了.  SO?


在一般的情況下是不會有太大的問題, 但是當進到3D軟體中時就是個問題了, 原因在於3D軟體中的圖像運算其實是以Linear來運作的, 比方說你的燈光, 你的材質球的顏色, 任何一切3D軟體所計算出來的都是如此.  但是我們的螢幕卻不是, 也因此當我們設好物件, 材質, 燈光後在render view (記住!! 這邊指的是你的螢幕螢幕螢幕!) 中看到的其實是gamma偏低的影像.  再加上我們貼上的材質絕大部分都是轉成jpeg或是png, 裡面內含了sRGB gamma 2.2補償的圖片, 所以只要有貼上不是經由3D產生的材質的地方也都是錯的.

很多人會說, 我不知道這些做了那麼多年 還不是一樣可以做出很漂亮的圖, 有差嗎?
當然有差,  如同剛才所說, 假設我們放了一盞燈, 我們都知道要把衰減設為Quodratic (因為教學說這才是燈光正確的物理衰減!!)
然後用過的人都知道場景會變很暗, 那怎麼辦呢? 第一個動作就是把燈的intensity拉高, 再來就是拼命加燈, 但這時候就會開始容易出現靠近燈近的物體都爆白了, 其他的物件卻還是不夠亮.  這就是因為螢幕顯示的亮度比正常該顯示的更暗, 因此造成我們不自覺得用錯誤的方式去補救錯誤的設定.

可以看到按照原本的設法場景亮度並不夠, 而設定Quadratic衰減的燈光"看起來"就會變成不是二次方衰減了.  因此再提亮就很容易會讓圓柱體爆白. 而補燈就容易增加燈的複雜度. 而經過gamma調整後的圖明顯亮度就正確多了.

好了, 在說下去就不能算是猴子教學了, 接下來就不多解釋原理, 而直接跳進設定. 如果你不在乎為什麼linear的歷史也不想知道為什麼要這麼做, 沒關係, 只要將注意事項跟步驟整理出來就好了.

MAYA階段:

1.(建議) 使用Mia_material.  這系列的材質基本上是以Physical correct寫的shader, 比起blinn, phong更能正確演繹物理性正確.

2. 在任何不是maya自行產生的貼圖與shader間接上gamma correect, 數值填上0.4545 ( 因為任何轉成jpeg的圖片都會被嵌入sRGB gamma2.2的值, 所以要減gamma: 1/2.2=0.4545…)

但是 bump, displacement等黑白貼圖不需要做 gamma correction. Ramp, fractal, noise, cloud…等maya預設的也不需要做

3.  在攝影機的 mental ray/Lens shader中接上mia_exposure_simple (由攝影機端更正算圖出來的gamma值) 設定填上 gain 1.0, knee 1.0 Compression 0.0, gamma2.2

4. (建議)請在Render setting/Quality/Framebuffer中選擇RGBA 32bit float images. 然後格式選擇EXR32bit float      image雖然會使檔案容量爆增, 但是在調整明亮時寬容度大, 製作lens flare, motion blur, 景深時會遠比8 bit              imagey自然漂亮許多.  因此建議 beauty, normal, depth算32 bit, 其他的pass用16 bit, matte, alpha等才用8bit
基本上就是這樣, 如此一來在render view中看到的才是正確linear的結果.  但是要注意一點, 在攝影機上接上mia_exposure_simple, 將gamma值填上 2.2 是為了要補償螢幕不正確顯示的gamma值, 讓你可以在render view中看到真正linear的結果, 但是真正算圖時應該要把gamma值再填回 1.0, 原因下一階段會說明


合成階段:

合成的話建議採用NUKE, Fusion等對於線性流程支援度較好的合成軟體. AE CS之後也支援float point image如Open EXR, 但是AE預設的選項裡卻又有讓人容易混淆的設定, 因此對於線性流程趨勢而言AE不是個最佳選項.

這邊以NUKE做個簡單的說明, 其實在NUKE裡面沒有什麼特別需要做gamma校正的事情, 但是有一件事情需要注意. 在把EXR等32bit float image丟進NUKE的時候, NUKE預設是linear顯示的. 怎麼知道?

在NUKE裡按下S叫出project settings, 在LUT區裡可以看到各種格式對應的處理方式.
之前我們曾經提到在MAYA攝影機接上exposure simple做gamma2.2就是為了要預視丟進Nuke裡的樣子, 但是如果就那樣算圖出來丟進去NUKE的話, 因為NUKE會再幫你做一次gamma correction, 所以會變成做了兩次的gamma correction.

所以正確的做法應該是在maya做好各種設定後, 把 mia_exposure_simple的gamma改回1.0. 這樣雖然在render view(也就是螢幕上)看起來會是亮度不足的影像(但是其實是linear正確的, 因為maya裡面已經全部都是linear的), 但是丟進Nuke裡面就會顯示正確亮度的lineart corrected影像!

反過來說, 如果沒有做gamma correction按照以往的錯誤方式打好燈算出來的圖, 丟進nuke裡就會變的過亮(因為nuke以為你丟進來的應該是linear), 然後你就會在read中改成srgb才會變成你在maya裡看到的樣子. 但是這也只是讓你算的東西在nuke裡面看起來跟Maya一樣, 並不是說你做的就是linear correct的影像….

基本上大概就是這樣, 這些是我個人對於Maya – Nuke linear workflow的一些理解. 可能有一些地方不是非常正確, 非常歡迎看到的人多加指教. 今後對於線性流程有更多的理解的話也會盡量在這系列文章中補充.

待續…..

衍伸閱讀:

最近renderman官網中多了一篇關於render man如何做線性管理的文章, 裡面也有淺顯解釋

linear workflow的原理. 非常的淺顯易懂, 相信對於有興趣的人是很有幫助的, 請參照:

http://renderman.pixar.com/view/LinearWorkflow

  1. 博主你可以看看我在上一个项目中总结的改进的线性工作流程,虽然没有用到线性灯光,但是你看完后就知道我这么做的意思~~嘿嘿~
    http://hi.baidu.com/cg_mike/blog/item/65e7b0cd7c5ca80801e928bc.html
    《maya+vue+nuke:改进的线性工作流程(原创)》

      • Gil
      • 六月 5th, 2011

      受益良多, 謝謝

  1. No trackbacks yet.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: