---
title: Strict PBR Shader with Substance
description: Strict PBR Shader with Substance
lang: zh-tw
tags: PBR, RD, Article
---
:book: Strict PBR Shader with Substance
===
## :page_facing_up: Two Kind of PBS

### Metallic - Roughness
> Pros:
* 比較容易製作,減少非金屬材質使用錯誤菲涅爾數值(F0)的狀況
* 較少的記憶體使用量(1張RGB+2張灰階)
* 較廣泛的被大多製作流程接受

> Cons:
* 對於非金屬類材質的菲涅爾數值(F0)沒有任何控制,除了某些軟體可以使用特殊的技巧來控制非金屬材質的菲涅爾數值
* 貼圖邊緣的白邊瑕疵比較明顯,特別是在低解析的狀況時。
:::info
之所以容易製作並且減少錯誤,是因為被限制在只能透過 Metallic 來控制 Diffuse 和 Reflection,因此反射能量總和不會超過接收的能量(energy conservation)。
但這個作法會讓所有非金屬材質的菲涅爾數值都相同,大約是塑膠(1.45~1.6)。
:::
### Specular - Glossiness
> Pros:
* 物件邊緣的瑕疵比較不明顯
* 可以透過 specular map 控制非金屬物質的菲涅爾數值
> Cons:
* 製作上容易使用錯誤的數值(比較不物理正確)
* 較多的記憶體使用量(2張RGB+1張灰階)
* 在用詞上容易和傳統的流程搞混,例如 Diffuse Map 就和傳統流程的貼圖完全不同。
:::info
容易錯誤的原因,是因為 Specular/Glossiness 流程在反射強度上,會透過 Diffuse 和 Specular 兩張貼圖來控制,這樣很容易在製作的時候做出不符合能量守恆的狀況,例如白色表面配上白色的反射,在製作的時候就很容易讓反射能量超過 1,相較於 Metallic 在反射強度上只需要透過 BaseColor 來控制,Specular/Glossiness 流程會困難許多。
:::
### 邊緣瑕疵
邊緣瑕疵的原因,主要是貼圖的邊緣做顏色插集計算的關係,
兩種作法都會有,但黑色比較不明顯。
使用 Metallic/Rougheness 流程時,
Base Color 在金屬部份是高亮度的顏色,這在模糊邊緣疊色會呈現白色,

使用 Specular/Glossiness 流程時,
Base Color 在金屬部份是黑色,在模糊邊緣疊色會呈現黑色

:::info
雖然無法完全消除邊緣瑕疵的現象,但是透過適當的貼圖大小和 UV 比例,可以大幅的改善邊緣模糊的問題。
:::


## :page_facing_up: Metallic/Roughness 流程的正確物理數值(顏色)

### Base Color (RGB - sRGB)
:::info
這張RGB貼圖定義了兩個資料,非導體的反射顏色(diffuse and reflection color ),以及導體的反射強度(當該區域被定義為 metal 時)。
:::

* 必須排除材質上的光線資訊
* 暗色的 RGB 數值應介於30~50之間(需嚴格限制)
* 亮色的 RGB 數值不應高於 240
這些顏色上的限制除了符合物理正確,
也是為了保留數值空間讓環境因素(燈光、反射等等)使用,
在使用 PBR 流程時必須嚴格檢查 Albedo/BaseColor 的 RGB 數值。

### Metallic (Grayscale - Linear)
:::info
這張灰階貼圖用來定義該區域為金屬或是非金屬物質,類似遮罩的性質。
Metallic 本身沒有物理數值上的含意,僅用來解釋該區域的 Base Color 數值要轉換為 diffuse (非金屬) 或是反射率(金屬),一般來說 Metallic 只會是黑或白。
:::

金屬表面在貼圖描述( Base Color)上有兩個重點,一個是反射率在 70%~100% 的金屬區域,一個是氧化或是鏽蝕之後的非金屬區域。

* 金屬區域:
在 Metallic Map 上的顏色會是 235~255 sRGB,並且因為要達到 70%~100% 的反射率,Base Color 的顏色會落在 180~255 sRGB 的範圍。
* 鏽蝕與非金屬區域:
金屬表面因為鏽蝕或是被髒污覆蓋的區域,都應該被視為非金屬區域,
當 Metallic Map 上的顏色低於 235 sRGB 時,
反射強度就要低於 70%,Base Color 顏色需要低於 180 sRGB
### Roughness (Grayscale - Linear)
這張灰階貼圖描述物體表面的粗糙程度,黑色表示平滑,白色表示粗糙。
Roughness Map 沒有絕對的對錯,是藝術家可以自由創造最多細節描述的貼圖。

## :page_facing_up: Specular/Glossiness 流程的正確物理數值(顏色)

