本文是筆者在學習PBR理論中的一些心得,并試圖以結合Substance系列軟件為例,從使用(實用)層面介紹PBR理論。
PBR的定義:
PBR全稱是基于物理的渲染(Physically Based Rendering ),它是一套先進的渲染方案,能使物體對于光線做出精確的反應。從使用層面上來看,PBR是為了材質更加接近真實,至于表現PBR的過程及相關的Shader,我們不需要去了解,你可以把它認為是一個引擎,或者是一個黑盒,我們需要做的只是提供數據(即貼圖)。
PBR與實時渲染
可以說PBR是為實時渲染服務的。傳統貼圖流程基于烘焙,在建模軟件中設定燈光及環境,烘焙出彼時環境對物體的影響,特殊情況還會烘焙上一些陰影。那么在游戲引擎中,環境光照一旦變化,物體一旦移動,必然會穿幫。而PBR則只關心物體的物理屬性,一旦給定了數據,則無論在任何光照條件下都能正確反映物體本來的樣子。就像上帝造物一樣,他只關心物,而不需要考慮光照,物造好了,無論是白天黑夜陰天晴天,物體都能對光線做出正確的表現。如下圖,這是一個典型的使用PBR材質的模型,當在不同的光照環境下,它都能正確對光線做出反應,重要的是,這里只需要做一種材質而不是四種。
從PS中的RGB通道看PBR
我們來看一下PS中的通道。
如上圖,默認情況下,可以查看一張圖片的紅綠藍三個通道,選擇任意一個通道,相對應顯示該圖片的一張灰度圖,那么這里的通道就是顯示了這張圖片每個點上擁有的顏色信息值。根據顏色理論,某一點的顏色,就是紅綠藍三色的混合程度,那么這三張“貼圖”混合,就成了最終的“彩色”圖片。
這跟PBR通道有什么關系呢?你可以把PBR的通道看做是維度的擴展,如果PS的通道是太陽、地球、火星組成的太陽系,那么在PBR維度,太陽系和其它星系就組成了銀河系。在PBR的通道里,顏色只是其中一個通道,其它的還有Normal通道提供表面凹凸信息,Metallic通道提供是否金屬信息,Roughness通道提供光澤度信息,其它通道若干。由此可見:
一切貼圖都是數據
PBR用到的貼圖,用來描述不同的物理屬性,類似人的幾大系統,比如消化系統、呼吸系統、神經系統等,那么PBR的各種系統,也可以表現為通道。簡單介紹一下PBR的幾個比較重要的“通道”:
- 顏色貼圖:描述物體某個位置的顏色;
- 法線貼圖:描述物體某個位置的凹凸;
- Roughness貼圖:描述物體某個位置的粗糙程度,注意,表現細節的劃痕、污漬、指紋等,就是不同外形的粗糙程度的不同;
- Metallic貼圖:描述物體某個位置是否為金屬;
那么這些貼圖如何反映到3D模型上呢?這就需要UV的幫助:
UV是PBR貼圖從2D映射到3D的橋梁
UV的展開方法,已經存在著很多解說了,比較形象的解釋是類似于講一個紙盒剪開,使其平整在桌面上。UV存在的意義,就是告訴渲染引擎,如何將一張2D貼圖上的數據映射到3D模型上,過程就像將一張貼圖包裹在模型上,而如何去包裹會有65536中包法,所以這時候就需要UV告訴引擎,如何將貼圖按照我們想要的方式包住模型。做PBR貼圖,模型方面繞不開展UV。那什么情況下不需要展UV呢?就是模型沒有任何物理區別需要展現的情況,打個比方,浴缸,一個新浴缸——表面光滑、顏色單一、整體光澤度一致,這時候可以不用展UV。但是,如果要在浴缸的某個地方有寫實的需求,比如年歲長一點,有了水垢,或者有掌紋、手印,這時候就必須要展UV了。
PBR與Substance系軟件
Substance系列軟件是典型的基于PBR理論的材質制作軟件。掌握這兩個軟件的核心就是通過PBR理論或者思想去使用它們。這里不再介紹兩個軟件的界面,單就軟件如何體現PBR思想來介紹一下,總體來說:
- Substance Designer(以下簡稱SD)中通過輸出節點來對PBR的各項物理屬性進行構建。
- Substance Painter(以下簡稱SP)中使用通道的概念對PBR的各項物理屬性進行構建;
Substance Painter中體現PBR理論的地方:
-
材質屬性面板:
Substance Painter的材質屬性
如上圖,區別于PS的筆刷,SP中不只可以畫顏色,一筆畫下去,顏色、高度、粗糙度、金屬、法線都有了,你可以選擇關掉上面的任意一個開關,即不繪制相應的物理屬性。
-
圖層面板:
SP圖層面板
如上圖,下拉列表即材質的物理屬性,可以選擇相應的通道,通過圖層右邊可以調節當前物理屬性的影響程度以及與其它圖層的混合模式,如果你會點PS,這就很容易理解了。
Substance Deisnger中體現PBR理論的地方:
Substance Designer中每當新建一個材質,就會給出如下圖的幾個輸出節點,輸出節點越多,描述的物理屬性越多:
近距離查看:
所以,在SD里,構建材質的過程,就是構建這幾個輸出節點的過程。
灰度圖在各通道的意義
某些通道,如Roughness、Height、Metallic使用灰度圖提供數據,灰度使用0到255這256個層級表示其程度,不同的通道,灰度數值代表的意義不同。
- Roughness通道:數值越大,代表此處數據量越多,即此處越粗糙,數值越低,數據量越少,即此處越光滑。
- Height通道:數值越大,此處越高,數值越小,此處越低。
- Metallic:只有0和255兩個數值,因為現實世界沒有既是金屬也是非金屬的物質,0代表非金屬,255代表金屬,有些地方也會用0或1表示。
為什么說Roughness是表現細節的關鍵
拋開建模不談,因為某些細節可以通過建模來實現的,比如表面裂痕、并不平直的直線、并不平坦的表面。邊緣磨損、污漬、劃痕,本質上來說都是Roughness程度的不同所表現出來的,比如沒有擦干凈的鏡子,生銹的水龍頭,有掌紋的杯子等。所以細節的打造,無論是在SP還是SD中,都要將注意力重點放在Roughness貼圖的制作上來。
PBR與VR的交集——現實(真實)
除去如低多邊形卡通藝術化的場景,決定VR場景品質的關鍵是真實,也是VR體驗的第一印象。且不說PC端良莠不齊的貼圖品質,如果只是將PC端的模型原樣搬到VR中而不對材質做PBR加工的話,給人帶來的震撼僅限于簡單臨在體驗,而不是沉浸。
如何練習
鑒于PBR的宗旨是表現真實,平日里可以注意觀察周圍的環境,用PBR思維來分析看到的事物,使用顏色、法線、Roughness幾個維度來分析,比如鋪了瓷磚的地面,公交車上的把手,路邊磨損的欄桿。在制作過程中,也可以搜索真實物體的照片進行比對,觀察是什么細節決定了這個物體的真實。
總結:
PBR流程及其相關軟件如Substance,正在逐漸成為CG行業的工業標準。如果你是團隊,建議引入PBR工作流程,因為這是一套高效省時的工作流程,它可以更好的做人員分工,減少返工的時間成本,并且給項目品質帶來提升;如果你是個人,建議早日學習PBR工作流程,因為越來越多的團隊在使用這套流程。
這就是一個跨界程序員眼里的PBR理論,希望對你有所幫助。
參考文檔: