UnityShader精要筆記二十一 PBS 的理論和數(shù)學(xué)基礎(chǔ)

本文繼續(xù)對(duì)《UnityShader入門精要》——馮樂(lè)樂(lè) 第十八章 基于物理的渲染 進(jìn)行學(xué)習(xí)

https://github.com/candycat1992/Unity_Shaders_Book中僻焚,馮樂(lè)樂(lè)給出了2019年改版后的第18章捕捂,本文基于此版本進(jìn)行學(xué)習(xí)幼衰。

一禀苦、引述

長(zhǎng)期以來(lái)卫玖,圖形學(xué)一直信奉著“如果這看起來(lái)是對(duì)的,那么這就是對(duì)的”的信條蓉坎,這其中一方面的原因是由于當(dāng)時(shí)計(jì)算機(jī)的計(jì)算能力較低黎烈,且硬件價(jià)格昂貴。隨著計(jì)算機(jī)的處理能力越來(lái)越強(qiáng)蒜焊,人們開始考慮使用更加復(fù)雜的算法來(lái)渲染更加真實(shí)的畫面倒信。

在二十世紀(jì)八十年代左右,基于物理的渲染技術(shù)(Physically Based Shading, PBS)首次被引入圖形學(xué)的正統(tǒng)研究中泳梆,學(xué)者們提出了使用光線追蹤的方法來(lái)渲染全局光照鳖悠,由此打開了精確渲染光線傳播的大門。然而优妙,當(dāng)時(shí)的工業(yè)界更加依賴于使用各種 tricks 來(lái)得到希望的藝術(shù)風(fēng)格乘综,而并不需要非常精確的物理模擬。因此鳞溉,這種基于物理的渲染方法實(shí)際上是在二十世紀(jì)九十年代末才開始逐漸為工業(yè)界所接受瘾带。之后,隨著 Mental Ray熟菲、Arnold看政、RenderMan 等渲染器的出世,基于物理的蒙特卡洛渲染方法在(離線渲染)工業(yè)界取得了巨大成功抄罕。

而在實(shí)時(shí)渲染領(lǐng)域允蚣,人們也發(fā)現(xiàn)了這種基于物理的光照模型的巨大優(yōu)勢(shì)。在這之前呆贿,Lambert光照模型嚷兔、Phong 光照模型和 Blinn-Phong 光照模型等經(jīng)驗(yàn)?zāi)P驼紦?jù)了主流森渐。然而,這種不滿足能量守恒的光照模型使得美術(shù)人員需要花費(fèi)大量的時(shí)間在參數(shù)調(diào)節(jié)上冒晰。尤其是同衣,美術(shù)人員往往好不容易為一個(gè)物體調(diào)節(jié)好了所有參數(shù),使得它在當(dāng)前的光照條件下看起來(lái)是滿意的壶运。然而耐齐,一旦光照環(huán)境發(fā)生了變化,這一切都得從頭再來(lái)蒋情。因此埠况,近年來(lái)游戲從業(yè)者開始著手把基于物理的光照模型應(yīng)用于實(shí)時(shí)渲染中。

Unity 最早在 2012 年的《蝴蝶效應(yīng)》( 英文名:Butterfly Effect)的 demo 中大量使用了 PBS棵癣,并在 Unity 5 中正式將 PBS 引入到引擎渲染中辕翰。Unity 5 引入了一個(gè)名為 Standard Shader 的可在不同材質(zhì)之間通用的著色器,而該著色器就是使用了基于物理的光照模型狈谊。需要注意的是喜命,PBS 并不意味著渲染出來(lái)的畫面一定是像照片一樣真實(shí)的,例如的畴,Pixar 和 Disney 盡管長(zhǎng)期使用 PBS 渲染電影畫面渊抄,但它們得到的風(fēng)格是非常有特色的藝術(shù)風(fēng)格。相信很多讀者或多或少看到過(guò)使用 PBS渲染出來(lái)的畫面是多么的酷炫丧裁,并很想了解這背后的技術(shù)原理护桦。如果你是一個(gè)程序員,可能有很大的沖動(dòng)想要自己實(shí)現(xiàn)一個(gè) PBS 渲染框架煎娇,但往往走到后面會(huì)發(fā)現(xiàn)有很多看不懂的名詞以及一大堆與之相關(guān)的論文二庵;如果你是一個(gè)美工人員,你可能會(huì)找到很多關(guān)于如何制作 PBS 中使用的紋理教程缓呛,但你大概也了解催享,想要使用 PBS 實(shí)現(xiàn)出色的渲染效果,并不是紋理+一個(gè) Shader 這么簡(jiǎn)單的問(wèn)題哟绊。

現(xiàn)在因妙,我們有一個(gè)好消息和一個(gè)壞消息要告訴大家。先說(shuō)好消息票髓,Unity 5 引入的基于物理的渲染不需要我們過(guò)多地了解 PBS 是如何實(shí)現(xiàn)的攀涵,就能利用各種內(nèi)置工具來(lái)實(shí)現(xiàn)一個(gè)不錯(cuò)的渲染效果。然而壞消息是洽沟,我們很難通過(guò)短短幾萬(wàn)文字來(lái)非常詳細(xì)地告訴讀者這些渲染到底是如何實(shí)現(xiàn)的以故,因?yàn)檫@其中需要牽扯許多復(fù)雜的光照模型,如果要完全理解每一種模型的話裆操,大概還要講很多論文和其他參考文獻(xiàn)怒详。不過(guò)還有一個(gè)好消息是炉媒,我們相信讀者在學(xué)完本章后可以了解 PBS 的基 本原理,并可以實(shí)現(xiàn)一個(gè)包含了簡(jiǎn)單的基于物理的光照模型的 Shader昆烁。如果你對(duì) PBS 有著濃厚的興趣吊骤,想要嘗試自己構(gòu)建一個(gè)更加復(fù)雜的 PBS 渲染框架,可以在本章的擴(kuò)展閱讀部分找到許多非常有價(jià)值的參考資料善玫。

在本章中水援,我們首先會(huì)講解 PBS 的基本原理,讓讀者了解它們與我們之前所學(xué)的渲染方式到底有哪些不同茅郎。接著,我們會(huì)按照 PBS的相關(guān)公式來(lái)實(shí)現(xiàn)一個(gè)非常簡(jiǎn)單的基于物理渲染的 Shader或渤。盡管本書的定位并不是“教你如何使用 Unity”系冗,但我們決定花一點(diǎn)時(shí)間來(lái)告訴讀者 Unity 5 引入的 Standard Shader 是如何工作的,以及如何在 Unity 5 中使用它和其他工具來(lái)渲染一個(gè)場(chǎng)景薪鹦,我們希望通過(guò)這些內(nèi)容來(lái)讓讀者明白 PBS 中的一些關(guān)鍵因素掌敬。從本書第一版出版到現(xiàn)在,我們已經(jīng)看到了越來(lái)越多的手機(jī)游戲也開始使用 PBS 進(jìn)行渲染池磁,我們相信這是未來(lái)的發(fā)展趨勢(shì)奔害,希望本章可以為讀者打開 PBS 的大門。

在學(xué)習(xí)如何實(shí)現(xiàn) PBS 之前地熄,我們非常有必要來(lái)了解基于物理的渲染所基于的理論和數(shù)學(xué)基礎(chǔ)华临。我們不會(huì)過(guò)多地牽扯一些論文資料,但如果在閱讀過(guò)程中讀者發(fā)現(xiàn)無(wú)法理解一些光照模型的實(shí)現(xiàn)原理端考,這可能意味著你需要閱讀更多的參考文獻(xiàn)雅潭。本節(jié)主要參考了 Naty Hoffman 在SIGGRAPH 2013 上做的名為 Background: Physics and Math of Shading 的演講[1]以及 Brent Burley等人在 SIGGRAPH 2012 上做的名為 Physically-Based Shading at Disney 的演講[2]。

在 Disney 的演講中却特,作者介紹了 Disney 是如何把各種現(xiàn)有的基于物理的光照模型與自身需求結(jié)合起來(lái)扶供,得到滿足 Disney 渲染需求的 BRDF 光照模型,并成功應(yīng)用在電影《無(wú)敵破壞王》(英文名:Wreck-It Ralph)的材質(zhì)渲染中裂明。自此之后椿浓,這個(gè) Disney BRDF 模型被廣泛應(yīng)用于實(shí)時(shí)渲染領(lǐng)域,各大游戲引擎在此基礎(chǔ)上實(shí)現(xiàn)了各自的 PBS 光照模型闽晦,大大提升了游戲畫面渲染質(zhì)量扳碍。那么,到底什么叫基于物理的渲染尼荆?什么又是 BRDF 呢左腔?這就是我們現(xiàn)在要來(lái)學(xué)習(xí)的內(nèi)容。既然要得到基于物理的光照模型捅儒,我們首先必須了解在真實(shí)的物理世界中光是什么以及它是如何與各種材質(zhì)發(fā)生交互的液样。

一振亮、光是什么

盡管我們之前一直講光照模型,但要問(wèn)讀者鞭莽,光到底是什么坊秸,可能沒(méi)有多少人可以解釋清楚。在物理學(xué)中澎怒,光是一種電磁波褒搔。首先,光由太陽(yáng)或其他光源中被發(fā)射出來(lái)喷面,然后與場(chǎng)景中的對(duì)象相交星瘾,一些光線被吸收(absorption),而另一些則被散射(scattering)惧辈,最后光線被一個(gè)感應(yīng)器(例如我們的眼睛)吸收成像琳状。

通過(guò)上面的過(guò)程,我們知道材質(zhì)和光線相交會(huì)發(fā)生兩種物理現(xiàn)象:散射和吸收(其實(shí)還有自發(fā)光現(xiàn)象)盒齿。光線會(huì)被吸收是由于光被轉(zhuǎn)化成了其他能量念逞,但吸收并不會(huì)改變光的傳播方向。相反的边翁,散射則不會(huì)改變光的能量翎承,但會(huì)改變它的傳播方向。在光的傳播過(guò)程中符匾,影響光的一個(gè)重要的特性是材質(zhì)的折射率(refractive index)叨咖。我們知道,在均勻的介質(zhì)中待讳,光是沿直線傳播的芒澜。但如果光在傳播時(shí)介質(zhì)的折射率發(fā)生了變化,光的傳播方向就會(huì)發(fā)生變化创淡。特別是痴晦,如果折射率是突變的,就會(huì)發(fā)生光的散射現(xiàn)象琳彩。

實(shí)際上誊酌,在現(xiàn)實(shí)生活中,光和物體之間的交互過(guò)程是非常復(fù)雜的露乏,大多數(shù)情況下并不存在一種可分析的解決方法碧浊。但為了在渲染中對(duì)光照進(jìn)行建模,我們往往只考慮一種特殊情況瘟仿,即只考慮兩個(gè)介質(zhì)的邊界是無(wú)限大并且是光學(xué)平滑(optically flat)的箱锐。盡管真實(shí)物體的表面并不是無(wú)限延伸的,也不是絕對(duì)光滑的劳较,但和光的波長(zhǎng)相比驹止,它們的大小可以被近似認(rèn)為是無(wú)限大以及光學(xué)平滑的浩聋。在這樣的前提下,光在不同介質(zhì)的邊界會(huì)被分割成兩個(gè)方向:反射方向和折射方向臊恋。而有多少百分比的光會(huì)被反射(另一部分就是被折射了)則是由菲涅耳等式(Fresnel equations)來(lái)描述的衣洁,如圖 18.1 所示。


圖18.1 在理想的邊界處抖仅,折射率的突變會(huì)把光線分成兩個(gè)方向

但是坊夫,這些與光線的交界處真的是像鏡子一樣平坦嗎?盡管在上面我們已經(jīng)說(shuō)過(guò)撤卢,相對(duì)于光的波長(zhǎng)來(lái)說(shuō)环凿,它們的確可以被認(rèn)為是光學(xué)平坦的。但是凸丸,如果想象我們有一個(gè)高倍放大鏡拷邢,去放大這些被照亮的物體表面,就會(huì)發(fā)現(xiàn)有很多之前肉眼不可見的凹凸不平的平面屎慢。在這種情況下,物體的表面和光照發(fā)生的各種行為忽洛,更像是一系列微小的光學(xué)平滑平面和光交互的結(jié)果腻惠,其中每個(gè)小平面會(huì)把光分割成不同的方向。

這種建立在微表面的模型更容易解釋為什么有些物體看起來(lái)粗糙欲虚,而有些看起來(lái)就平滑集灌,如圖 18.2 所示。


圖18.2 左圖:光滑表面的微平面的法線變化較小复哆,反射光線的方向變化也更小欣喧。右圖:粗糙表面的微平面的法線變化較大,反射光線的方向變化也更大

想象我們用一個(gè)放大鏡去觀察一個(gè)光滑物體的表面梯找,盡管它的表面仍然由許多凹凸不平的微表面構(gòu)成唆阿,但這些微表面的法線方向變化角度小,因此锈锤,由這些表面反射的光線方向變化也比較小驯鳖,如圖 18.2 左圖所示,這使得物體的高光反射更加清晰久免。而圖 18.2 右圖所示的粗糙表面則相反浅辙,由此得到的高光反射效果更模糊。

在上面的內(nèi)容中阎姥,我們并沒(méi)有討論那些被微表面折射的光记舆。這些光被折射到物體的內(nèi)部,一部分被介質(zhì)吸收呼巴,一部分又被散射到外部泽腮。金屬材質(zhì)具有很高的吸收系數(shù)御蒲,因此,所有被折射的光往往會(huì)被立刻吸收盛正,被金屬內(nèi)部的自由電子轉(zhuǎn)化成其他形式的能量删咱。而非金屬材質(zhì)則會(huì)同時(shí)表現(xiàn)出吸收和散射兩種現(xiàn)象,這些被散射出去的光又被稱為次表面散射光(subsurface-scattered light)豪筝。在圖18.3 中痰滋,我們給出了一條由微表面折射的光的傳播路徑(如圖 18.3 所示的藍(lán)線,讀者可參考隨書資源中的彩圖)续崖。


圖18.3 微表面對(duì)光的折射敲街。這些被折射的光中一部分被吸收,一部分又被散射到外部

現(xiàn)在严望,我們把放大鏡從物體表面拿開多艇,繼續(xù)從渲染的層級(jí)大小上考慮光與表面一點(diǎn)的交互行為。那么像吻,由
微表面反射的光可以被認(rèn)為是該點(diǎn)上一些方向變化不大的反射光峻黍,如圖 18.4 中的黃線所示(可參考隨書資源中的彩圖)。


圖18.4 次表面散射拨匆。左圖:次表面散射的光線會(huì)從不同于入射點(diǎn)的位置射出姆涩。如果這些距離值小于需要被著色的像素大小,那么渲染就可以完全在局部完成(右圖)惭每。否則骨饿,就需要使用次表面散射渲染技術(shù)

而折射光線(藍(lán)線)則需要更多的考慮。那些次表面散射光會(huì)從不同于入射點(diǎn)的位置從物體內(nèi)部再次射出台腥,如圖 18.4 左圖所示宏赘。而這些離入射點(diǎn)的距離值和像素大小之間的關(guān)系會(huì)產(chǎn)生兩種建模結(jié)果。如果像素要大于這些散射距離的話黎侈,意味著這些次表面散射產(chǎn)生的距離可以被忽略察署,那我們的渲染就可以在局部進(jìn)行,如圖 18.4 右圖所示蜓竹。如果像素要小于這些散射距離箕母,我們就不可以選擇忽略它們了,要實(shí)現(xiàn)更真實(shí)的次表面散射效果俱济,我們需要使用特殊的渲染模型嘶是,也就是所謂的次表面散射渲染技術(shù)。

我們下面的內(nèi)容均建立在不考慮次表面散射的距離蛛碌,而完全使用局部著色渲染的前提下聂喇。

二、渲染方程

在了解了上面的理論基礎(chǔ)后,我們現(xiàn)在來(lái)學(xué)習(xí)如何用數(shù)學(xué)表達(dá)式來(lái)表示上面的光照模型希太。這意味著克饶,我們要對(duì)光這個(gè)看似抽象的概念進(jìn)行量化。我們可以用輻射率(radiance)來(lái)量化光誊辉。輻射率是單位面積矾湃、單位方向上光源的輻射通量,通常用 L 來(lái)表示堕澄,被認(rèn)為是對(duì)單一光線的亮度和顏色評(píng)估邀跃。在渲染中,我們通常會(huì)使用入射光線的入射輻射率 Li來(lái)計(jì)算出射輻射率 Lo蛙紫,這個(gè)過(guò)程也往往被稱為是著色(shading)過(guò)程拍屑。

James Kajiya 在他 1986 年那篇著名的 The Rendering Equation 論文中給出了渲染方程的表述形式,由此在理論上完美地給出了基于物理渲染的方向坑傅。這個(gè)公式第一次從數(shù)學(xué)建模的角度描述了渲染到底是在解決什么問(wèn)題僵驰,可以說(shuō)自此之前人們都是在靠各種各樣的 hacks 來(lái)嘗試進(jìn)行各種渲染,當(dāng)渲染方程橫空出世后唁毒,人們終于不用再盲人摸象蒜茴,人們有了統(tǒng)一的目標(biāo),那就是如何更快更好地去求解渲染方程浆西。

這個(gè)在圖形學(xué)中大名鼎鼎的渲染方程公式如下:


image.png

盡管上面的式子看起來(lái)有些復(fù)雜矮男,但很好理解,即給定觀察視角 v室谚,該方向上的出射輻射率Lo(v)等于該點(diǎn)向觀察方向發(fā)出的自發(fā)光輻射率 Le(v)加上所有有效的入射光 Li(ωi)到達(dá)觀察點(diǎn)的輻射率積分和。圖 18.5 給出了渲染等式中各個(gè)部分的通俗解釋崔泵。

圖18.5 渲染方程參數(shù)的通俗解釋

渲染方程是計(jì)算機(jī)圖形學(xué)的核心公式秒赤,當(dāng)去掉其中的自發(fā)光項(xiàng) Le(v)后,剩余的部分就是著名的反射等式(Reflectance Equation)憎瘸。我們可以這樣理解反射等式:想象我們現(xiàn)在要計(jì)算表面上某點(diǎn)的出射輻射率入篮,我們已知到該點(diǎn)的觀察方向,該點(diǎn)的出射輻射率是由從許多不同方向的入射輻射率疊加后的結(jié)果幌甘。其中潮售,f (ωi, v)表示了不同方向的入射光在該觀察方向上的權(quán)重分布。我們把這些不同方向的光輻射率(Li(ωi)部分)乘以觀察方向上所占的權(quán)重(f (ωi, v)部分)锅风,再乘以它們?cè)谠摫砻娴耐队敖Y(jié)果((n·ωi)部分)酥诽,最后再把這些值加起來(lái)(即做積分)就是最后的出射輻射率。

在實(shí)時(shí)渲染中皱埠,自發(fā)光項(xiàng)通常就是直接加上某個(gè)自發(fā)光值肮帐。除此之外,積分累加部分在實(shí)時(shí)渲染中也基本無(wú)法實(shí)現(xiàn),因此積分部分通常會(huì)被若干精確光源的疊加所代替训枢,而不需要計(jì)算所有入射光線在半球面上的積分托修。

三、精確光源

在真實(shí)的物理世界中恒界,所有的光源都是有面積概念的睦刃,即所謂的面光源。由于面光源的光照計(jì)算通常要耗費(fèi)大量的時(shí)間十酣,因此在實(shí)時(shí)渲染中涩拙,我們通常會(huì)使用精確光源(punctual light sources)來(lái)近似模擬這些面光源。圖形學(xué)中常見的精確光源類型有點(diǎn)光源婆誓、平行光和聚光燈等吃环,這些精確光源被認(rèn)為是大小為無(wú)限小且方向確定的,盡管這并不符合真實(shí)的物理定義洋幻,但它們?cè)诖蠖鄶?shù)情況下都能得到令人滿意的渲染效果郁轻。

我們使用 lc來(lái)表示它的方向,使用 clight表示它的顏色文留。使用精確光源的最大的好處在于好唯,我們可以大大簡(jiǎn)化上面的反射等式。我們?cè)谶@里省略推導(dǎo)過(guò)程(有興趣的讀者可以閱讀參考文獻(xiàn)[1])燥翅,直接給出結(jié)論骑篙,即對(duì)于一個(gè)精確光源,我們可以使用下面的等式來(lái)計(jì)算它在某個(gè)觀察方向 v 上的出射輻射率:


image.png

和之前使用積分形式的原始公式相比森书,上面的式子使用一個(gè)特定的方向的 f (lc, v)值來(lái)代替積分操作靶端,這大大簡(jiǎn)化了計(jì)算。如果場(chǎng)景中包含了多個(gè)精確光源凛膏,我們可以把它們分別代入上面的式子進(jìn)行計(jì)算杨名,然后把它們的結(jié)果相加即可。也就是說(shuō)猖毫,反射等式可以簡(jiǎn)化成下面的形式:


image.png

那么台谍,現(xiàn)在剩下的問(wèn)題就是,f (lc, v)項(xiàng)怎么算呢吁断?f (lc, v)實(shí)際上?述了當(dāng)前點(diǎn)是如何與入射光線進(jìn)行交互的:當(dāng)給定某個(gè)入射方向的入射光后趁蕊,有多少百分比的光照被反射到了觀察方向上。

在圖形學(xué)中仔役,這一項(xiàng)有一個(gè)專門的名字掷伙,那就是雙向反射分布函數(shù),即 BRDF骂因。

四炎咖、雙向反射分布函數(shù)(BRDF)

BRDF(Bidirectional Reflectance Distribution Function,中文名稱為雙向反射分布函數(shù))定量描述了物體表面一點(diǎn)是如何和光進(jìn)行交互的。大多數(shù)情況下乘盼,BRDF 可以用 f (l, v)來(lái)表示升熊,其中 l 為入射方向和 v 為觀察方向(雙向的含義)。這種情況下绸栅,繞著表面法線旋轉(zhuǎn)入射方向或觀察方向并不會(huì)影響 BRDF 的結(jié)果级野,這種 BRDF 被稱為是各項(xiàng)同性(isotropic)的 BRDF。與之對(duì)應(yīng)的則是各向異性(anisotropic)的 BRDF粹胯。

那么蓖柔,BRDF 到底表示的含義是什么呢?BRDF 有兩種理解方式—第一種理解是风纠,當(dāng)給定入射角度后况鸣,BRDF 可以給出所有出射方向上的反射和散射光線的相對(duì)分布情況;第二種理解是竹观,當(dāng)給定觀察方向(即出射方向)后镐捧,BRDF 可以給出從所有入射方向到該出射方向的光線分布。一個(gè)更直觀的理解是臭增,當(dāng)一束光線沿著入射方向 l 到達(dá)表面某點(diǎn)時(shí)懂酱,f (l, v)表示了有多少部分的能量被反射到了觀察方向 v 上。

下面誊抛,我們來(lái)看一下反射等式中的重要組成部分—BRDF 是如何計(jì)算的列牺。可以看出拗窃,BRDF決定了著色過(guò)程是否是基于物理的瞎领。這可以由 BRDF 是否滿足兩個(gè)特性來(lái)判斷:它是否滿足交換律(reciprocity)和能量守恒(energy conservation)。

交換律要求當(dāng)交換 l 和 v 的值后随夸,BRDF 的值不變默刚,即


image.png

而能量守恒則要求表面反射的能量不能超過(guò)入射的光能,即對(duì)(任意)
image.png

逃魄,要求
image.png

基于這些理論,BRDF 可以用于描述兩種不同的物理現(xiàn)象:表面反射和次表面散射澜搅。針對(duì)每種現(xiàn)象伍俘,BRDF
通常會(huì)包含一個(gè)單獨(dú)的部分來(lái)描述它們—用于描述表面反射的部分被稱為高光反射項(xiàng)(specular term),以及用于描述次表面散射的漫反射項(xiàng)(diffuse term)勉躺,如圖 18.6所示癌瘾。


圖 18.6 BRDF 描述的兩種現(xiàn)象。高光反射部分用于描述反射饵溅,漫反射部分用于描述次表面散射

那么妨退,我們?nèi)绾蔚玫讲煌馁|(zhì)的 BRDF 呢?一種完全真實(shí)的方法是使用精確的光學(xué)儀器在真實(shí)的物理世界中對(duì)這些材質(zhì)進(jìn)行測(cè)量,通過(guò)不斷改變光照入射方向和觀察方向并對(duì)當(dāng)前材質(zhì)的反射光照進(jìn)行采樣咬荷,我們就可以得到它的 BRDF 圖像切片冠句。一些機(jī)構(gòu)和組織向公眾公開了他們測(cè)量出來(lái)的 BRDF 數(shù)據(jù)庫(kù),以便供研究人員進(jìn)行分析和研究幸乒,例 如 MERL BRDF 數(shù)據(jù)庫(kù)( http://www.merl.com/brdf/ )以及 MIT CSAIL 數(shù)據(jù)庫(kù)(http://people.csail.mit.edu/addy/research/brdf/)懦底,這些真實(shí)材質(zhì)的 BRDF 數(shù)據(jù)反映了它們?cè)诓煌?br> 照和觀察角度下的反射情況。

在學(xué)術(shù)界罕扎,學(xué)者們也基于復(fù)雜的物理和光學(xué)理論分析歸納出了一些通用的 BRDF 數(shù)學(xué)模型聚唐,來(lái)對(duì) BRDF 分析模型中的高光反射項(xiàng)和漫反射項(xiàng)進(jìn)行數(shù)學(xué)建模。這些由研究人員得到的 BRDF 模型也可以被稱為是分析型 BRDF 模型腔召,這些 BRDF 模型通常包含了大量的物理和光學(xué)參數(shù)杆查。通過(guò)對(duì)真實(shí)材質(zhì)的 BRDF 圖像和現(xiàn)有的分析型 BRDF 模型進(jìn)行對(duì)比,研究人 員發(fā)現(xiàn)臀蛛,其實(shí)很多材質(zhì)是無(wú)法被現(xiàn)有的任何一種分析型 BRDF 模型所良好的描述出來(lái)亲桦。因此,許多最新的研究都選擇使用基于數(shù)據(jù)驅(qū)動(dòng)的方法掺栅,來(lái)開發(fā)出一些新的分析型 BRDF 模型烙肺,從而使其可以和真實(shí)材質(zhì)的 BRDF 圖像盡可能地接近。

但遺憾的是氧卧,由于真實(shí)世界的光照和材質(zhì)都非常復(fù)雜桃笙,因此很難有一種可以滿足所有真實(shí)材質(zhì)特性的 BRDF 模型。Disney 向公眾開源了一個(gè)名為BRDF Explorer(http://github.com/wdas/brdf)的軟件沙绝,來(lái)讓用戶可以直觀地對(duì)比各種分析型 BRDF模型與真實(shí)測(cè)量得到的 BRDF 值之間的差異搏明。

可以認(rèn)為,這些測(cè)量得到的真實(shí) BRDF 數(shù)據(jù)庫(kù)是研究人員在開發(fā)新的基于物理的 BRDF 光照模型的重要依據(jù)闪檬,除了滿足交換律和能量守恒兩個(gè)條件外肝谭,一個(gè)分析型 BRDF 模型應(yīng)當(dāng)與測(cè)量得到的 BRDF 數(shù)據(jù)在盡可能多得材質(zhì)范圍內(nèi)(或這些特定的材質(zhì))、具有盡可能得相似的表現(xiàn)才可能被廣泛應(yīng)用拢切。Disney 通過(guò)對(duì)大量現(xiàn)有的分析型 BRDF 模型進(jìn)行對(duì)比如捅,并結(jié)合對(duì)真實(shí)材質(zhì)的 BRDF數(shù)據(jù)的觀察,開發(fā)出了適用于 Disney 動(dòng)畫渲染流程的 BRDF 模型样傍,也被稱為 Disney BRDF横缔。在下面的內(nèi)容中,我們會(huì)介紹漫反射項(xiàng)和高光反射項(xiàng)的一些常見的 BRDF 數(shù)學(xué)模型衫哥,同時(shí)給出 Disney BRDF 模型中的相應(yīng)表示茎刚。

五、漫反射項(xiàng)

我們之前所學(xué)習(xí)的 Lambert 模型就是最簡(jiǎn)單撤逢、也是應(yīng)用最廣泛的漫反射 BRDF膛锭。準(zhǔn)確的Lambertian BRDF 的表示為:


image.png

其中粮坞,cdiff表示漫反射光線所占的比例,它也通常被稱為是漫反射顏色(diffuse color)初狰。與我們之前講過(guò)的 Lambert 光照模型不太一樣的是莫杈,上面的式子實(shí)際上是一個(gè)定值,我們常見到的余弦因子部分(即(n·l))實(shí)際是反射等式的一部分跷究,而不是 BRDF 的部分姓迅。上面的式子之所以要除以π,是因?yàn)槲覀兗僭O(shè)漫反射在所有方向上的強(qiáng)度都是相同的俊马,而 BRDF 要求在半球內(nèi)的積分值為 1丁存。因此,給定入射方向 l 的光源在表面某點(diǎn)的出射漫反射輻射率為:


image.png

可以看出柴我,最右項(xiàng)和我們之前一直使用的漫反射項(xiàng)基本一樣解寝。盡管 Lambert 模型簡(jiǎn)單且易于實(shí)現(xiàn),但真實(shí)世界中很少有材質(zhì)符合上述 Lambert 的數(shù)學(xué)描述,即具有完美均勻的散射艘儒。不過(guò)聋伦,一些游戲引擎和實(shí)時(shí)渲染器出于性能的考慮會(huì)使用 Lambert 模型作為它們 PBS 模型中的漫反射項(xiàng),例如虛幻引擎 4(Unreal Engine 4)[11]界睁。

通過(guò)對(duì)真實(shí)材質(zhì)的 BRDF 數(shù)據(jù)進(jìn)行分析觉增,研究人員發(fā)現(xiàn)許多材質(zhì)在掠射角度表現(xiàn)出了明顯的高光反射峰值,而且還與表面的粗糙度有著強(qiáng)烈的聯(lián)系翻斟。粗糙表面在掠射角容易形成一條亮邊逾礁,而相反地光滑表面則容易在掠射角形成一條陰影邊。這些都是 Lambert 模型所無(wú)法描述的访惜。圖 18.7顯示了這樣的例子嘹履,注意圖中在掠射角的光照效果。


圖 18.7 從左到右:粗糙材質(zhì)和光滑材質(zhì)的真實(shí)漫反射結(jié)果债热,以及 Lambert 漫反射結(jié)果

因此砾嫉,許多基于物理的渲染選擇使用更加復(fù)雜的漫反射項(xiàng)來(lái)模擬更加真實(shí)次表面散射的結(jié)果。例如窒篱,在 Disney BRDF[2]中焕刮,它的漫反射項(xiàng)為:


image.png

其中,baseColor 是表面顏色墙杯,通常由紋理采樣得到济锄,roughness 是表面的粗糙度。上面的漫反射項(xiàng)既考慮了在掠射角漫反射項(xiàng)的能量變化霍转,還考慮了表面的粗糙度對(duì)漫反射的影響。Disney使用了 Schlick 菲涅耳近似等式[7]來(lái)模擬在掠射角的反射變化一汽,同時(shí)使用表面粗糙度來(lái)進(jìn)一步修改它避消,這使得光滑材質(zhì)可以在掠射角具有更為明顯的陰影邊低滩,而又使得粗糙材質(zhì)在掠射角具有亮邊。而上面的式子也正是 Unity 5 內(nèi)部使用的漫反射項(xiàng)岩喷。
六恕沫、高光反射項(xiàng)

在現(xiàn)實(shí)生活中,幾乎所有的物體都或多或少有高光反射現(xiàn)象纱意。John Hable 在他的文章中就強(qiáng)調(diào)了 Everything is Shiny婶溯。但在許多傳統(tǒng)的 Shader 中,很多材質(zhì)只考慮了漫反射效果偷霉,而并沒(méi)有添加高光反射迄委,這使得渲染出來(lái)的畫面并不那么真實(shí)可信。

在基于物理的渲染中类少,BDRF 中的高光反射項(xiàng)大多數(shù)都是建立在微面元理論(microfacet theory)的假設(shè)上的叙身。微面元理論認(rèn)為,物體表面實(shí)際是由許多人眼看不到的微面元組成的硫狞,雖然物體表面并不是光學(xué)平滑的信轿,但這些微面元可以被認(rèn)為是光學(xué)平滑的,也就是說(shuō)它們具有完美的高光反射残吩。當(dāng)光線和物體表面一點(diǎn)相交時(shí)财忽,實(shí)際上是和一系列微面元交互的結(jié)果。正如我們?cè)?18.1.1 節(jié)中看到的泣侮,當(dāng)光和這些微面元相交時(shí)即彪,光線會(huì)被分割成兩個(gè)方向—反射方向和折射方向。這里我們只需要考慮被反射的光線旁瘫,而折射
光線已經(jīng)在之前的漫反射項(xiàng)中考慮過(guò)了祖凫。當(dāng)然,微面元理論也僅僅是真實(shí)世界的散射的一種近似
理論酬凳,它也有自身的缺陷惠况,仍然有一些材質(zhì)是無(wú)法使用微面元理論來(lái)描述的。

假設(shè)表面法線為 n宁仔,這些微面元的法線 m 并不都等于 n稠屠,因此,不同的微面元會(huì)把同一入射方向的光線反射到不同的方向上翎苫。而當(dāng)我們計(jì)算 BRDF 時(shí)权埠,入射方向 l 和觀察方向 v 都會(huì)被給定,這意味著只有一部分微面元反射的光線才會(huì)進(jìn)入到我們的眼睛中煎谍,這部分微面元會(huì)恰好把光線反射到方向 v 上攘蔽,即它們的法線 m 等于 l 和 v 的一半,也就是我們一直看到的半角度矢量 h(half angle vector呐粘,也被稱為 half vector)满俗,如圖 18.6(a)所示转捕。

然而,這些 m = h 的微面元反射也并不會(huì)全部添加到 BRDF 的計(jì)算中唆垃。這是因?yàn)槲逯ィ鼈兤渲幸徊糠謺?huì)在入射方向 l 上被其他微面元擋住(shadowing)辕万,如圖 18.6(b)所示枢步,或是在它們的反射方向 v 上被其他微面元擋住了(masking),如圖 18.6(c)所示渐尿。微面元理論認(rèn)為醉途,所有這些被遮擋住的微面元不會(huì)添加到高光反射項(xiàng)的計(jì)算中(實(shí)際上它們中的一些由于多次反射仍然會(huì)被我們看到,但這不在微面元理論的考慮范圍內(nèi))涡戳。

基于微面元理論的這些假設(shè)结蟋,BRDF 的高光反射項(xiàng)可以用下面的通用形式來(lái)表示:


image.png
圖18.6 (a)那些m=h的微面元會(huì)恰好把入射光從I反射到v上,只有這部分微面元才可以添加到BRDF的計(jì)算中渔彰。(b)一部分滿足(a)的微面元會(huì)在I方向上被其他微面元遮擋住嵌屎,它們不會(huì)接受到光照,因此會(huì)形成陰影恍涂。(c)還有一部分滿足(a)的微面元會(huì)在反射方向v上被其他微面元擋住宝惰,因此,這部分反射光也不會(huì)被看到

這就是著名的 Torrance-Sparrow 微面元模型[5](Torrance 和 Sparrow 來(lái)源于兩個(gè)作者的姓名)再沧。上面的式子看起來(lái)難以理解尼夺,實(shí)際上其中的各個(gè)項(xiàng)對(duì)應(yīng)了我們之前講到的不同現(xiàn)象。D(h)是微面元的法線分布函數(shù)(normal distribution function炒瘸,NDF)淤堵,它用于計(jì)算有多少比例的微面元的法線滿足 m=h,只有這部分微面元才會(huì)把光線從 l 方向反射到 v 上顷扩。G(l, v, h)是陰影—遮掩函數(shù)(shadowing-masking function)拐邪,它用于計(jì)算那些滿足 m=h 的微面元中有多少會(huì)由于遮擋而不會(huì)被人眼看到,因此它給出了活躍的微面元(active microfacets)所占的濃度隘截,只有活躍的微面元才會(huì)成功地把光線反射到觀察方向上扎阶。F(l, h)則是這些活躍微面元的菲涅爾反射(Fresnel reflectance)函數(shù),它可以告訴我們每個(gè)活躍的微面元會(huì)把多少入射光線反射到觀察方向上婶芭,即表示了反射光線占入射光線的比率东臀。事實(shí)上,現(xiàn)實(shí)生活中幾乎所有的物體都會(huì)表現(xiàn)出菲涅耳現(xiàn)象犀农。最后惰赋,分母4(n ? l)(n? v)是用于校正從微面元的局部空間到整體宏觀表面數(shù)量差異的校正因子。

這些不同的部分又可以衍生出很多不同的 BRDF 模型呵哨。首先是菲涅耳反射函數(shù)部分 F(l, h)赁濒。

七贵扰、菲涅耳反射函數(shù)

菲涅耳反射函數(shù)計(jì)算了光學(xué)表面反射光線所占的部分,它表明了當(dāng)光照方向和觀察方向夾角逐漸增大時(shí)高光反射強(qiáng)度增大的現(xiàn)象流部。完整的菲涅耳等式非常復(fù)雜,包含了諸如復(fù)雜的折射率等與材質(zhì)相關(guān)的參數(shù)纹坐。為了給美術(shù)人員提供更加直觀且方便調(diào)節(jié)的參數(shù)枝冀,大多數(shù) PBS 實(shí)現(xiàn)選擇使用Schlick 菲涅耳近似等式[7]來(lái)得到近似的菲涅爾反射效果:


image.png

其中,cspec 是材質(zhì)的高光反射顏色耘子。通過(guò)對(duì)真實(shí)世界材質(zhì)的觀察果漾,人們發(fā)現(xiàn)金屬材質(zhì)的高光反射顏色值往往比較大,而非金屬材質(zhì)的反射顏色值則往往較小谷誓。

八绒障、法線分布函數(shù)

法線分布函數(shù) D(h)表示了對(duì)于當(dāng)前表面來(lái)說(shuō)有多少比例的微面元的法線滿足 m=h,這意味著只有這些微面元才會(huì)把光線從 l 方向反射到 v 上捍歪。對(duì)于大多數(shù)表面來(lái)說(shuō)户辱,微面元的法線朝向并不是均勻分布的,更多的微面元會(huì)具有和表面法線 n 相同的面法線糙臼。法線分布函數(shù)的值必須是非負(fù)的標(biāo)量值庐镐,它決定了高光區(qū)域的大小、亮度和形狀变逃,因此是高光反射項(xiàng)中非常重要的一項(xiàng)必逆。一個(gè)直觀的感受是,當(dāng)表面的粗糙度下降時(shí)揽乱,應(yīng)該有更多的微面元的面法線滿足 m=n名眉。因此法線分布函數(shù)應(yīng)該考慮到表面粗糙度的影響。

我們之前學(xué)習(xí)的 Blinn-Phong 模型[7]就是一種非常簡(jiǎn)單的模型凰棉。Blinn 在他的論文中改進(jìn)了Phong 模型并提出了 Blinn-Phong 模型损拢,使它更貼合微面元 BRDF 模型的理論。Blinn-Phong 模型使用的法線分布函數(shù) D(h)為:


image.png

其中渊啰,gloss 是與表面粗糙度相關(guān)的參數(shù)探橱,它的值可以是任意非負(fù)數(shù)。上面的式子和我們之前所見的 Blinn-Phong 模型有所不同绘证,這是因?yàn)槲覀冊(cè)诶锩婕尤肓藲w一化因子隧膏,這是因?yàn)榉ň€分布函數(shù)必須滿足一個(gè)條件,即所有微面元的投影面積必須等于該區(qū)域宏觀表面的投影面積嚷那。因此胞枕,上述公式也被稱為是歸一化的 Phong 法線分布函數(shù)。

但實(shí)際上魏宽,Blinn-Phong 模型并不能真實(shí)地反映很多真實(shí)世界中物體的微面元法線方向分布腐泻,它其實(shí)完全是一種經(jīng)驗(yàn)型模型决乎,因此,很多更加復(fù)雜的分布函數(shù)被提了出來(lái)派桩,例如 GGX[3]构诚、Beckmann[4]等。

Beckmann 分布來(lái)源于高斯粗糙分布的一種假設(shè)铆惑,而且在表現(xiàn)上和 Phong 分布非常類似范嘱,但它的計(jì)算卻要復(fù)雜很多。 GGX 分布(也被稱為 Trowbridge-Reitz 法線分布函數(shù))是一種更新的法線分布函數(shù)员魏,它的公式如下:


image.png

其中丑蛤,參數(shù) α 是與表面粗糙度相關(guān)的參數(shù)。與 Blinn-Phong 的法線分布相比撕阎,GGX 分布具有更明亮受裹、更狹窄且拖尾更長(zhǎng)的高光區(qū)域,它的結(jié)果更接近于一些測(cè)量得到的真實(shí)材質(zhì)的 BRDF 分布虏束。在 Disney BRDF 中棉饶,Disney 認(rèn)為對(duì)于很多材質(zhì)來(lái)說(shuō),GGX 表現(xiàn)出來(lái)的高光拖尾仍然不夠長(zhǎng)魄眉。他們選擇使用一種更加廣義的法線分布模型砰盐,即 Generalized-Trowbridge-Reitz(GTR)分布。GTR分布于 GGX 分布很類似坑律,但它的分母部分的指數(shù)不是 2岩梳,而是一個(gè)可調(diào)參數(shù)。

Disney 使用兩個(gè)不同指數(shù)的 GTR 分布作為兩個(gè)高光反射片晃择,其中第一個(gè)反射片用于表示基本材質(zhì)層冀值,第二個(gè)反射片用于表示基本材質(zhì)表面的清漆層。除此之外宫屠,他們還發(fā)現(xiàn)令 α = roughness2可以在材質(zhì)粗糙度上得 到更加線性的變化列疗。否則,直接使用 roughness 作為參數(shù)的話會(huì)導(dǎo)致在光滑材質(zhì)和粗糙材質(zhì)之間插值出來(lái)的材質(zhì)總是偏粗糙的浪蹂。

九抵栈、陰影-遮擋函數(shù)

陰影-遮擋函數(shù) G(l, v, h)也被稱為幾何函數(shù)(geometry function),它表明了具有給定面法線 m的微面元在沿著入射方向 l 和觀察方向 v 上不會(huì)被其他微面元擋住的概率坤次。在微面元理論的 BRDF中古劲,m 可以使用半向量 h 來(lái)代替,因?yàn)橹挥羞@部分微面元才會(huì)把光線從 l 方向反射到 v 上缰猴。

由于G(l, v, h)表示的是一個(gè)概率值产艾,因此它的值是一個(gè)范圍在 0 到 1 之間的標(biāo)量。學(xué)術(shù)界發(fā)表了許多對(duì)于 G(l, v, h)的分析模型,這些公式大多建立在一些簡(jiǎn)化的表面模型基礎(chǔ)下闷堡。許多已發(fā)表的微面元 BRDF 模型習(xí)慣把 G(l, v, h)和高光反射項(xiàng)的分母(n ? l)(n ? v)部分結(jié)合起來(lái)隘膘,即把 G(l, v, h)除以(n ? l)(n ? v)的部分合在一起討論,這是因?yàn)檫@兩個(gè)部分都和微面元的可見性有關(guān)杠览,因此 Naty Hoffman在他的演講[1]中稱這個(gè)合項(xiàng)為可見性項(xiàng)(visibility term)弯菊。

一些 BRDF 模型選擇完全省略可見性項(xiàng),即把該項(xiàng)的值設(shè)為 1踱阿。這意味著误续,這些 BRDF 中的G(l, v, h)表達(dá)式等同于:


image.png

上述的 Gimplicit 實(shí)現(xiàn)不需要任何計(jì)算量(因?yàn)榭梢灾苯雍透吖夥瓷漤?xiàng)的分母進(jìn)行抵消),并且在一些程度上可以反映正確的變化趨勢(shì)扫茅。例如,當(dāng)從掠射角進(jìn)行觀察或光線從掠射角射入時(shí)育瓜,該項(xiàng)會(huì)趨近于 0葫隙,這是符合我們的認(rèn)知的,因?yàn)樵诼由浣菚r(shí)微面元被其他微面元遮擋的概率會(huì)非常大躏仇。然而恋脚,這種 Gimplicit的實(shí)現(xiàn)忽略了材質(zhì)粗糙度的影響,缺乏一定的物理真實(shí)性焰手,因?yàn)槲覀兿M植诘谋砻婢哂懈哧幱昂驼趽醺怕省?/p>

通常糟描,陰影-遮擋函數(shù) G(l, v, h)依賴于法線分布函數(shù) D(h),因?yàn)樗枰Y(jié)合 D(h)來(lái)保持 BRDF能量守恒的規(guī)定书妻。最早的陰影-遮擋函數(shù)之一是 Cook-Torrance 陰影遮擋函數(shù)[9](Cook 和 Torrance來(lái)源于兩個(gè)作者的姓名):


image.png

Cook-Torrance 陰影遮擋函數(shù)在電影行業(yè)被應(yīng)用了很長(zhǎng)時(shí)間船响,但它實(shí)際上是基于一個(gè)非真實(shí)的微幾何模型,而且同樣不受材質(zhì)粗糙度的影響躲履。后來(lái)见间,Kelemen 等人[10]提出了一個(gè)對(duì)于 Cook-Torrance 陰影遮擋函數(shù)非常快速且有效的近似實(shí)現(xiàn):


image.png

目前在圖形學(xué)中廣受推崇的是 Smith 陰影-遮掩函數(shù)[6]工猜。Smith 函數(shù)比 Cook-Torrance 函數(shù)更加精確米诉,而且考慮進(jìn)了表面粗糙度和法線分布的影響。原始的 Smith 函數(shù)是為 Beckmann 法線分布函數(shù)所涉及的篷帅,而 Walter 等人[3]隨后將其通用化史侣,使其可以匹配任何法線分布函數(shù),并給出了針對(duì) Beckmann 和 GGX 法線分布函數(shù)的更加高效的近似 Smith 模型魏身。在 Disney 的 BRDF 模型[2]中惊橱,它的陰影-遮掩函數(shù) G(l, v, h)就使用了 Walter 等人[3]提出的為 GGX 設(shè)計(jì)的 Smith 模型:

image.png

上述公式中的 θv表示觀察方向 v 和表面法線 n 之間的夾角。根據(jù)藝術(shù)家的反饋以及對(duì)測(cè)量得到的 BRDF 圖像的觀察叠骑,Disney 在上述式子中重新映射了 αg和 roughness 之間的關(guān)系李皇,由此得到了一個(gè)在視覺(jué)上讓藝術(shù)家更加滿意的效果。這種 Smith 陰影-遮掩函數(shù)被廣泛應(yīng)用在電影行業(yè)中,但可以看出掉房,相比于 Kelemen 改進(jìn)后的 Cook-Torrance 陰影遮擋函數(shù)茧跋,Smith 函數(shù)的計(jì)算量要明顯高很多。


至此卓囚,我們已經(jīng)介紹完了基于物理的 BRDF 模型的基礎(chǔ)理論瘾杭,并給出了一些常見的 BRDF 模型,例如 Phong哪亿、Beckmann粥烁、GGX 模型以及 Disney BRDF 模型的實(shí)現(xiàn)等蝇棉。盡管存在很多基于物理的 BRDF 模型篡殷,但在真實(shí)的電影或游戲制作中钝吮,我們希望在直觀性和物理可信度之間找到一個(gè)平衡點(diǎn)板辽,使得實(shí)現(xiàn)的 BRDF 既可以讓美術(shù)人員直觀地調(diào)節(jié)各個(gè)參數(shù),而又有一定的物理可信度劲弦。

當(dāng)然耳标,有時(shí)候?yàn)榱藵M足直觀性我們不得不犧牲一定的物理特性邑跪,得到的 BRDF 可能不是嚴(yán)格基于物理原理的。Disney 的 BRDF 模型就是一個(gè)很好的例子贸毕,它使用盡可能少的若干直觀參數(shù)來(lái)代替那些晦澀難懂的物理變量明棍,而且這些參數(shù)的范圍被精妙地設(shè)計(jì)為 0 到 1摊腋,為此 Disney 會(huì)在必要時(shí)重新映射 BRDF 中的變量范圍嘁傀,例如在陰影-遮掩函數(shù)中他們重新映射了粗糙度變量的范圍细办。

十、PBS 中的光照

盡管基于物理渲染的理論比較復(fù)雜钓觉,但在實(shí)際應(yīng)用中絕大部分情況下我們其實(shí)只需要按照上面提到的各種公式來(lái)實(shí)現(xiàn)相應(yīng)的 BRDF 模型即可坚踩。然而,要想得到畫面出色的渲染效果瞬铸,僅僅應(yīng)用這些公式是遠(yuǎn)遠(yuǎn)不夠的,我們還需要為這些 PBS 材質(zhì)搭配以出色的光照荧缘。

在上面的內(nèi)容中我們已經(jīng)介紹了精確光源胜宇。隨著新的技術(shù)不斷被提出,實(shí)時(shí)面光源也不再是一個(gè)奢侈的夢(mèng)想财破。在 SIGGRAPH 2016 上左痢,Eric Heitz 和 Stephen Hill 在他們名為 Real-Time Area Lighting: a Journey from Research to Production 的演講中就分享了如何實(shí)現(xiàn)實(shí)時(shí)面光源的渲染俊性,這也是 Unity 的 Adam Demo 中使用的技術(shù)定页,讀者可以在 Unity Labs 的相關(guān)文章①中找到相關(guān)內(nèi)容和源碼實(shí)現(xiàn)典徊。除了上述兩種光源外,基于圖像的光照(image-based lighting, IBL)同樣是非常重要的光照來(lái)源羡铲。

基于圖像的光照通常指的是把場(chǎng)景中遠(yuǎn)處的光照存儲(chǔ)在類似環(huán)境貼圖的圖像中也切。這些環(huán)境貼圖可以表示光滑物體表面反射的環(huán)境光雷恃,從而允許我們可以快速得到擁有很高細(xì)節(jié)的真實(shí)光照效果褂萧。

在 Unity 中导犹,這種光照通常是由反射探針(Reflection Probes)機(jī)制來(lái)實(shí)現(xiàn)的,我們可以在 Shader中獲取當(dāng)前物體所在的反射探針并在需要時(shí)對(duì)它們的采樣結(jié)果進(jìn)行混合磕昼。當(dāng)然票从,我們也可以實(shí)現(xiàn)一套自己的 IBL 機(jī)制峰鄙,Sébastien Lagarde 在他的博文②里詳細(xì)介紹了 IBL 的一些實(shí)現(xiàn)方法以及如何得到視差正確的局部環(huán)境貼圖的方法吟榴,非常值得一看吩翻。

在實(shí)際開發(fā)過(guò)程中狭瞎,如何放置各種光源以及調(diào)整它們和材質(zhì)的參數(shù)絕對(duì)是一門學(xué)問(wèn)搏予,對(duì)場(chǎng)景美術(shù)人員和燈光師來(lái)說(shuō)也是一項(xiàng)挑戰(zhàn)雪侥。而采用 PBS 的好處之一就是校镐,我們暴露給美術(shù)人員的材質(zhì)編輯頁(yè)面可以是統(tǒng)一的鸟廓,而不再是各種令人眼花繚亂的光照模型的“大雜燴”。

https://labs.unity.com/article/real-time-polygonal-light-shading-linearly-transformed-cosines
https://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/

十一擎浴、Unity 中的 PBS 實(shí)現(xiàn)

在下面的內(nèi)容中贮预,我們將給出 Unity 中 PBS 的實(shí)現(xiàn)仿吞。需要注意的是唤冈,隨著 Unity 的不斷更新银伟,其選擇使用的 BRDF 模型也可能會(huì)發(fā)生變化彤避,例如在 Unity 5.3 之前琉预,Unity 的 PBS 中的法線分布函數(shù) D(h)采用的是我們之前提到的歸一化的 Phong 法線分布函數(shù)模孩,而在 Unity 5.3 及其之后的版本(截止到本書完成時(shí)為 Unity 5.6)中榨咐,法線分布函數(shù)改為采用 GGX 分布块茁。因此数焊,我們這里旨在讓讀者了解完整的 PBS 數(shù)學(xué)模型佩耳,如果讀者希望了解當(dāng)前所用 Unity 版本的 PBS 所使用的 BRDF模型干厚,我們強(qiáng)烈建議讀者去翻看內(nèi)置的 Shader 文件。

在之前的內(nèi)容中所坯,我們提到了 Unity 5 的 PBS 實(shí)際上是受 Disney BRDF[2]的啟發(fā)芹助。這種 BRDF 最大的好處之一就是很直觀状土,只需要提供一個(gè)萬(wàn)能的 Shader 就可以讓美術(shù)人員通過(guò)調(diào)整少量參數(shù)來(lái)渲染絕大部分常見的材質(zhì)声诸。我們可以在 Unity 內(nèi)置的 UnityStandardBRDF.cginc 文件中找到它的實(shí)現(xiàn)彼乌。

總體來(lái)說(shuō)慰照,Unity 5 一共實(shí)現(xiàn)了兩種 PBS 模型毒租。一種是基于 GGX 模型的墅垮,另一種則是基于歸一化的 Blinn-Phong 模型的算色,這兩種模型使用了不同的公式來(lái)計(jì)算高光反射項(xiàng)中的法線分布函數(shù)D(h)和陰影-遮掩函數(shù) G(l, v, h)灾梦。Unity 5.3 以前的版本默認(rèn)會(huì)使用基于歸一化后的 Blinn-Phong 模型來(lái)實(shí)現(xiàn)基于物理的渲染若河,但在 Unity 5.3 及后續(xù)版本中萧福,默認(rèn)將使用 GGX 模型统锤,這和很多其他主流引擎的選擇一致饲窿。

在這兩種實(shí)現(xiàn)中逾雄,Unity 使用的 BRDF 中的漫反射項(xiàng)都與 Disney BRDF 中的漫反射項(xiàng)相同鸦泳,即:
漫反射項(xiàng):


image.png

baseColor 一般由紋理采樣和顏色參數(shù)共同決定做鹰。

高光反射項(xiàng)中的菲涅耳反射函數(shù) F(l, h)也與 Disney BRDF 中的一致钾麸,即使用的 Schlick 菲涅耳近似等式[7]:
菲涅耳反射函數(shù):


image.png

其中饭尝,cspec一般由紋理采樣或高光顏色所決定钥平。

Unity 5 兩種 PBS 模型的主要區(qū)別在于它們所選擇的法線分布函數(shù)及其對(duì)應(yīng)的陰影-遮掩函數(shù)的不同涉瘾×⑴眩基于 GGX 模型的 PBS 的法線分布函數(shù)為 GGX 分布囚巴,基于歸一化 Blinn-Phong 模型的PBS 的法線分布函數(shù)則為歸一化后的 Phong 分布彤叉。它們的公式分別如下:

法線分布函數(shù):


image.png

需要注意的是,不同 Unity 版本在上述實(shí)現(xiàn)上可能會(huì)略有不同柬焕,比如 roughness 的指數(shù)部分會(huì)有所不同斑举。

陰影-遮掩函數(shù)的選擇更加復(fù)雜一些富玷。在 Unity 5.3 之前的版本中赎懦,基于 GGX 模型和歸一化Blinn-Phong 模型的 PBS 的陰影-遮掩函數(shù)分別是為 GGX 和 Beckmann 設(shè)計(jì)的 Smith-Schlick 模型[8]励两。 它們的公式分別如下:

Unity 5.3 之前的陰影-遮掩函數(shù):


image.png

盡管很多文獻(xiàn)都曾推薦使用上述的 Smith-Schlick 陰影-遮掩函數(shù)当悔,然而先鱼,Naty Hoffman[1]和 Eric Heitz[12]都指出焙畔,這種 Smith-Schlick 陰影-遮掩函數(shù)是作者 Schlick 對(duì)一個(gè)錯(cuò)誤版本的 Smith 模型的近似公式宏多,這意味著這些 Smith-Schlick 陰影-遮掩函數(shù)并不是基于物理的伸但,因?yàn)樗荒鼙WC微面元投影區(qū)域面積的守恒定律更胖。在 Unity 5.3 及其后續(xù)版本中却妨,Unity 為基于 GGX 的 PBS 模型改用了Smith-Joint 陰影-遮掩函數(shù)[12]彪标。Smith-Joint 陰影-遮掩函數(shù)的公式如下:
Unity 5.3 以后 GGX 的陰影-遮掩函數(shù):


image.png

在上述的式子中薄声,Λ(ωo) 和 Λ(ωi)分別評(píng)估出射方向和入射方向上的陰影和遮掩默辨,基于這種分開計(jì)算的 Λ(ωo) 和 Λ(ωi)的 Smith 模型缩幸,Eric Heitz[12]針對(duì) Λ(ωo) 和 Λ(ωi)的不同組合方式列舉了四種形式的陰影-遮掩函數(shù)桌粉。

上述的公式顯示了其中一種被稱為 Height-Correlated Masking and Shadowing 的組合方式铃肯,也是 Eric 建議在實(shí)踐中使用的一種方式押逼。由于原始的 Smith-Joint 陰影-遮掩函數(shù)涉及兩個(gè)開根號(hào)操作挑格,處于性能方面的考慮漂彤,Unity 在實(shí)現(xiàn)上選擇使用上述僅包含乘法的近似公式來(lái)簡(jiǎn)化計(jì)算挫望。盡管在數(shù)學(xué)上這個(gè)近似公式并不正確媳板,但從效果上來(lái)看是足夠接受的蛉幸。


盡管我們已經(jīng)省略了大量的數(shù)學(xué)推導(dǎo)和物理原理提陶,上面大量的公式對(duì)于某些讀者來(lái)說(shuō)可能仍然十分晦澀難懂搁骑,這也是為什么 PBS 總是令人望而卻步的原因之一仲器。如果讀者想要深入了解基于物理的渲染的數(shù)學(xué)原理和應(yīng)用的話乏冀,可以參見本章的擴(kuò)展閱讀部分辆沦。需要再次強(qiáng)調(diào)的是肢扯,由于 Unity版本的不同蔚晨,內(nèi)置 PBS 的實(shí)現(xiàn)也可能會(huì)發(fā)生變化。除此之外累舷,在學(xué)術(shù)界和工業(yè)界仍然不斷有新的或改良后的 BRDF 模型的出現(xiàn)被盈,讀者也可以根據(jù)項(xiàng)目需要選擇與 Unity 實(shí)現(xiàn)不同的 BRDF 模型害捕。

尤其是如果需要在移動(dòng)端應(yīng)用基于物理的渲染尝盼,除了效果外性能是我們最應(yīng)當(dāng)關(guān)心的問(wèn)題之一盾沫,此時(shí)我們可能需要針對(duì)移動(dòng)平臺(tái)對(duì)采用的 BRDF 模型進(jìn)行一些修改,讀者可以在本章的擴(kuò)展閱讀部分中找到更多的資料蕾哟。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谭确,一起剝皮案震驚了整個(gè)濱河市芬迄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌算途,老刑警劉巖郊艘,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纱注,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瞎嬉,警方通過(guò)查閱死者的電腦和手機(jī)氧枣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)烧董,“玉大人逊移,你說(shuō)我怎么就攤上這事×睿” “怎么了胳泉?”我有些...
    開封第一講書人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵拐叉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我扇商,道長(zhǎng)凤瘦,這世上最難降的妖魔是什么钳吟? 我笑而不...
    開封第一講書人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮窘拯,結(jié)果婚禮上红且,老公的妹妹穿的比我還像新娘。我一直安慰自己涤姊,他們只是感情好暇番,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著思喊,像睡著了一般壁酬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恨课,一...
    開封第一講書人閱讀 49,856評(píng)論 1 290
  • 那天舆乔,我揣著相機(jī)與錄音,去河邊找鬼剂公。 笑死希俩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的纲辽。 我是一名探鬼主播颜武,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拖吼!你這毒婦竟也來(lái)了鳞上?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吊档,失蹤者是張志新(化名)和其女友劉穎篙议,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怠硼,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涡上,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拒名。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吩愧。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖增显,靈堂內(nèi)的尸體忽然破棺而出雁佳,到底是詐尸還是另有隱情脐帝,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布糖权,位于F島的核電站堵腹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏星澳。R本人自食惡果不足惜疚顷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望禁偎。 院中可真熱鬧腿堤,春花似錦、人聲如沸如暖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盒至。三九已至酗洒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枷遂,已是汗流浹背樱衷。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酒唉,地道東北人箫老。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像黔州,于是被迫代替她去往敵國(guó)和親耍鬓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容