草履蟲都能看懂的PBR講解(迫真)

2021-01-19 Unity3D遊戲開發精華教程乾貨

PBR即Physically Based Rendering 基於物理的渲染技術,得益於最近幾年技能的不斷提高,不管是PC、主機還是手機、平板,都讓更為真實但更加複雜更加消耗性能的光照模型算法變為可以大量被使用的技術。現在,國外的主機和端遊大作,PBR基本已經成為常規需求,而在手機端,王者榮耀、COD手遊、楚留香等遊戲也已經大量應用PBR技術,以打造更加真實的畫面效果,高端手機運行全屏PBR已經沒什麼壓力。


首先說一下PBR的範疇(Scope of PBR),寒霜(Frostbite)引擎在SIGGRAPH 2014的分享《Moving Frostbite to PBR》中提出,基於物理的渲染的範疇,由三部分組成:

基於物理的材質(Material)

基於物理的光照(Lighting)

基於物理適配的攝像機(Camera)

三個部分都去參照物理理論去做引擎設計,理論上就能得到和真實攝像機基本相同的畫面。例如基於物理的攝像機通過調整光圈、快門速度等改變曝光度,燈光採用物理測量單位進行計量,材質使用基於物理測量值的光照模型進行計算。所有的這一切是一個系統,是相輔相成的,HDRP已經集成了這三者,本章主要討論基於物理的材質,物理光照和物理相機暫時不作過多討論。


說完PBR的範疇,我們來聊聊PBR材質,也就是我們平常聊天時說PBR的含義,PBR指一整套基於物理參數的美術流程和渲染流程。美術流程主要是貼圖製作上的,一般與PBR流程進行比較的是手繪流程。手繪流程是早期的3D美術製作流程,受限於當時機能的不足,很多硬體設備並不能承受比較多的圖片帶來的內存壓力,以及基於物理的算法、全局光照等等的GPU計算壓力,所以只使用一張diffuse漫反射貼圖來描述模型外觀,這就導致陰影和高光信息必須是畫在diffuse上的。也就是說,當場景中的光相對於模型的方向發生改變,或者攝像機位置發生改變,高光和陰影並不會發生改變,並且由於沒有高光方面的參數輸入,所以材質沒有辦法構建合理的反射,而金屬這些東西如果沒有反射,效果就會大打折扣。而為了解決表現力方面的問題,手繪流程又引入了一些技術,例如通過創建高低模然後通過烘焙輸出一張Normal法線貼圖,帶來模型結構上的凸出和凹陷的陰影,這就是美術圈所說的次時代美術流程。再比如通過增加一張Specular高光貼圖,控制高光顏色和高光強度,帶來動態的,可變顏色的高光,如果渲染方面用心一點,還可以使用一個cubemap模擬反射效果。而在Specular貼圖製作的流程上,比較違和的一點是很多Specualar貼圖都是通過xNormal或者PS這樣的工具轉換而來,然後修一修,這是完全沒有道理的一種轉換。手繪流程在15年以前的端遊以及所有的手遊上比較常見。例如魔獸世界的模型就只使用diffuse和Specular進行渲染,模型的高光位置可以改變但是陰影位置是不會變化的。

而使用Substance Painter或Quixel Suite 等軟體製作的符合PBR標準的貼圖,包含Diffuse漫反射貼圖、Normal法線貼圖、Metallic金屬度貼圖、Smoothness光滑度貼圖(即Glossiness光澤度貼圖,Roughness粗糙度貼圖的反向圖)、AO(Ambient Occlusion)環境光遮蔽貼圖等提供了大量物理信息,例如Normal提供小凹凸結構的信息,AO提供遮蔽陰影信息,Metallic提供材質在多大程度上貼近金屬的信息,Smoothness提供了材質在多大程度上是光滑的信息等等。所有這些信息使基於物理的渲染成為可能,在Shader中我們可以根據這些信息計算出實時的陰影,實時的高光,實時的反射,實時的菲涅爾效應,可以讓模型在不同的光照環境下都能得到比較合理的光照表現。此外,這種基於物理的理念也成為連接渲染和美術製作的紐帶,不會讓兩邊對最終效果產生太大的分歧。同時,這也降低了美術人員製作材質時的門檻,在手繪時代,如果想製作出效果很好的陰影、高光、材質表現是需要大量手繪練習的,相當於是在模型上作畫,現在使用PBR流程只需調整出合適的物理值,材質就自動能渲染出預想中的效果。