### Diffuse/Albedo(RGB - sRGB)
這張 sRGB 貼圖看起來類似 Metal/Roughness 流程的 BaseColor,
製作的原則上也和 BaseColor 一樣,但是在金屬區域必須填上黑色。

* 顏色反映材質本身的顏色,但金屬區域必須為黑色
* 必須排除材質上的光線資訊
* 暗色的 RGB 數值應該介於30~50之間(需嚴格限制),金屬區域必須完全是黑色。
* 亮色的 RGB 數值不能高於 240
:::info
光線照射到物體之後,會有三種行為,反射,吸收,穿透(折射)。物體顯示的顏色是反射光線的結果,分為 specular reflection 和 diffuse reflection,這兩個反射的能量必須符合能量守恆定律,因此在完全 specular reflection 金屬物體上,diffuse reflection 的能量會是 0,也就是黑色
:::
### Specular (RGB- sRGB)
這張 sRGB 貼圖定義金屬的反射強度與非金屬的菲涅爾(F0)強度。
Specular 貼圖可以自由定義非金屬材質的(F0)強度,
不像 Metallic/Roughness 流程裡所有非金屬材質都是強制在 4% 反射率。
但是注意繪製時必須依照真實物理正確的強度,維持能量守恆,
非金屬的區域 Specular 必須是灰階,金屬區域的顏色必須在 180~255 sRGB 之間。

由於 Specular 貼圖同時包含金屬和非金屬的(F0)資訊,繪製時有不同的重點
* 金屬區域:
(F0)必須基於真實物理資料,在鏽蝕或是污損的區域要降低反射強度,同時基於能量守恆原則,這些被定義為非金屬的區域在 Diffuse 的強度必須提高

* 非金屬區域:
雖然可以自由的控制非金屬材質的(F0),但是請注意必須使用正確的物理數值。
非金屬材質因為大部分的能量都被折射或吸收,所以反射出來的光線遠比金屬材質低很多。
藉由折射率(IOR)的計算,大部分的非金屬材質的(F0)強度約為 2%~5%(linear),
換算為 sRGB 是 40-75 之間。
如果不確定材質的(F0)強度,一般我們會使用 4%(0.04-塑膠),寶石類是特例,它們的(F0)落在 0.05~0.17(linear)。
另外,在 Metallic/Roughness 流程裡,透明(air)會將(F0)定為 0.0~0.08(linear)並且將 specularLevel channel 設為 0。

* Specular map 包含非金屬的(F0)資訊和金屬的反射強度。
* 非金屬的光源反射遠比金屬弱很多,通常只有 2~5%(40~75 sRGB )。
* 一般寶石類的(F0)是 0.05~0.17 (linear)
* 一般流體類的(F0)是 0.02~0.04 (linear)
* 金屬的反射強度是 70~100%(180-255 sRGB)
* 如果你不知道材質的反射強度,那就用 0.04(塑膠)吧!
### Glossiness (Grayscale - Linear)
這張灰階貼圖用來描述物體表面的粗糙程度,黑色表示粗糙,白色表示光滑,越粗糙的表面會造成越多的 Diffuse 現象。
這張貼圖的結果會跟 Metallic/Roughness 裡的 Roughness map 黑白相反,製作上的注意事項跟 Roughness map 相同。

* 盡情發揮你的創作能力吧!
:::warning
補充事項:
* More about linear working flow:

* How do I measure sRGB values in photoshop?

