把照片轉成Texture:如何自製PBR材質?

“ Physically based rendering”,也就是所謂的PBR,係指模擬真實物理環境的材質,基於現實當中該材質的物理特性,並且在算圖引擎中做出模擬。

目前網路上有非常多PBR的素材資源,從金屬質地到木頭紋理包羅萬象。然而,如果需要基於一個真實的物件做出其PBR材質,該如何利用自己拍攝的照片來做出自己想要的材質呢?

本篇文章使用工具:

🍥 Photoshop — 照片處理及轉換。
🍥 Blender — 材質預視與烘焙。

在開始將照片轉換成各種形式的貼圖之前,必須先視需求決定是否要將照片轉換成無接縫貼圖(Seamless texture)

🍙 無接縫貼圖(Seamless texture)

像木紋、小石子材質、磁磚等等,經常會需要大面積的重複質地,若貼圖沒有經過特殊處理直接進行拼貼,便會有十分明顯的接合感。因此必須先將圖片處理成無接縫貼圖(Seamless texture)。

以下使用筆者自行拍攝的照片為例:

▲未經處理之原圖

若只有單一張圖片可能不明顯,但將原圖重複成2X2的狀態時(上圖右側),可以明顯看出接縫痕跡,而會造成這樣的結果除了圖片與圖片之間並未接合的小石子以外,還有在拍照時物體受光不均勻。

經過以上分析後,筆者利用PhotoShop中的畫面錯位濾鏡,先讓圖片的邊緣能夠錯位至畫面中間,接著使用仿製印章工具修補邊緣被裁切到的小石子,最後再針對受光不均勻處利用加亮/加深工具進行調整:

▲經處理後之無接縫貼圖

經過處理後,原先的接縫處變得相對不明顯許多,原先受光不均的問題也加以改善。有了一張可用的無接縫貼圖後,便可以開始PBR貼圖的製作。

🍙 PBR Texture

首先要先了解到,做出一個PBR材質,至少必須具備以下貼圖:Diffuse map(顏色)、Normal map(凹凸)、Roughness map(粗糙度),當然還有Displacement map、Metallic map等,不過本篇文章先針對前三種貼圖的製作做講解。

  • Diffuse Map

Diffuse Map也就是材質的基礎顏色(Base Color),可以使用剛剛已經處理好無接縫貼圖,進入到Blender內的Shading分頁,新增Image Texture導入Diffuse Map,並且利用Texture Cooldinate以及Mapping節點進行貼圖大小及位置調整。

▲貼上Diffuse map並進行大小及位置調整
  • Normal Map

在Photoshop中選擇上方選項列「濾鏡/3D/產生法線對應」,便可以進入法線對應調整視窗,右側可以針對凹凸效果進行調整,左下角可以選擇貼圖在不同模型上的預視,其選擇並不會影響到濾鏡轉換結果:

▲利用3D濾鏡效果快速將照片轉換成Normal Map
▲Normal Map會是一張呈紫色調的貼圖

完成轉換後,可以將其放入Blender裡測試:

▲若將Base color取消連接並只接上Normal map,可明顯觀察到在視覺效果上表面有了凹凸效果
  • Roughness map

目前在Photoshop中並沒有可以將圖片快速轉換爲Roughness map的方法,但我們可以根據材質的觀察來想辦法區分其粗糙度。

例如我們可以觀察範例的這張圖片,我們可以發現有石子的部分相對較為光滑,而有石子的部分同時也是顏色較深的部分,我們便可以針對這點來製作Roughness map。

為了等等方便一邊調整一邊預視貼圖狀態,在「Edit/Preferences」中新增一個Add-ons「Node: Node Wrangler」。

▲Node: Node Wrangler

接著利用Diffuse map,現將其轉換為黑白色(RGB to BW),接著調整其亮度及對比度(Bright/Contrast),在開始調整之前必須先瞭解到黑白與數值之對應關係,越黑代表越接近0;越白代表越接近1,以Roughness(粗糙度)為例,越黑代表Roughness越低,也就是越不粗糙;越白代表Roughness越高,也就是越粗糙。

▲灰階與數值之對應關係

按住control+Shift+左鍵點擊你想預覽貼圖狀態的位置,例如附圖為點選「Bright/Contrast」後,便可以預視目前貼圖狀態,顯示的便是貼圖的原始顏色狀態。當然,也可以直接將節點接至Roughness上,直接觀察其套用後的效果去做調整。

▲調整後的Roughness貼圖之原始顏色
▲接至Roughness後效果

🍙 輸出PBR Material

在Blender做完各個貼圖後,因各項數值的調整皆是在Blender內部進行算圖,若欲將貼圖完整打包進其他像是Unity的外部軟體,必須將有在Shading利用節點調整的材質進行Bake。在Bake之前必須先將Render Engine切成Cycles。

▲將Render Engine切成Cycles

在Shader Editor新增一個Image Texture,名稱為「diffuse」,長寬改為4K,右邊欄位找到Bake的下拉選單,Bake Type選擇Diffuse,由於我們只需要其顏色資訊,因此將「Direct」及「Indirect」取消勾選。接著確認要Bake的模型、以及剛剛Shader Editor新增的「diffuse」為選取狀態後,便可以按下Bake。

▲Diffuse map的bake設定

Bake完成後便可以得到該模型的Diffuse Map,記得要按框選處選擇Image存檔:

▲Bake出來的Diffuse map

接著Normal map和Roughness map的Bake方法也都十分雷同,都要記得建立一個新的空Image Texture,並將名稱改為「normal」和「roughness」(若沒有記得新增並Bake到原先的Image Texture上,會覆蓋掉原先Bake的結果)以下附上Bake選單的設定:

▲Normal map的Bake設定
▲Roughness map的Bake設定

完成Bake後,可以在Blender中新增一個新的Material,將Bake完的Texture map接上節點觀看效果,當然也可以匯入Unity測試,如此便成功用照片製作了基礎的PBR材質。

▲Blender內渲染效果

--

--