這個流程對美術是友好的,只需提供合理的貼圖,貼圖提供的參數合理即可,而從貼圖開始,到最終得到優秀的畫面,這個過程是需要詳細探究的,接下來我們就講講其中的理論。首先,從物理角度來講,我們先分析一下為什麼我們可以看到五顏六色的世界。光源來自太陽、火、燈具等,這些光源不斷散發的光可以認為是大量的波,這些波的波長往往是不同,而我們人類的眼睛就只能看到從400納米到700納米這一小段波長的光,我們眼睛裡有紅綠藍三種感光細胞,這些感光細胞對這一小段波長的光產生反應,發出電信號,我們的大腦再解析出這些電信號,就看到了光。而我們看到不同的物體有不同的顏色也是因為這些物體反射的此顏色對應波長的光,例如一道白光射向一個紅色表面,在抵達紅色表面之前,白光攜帶了大量不同波長的光,而當白光接觸到紅色表面,紅色表面就吸收了白光中除紅光波長的光,紅色表面反射出紅光波長的光,這部分光被人眼探測到,我們就看到了紅色的表面。

那麼,我們最核心的需要研究的就應該是光和表面到底是如何相互作用的。把光簡化為一條光束,如下圖,從微觀世界的角度,可以看到一部分光被反射出去了,即黃色部分。一部分光被折射入物體表面並和物體內部的粒子相互作用,最終重新被反射出表面,即藍色部分。我們把黃色部分稱為高光反射部分,把藍色部分稱為漫反射部分,把這兩個部分反射出去的光探究明白,理論上來講,我們就能物理正確的模擬出真實的物體表面。另外,還有一部分光轉化為熱能被物體吸收了,這個部分沒有被反射出來。

在微觀尺度上,反射是很容易被理解的,但是在之前的講解中可以很明顯看到散射出的光線可能是跟反射點在不同的地方,這就牽扯到散射尺度問題,由於我們寫Shader的主要計算是在片元著色器上,一個片元相當於代表一個像素,所以我們會以單個像素的面積來大概衡量這個散射的尺度。對於硬表面,例如塑料,如下圖的左上,它的表面的散射光反射出表面的位置和反射點相比,大約是在一個像素點之內,所以我們在寫shader的時候忽略散射和反射的距離,會把這部分光照按照漫反射處理,如下圖右上角。而對於類似皮膚這樣的表面,如下圖下半部分,它的表面的散射光反射出表面的位置和反射點大於一個像素點的範圍,此時我們不能忽略這個距離,寫shader的時候需要按照次表面散射的方式處理這部分光。

在其他教程中,對於光強的度量,也就是輻射度會有比較詳細深入的講解,因為這樣更加物理,但是這會使簡單的問題複雜化,對於項目實戰的實質幫助並不是很大。對於輻射度,也就是在Shader中關於光強的表示,我們可以簡單的理解為顏色值。

現在我們知道了光照的表示,就是一個簡單的float3,用以表示一個顏色值,如果在片元著色器的單個片元的計算時,每個片元都百分百把光照完美反射出去,那麼我們直接return這個光照float3即可。但是很明顯這樣的百分百反射跟物理世界是不同的,如果我們想要真實世界的表現效果,那麼我們必須找到每個片元的光照反射和光源的光強的關係,這個關係一般通過一個公式表示,如果囫圇吞棗一些,可以看做一個這樣的公式:「某點反射的顏色 = 牛逼的函數(光照顏色、法線方向、光照方向、固有色巴拉巴拉等等參數)」,這個牛逼的函數就被成為BRDF,英文名是Bidirectional Reflectance Distribution Function,即雙向反射分布函數。BRDF一般滿足兩個特性,交換律和能量守恆。交換律是說當攝像機位置和光源位置調換位置,這個函數計算的最終結果是相同的。能量守恆很好理解,就是這個函數的計算結果不能超過光強。關於光照計算是有很多種流派的,如果某光照計算違反了兩者或其中之一,那麼它們就不是BRDF,就不是PBR材質。PBR這個詞語語境一般就直接代表硬表面材質了,而不是基於物理這個概念,例如3S材質也是基於物理測量的,但是不叫PBR材質。

對於上一段文字描述的過程我們可以使用反射率方程進行數學上的精確描述,如下圖,括號裡的類似p、w全都是參數,可以暫時不考慮。關於這個公式裡的積分,是因為公式想使用積分的方式描述某點的所有光照的反射總和,因為這個過程往往是渲染管線層做的,所以也可以暫時不考慮,而實際上底層也只是把各個光照的結果相加而已。那麼對於我們來講,就只需要關注  、  、n、  ,是之前我們說的BRDF函數,是入射光強度,n、 一個是法線,一個是入射光強度。關於這個公式具體在Shader裡面是如果製作的,我們會在本文後段做詳盡解釋,現在我們暫時要把注意力轉移到一些其他的物理現象。


首先我們先聊一下菲涅爾效應,如果你站在湖邊,低頭看腳下的水,你會發現水是透明的,反射不是特別強烈;如果你看遠處的湖面,你會發現水並不是透明的,但反射非常強烈。這就是「菲涅爾效應」。如圖可見,視線垂直於表面時,反射較弱,而當視線非垂直表面時,夾角越小,反射越明顯。如果你看向一個圓球,那圓球中心的反射較弱,靠近邊緣較強。由於這個現象在自然界普遍存在,所以有一句話叫做「萬物皆有菲涅爾」。在文章後段,我們會對這個現象做數學表示,以使我們製作的材質有這個特性。

接下來我們討論一下F0這個變量,F0是即 0 度角入射的菲涅爾反射值。後續的數學計算將有一部分的計算是基於F0的。大多數非金屬的F0範圍是0.02~0.04,大多數金屬的F0範圍是0.7~1.0。對於硬表面PBR材質,我們一般把他們分為金屬(導體)和非金屬(絕緣體)。其中非金屬具有單色/灰色鏡面反射顏色。而金屬具有彩色的鏡面反射顏色。即非金屬的F0是一個float,而金屬的F0是一個float3。這是因為金屬對於不同波段的光波吸收程度不同,再具體到渲染中,就是在材質的高光部分上,非金屬的高光往往是白色的,金屬的高光往往是不同的顏色,例如金子的反射就是金色。F0同時也反應材質的反射能力,結合之前我們說的反射分為漫反射和高光反射以及能量守恆,故越高的F0,此材質的高光反射部分就比較多,漫反射部分就比較少,我們看到金屬的樣子實際上大部分是高光反射的樣子。材質是金屬或者非金屬由金屬度這個參數進行控制。在Shader中,F0這個參數是根據金屬度以及固有色計算而得,金屬度越高,F0與固有色顏色越接近,反之F0會與0.04趨近。換句話說,在渲染時,金屬的反光之所以帶有顏色,是因為F0約等於固有色,固有色就承擔了給高光染色的任務。


接下來,我們進入理論方面的最後一個部分,微表面理論。所有的PBR技術都基於微平面理論。這項理論認為,達到微觀尺度之後任何平面都可以用被稱為微平面(Microfacets)的細小鏡面來進行描繪。根據平面光滑程度的不同,這些細小鏡面的組成的平面會更加平坦或更加崎嶇。

在微觀尺度下,沒有任何平面是完全光滑的。然而由於這些微平面已經微小到無法逐像素的繼續對其進行區分,因此我們只有假設一個光滑度(Smoothness)參數,然後用統計學的方法來概略的估算微平面的粗糙程度。一個顯而易見的結果就是,越光滑,也就是在微觀尺度下越平坦的的平面,反射的光束越集中,因為帶來更亮更集中的高光亮點。


下面進入實戰階段,其實原理了解了,剩下的工作就只是代入公式而已。還記得之前我們說起的反射率方程嗎?仔細想想,其實反射率方程剩餘的還沒明確的部分只有  。然後基於我們對「反射由漫反射和高光反射組成」的認識,很容易得到下圖的公式。是反射BRDF,  是漫反射BRDF,  是高光反射BRDF。



