大公司小心得之(二)
KATANA
KATANA是一個整合了燈光Lighting、著色shading、貼圖Texture、算圖Render的節點式框架軟體(framework),同時也包含了3D場景的管理與流程工具的再研發,最早是由Sony Imageworks給內部做Lighting的工具,後來CG軟體大廠The Foundry開發為套裝軟體對外公開販售。
Katana 用到現在,我發現我 (公司的 Look Dev. TD) 很少用到 Node Graph(節點區),大部份的設定在 Template (頁面)都設定好了,除了最終端 Output (輸出)需要手工設定外,剩下的只需要好好在 Shading (材質)這塊努力就好了。不過,還是趁著空閒之餘去把整個系統的架構了解一下,基本上就是 Input (輸入)一堆該有的元件:模型、攝影機、材質系統,然後調材質、打燈,最後 Output (輸出)。
不同物件 Assign 同一材質
在 MAYA 中 assign (指定) 一個材質球到物件上,最簡單的方法就是用滑鼠中鍵拖過去,然後,要看物件的 Shading Group,就把它放到 Hypershade 中。但是,如果今天要在不同物件上 assign 同一材質,物件可以一個一個選取,也可以建立一個方便選取的 Object Set。在 KATANA 中,要把材質球 assign 到物件上必須要有兩個元素:物件與材質。要在不同物件上 assign 同一材質,跟 MAYA 一樣,就是選取與置放,而 KATANA 有個比較特別的做法叫 Collection。我們可以透過手動的選取或者經由物件 ID Tokens 加上一條簡單的 Expression (連我都會就知道多簡單了),就可以輕鬆地把要選取的物件蒐集起來,然後 assign 材質上去 ,因此我們只要把材質的路徑填上去,再把 Collection 的路徑也放上去,這樣就完成 assign 材質的動作了。
那,什麼是 ID Tokens?
ID Tokens 是一種標記,是物件命名的記號,例如: IDMetal、IDWood、或是 IDCloth 之類的,大公司會把物件的材質屬性作一個粗分,這樣就可以在 Collection 上面做到最基礎的選取條件,剩下的再藉由物件各自的名稱來做其它的 Collection 條件設定。這種做法的好處,就是無論這物件的層級跑到哪裡去 (別跑到 Root 最上層那邊就好) 或者物件改了名字,只要 ID 還在,基本上都還會在 Collection 中,這對於 Pipeline 也是相對的彈性。
一個物件有兩種 Look
針對一個物件,卻要有兩種質感的 Look (樣貌),大公司提供了一個非常原始的做法,但也是滿有效的啦,只是我認為很沒效率。那就是運用 Mix Node 加上無止境的 ISO 來做二分法的區別。ISO 在大公司裡面是 Isolate (隔離) 的簡寫,其實就是 Mask (遮罩) 的意思。假如我今天要在一棵石頭上做出乾溼兩種不同的 Look,最基本的 Specular (高光) 與 Reflection (反射) 就會有所差別。以前我的做法就是用 Layered Shader 分別做出兩種不同屬性的材質球,再用 Mask 來定義兩區的範圍。但 KATANA 目前沒有這東西 (聽說是換了 RIS 後暫時沒有 Layered Shader,所以每個 Channel 就要用無止境的 ISO 來分離兩種屬性該有的顏色與各項資訊。材質球裡的數字,最常見的就是浮點數 (Float Value) 與顏色 (R、G、B)。Specular Intensity 就是浮點,除了數字外也可以用 Texture Map 來表現區域的變化值,而 Specular Color 很明顯的就是顏色 (但也可能只有黑白),因此針對不同浮點的大小就會用 Remap 來做些小小修正,做出不同數字的範圍。但也因為要用一大堆的 Remap、一大堆的 Mix、跟一大堆的 ISO,所以 KATANA 裡的 Shading Network 常常都比東京地鐵還要複雜。基本上在 Texture Map 上動手腳不外乎就是加減乘除,分離要用的區塊,最後,就會得到想要的數字與顏色了。
Reference Photo (參考圖)
現在電影裡面有數不清的 VFX,相對的,就會有數不清的 Digital Double (動畫假人 / 數位替身)。要拍 Digital Double 的 Reference Photo 時,大公司通常都會在攝影棚內,單獨拍攝這些物件的細節。角色物件的部分,會特別處理,棚拍的光源會接近 Look Dev 裡 Template Texture Shot 的 HDRI 設定,這樣就可以用很類似、且統一的光源環境來調整質感。而拍攝這種照片通常會有兩種模式: Polarized (偏振) 跟 Un-Polarized (非偏振),一張是用 PL 把反光濾掉,呈現接近 Diffuse (漫射) 的狀態,另一個就是完全保留物件上的 Highlight (高光)。接著,回到公司後把兩張照片用 Difference (一種混色模式) 疊在一起,就會看到很像 Spec Pass (高光圖層) 的圖像了。這種作法可以比較清楚的觀察到物體針對反光與亮度的表現和分佈。雖然 Specular 是不存在於光學當中的,但在 CG 裡面我們必須要去定義這個高光的範圍、受光狀況、反光...等等的表現。以前在畫貼圖時,絕大多數都是用經驗去指定亮度跟質感,但要接近實際物體真實的狀況反而要多多參考實體的一些質感反應。這種做法我也只在學校看人用過,真正工作後,這還是第一次看到有人這麼做!!
PBR Physically Based Render
這個概念其實滿早以前就有聽說了,但也還沒真的看人用過,大公司自己的 Library 感覺起來,有在建立這類模型的資料庫。PBR (物理基礎算圖) 的材質球屬性分為 AMR 三類 : A = Albedo 就是 Diffuse (sRGB), M = Microsurface 也可以叫 Roughness (Linear) ,R = Reflectivity 其實就是 Specular (sRGB) 啦! 現在已經有越來越多物件的 AMR 被定義出來,這樣在畫貼圖、或者調材質時,就可以當作參考的依據,至於詳細的部分可以參考這個網址 。這個規則在以前不是那麼好實現,現在因為 3D Texture Paint 軟體越來越多了,我們就可以針對不同 Channel 的 Color Space 來各自設定。
其實在這裏有很多步驟跟觀念都是跟著許多理論在走,雖然有時候很囉唆,不過,要做出真實質感的物件,就要盡量照著理論來走,只是真的照著物理特性下去做會很醜,所以也要稍微斟酌一下,還是以好看為主啦。這部分我也還再持續的研究跟挖資料當中,之後有甚麼新的發現,再慢慢更新啦! 如果我這裡有甚麼寫的不對的地方,也請多多批評指教吧!! 其實最近的心得應該是.....第一次準時下班的感覺好怪 XD
編輯 by Joe Chiang