今天群內的好友Ronin給大家翻譯了這篇文章,真的是跪謝!Ronin也沒有給我太多他的信息給我,做好事不留名。
所以大家別看王寶強了!快來學習什麼是PBR把!好了,開車了!
Tutorial: PBR Texture Conversion
Table of Contents
· PBR:誤解與流言
· PBR:到底改變了啥
· 傳統流程扼要
· 轉換:傳統 到 PBR高光
· 金屬度工作流 vs 高光工作流
· 轉換:高光 到 金屬度
· 轉換: 金屬度 到 高光
· 對比與建議
· 材質邏輯
PBR:誤解與流言
在我們開始前,我想說清楚幾件事。這塊兒有一堆關於PBR到底是啥和PBR系統到底需要輸入啥貼圖的問題。
首先, PBR系統不是必須要用金屬度貼圖,而高光貼圖也不代表著就不是PBR。我經常在論壇上遇到這樣的情況,有人做高光和光澤度貼圖時別人說到:你丫為啥不用PBR?所以讓我們來徹底分析一下啥是PBR。
大部分情況下PBR是一種包含光與物質的物理,連同模擬現實世界不同物質的標準參數的複雜材質球的結合。PBR本質上是一種根據你使用的軟體或者引擎的不同在實際實現中帶有差異的(通常是材質球模型或者貼圖的輸入方式)內容創作與渲染的全局系統。
此外,導入傳統工作流下的文件去PBR材質球在現實物理上並不能保證得到正確的結果。沒弄明白這個點的人跟我上面提到的「你丫為啥不用PBR」的人一樣多。屌屌的材質球只能提供你一半的成功,另一半需要你合乎邏輯標準的美術創作。
最後一個事兒,用diffuse還是albedo?這倆本質上代表同一件事,物體的固有色,經常可以交換著用。
PBR:到底改變了啥
讓我們來看看材質球的變化,以完全理解如何製作/轉換為PBR系統所用的貼圖。最大的一個不同就是材質球的光學計算十分的先進。如今我們擁有能產生逼真陰影的動態光源,基於圖像的光照 提供準確環境漫反射和高光反射。這意味著我們不再需要在貼圖上直接繪製光源,反射和陰影。現在,我們能更專注的去製作材質內容而不是去烘培貼圖特定的光源環境。
另外,線性空間渲染意味著當微表面功能(粗糙的表面會因為光的消散獲得廣域但衰減的高光)中的能量守恆移除了我們需要手動去把高光貼圖上粗糙的區域填暗,光滑的區域塗亮這個必要,我們不需要為了得到一個自然白高光對高光貼圖畫這種跟固有色有大反差的顏色。也就是說,對於每種材質類型,高光貼圖基本只會包含數值差不多的比較平的灰度值(絕緣體灰,一些金屬有色),因為微表面貼圖會幫你明確大部分材質的表面變化。
P.S.這段翻譯比較難理解,我理解是高光只需要做比較平的灰度分色來區分物體光滑粗糙程度,微表面會通過這個灰度來賦予其不同材質與受光效果,下面附上一張不同材質的參數參考,0代表最粗糙,1代表最光滑,對小數應數值代表了這個材質的灰度值域。更多材質參數自行在網上找,megascans有一切材質。
傳統流程扼要
為了展示傳統材質球和PBR材質球的區別,我用我以前給《至暗之日》做的一把槍來舉例。這玩意是個極好的實例,它展示了很多我沒在在PBR工作流裡沒提到的技巧。
固有色太暗了,這個效果在一個固定的光照環境下看上去不錯,但是在如今動態光照環境下,還是算了吧少年。
環境閉塞貼圖(AO)和凹洞信息(cavity)已經直接烘培進了固有色貼圖和高光貼圖,環境閉塞(AO)與凹洞信息(cavity)應該分開添加進材質球讓其能更智能的去運用。此外,AO不應該直接被加進高光貼圖中,因為閉塞的光源跟反射度較少的材質表面不是一個東西 – 那才是高光貼圖需要定義的東西。
漸變貼圖也被烘培進了固有色貼圖和高光貼圖。固有色貼圖可以為局部效果(比如,製作角色靠近地面區域的蒙塵)製作蒙版;所以,漸變貼圖也不應該被直接烘焙進你的固有色和高光貼圖。
槍的模型的原始材質不支持光澤度貼圖。也就是說,高光貼圖需要為全部材質使用一個統一的光澤度灰度值去表達反射率與微表面兩個方面。
高光的強弱程度完全基於你的眼力,而不是根據現實世界材質的屬性。因此,黑漆金屬的反射率太強了,並且毫無根據的反射出一點黃色,而塑料和橡膠材質的反射率又顯得不夠。
貼圖轉換:傳統 到 PBR高光
現在我們理解了傳統材質球與PBR材質球的主要區別,我們可以更改我們的傳統貼圖來適應新的PBR高光工作流。
首先,我去掉了固有色貼圖和高光貼圖的所有的光影信息與漸變信息。AO和cavity被單獨做成了兩張貼圖連結到材質球的對應接口。然後,我把固有色貼圖提亮到了一個更合理的亮度範圍。
這裡我把原有的高光貼圖分離,做成了一張光澤度貼圖和一張高光貼圖。我把舊高光貼圖的所有表面變化移進了新建的光澤度貼圖,並且修改了基本的灰度值,擁來表達不同材質的不同的微表面結構。如果你已經有一張光澤度貼圖,你應該再檢查一下各個材質的灰度數值是否基於現實世界。舉例,被完全磨掉漆的金屬肯定比上了漆的部分更加的光滑更有光澤。
把大部分原始高光貼圖的貼圖變化轉移到光澤度貼圖裡之後,我們可以把專注點放在反射率數值上了。在這個點上最重要的事情莫過於鑑別哪些是金屬而哪些不是(沒錯,即使你用的是金屬度工作流metalness workflow)。原因很簡單,絕緣體往往有無色的大約4%的線性(或者是PS裡色號#383838 sRGB)反射率值,最低值到最高值通常在2%-16%之間浮動(少部分絕緣體比如寶石是>4%的),而純金屬有著極高的反射率數值,通常在70%到100%之間浮動。因此,搞清楚你到底想做什麼材質對於想確認它們的反射率數值來說是一件極其重要的事。
在確定一個上不同材質漆或者鍍不同材質膜的金屬物體的反射率數值時,通常會將其視為絕緣體,只有漆被磨損掉之後才是金屬。
金屬度工作流 vs 高光工作流
在我們更進一步之前,理解金屬度工作流和高光工作流的主要區別。大多數引擎都支持其一,然而八猴2倆都支持,所以我們能在八猴裡直接比較他倆。
他們之間最大的不同在於固有色和反射率信息在相應貼圖中的體現。在高光工作流中,這些信息數值被明確的設置在了兩張單獨的貼圖裡。
另一方面,金屬度工作流使用固有色(albedo)貼圖來明確固有色和反射率信息,金屬度貼圖來明確材質是絕緣體還是金屬。它的原因在於金屬會導電,所以大部分光子(也就是電磁波)被表面反射,而一些光子會穿透表面被吸收而不是被散射開來,所以金屬非常典型,根本沒有散射性。另一方面絕緣體會反射一個非常小數值的光(~4%),而大部分照到它的光會在表面散射或是彈開,生成一個均勻分布的顏色。
在實踐中,這意味著大部分甚至幾乎全部情況下(除非你貼圖只有金屬和絕緣體而不是兩者都有)你的固有色或者高光貼圖都是浪費的,所以金屬性工作流通常會更高效。然而,金屬工作流有一個缺點就是同一張貼圖中的固有色和高光信息在材質與材質銜接中的效果。
光澤度和粗糙圖貼圖基本一回事兒,傳達同樣的信息,但是通常他們的數值都是反向的。在光澤度貼圖中,明度越高代表表面越光滑/平順,而在粗糙度貼圖中,名都越高代表表面越粗糙/無光澤。在一些地區,光澤度這個單詞跟反射率是同義詞,所以有些人認為粗糙度這個單詞用起來會不那麼讓人混淆所以他們就反著用粗糙度了。重點是不管這貼圖叫啥,它的數值(明度)高低代表了啥意思才是最重要的。如果你們不服,找你們的技術美術或者程式設計師去戰。
高光工作流的優點
固有色和反射率分別輸入進兩張貼圖,可能更適合有傳統材質球使用經驗的藝術家。
全彩色輸入貼圖對於絕緣體反射率上有更高的可控性。
高光工作流的缺點
製作時容易用到不合邏輯的反射率數值而得到不正確的材質效果。
貼圖容量比金屬度工作流更大。
金屬度工作流的優點
Albedo貼圖決定了物體的固有色,不管它是啥材質,概念上講可能會讓藝術家們理解起來更簡單。
把材質簡化成兩類,即絕緣體和金屬,這可能對喜歡手繪貼圖的各位親並不友好。
貼圖容量比全彩色高光工作流更小
金屬度工作流的缺點
材質與不同材質的銜接處會有白邊。
絕緣體的反射率可控性更低。
如果藝術家們不理解這個工作流,會很容易再金屬度貼圖裡用到不合邏輯的參數而得到錯誤的效果。
某些金屬度工作流提供一個金屬度貼圖位和一個二級高光貼圖位,以此來控制絕緣體的反射率。但是這在八猴2裡暫時不能實現。(我看了一下八猴確實沒有,Unity5的金屬度工作流裡是有的,albedo兩倍+ 法線,效果沒測試過,見下圖)
某些人認為金屬度工作流理解起來更加簡單;但是我個人認為兩個真的差不多。藝術家只要用了不合邏輯的參數,任何一個工作流都會崩盤。根據你的以往的工作經驗,其中一個可能比另一個更容易上手。客觀來講它倆真沒有孰優孰劣,就真的只是實現方式不一樣而已。
貼圖轉換:高光 到 金屬度
現在我們有一個基本標準的認識,且知道這兩種工作流之間的區別,兩種工作流之間的貼圖互相轉換起來其實十分的簡單。
首先,創建一個金屬度蒙版,把你的材質區分出來,金屬部分用白色,絕緣體部分用黑色。如果你還留著你的PSD文件,那這步就十分快了,分層用蒙版來製作。你的金屬度貼圖基本上是黑白的,只有緩慢過渡的地方會用到灰度,比如泥土,蒙塵,腐蝕,刮痕等等。灰度也可以用在部分是金屬的材質上;然而這些情況基本非常少見。通常,如果一個金屬上過漆鍍過膜,它就相當於是絕緣體。
當你做好金屬度貼圖,在PS裡新建一個文件把固有色貼圖作為底層。然後,把高光層放到頂層,添加一個圖層蒙版。把你的金屬度貼圖粘貼進高光層的圖層蒙版中。這個時候你應該能看見金屬部分的高光信息和絕緣體部分的固有色信息,這樣你就有一張金屬度工作流裡標準的固有色(albedo)貼圖了。
貼圖轉換:金屬度 到 高光
將金屬度工作流貼圖轉換成高光工作流貼圖同樣簡單。我們只需要分離出固有色(albedo)貼圖中的固有色和高光信息,分別做成固有色貼圖和高光貼圖就好了。
4. 固有色貼圖
PS裡打開你的固有色(albedo)貼圖
新建一層用純黑填充(色號#000000)
把你的金屬度貼圖粘貼進黑色填充層作為圖層蒙版
5. 高光貼圖
6. 用你的原始固有色(albedo)貼圖,放到黑色填充層上面一層
7. 新建一層用色號#383838的灰色填充
8. 把你的金屬度貼圖反相,粘貼進黑色填充層作為圖層蒙版
對比與建議
現在我們可以比較上述兩種轉換流程的效率了。
有個事兒說明一下,因為原始模型的材質參數很準確所以整個轉換流程都十分的順利。如果你的原始文件材質參數不精準,你會在轉換流程中發現很大的不同。同樣,如果你想把材質表達準確,比如有顏色反射的絕緣體(基本上非常稀有,通常會單獨寫材質球,典型例子,頭髮或者螢光色的材質),你會在轉換過程中丟失一些貼圖信息。理想的話,如果你要切平臺更更改老的貼圖或者需要為多平臺創建新的貼圖的話你應該為目標渲染系統創建貼圖(沒錯我也並沒有看懂)。
材質邏輯
所以什麼才是合乎邏輯的材質數值?不幸的是這是一個難以回答的問題,根據你想表達的材質類型,它會劇烈的浮動。與其創建一個圖表,不如我解釋一下啥是材質邏輯。
死抱著圖表和掃描數據不是萬全之策。首先,你沒法找到所有你想做的的材質的參數,所以你需要一些邏輯去自己確定什麼數值比較合適。其次,相同材質的表面質量在不同的情況下會產生出很大的不同,比如時間的影響,破損的程度影響等等。
第一步是要搞清楚這個物件是什麼材質做的。對很多物件來說這都很直白,基本上你簡單掃一眼就知道它是金屬還是塑料還是布還是別的啥了。然而,另一些物件可能會包含一些複合材質,或者部分是多種材質做的。這時候你就要做點功課了,找一些現實裡相同材質的圖片作為參考來學習,然後關注它是怎麼被製造出來的。一旦你知道它是用什麼原料製作而成的,你就可以開始下各種結論了。舉例,金屬比絕緣體反射更強,橡膠比塑料更粗糙,混凝土的固有色(albedo)比瀝青的明度更高等等。大部分情況通過觀察都可以輕易摸清。
現在,你可以具體考慮一下你的貼圖做成什麼質量。比如,顏料根據不同表面處理方式會有粗糙到光滑的變化,塑料也一樣,而金屬根據表面打磨的情況會有相當多的變化。總之,用基於物理的渲染系統(PBR)需要很多美術技巧,跟做遊戲美術一樣,比如觀察和再創作你身邊的世界。理解根本的基於物理的渲染系統(PBR)的原理非常重要;但是最終你還是得靠你的藝術直覺去決定!
譯:Ronin
所以老司機都會點這裡關注!