對於漫反射項,我們介紹被廣為使用的Disney的研究成果,baseColor是固有色,roughness即1-smoothness,n是法線,l是光照方向,h是半角向量,即為攝像機方向和光照方向的中間向量。這個公式充分考慮了光滑度以及角度對漫反射部分的影響。





高光反射項會相對複雜一些,F項是菲涅爾項,使用的是Schlick菲涅爾近似等式,用以代表完成我們之前所說的菲涅爾現象,F0使用Metallic * Albedo+( 1 - Metallic )* [0.04, 0.04, 0.04]計算得出,相當於根據金屬度做從[0.04, 0.04, 0.04]到Albedo的插值。G項和D項分別稱為陰影遮掩函數(shadowing masking function)和法線分布函數(normal distribution funchtion),現在我們先看兩個函數需要哪些參數,然後再講原理。v是攝像機方向,k = roughness的平方除以2,  =roughness的平方。








關於G項陰影遮掩函數,我們使用的是GGX光照模型的實現,其實是對小平面遮蔽小平面的數學表示,如下圖,灰色部分的光線是被遮蔽的,左圖l是光線入射方向,右圖v是攝像機方向,被遮擋的光線應該被剔除,這個剔除就可以使用G項來剔除。

關於D項法線分布函數,我們使用的也是GGX光照模型的實現,之前我們說過半角矢量,理論上來說,在微觀層面上,材質表面的小平面只有當這個小平面的發現和半角矢量相等的時候,才能產生反射,其餘小平面不產生反射,應該被剔除,這個剔除就可以使用D項來剔除。

至此,我們從反射率方程推演出了全部的PBR光照實現,而在Shader裡,也不過是一個一個的代入公式,由於公式中包含的各種與參數相關的數學特性,就使我們的最終渲染結果得到了我們理論部分說明的全部物理特性。

聲明:發布此文是出於傳遞更多知識以供交流學習之目的。若有來源標註錯誤或侵犯了您的合法權益,請作者持權屬證明與我們聯繫,我們將及時更正、刪除,謝謝。

作者:雲影

來源:https://zhuanlan.zhihu.com/p/137013668

More:【微信公眾號】 u3dnotes

相關焦點

  • 一隻值得鼓掌的草履蟲
    在大自然中,無論是繁華的現代都市,富饒的廣闊田野,人跡罕至的高山之巔,還是神秘的海洋深處,到處都生活著各種各樣的生物,正是由於這些生物大軍的存在,這個世界才變得多姿多彩,人,動物,植物等這些我們用肉眼直接看的見,但地球上99%以上的生物都是肉眼看不見的,今天恐龍哥哥就用一則謎語還原其中一種微生物的樣子
  • 初中生物學習方法:草履蟲
    其身體表面包著一層表膜,除了維持草履蟲的體型外,還負責內外氣體交換,吸收水裡的氧氣,排出二氧化碳。膜上密密地長著近萬根纖毛,靠纖毛的划動在水中旋轉運動。它身體的一側有一條凹入的小溝,叫「口溝」,相當於草履蟲的「嘴巴」。口溝內的密長的纖毛擺動時,能把水裡的細菌和有機碎屑作為食物擺進口溝,再進入草履蟲體內,供其慢慢消化吸收。殘渣由一個叫肛門點的小孔排出。 草履蟲的生殖方式是分裂生殖。
  • 草履蟲是原核生物嗎?
    草履蟲是一種身體很小、圓筒形的單細胞生物,雌雄同體,體長只有180~280微米,壽命為一晝夜左右,生活在淡水中,一般池沼、小河中都可採到,一般呈長圓筒形,前端鈍圓,後端寬而略尖,形狀似倒置的草鞋,下面我們就一起來看一看草履蟲是不是原核生物吧
  • 草履蟲的死亡報告
    噢,其實是這樣……       這節生物課上,我們的任務是觀察草履蟲和口腔細胞。觀察細胞一般需要染色,但是草履蟲不行,染了就沒了呀!但是昏頭昏腦的L同學可能思想飛去了遠方,無視生物老師的警告,一——不——小——心,將一滴碘伏滴在了裝草履蟲的燒杯裡。還沒等他和草履蟲說「乾杯!」,悲劇就這樣產生了。
  • 洄水和草履蟲什麼關係,如何培養洄水和草履蟲?觀賞魚苗頂級飼料
    洄水從嚴格意義來說並不是洄遊的水,他其實是由無數的單細胞生物——草履蟲所組成。由於草履蟲漩渦式的遊動就像洄遊的水一般,因此得名。我們先來說一說草履蟲是什麼,讓大家有個初始的認知先。草履蟲是一種單細胞生物,體型很小,差不多是豐年蝦的四分之一。這種生物是雌雄同體,因此不分公母,所以他們繁殖能力超級強,只要溫度,水質等條件合適就可以使其大量繁殖。
  • 一個細胞的原生動物,草履蟲!
    草履蟲Paramecium是纖毛綱的代表種,也是原生動物的代表種。草履蟲生活在淡水中,一般池沼,小河中都可採到。此後兩蟲體分開,接合核分裂3次成為8個核,4個變為大核,其餘4核有3個解體,剩下1核分裂為2小核,再分裂為4小核,每個蟲體也分裂2次,結果原接合的兩親本蟲體各形成4個草履蟲,新形成的8個草履蟲都有一大核,一小核。一種身體很小、圓筒形的原生動物。最常見的是尾草履蟲,體長只有80~300微米。因為它身體形狀從平面角度看上去像一隻倒放的草鞋底而叫做草履蟲。
  • SOLIDWORKS 2019新功能——業界最新技術PBR材質
    前言:之前我們曾以多個實例,講解了SOLIDWORKS Visualize的強大(下列圖片均是用SOLIDWORKS軟體+插件製作),本文將結合SOLIDWORKS Visualize的產品定位講解SOLIDWORKS 2019 Visualize的新功能——PBR材質。
  • [生物]草履蟲
    舉例:如酵母菌、草履蟲、衣藻、眼蟲、變形蟲等。  草履蟲  生活環境:淡水中  形態:長圓形,前圓後尖,  呈倒轉的草鞋底狀  結構:草履蟲的整個身體就是一個細胞。
  • Unreal|PBR檢測工具
    我們在使用pbr流程的時候都根據項目要求有一些顏色值範圍,比如說substance的30/50-240。我們在painter或者designer裡面畫貼圖的時候如果顏色值不在正確的範圍內,導入到引擎裡面效果就會有問題,所以就需要一些在引擎裡面檢查顏色值或者粗糙度值是否規範的工具。下面就介紹一些這款朋友提供的檢查basecolor的工具。
  • 草履蟲的結構功能及圖片
    草履蟲是一種身體很小、圓筒形的單細胞生物,為纖毛綱的代表種,也是原生動物的代表種,生活在淡水中,一般池沼、小河中都可採到,世界已知22種,常見有大草履蟲、雙小核草履蟲、多小核草履蟲、綠草履蟲等,下面我們就一起來看一看草履蟲的結構功能及圖片吧!
  • 法國科學家破譯草履蟲基因組
    新華社電 法國國家科學研究中心日前宣布,法國科學家成功破譯了草履蟲的基因組,這一成果對研究生物進化將會有所幫助。 法國科學家的研究顯示,草履蟲基因組含有約4萬個基因,遠遠多於人類基因組的25萬個基因。科學家分析說,草履蟲基因組之所以擁有如此眾多的基因,原因在於整個基因組經過了至少3次複製。
  • [生物]草履蟲_初一生政史地_中考網
    舉例:如酵母菌、草履蟲、衣藻、眼蟲、變形蟲等。  草履蟲  生活環境:淡水中  形態:長圓形,前圓後尖,  呈倒轉的草鞋底狀  結構:草履蟲的整個身體就是一個細胞。
  • 我是愛情裡的一隻草履蟲
    大家都知道草履蟲是單細胞生物,很脆弱。那麼愛情裡的我也是一個單細胞的動物,思維簡單,愛一個人愛的痛徹心扉。也是脆弱不堪的,一擊必潰。愛上一個人,我們都沒有錯,只是走了不同的路,我想要過平淡溫馨的生活。的確,我把自己埋進了沙子,連我自己都不知道自己長什麼樣子了,你怎麼會認識呢。失去了才知道,並不是撼天動地,也不是撕心裂肺。而是做每件事都是她的影子,吃飯沒有味道,睡覺半夜會醒,喝酒就會醉,自己一個人時候就會止不住的眼淚。如果你的離開是因為喜歡別人而放手,我也許會好過一點。但是就是這樣一句道別的話也沒說,就是默默地分開了,你在等我變好。
  • 小世界裡別有洞天,將草履蟲放大200倍能看到啥?
    小世界裡別有洞天,將草履蟲放大200倍能看到啥? 巴拿馬羅格裡奧·莫雷諾·吉爾(Rogelio Moreno Gill)拍攝,200倍放大倍數下類似草履蟲的Frontonia生物(顯示攝入的食物、纖毛、口腔和三聚體)
  • 崩壞3:草履蟲進化白練,白練SSS進化成女王?
    是不是好多小夥伴都要開學了呀?素質三問候,嘿嘿嘿。實際上,我還是挺關心各位的。寒暄完了,我們進入今天的正題。在我剛入坑的一段時間裡,評論區有很多的糟老頭子跟我講,新手前期練白練,當你練成3S的時候就可以進化成為女王。說實話,懵懂的我當時真的信了。我甚至有好幾天專門去刷劇情搞白練碎片,遠徵也是。直到後來認識了我的導師,他才跟我說你們是騙我的。
  • 草履蟲學院網課試聽課連結匯總
    當然可以,為加強大家對於課程的信賴,便於大家選擇更加適合,對自己更加有幫助的課程,草履蟲學院特此將全部類型的網課試聽課連結進行發布,大家可以選擇性的試聽。北航專業課衝刺課:連結:https://pan.baidu.com/s/15mEiK0q7L_Q8pFtzQs81hg提取碼:xgtq各專業學長學姐衝刺串講:連結:https://pan.baidu.com/s/1Xd74_4zxg3hvwtLJp8CHrg提取碼:sds1草履蟲學院備考講座系列
  • 草履蟲大小的「微型機器人」或許能在人體組織中自由穿梭
    這些機器人大約有草履蟲那麼大,為製造更複雜的版本提供了一個模板,這些機器人利用矽基智能,可以批量生產,有朝一日可能會穿過人體組織和血液。文章以「Electronically Integrated, Mass-Manufactured, Microscopic Robots」為題,發表在《Nature》雜誌上。
  • 變形蟲吞食兩隻草履蟲全過程
    草履蟲是一種身體很小,圓筒形的單細胞生物,它只有一個細胞構成,是單細胞動物,雌雄同體。最常見的是大草履蟲。體長只有180—280微米。它和變形蟲的壽命最短,以小時來計算,壽命時間為一晝夜左右。因為它身體形狀從平面角度看上去像一隻倒放的草鞋底而叫做草履蟲。
  • 藍鯨先生和草履蟲平等嗎?
    2017-02-27(一)12:21:39 ID:3FnJ052(〃∀〃)(つд⊂)這個藍鯨超騷!然而藍鯨和草履蟲都沒有上街遊行或者不服暴動的政治權利,所以他們很平等也沒錯。以人類的觀點來說,藍鯨比草履蟲有用倒是沒錯。
  • 草履蟲如何培養,它就是我們所說的洄水嗎,使用多大漁網撈取?
    事實上它們就是我們口中所說的草履蟲,換句話解釋的話,就是比剛出生的豐年蝦還要小的魚蟲罷了,因為在顯微鏡的觀察下,它們很像一隻草鞋,所以被稱之為草履蟲,至於如何被魚友們稱之為洄水,我倒給忘了,哈哈。草履蟲簡介草履蟲的體長只有0.15到0.3毫米,大約只有豐年蝦幼蟲的四分之一大小吧,不過它們的品種也很多,也是有大有小的,它們其實只有一個細胞構成,屬於單細胞動物,雌雄同體,具體什麼身體構造之類的我就不介紹了,大家看圖片自行腦補吧,我們又不是想要把它們炒著來吃。