:::
## :page_facing_up: AfterAll
### PBR 的歷史:
[Ready at Dawn](http://www.readyatdawn.com)
2011~2015 年 The Order:1886 建立次世代里程碑

Ready at Dawn 在 2013 SIGGRAPH 發表 PBR 製作流程影響至今,突破 console game 平台八年的技術瓶頸(這裡指的大約是 PS3 的全盛時期,主要是 Normal Map、AO 等技術 )
開發公司當時發表的製作方式和規格都被眾多公司導入。
{%vimeo 135714180 %}
{%youtube sYX9I3ONHc4 %}
{%youtube -fb14WrLXEY %}
{%youtube Zf5ekOlz7AE %}
### 物理正確性 VS 藝術性

{%youtube hh5HV4iic1Y %}
使用這些 PBS 物理性規範的目的並不是為了要限制藝術家的創作,
而是讓美術人員能基於一致並且符合物理真實規範的環境,
創作出更寫實,更讓人信服的作品。
### 為什麼 PBS 要嚴格限制顏色範圍 ?
> 因為黑貓也是需要有人關心的。

#### 保留材質受到光線與環境影響後的細節
{%youtube 2YcEKZlfrGM %}
#### 人類對容易受到各種因素影響而得到錯誤的認知
"我覺得這樣比較好看"、"東西好看比較重要" 這類說法,
是藝術家對自己作品感到自信與驕傲的說法。
但美是很主觀的,每個人都會有自己的意見。
> 受到環境和其他因素影響,同樣的衣服會顯示不同顏色

> 大多數的人無法分辨 A 和 B 的顏色亮暗

#### 數學物理公式是為了簡化材質調整

困難的事情,交給科學家就好了。
### 使用 PBS 的優勢 ?
* #### 大多製作軟體具備即時預覽材質的功能。
* #### 減少材質球的使用數量:
> PBS 是透過貼圖來區分材質屬性,
可以很容易的將多個材質整合在一張貼圖裡
* #### 將材質製作規格化:
> 以往在不同軟體,不同平台,不同算圖引擎裡,
調整材質都有各自的一套方式,參數等等設定,
數位內容在這之間的轉換上非常的困難。
如果使用了 PBR 標準,只要將產生出來的貼圖指定到對應的屬性,
就可以得到近似的材質設定。
* #### 簡化材質製作
> 在 PBR 的製作流程裡需要調整的數值很少,而且一旦建立了規格化的基礎材質之後,藝術家可以更專心的去刻劃物件的歷史與故事性。
### Substance Paint 的基本流程與注意事項
當我們使用 PBR 流程時,材質作法會和以前有一個很重要的差異,
不管是走 Specular/Glossiness 或是 Metallic/Roughness 路線,
以前我們會習慣將不同材質的物件分開然後給予不同的材質,
換個方向來說,就是我們會定義很多顆材質球在一個或是多個物體上,
但是在 PBR 流程裡,因為不同的材質是透過三張貼圖的組合來控制,
所以只需要一顆材質球就可以做出不同的材質特性。
:::info
注意事項
:::
* 輸出前使用 vertex color 區分不同的材質區域:
這是為了之後可以建立 ID 作為材質的 mask 使用,不同的軟體可以使用不同的方式,例如 Material ID 之類的。

* 先上好一套內建的基本材質作為基底,再疊上自己想要的髒污'花紋等等效果,隨時使用 meta_rough_validata filter 偵測 最後混合出來的顏色是否符合 PBR 的規範。

如果製作過程都正確的話,最後輸出的貼圖可以在同樣使用 PBR 規範的軟體裡呈現出很接近的效果。

將貼圖使用在 Vray 這類算圖引擎,也可以得到很好的效果。

* 注意 Substance 輸出的是圖片,但是代表數值的貼圖需要還原回數值,代表顏色的需要還原為顏色,建議輸出 EXR,這樣只需要校正 base color 和 reflection。
### 為什麼目前 Substance 會在市場上成為主流工具
1. 針對 PBR 製作符合規格的快速工具

Substance 提供符合物理屬性的材質球和相關工具
2. 減少使用錯誤顏色範圍的機率

3. 解決複雜的數學問題

4. 更加靈活直覺的材質調整方式
Substance Paint 可以用圖層的方式去對材質的效果做各疊加和遮罩等等處理,
並且有各種 Samrt Material 可以使用。

5. 較容易做出物理正確的材質
如果是在 3dsMax、Maya 這類軟體裡,因為沒有辦法正確的預覽,而且材質工具沒有預先做好規格和數值上的限制,只能憑藝術家的"感覺"去調整,容易調整出不符合能量守恆的材質。
### 參考資料
---
#### 相關文章
* [How do I measure sRGB values in photoshop?](https://forum.allegorithmic.com/index.php?topic=4482.0)
* [PBR_volume_02_rev05](https://www.allegorithmic.com/pbr-guide)
* [PBR Validate filter](https://share.allegorithmic.com/libraries/824)
* [基于物理的渲染(一):什么是渲染?](https://mp.weixin.qq.com/s/ZKyvB9NctTc3RUgkVB9zng)
* [基于物理的渲染(二):光照的组成部分](https://mp.weixin.qq.com/s/thmMceux9oFjPB3ns1LBVA)
* [基于物理着色(三)- Disney和UE4的实现](https://zhuanlan.zhihu.com/graphics/20122884)
* [Breaking Down The Order: 1886](https://www.gametextures.com/breaking-down-the-order-1886/)
* [色彩恆常性:你看到什麼顏色的洋裝](http://pansci.asia/archives/76012)
#### PDF
* [The Importance of Physically-Based Shading](http://blog.selfshadow.com/publications/s2012-shading-course/hill/s2012_pbs_importance.pdf)
* [Crafting a Next-Gen Material Pipeline for The Order: 1886](http://blog.selfshadow.com/publications/s2013-shading-course/rad/s2013_pbs_rad_slides.pdf)
#### 影片
* Understanding PBR
{%youtube ueC2qGzWrgQ %}
* Texturing in Uncharted 4
{%youtube UNxOxiR5T_M %}
* Textile scanning acquisition
{%vimeo 70992723 %}