原文 / Basic Theory of Physically-Based Rendering
作者 / Jeff Russell
編譯 / Hammer Chen
物理為基礎的算圖聽起來很令人興奮。大體來說 已經變成即時算圖的趨勢了。這個詞已經被曲解 ,大家有點搞混它原本的意思。 簡單來說, 包含了很多東西, 而且要看狀況來說。 這種答案讓人不滿意 ,我決定自己來解釋PBR到底是什小,與其他舊的算圖方法有和不同。這篇文章是寫非工程師(對象是藝術家之類) ,也不會提到任何數學或是程式碼!
物理為基礎的材質系統與之前的作法最大的不同在於光線與物體表面的細節表現,材質的威力已經夠先進 讓你可以捨棄掉就的近似值方法 過去的老方法也代表了某種藝術表現 因此工程是與藝術家必須要理解這些改變的動機到底為何
漫射與反射(Diffusion & Reflection)
常常被稱作漫射與高光。 這兩個名詞表示基本的表面/光線互動。 大部分的人都能通俗地理解但不知道物理上的差異。當光線撞擊到物體表面, 有些會反射, 也就是反彈。 以表面法線相反的方向前進, 這樣的行為就像球在牆上反彈一般。平滑的表面具有鏡子般的外觀, 高光通常表示這樣的效應, 這個字來自拉丁語的『鏡子』
不是所有的光線自表面反彈。通常有些會穿透物體內部,光線可能被物質吸收 (通常會轉變成熱)或是在內部散射。某些散射光可能會彈出表面後面, 又變成了肉眼或是攝影機可見的光線, 這樣稱為散射光(Diffuse Light), 次表面散射(Subsurface Scattering) 都表示相同的效應。
散射光的吸收或是散射通常會因為波長的不同而有很大差異, 因此給予了物體顏色(例如:如果物體吸收大部分的光線, 但是散射藍色, 那麼物體看起來變會是藍色) 。散射通常是很平均的混亂, 因此被認為是往各個方向, 與鏡子有很大的不同。 如果用逼近的方法的材質通常只需要一個輸入反照率(albedo) 是個顏色,表示不同顏色的光線的比例會散射出物體表面。 散射顏色(Diffuse color)是其同義詞。
半透明度與透明度 (Translucency & Transparency)
某些狀況會有比較複雜的散射 ,材質具有更寬的散射距離, 例如皮膚或是蠟 。這種狀況簡單的顏色無法做到, 材質系統必須要考慮的形狀與厚度, 如果夠薄, 光線會散射到背面, 稱為半透明translucent 。 如果散射更小, 例如玻璃, 那麼散射很不明顯, 幾乎沒有散射光會穿透過物體到另一面與其他物體互動, 這樣與典型的“close to the surface” diffusion很不同, 需要特殊的材質才能表現之。
能量守恆
以上的描述還不足以勾勒出重要的結論,也就是反射與散射是互斥! 因為光線要能進行散射 光線就必須要穿透表面,也就不能反射。這在材質的專有名詞上就稱為『能量守恆』, 表示光線離開表面絕對不會比他原本進入物體前還要更亮。這很容易寫到材質裡面。
能量守恆對於物理為基礎的材質有點重要, 讓藝術家可以用反射度與反照律數值, 而不會不小心違反物理定律(如果違反的話看起來會很糟)。儘管把這個物理侷限寫到程式碼裡面並不代表一定可以產生好看的藝術效果, 但作為雞婆的物理學家, 這可以避免藝術品過度違反物理法則 讓光線條件產生不吻合的結果。
金屬
導電性的物質,也就是金屬,有幾個理由值得特別提:首先,金屬比絕緣物體更高反射性。導電物質具有比較高的反射度(reflectivities) 60-90%。 絕緣體通常較低 0-20%。 如此高的反設定避免光線跑到物體內部並散射, 讓金屬有非常閃耀的外觀。
再者, 導電物質的反射性會跨越不同的可見光, 這表示導電物質的反光通常帶有顏色。 如此帶有顏色的反光在導電物質並不常見, 但是某些日常物質, 例如黃金、 銅可發現這種現象, 絕緣物質通常沒有這種現象,絕緣物質的反射不帶有顏色。
最後,導電物質通常吸收是吸收光,而不是散射穿透表面的光。 這表示理論上導電物質不會有任何漫射光, 實際上通常金屬表面會有點氧化, 這樣會有小量的漫射光。
如此金屬的二重性, 因此就產生了所謂的金屬性metalness ,作為直接輸入。 這樣的系統使用者可以指定材質的金屬程度, 而不是只輸入albedo & reflectivity 。這樣是簡單版的材質創建方法, 但這樣並不是物理為基礎算圖的必要屬性。
菲涅耳效應(Fresnel)
Augustin-Jean Fresnel 聽起來像是一位死白人(old dead white guys),我們不太可能忘記, 主要原因是他的名字在很多現象都提到, 他是首位精確描述這些自然現象的人, 當討論到光線的反射很難不提到他的名字。
在電腦動畫裡面 Fresnel所指的是不同角度不同的反射性, 更精確地說, 光線到達物體表面 ,平視的角度(grazing angle)會比垂直角度(surface dead-on)的反射更高 。表示當物體設定了Fresnel反射, 在邊界的地方會有較高的反射。 我們大部分都熟悉這些現象, 在電腦動畫世界不算新聞了! 但是PBR shaders在這方面對Fresnel方程式提供幾點重要的修正:
首先,所有材質 反射度在平視角度達到完全反射, 這邊界變成完美、 不帶顏色的鏡子 不論哪種材質都一樣! 沒錯! 不論哪種材質, 只要從正確的角度觀看都可作為完美的鏡子, 這個現象是反直覺的, 但物理上是正確地。
其二, Fresnel的反射曲線每個材質並不相同, 金屬間的差異性最大, 但是這屬性是可被分析的。表示,假設你希望達到寫實度, 使用者對Fresnel的參數控制應該要減到最少, 或者至少 我們應該要知道預設參數應該要這樣設定。
這算是好消息, 因為可以簡化材質的創建過程, 材質系統現在可以自己處理Fresnel效果, 只需要輸入材質的物理屬性, 例如gloss 與reflectivity。PBR的工作流程是讓用戶可以指定, 但是是基於基本的反射性“base reflectivity” 這個參數提供最低的光線反射與顏色, 一旦渲染了,Fresnel 會在其上加上用戶所指定的數值, 在水平角度達到100% 基本上就是描述基本值, 然後套用Fresnel公式, 讓表面在各個角度有不同反射性。
Fresnel有點要注意的地方是: 當物體表面變得一點不平滑時 ,Fresnel效應很快變得不明顯, 這方面我們後面會提。
微表面(Microsurface)
上述反射與漫射的討論根據表面的方向性。 在大尺度下, 這是根據模型要渲染的部份而定。 而用normal map表現更小的細節 。有了這個,算圖細節就可以渲染出很棒的漫射與反射。
然後, 還有一個拼圖沒提到! 大部分真實世界的表面具有很小的不完美性, 小洞、裂紋、凸起, 儘管肉眼看不到, 這些細節會影響到漫射與反射。
微表面細節對於反射有明顯的效應,上圖表示 你可看到平行的入射光從粗糙的表面分歧開 。簡單來說, 越粗糙的表面, 光線的反射就變得越模糊。
不幸地, 對於每個微表面的計算不適合用在美術製作上, 會消耗大量記憶體與電腦運算, 因此我們可以怎麼做呢 ?結果發現如果我們放棄直接描述為表面細節 ,而是指定通用的粗糙度 我們可以寫出相當精確的材質, 這個測量表示“Gloss”, “Smoothness”, 或 “Roughness” 也可以用一張貼圖表現。
微表面的細節對於任何材質都是很重要的特徵。 在真實世界, 有各式各樣的微表面。 Gloss mapping不是全新的概念, 但對於物理為基礎的材質具有關鍵地位!因為微表面對於光線反射有很大效應, 接著我們將看看, 當使用微表面屬性需要考量的東西。
能量守恆
當我們材質系統現在導入了微表面的概念, 適當地讓光線分散反射, 系統必須要正確地控制反射的量。 很遺憾地, 很多舊式的算圖系統在這方面做錯了 !反射過多或過少的光線, 根據微表面的粗糙度。
當公式適當地平衡, 算圖器應當展示粗糙度具有更大的反射高光, 要看起來比平滑的表面小的 ,銳利的高光要來的暗。 這在亮度的明顯差異正是關鍵! 材質反射相同數量的光, 但是粗糙表面會讓光線在不同角度分散, 而平滑的表面, 光線的反射比較像光束。
這裡我們有第二種形式的能量守恆, 除了diffusion/reflection平衡外, 對於任何算圖引擎達到物理精確的 這第二種能量守恆很重要。
為微表面歡呼
就是因為有以上知識, 我們才發現, 有這個重要因素, 微表面的gloss 會直接影響到反射的亮度, 這表示用戶可以直接繪製gloss map 、刮痕、 凹洞等等。 PBR系統不只是改變反射的形狀, 也會改變其反射強度, 不需要“spec mask”/reflectivity
這很重要!因為兩個真實物理屬性是相關的。 微表面細節與反射度, 現在首度正確地綁在一起, 這很像diffusion/reflection兩者之間的平衡。 我們可以個別地調整 ,但是因為彼此相關 ,如果我們分開處理, 其實是把事情變得更複雜而已。
再者 研究真實世界材質會顯示反射度的數值不會變化太大。 例如水與泥巴, 都具有很相似的反射度, 但因為泥巴相當粗糙, 而水池表面相當平滑 ,因此在反射方面看起來很不同。 使用者以PBR系統在創造這樣的材質時, 可以調整gloss 或 roughness maps ,而不是只調整反射度。
微表面的屬性也對反射有細微的效果, 例如對於粗糙表面, 其邊界比較亮的Fresnel效應比較微弱 (粗糙表面的隨機屬性讓Fresnel效應打散了)。再者。 大的或是凹的微表面可以困住光線, 造成光線在物體表面反射多次, 增加吸收並減少亮度。 不同的算圖系統會用不同方式處理這些細節, 但大部分都是讓粗糙表面變得比較暗。
結論
當然還有很多關於物理為基礎的算圖可以討論, 本文只是導讀 建議你可以讀Joe Wilson所寫的 tutorial on creating PBR artwork。 更多技術資訊, 建議你看以下:
作者 / Jeff Russell
編譯 / Hammer Chen
物理為基礎的算圖聽起來很令人興奮。大體來說 已經變成即時算圖的趨勢了。這個詞已經被曲解 ,大家有點搞混它原本的意思。 簡單來說, 包含了很多東西, 而且要看狀況來說。 這種答案讓人不滿意 ,我決定自己來解釋PBR到底是什小,與其他舊的算圖方法有和不同。這篇文章是寫非工程師(對象是藝術家之類) ,也不會提到任何數學或是程式碼!
物理為基礎的材質系統與之前的作法最大的不同在於光線與物體表面的細節表現,材質的威力已經夠先進 讓你可以捨棄掉就的近似值方法 過去的老方法也代表了某種藝術表現 因此工程是與藝術家必須要理解這些改變的動機到底為何
漫射與反射(Diffusion & Reflection)
常常被稱作漫射與高光。 這兩個名詞表示基本的表面/光線互動。 大部分的人都能通俗地理解但不知道物理上的差異。當光線撞擊到物體表面, 有些會反射, 也就是反彈。 以表面法線相反的方向前進, 這樣的行為就像球在牆上反彈一般。平滑的表面具有鏡子般的外觀, 高光通常表示這樣的效應, 這個字來自拉丁語的『鏡子』
不是所有的光線自表面反彈。通常有些會穿透物體內部,光線可能被物質吸收 (通常會轉變成熱)或是在內部散射。某些散射光可能會彈出表面後面, 又變成了肉眼或是攝影機可見的光線, 這樣稱為散射光(Diffuse Light), 次表面散射(Subsurface Scattering) 都表示相同的效應。
散射光的吸收或是散射通常會因為波長的不同而有很大差異, 因此給予了物體顏色(例如:如果物體吸收大部分的光線, 但是散射藍色, 那麼物體看起來變會是藍色) 。散射通常是很平均的混亂, 因此被認為是往各個方向, 與鏡子有很大的不同。 如果用逼近的方法的材質通常只需要一個輸入反照率(albedo) 是個顏色,表示不同顏色的光線的比例會散射出物體表面。 散射顏色(Diffuse color)是其同義詞。
半透明度與透明度 (Translucency & Transparency)
某些狀況會有比較複雜的散射 ,材質具有更寬的散射距離, 例如皮膚或是蠟 。這種狀況簡單的顏色無法做到, 材質系統必須要考慮的形狀與厚度, 如果夠薄, 光線會散射到背面, 稱為半透明translucent 。 如果散射更小, 例如玻璃, 那麼散射很不明顯, 幾乎沒有散射光會穿透過物體到另一面與其他物體互動, 這樣與典型的“close to the surface” diffusion很不同, 需要特殊的材質才能表現之。
能量守恆
以上的描述還不足以勾勒出重要的結論,也就是反射與散射是互斥! 因為光線要能進行散射 光線就必須要穿透表面,也就不能反射。這在材質的專有名詞上就稱為『能量守恆』, 表示光線離開表面絕對不會比他原本進入物體前還要更亮。這很容易寫到材質裡面。
能量守恆對於物理為基礎的材質有點重要, 讓藝術家可以用反射度與反照律數值, 而不會不小心違反物理定律(如果違反的話看起來會很糟)。儘管把這個物理侷限寫到程式碼裡面並不代表一定可以產生好看的藝術效果, 但作為雞婆的物理學家, 這可以避免藝術品過度違反物理法則 讓光線條件產生不吻合的結果。
金屬
導電性的物質,也就是金屬,有幾個理由值得特別提:首先,金屬比絕緣物體更高反射性。導電物質具有比較高的反射度(reflectivities) 60-90%。 絕緣體通常較低 0-20%。 如此高的反設定避免光線跑到物體內部並散射, 讓金屬有非常閃耀的外觀。
再者, 導電物質的反射性會跨越不同的可見光, 這表示導電物質的反光通常帶有顏色。 如此帶有顏色的反光在導電物質並不常見, 但是某些日常物質, 例如黃金、 銅可發現這種現象, 絕緣物質通常沒有這種現象,絕緣物質的反射不帶有顏色。
最後,導電物質通常吸收是吸收光,而不是散射穿透表面的光。 這表示理論上導電物質不會有任何漫射光, 實際上通常金屬表面會有點氧化, 這樣會有小量的漫射光。
如此金屬的二重性, 因此就產生了所謂的金屬性metalness ,作為直接輸入。 這樣的系統使用者可以指定材質的金屬程度, 而不是只輸入albedo & reflectivity 。這樣是簡單版的材質創建方法, 但這樣並不是物理為基礎算圖的必要屬性。
菲涅耳效應(Fresnel)
Augustin-Jean Fresnel 聽起來像是一位死白人(old dead white guys),我們不太可能忘記, 主要原因是他的名字在很多現象都提到, 他是首位精確描述這些自然現象的人, 當討論到光線的反射很難不提到他的名字。
在電腦動畫裡面 Fresnel所指的是不同角度不同的反射性, 更精確地說, 光線到達物體表面 ,平視的角度(grazing angle)會比垂直角度(surface dead-on)的反射更高 。表示當物體設定了Fresnel反射, 在邊界的地方會有較高的反射。 我們大部分都熟悉這些現象, 在電腦動畫世界不算新聞了! 但是PBR shaders在這方面對Fresnel方程式提供幾點重要的修正:
首先,所有材質 反射度在平視角度達到完全反射, 這邊界變成完美、 不帶顏色的鏡子 不論哪種材質都一樣! 沒錯! 不論哪種材質, 只要從正確的角度觀看都可作為完美的鏡子, 這個現象是反直覺的, 但物理上是正確地。
其二, Fresnel的反射曲線每個材質並不相同, 金屬間的差異性最大, 但是這屬性是可被分析的。表示,假設你希望達到寫實度, 使用者對Fresnel的參數控制應該要減到最少, 或者至少 我們應該要知道預設參數應該要這樣設定。
這算是好消息, 因為可以簡化材質的創建過程, 材質系統現在可以自己處理Fresnel效果, 只需要輸入材質的物理屬性, 例如gloss 與reflectivity。PBR的工作流程是讓用戶可以指定, 但是是基於基本的反射性“base reflectivity” 這個參數提供最低的光線反射與顏色, 一旦渲染了,Fresnel 會在其上加上用戶所指定的數值, 在水平角度達到100% 基本上就是描述基本值, 然後套用Fresnel公式, 讓表面在各個角度有不同反射性。
Fresnel有點要注意的地方是: 當物體表面變得一點不平滑時 ,Fresnel效應很快變得不明顯, 這方面我們後面會提。
微表面(Microsurface)
上述反射與漫射的討論根據表面的方向性。 在大尺度下, 這是根據模型要渲染的部份而定。 而用normal map表現更小的細節 。有了這個,算圖細節就可以渲染出很棒的漫射與反射。
然後, 還有一個拼圖沒提到! 大部分真實世界的表面具有很小的不完美性, 小洞、裂紋、凸起, 儘管肉眼看不到, 這些細節會影響到漫射與反射。
微表面細節對於反射有明顯的效應,上圖表示 你可看到平行的入射光從粗糙的表面分歧開 。簡單來說, 越粗糙的表面, 光線的反射就變得越模糊。
不幸地, 對於每個微表面的計算不適合用在美術製作上, 會消耗大量記憶體與電腦運算, 因此我們可以怎麼做呢 ?結果發現如果我們放棄直接描述為表面細節 ,而是指定通用的粗糙度 我們可以寫出相當精確的材質, 這個測量表示“Gloss”, “Smoothness”, 或 “Roughness” 也可以用一張貼圖表現。
微表面的細節對於任何材質都是很重要的特徵。 在真實世界, 有各式各樣的微表面。 Gloss mapping不是全新的概念, 但對於物理為基礎的材質具有關鍵地位!因為微表面對於光線反射有很大效應, 接著我們將看看, 當使用微表面屬性需要考量的東西。
能量守恆
當我們材質系統現在導入了微表面的概念, 適當地讓光線分散反射, 系統必須要正確地控制反射的量。 很遺憾地, 很多舊式的算圖系統在這方面做錯了 !反射過多或過少的光線, 根據微表面的粗糙度。
當公式適當地平衡, 算圖器應當展示粗糙度具有更大的反射高光, 要看起來比平滑的表面小的 ,銳利的高光要來的暗。 這在亮度的明顯差異正是關鍵! 材質反射相同數量的光, 但是粗糙表面會讓光線在不同角度分散, 而平滑的表面, 光線的反射比較像光束。
這裡我們有第二種形式的能量守恆, 除了diffusion/reflection平衡外, 對於任何算圖引擎達到物理精確的 這第二種能量守恆很重要。
為微表面歡呼
就是因為有以上知識, 我們才發現, 有這個重要因素, 微表面的gloss 會直接影響到反射的亮度, 這表示用戶可以直接繪製gloss map 、刮痕、 凹洞等等。 PBR系統不只是改變反射的形狀, 也會改變其反射強度, 不需要“spec mask”/reflectivity
這很重要!因為兩個真實物理屬性是相關的。 微表面細節與反射度, 現在首度正確地綁在一起, 這很像diffusion/reflection兩者之間的平衡。 我們可以個別地調整 ,但是因為彼此相關 ,如果我們分開處理, 其實是把事情變得更複雜而已。
再者 研究真實世界材質會顯示反射度的數值不會變化太大。 例如水與泥巴, 都具有很相似的反射度, 但因為泥巴相當粗糙, 而水池表面相當平滑 ,因此在反射方面看起來很不同。 使用者以PBR系統在創造這樣的材質時, 可以調整gloss 或 roughness maps ,而不是只調整反射度。
微表面的屬性也對反射有細微的效果, 例如對於粗糙表面, 其邊界比較亮的Fresnel效應比較微弱 (粗糙表面的隨機屬性讓Fresnel效應打散了)。再者。 大的或是凹的微表面可以困住光線, 造成光線在物體表面反射多次, 增加吸收並減少亮度。 不同的算圖系統會用不同方式處理這些細節, 但大部分都是讓粗糙表面變得比較暗。
結論
當然還有很多關於物理為基礎的算圖可以討論, 本文只是導讀 建議你可以讀Joe Wilson所寫的 tutorial on creating PBR artwork。 更多技術資訊, 建議你看以下:
- John Hable’s excellent blog post: Everything Is Shiny
- John Hable’s even better blog post: Everything Has Fresnel
- Sébastien Lagarde’s summary of Rendering Remember Me
- Come to think of it, all of Sébastien Lagarde’s Blog is good stuff
- The SIGGRAPH 2010 course on PBR
- Always worth mentioning: The Importance of Being Linear
[相關資訊]
No comments:
Post a Comment