PBR技術簡介(一)


最近在學習LearnOpengl,經過不懈的努力,終於閱讀到了PBR的章節,接下來會寫一系列博客來總結自己從中學到的理論,並嘗試實現其中的算法。
PBR,全稱為Physically Based Rendering,是一套嘗試用物理的方式來描述現實中渲染效果的技術。相比於前人提到的Phong光照模型,利用PBR的方式可以渲染出更為真實的場景。
利用Phong模型和PBR的效果有一個很直觀的對比,上圖是古劍奇譚一的游戲截圖,它的人物渲染是利用的很基礎的Phong模型(甚至可能沒怎么看到高光的成分),下圖是古劍三的效果,采用了PBR后可以明顯看到人物身上閃爍的配飾、衣服布料的材質,相比於古劍一是翻天覆地的變化,甚至在一定程度上逼近了真實的物理世界。

微面元模型

關於PBR,最基礎的概念就是微面元模型(Microfacet Model)。該理論將一個物體的平面看作是一個個極其微小、凹凸不平的表面所構成。越是平滑的面,它的微表面就越是朝着同一個方向;相反表面越是粗糙,它的微表面就越是面對不同的方向,如下圖所示:

我們利用一個參數:粗糙度(roughness)來描述平面的的各個微表面朝向的離散程度。根據之前提到的Blinn-Phong模型,我們可知隨着平面越朝着h向量(視角向量和光線向量的和),則高光的部分越強,再結合粗糙度,我們可以完整地描述模型的高光反射:

可以看到,在同樣的視角下,隨着粗糙度降低,則平面越來越平滑,則高光越來越強,且高光的區域越來越聚焦。

反射與折射

在之前的Phong模型中,我們知道除了高光反射,還有漫反射。PBR理論指出,深入研究光打到物體平面上的運行后可以發現,有一部分光會直接從表面反射出去,這其實就是我們前面提到的高光發射。與此相對,有一部分光則會進入物體表面,產生折射,這一部分光有一些會被吸收,產生熱能,另外一些則會和在物體內部進一步碰撞、反射,最終以隨機的方向再次反射出去。是不是覺得似曾相識?沒錯,這其實就是漫反射。PBR理論假設這個折射並反射出去的過程發生在一個非常小的范圍內(相對應的,有一種理論叫做“次表面散射”,它沒有局限於上面的假設,進一步研究了光線折射后的行為,在皮膚、蠟燭等物體上有着更為真實的渲染效果)。下圖展示了光線在打到平面上時所發生的反射和折射現象:

不過有一種物體是需要特殊對待的,就是金屬。對於金屬來說,它只有高光反射而沒有漫反射。
另外需要注意的一點是,PBR模型實際上省略了由於碰撞轉化為熱能的那一部分光的能量,那么根據能量守恆定律,就可以得知入射能量和出射能量是相等的,並且出射光反射部分的能量和折射部分的能量是互斥的。
因此,對於出射光,我們設kd為漫反射比例,ks為高光反射比例,那么必然可得:

kd + ks = 1.0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM