《Real-Time Rendering 4th Edition》讀書筆記--簡單粗糙翻譯 第九章 基於物理的着色 Physically Based Shadering

寫在前面的話:因爲英語不好,所以看得慢,所以還不如索性按自己的理解簡單粗糙翻譯一遍,就當是自己的讀書筆記了。不對之處甚多,以後理解深刻了,英語好了再回來修改。相信花在本書上的時間和精力是值得的。

———————————————————————————

Let the form of an object be what it may,—light, shade, and perspective will always make it beautiful.

                        ——Mirumo、John Constable

天地有大美而不言--光、影與角度讓萬物有靈且美。

 
本章將介紹基於物理的着色的各個方面。 9.1節描述光與物質相互作用的物理現象 9.2至9.4節將說明這些物理現象與着色過程的關聯 9.5到9.7節專門討論構建基於物理着色的模型,而模型本身——涵蓋了各種材質類型——將在9.8到9.12節中進行討論 最後,在9.13節中,描述瞭如何將材料混合在一起,並介紹了避免走樣並保留表面外觀的過濾方法
 
9.1 光的物理性(Physics of Light)
 
        在物理光學中,光被模擬成一種電磁橫波(electromagnetic transverse wave),其中電場(electric)磁場(magnetic)垂直於其振盪傳播方向。 這兩個場的振盪是成對的。 磁場向量和電場向量相互垂直,它們的長度之比是固定的, 等於相速度(phase velocity)
        圖9.1中是一個簡單的光波,一個完美的正弦函數。這波擁有單一波長(wavelength),用希臘字母λ表示。正如在8.1節中講到的,感知到的光的顏色與其波長密切相關。因此,單波長的光被稱爲單色光(monochromatic light)。然而,在實際應用中遇到的大多數光波都是多色的(polychromatic),包含許多不同的波長。jiji
        圖9.1中的光波在另一個方面非常簡單,它是線性偏振的(linearly polarized) 這意味着對於空間中的一個固定點,磁場和電磁彼此每一步都沿着一條線來回移動。 相反,在這本書中,我們關注的是非偏振光(unpolarized light),這是更爲普遍的。在非偏振光中,場振盪均勻地分佈在垂直於傳播軸的所有方向上 儘管它們很簡單,但理解單色線偏振波的行爲是有用的,因爲任何光波都可以分解成這樣的波的組合。
        如果我們用給定的相位(例如,振幅峯值)隨時間跟蹤波上的一個點,我們將看到它以恆定的速度在空間中移動,這就是波的相速度(phase velocity) 對於在真空中傳播的光波,相速度是c,通常被稱爲光速,大約每秒300,000公里。
        
圖 9.1 光,一個電磁橫波。電場和磁場彼此垂直着沿着傳播方向振盪傳播。 圖中所示的波是最簡單的光波, 它既是單色(只有一個波長λ)和線性偏振( 電場和磁場各沿一條直線振盪)
 
        在第8.1.1節中,對於可見光,單個波長的大小大約在400-700納米的範圍內。爲了讓大家對這個長度有個直觀的認識,它大約是一根蜘蛛絲的一半到三分之一的寬度,而蜘蛛絲本身還不到一根頭髮絲的五十分之一。參見圖9.2。在光學中,討論特徵對於光波長的大小通常是有用的。在這種情況下,我們會說,蜘蛛絲的線程的寬度大約是2λ-3λ(2-3個光波長),一根頭髮的寬度大約是100λ- 200λ。
圖 9.2  左邊的可見光波長是相對於一根蛛絲而言的,這條蛛絲的寬度略大於1微米。在右圖中,一根相似的蜘蛛絲在人類的頭髮旁邊。
 
       光波攜帶能量。能量流的密度等於電場和磁場大小的乘積,所以與電場大小的平方成正比。我們主要關注電場,因爲它對物質的影響比磁場大得多。在渲染中,我們關注的是平均能量流(average energy flow)隨時間的變化,它與波振幅的平方成正比。這個平均能量流密度就是輻照度(irradiance),用字母E表示。
 
        光波具有線性結合的性質。總波是各分量波的和。然而,由於輻照度與振幅的平方成正比,這似乎會導致一個悖論。例如,對兩個相等的波求和會不會導致輻照度出現“1 + 1 = 4”的情況?然而輻射度表示能量流,這不會違反能量守恆定律嗎?這兩個問題的答案分別是“有時”和“不”。
        爲了說明這一點,我們來看一個簡單的例子:n個單色波的疊加,除了相位外都是相同的。每個n波的振幅是a,如前所述,每個波的輻照度E1與a的平方成正比,換句話說,E1 = k*a*a,其中k是常數係數
        圖9.3展示了這個例子的三個示例場景。在左邊,所有的波都以相同的相位排列,並且互相加強。 組合波的輻照度是單個波的n*n倍,是n個單波的輻照度之和的n倍。 這種情況稱爲相長干涉(constructive interference) 而在中間圖中,每一對波的相位是相反的,互相抵消。最終組合波具有零振幅和零輻照度。這就是相消干涉(destructive interference)
        然而,大多數情況下,當波相加時,它們是相互不相干的(incoherent),這意味着它們的相位是相對隨機的。如圖9.3右圖所示。 在這種情況下,組合波的振幅爲√na,單個波的輻照度線性增加到一個波的輻照度的n倍,正如人們所期望的那樣。
圖 9.3  n個具有相同頻率、極化(偏振)和振幅的單色波疊加在一起的三個情況。 從左到右分別是:相長干涉、相消干涉和非相干相加(incoherent addition) 在每一種情況下,組合波的振幅和輻照度相對於n個原始波都展示出來了。
 
        圖9.3並沒有顯示完整的圖像——它只顯示了一個位置的波的相互作用。當波在空間中傳播時,它們之間的相位關係從一個位置到另一個位置發生變化,如圖9.4所示。在某些位置,波的干涉是積極的,並且混合波的輻照度大於單個波的輻照度值的和。在其他地方,它們會互相干擾,造成組合的輻照度降低。 這並不違反能量守恆定律,因爲通過相長干涉得到的能量和通過相消干涉失去的能量總是相互抵消的。
圖 9.4  單色波從具有相同頻率的兩個點源向外傳播。在空間的不同區域,波的干涉是有積極性的,也有消極性的。
 
        當物體中的電荷發生振盪時,就會發出光波。 引起振動的部分能量——熱量、電能、化學能——被轉換成光能,從物體輻射出去。 在渲染中,這些對象被當作光源
        光波發出後,它們在空間中傳播,直到遇到一些可以相互作用的物質。 振盪的電場推動和拉動物質中的電荷,使它們依次振盪。振盪的電荷釋放出新的光波,將部分入射光波的能量重新定向到新的方向。這種被稱爲散射(scattering)的反應是各種光學現象的基礎。
        散射光波具有與原光波相同的頻率。通常情況下,原始波包含多個頻率的光,每一個單獨與物質相互作用。一個頻率的入射光能並不會對另一個頻率的發射光能產生影響,除了一些特殊的——相對罕見的——情況,比如熒光和磷光,在本書中不會描述。
        一個孤立的分子向各個方向散射光,光強有一定的方向變化。更多的光向靠近發射軸的方向散射,包括向前和向後。分子作爲散射體的有效性——在其附近的光波被完全散射的可能性——隨着波長的不同而有很大的不同。短波長的光比長波長的光散射更有效。
        在繪製過程中,我們關心的是許多分子的集合。具有這種聚集物的輕相互作用不一定類似於孤立分子的相互作用。從附近的分子中散射出來的波通常是相互相干的,因此表現出干擾,因爲它們來自同一入射波。
 
9.1.1 粒子(Particles)
 
       在理想氣體中,分子之間不相互影響,因此它們的相對位置是完全隨機和不相關的。雖然這是一個抽象概念,但它是一個正常大氣壓下的相當好的空氣模型。在這種情況下,從不同分子散射的波之間的相位差是隨機的,並且是不斷變化的。因此,散射波是不相干的,它們的能量線性增加,如圖9.3的右圖所示。換句話說,從n個分子散射的總光能是從單個分子散射光的n倍。
        相反,如果分子被緊密地壓縮成遠小於一個波長的簇,那麼每個簇中的散射光波就會處於同相併進行積極性的干涉。這使得散射波能量以二次方的方式疊加起來,如圖9.3左圖所示。 因此,從一小羣n個分子散射出來的光的強度是單個分子散射光的n*n倍,是理想氣體中相同數量分子散射光強度的n倍。這種關係意味着,對於每立方米固定密度的分子,將分子聚集成簇將顯著增加散射光的強度。 使羣簇變大,同時保持整體分子結構密度恆定, 會進一步增加散射光的強度,直到羣簇直徑計變得接近一個光波長。超過這一點,羣簇規模的額外增加將不會進一步增加散射光強度。
        這個過程解釋了爲什麼雲和霧會如此強烈地散射光線。它們都是通過空氣中的水分子聚集成越來越大的團塊凝結形成的。這顯著增加了光散射,即使水分子的總體密度沒有改變。雲渲染將在14.4.2節中討論。
       在討論光散射時,粒子(particles)一詞既指單個分子,也指多分子簇。由於來自直徑小於一個波長的多分子粒子的散射是來自孤立分子的散射的放大(通過相長干涉)版本,它表現出相同的分子變化和波長依賴性。這種類型的散射被稱爲大氣粒子的瑞利散射(Rayleigh scattering)和嵌入固體中的粒子的丁達爾散射(Tyndall scattering)
       當粒子的大小超過一個波長時,散射波在整個粒子上不再是同相的這一事實改變了散射的特性。散射越來越傾向於正向,而波長依賴關係減小,直到所有可見波長的光都均勻散射。這種類型的散射稱爲米氏散射(Mie scattering)。瑞利散射和米散射在第14.1節中有更詳細的介紹。
 
9.1.2 媒介(Media)
 
       另一個重要的例子是光在均勻介質(homogeneous medium)中傳播,均勻介質是充滿均勻間隔的相同分子的體積。分子間距不必像在晶體中那樣是完全規則的。如果液體和非晶固體的成分是純的(所有的分子都是一樣的),並且沒有空隙和氣泡,那麼它們在光學上是均勻的。
       在均勻介質中,散射波排列在一起,因此它們在除傳播原方向以外的所有方向上都具有消極性干擾。當原始波與從單個分子散射出的所有波結合後,除了相速度和外,最終結果與原始波相同(在某些情況下)振幅。最後的波不表現出任何散射——它被消極性干擾有效地抑制住了。
       原始波和新波的相速度之比決定了一種被稱爲折射率(index of refraction,IOR, 或refractive index)的光學性質,用字母n表示。有些介質具有吸收性(absorptive)。它們將部分光能轉化爲熱能,使波的振幅隨距離呈指數衰減。衰減率由衰減指數(attenuation index)定義,衰減指數用希臘字母表示κ(kappa)。n和κ通常隨波長變化。這兩個數字結合在一起,完全定義了介質如何影響給定波長的光, 他們經常合併成一個單一的複數n + iκ,稱爲復折射率(complex index of refraction) 折射率將光相互作用的分子級細節抽象出來,使介質成爲一個連續的體,這就簡單得多了。
       當光的相速度不直接影響外觀時,速度的變化稍後解釋。另一方面,光吸收對視覺有直接的影響,因爲它降低了光的強度,並且可以改變它的顏色(波長變化)。圖9.5展示了一些光吸收的例子。
圖 9.5  圖中四個容器內的液體具有不同的吸收特性。從左到右:清水,石榴汁水,茶和咖啡。
 
       非均勻介質通常可以通過在均勻介質中嵌入散射粒子模擬得到 在均勻介質中抑制散射的消極性干擾是由分子的均勻排列引起的,因此也就產生了散射波。分子分佈的任何局部變化都會打破這種消息性干涉模式,使散射光波得以傳播。這種局部變化可以是不同分子類型的羣簇、氣隙、氣泡或密度變化。在任何情況下,它都將散射光,就像前面討論的部分一樣,散射特性同樣依賴於羣簇大小。 甚至氣體也可以用這種方法來模擬。 “散射粒子”可以認爲是由分子的恆定運動引起的瞬態密度波動 圖9.6展示了一些光散射的例子。
圖 9.6  從左到右:水,幾滴牛奶的水,約10%牛奶的水,全脂牛奶,乳白色的玻璃。大多數牛奶的散射粒子都比可見光波長大,所以它的散射主要是無色的,在中間圖像中有一個微弱的藍色。乳白色玻璃中的散射粒子都小於可見光波長,因此散射的藍光比紅光強。由於背景的明暗分離,透射光在左邊更明顯,散射光在右邊更明顯。
 
       散射和吸收都是基於尺度的。在一個小場景中不產生任何可見散射的介質,在大尺度下可能有相當明顯的散射。例如,當在房間裏觀察一杯水時,光在空氣中的散射和在水中的吸收是不可見的。但是,在擴大環境中,這兩種影響都很重要,如圖9.7所示。
        
圖 9.7  左圖顯示,在幾米的距離外,水吸收光,尤其是紅光,非常強。右圖顯示,即使在沒有嚴重污染或大霧的情況下,數英里外的空氣中也有明顯的光線散射。
 
       一般情況下,一種介質的外觀是由吸光和散射的某種組合引起的,如圖9.8所示。散射的程度決定了雲量,高散射造成不透明的外觀。除了一些罕見的例外,如圖9.6中的乳白色玻璃,固體和液體介質中的粒子往往大於一個波長,並會均勻地散射所有可見波長的光。因此,任何顏色的色調通常是由波長的吸收程度引起的。介質的亮度是這兩種現象的結果。 特別是白色,它是高散射和低吸收相結合的結果。
圖 9.8  對光的吸收和散射的不同組合得出不同外觀。
 
9.1.3 表面(Surfaces)
 
       從光學角度看,物體表面是分割具有不同折射率的物體的二維界面。在典型的渲染情況下,外部空間包含空氣,折射率約爲1.003爲簡單起見,通常假設爲1。內部的折射率取決於物體的構成物質。
       當光波擊中一個表面時,該表面的兩個方面對結果有重要影響:兩邊的物質和表面的幾何形狀。我們將從物質方面開始,假設最簡單的表面幾何,一個完美的平面。“外”表示折射率(入射波的入射方向)記爲n1,“內部”折射率( 波通過表面後會在哪裏傳播)記爲n2。
      分離不同折射率的平面是一種特殊的不連續性,它以特定的方式散射光。 邊界條件要求平行於表面的電場分量是連續的。換句話說,電場矢量到平面的投影必須在平面的任意一邊匹配。這有幾個含義:
         1、 在表面上,散射波的波峯必須與入射波的波峯或波谷一致。這就限制了散射波只能向兩個可能的方向傳播,一個是繼續向表面傳播,另一個是遠離表面傳播。第一種是透射波(transmitted wave),第二種是反射波(reflected wave)
         2、 散射波的頻率必須與入射波相同。在這裏假設的是一個單色波,但是我們討論的原理可以應用於任何普通波,首先把它分解成各種單色成分。
        3、 當光波從一種介質傳播到另一種介質時,相速度——即光波在介質中傳播的速度——與相關的反射率(n1 / n2)成正比。由於頻率是固定的,波長也成 (n1 /n2) 比例地變化。
         最終結果如圖9.9所示。 反射波和入射波方向和表面法線有相同的角θi。 透射波方向彎曲(折射)一個角度θt,和θi有以下關係:
這個折射方程被稱爲斯涅爾定律(Snell' law)。它用於全局折射效應
圖 9.9  入射到平面上的光波,其折射率爲n1和n2。左圖顯示了從左上方進來的入射波的側視圖。紅色波段的強度表示波的相位。波在次表面的間距成(n1/n2)比例的改變,本例中是0.5。相位沿表面排列,因此間隔的變化使透射波的方向發生彎曲(折射)。三角形的構造說明了斯涅爾定律的由來。爲了清晰,右上圖單獨展示了反射波。 它與入射波有相同的波間距,因此它的方向與表面法線有相同的角度。右下圖展示了波的方向向量。
 
        雖然折射通常與透明材料有關,如玻璃和水晶,但它也發生在不透明物體的表面。當折射發生在不透明物體上時,光線在物體內部經歷散射和吸收。光與物體的介質相互作用,就像與圖9.8中各種液體一樣。就金屬而言,其內部含有許多自由電子(電子不與分子結合),這些電子“吸收”折射的光能,並將其重定向入反射波。這就是金屬具有高吸收率和高反射率的原因。
        我們討論過的表面折射現象——反射和折射——要求折射率發生突變,發生在小於一個波長的距離上。折射率更平緩的變化不會使光分裂,而是使光的路徑彎曲。當空氣密度隨溫度變化時,如海市蜃樓和熱變形,通常可以看到這種效應。如圖9.10所示。
圖 9.10  由於折射率的逐漸變化引起光路彎曲的一個例子,本例是因爲溫度變化引起的。
 
        如果一個物體沉浸在具有相同折射率的物質中,那麼即使它有明確的邊界,也不會有可見的表面在沒有折射率變化的情況下,反射和折射是不可能發生的。圖9.11就是一個例子。
圖 9.11  這些裝飾珠子的折射率和水一樣。它們在水面上有一個可見的表面是由於它們的折射率與空氣的折射率不同。而在水的下面,珠子表面兩側的折射率是相同的,所以表面是看不見的。珠子本身是可見的是因爲它們對顏色的吸收。
 
        到目前爲止,我們主要研究的是表面兩側物質的作用。現在我們將討論影響表面外觀的另一個重要因素:幾何。嚴格地說,完全平坦的平面是不可能的。每個表面都有某種不規則性,即使只是組成表面的單個原子。然而,表面不規則性比波長小得多,對光線沒有影響,比波長大得多的表面不規則性有效地使表面傾斜,但不影響其局部平坦性。 只有波長在1-100範圍內的不規則現象纔會使表面表現出與平面不同的行爲,這種現象稱爲衍射(diffraction),我們將在9.11節中進一步討論。
        在渲染中,我們通常使用幾何光學(geometrical optics),它忽略了波的影響,如干涉和衍射。這相當於假設所有不規則表面都要麼小於要麼大於一個波長。在幾何光學中,光被模擬爲射線而不是波。在光線與一個表面相交的點上,這個表面局部地被視爲一個平面。圖9.9右下角的示意圖可以看作是反射和折射的幾何光學圖像,與圖中其他部分的波形圖像形成對比。
         正如我們前面提到的,表面的不規則性比波長大得多,改變了表面的局部方向。當這些不規則性太小而無法單獨呈現時——換句話說,比像素還小——我們將其稱爲微幾何(microgeometry)。反射和折射的方向取決於表面法線。微幾何的作用是改變表面上不同點的法線,從而改變反射和折射光線的方向。
         即使表面上的每個特定點只反射一個方向的光,每個像素也覆蓋了許多向不同方向反射光線的表面點。外觀是由所有不同反射方向的聚合結果驅動的。圖9.12展示了兩個表面的例子,這兩個表面在宏觀尺度上具有相似的形狀,但在微觀幾何上卻有顯著的不同。
圖 9.12  左圖中有兩個表面的照片,右邊是它們對應的微觀結構。上面的表面的微觀幾何形狀稍微粗糙。入射光線照射在角度有些不同的表面點上,反射在一個狹窄的錐狀方向上。可見效果是反射的輕微模糊。而下面的表面的微觀幾何形狀更爲粗糙。入射光線擊中的表面點的角度明顯不同,反射光以一個寬錐狀向外擴散,造成更模糊的反射。
 
        對於渲染,不是明確地建模微觀幾何,我們對待它的組織和表面有一個隨機分佈的微觀結構的法線。因此,我們將表面建模爲反射(和折射)在連續的方向擴展。這種擴展的寬度,以及反射和折射細節的模糊程度,取決於微幾何法向量的統計方差——換句話說,表面微觀粗糙度(microscale roughness)。如圖9.13所示。
圖 9.13  從宏觀角度看,表面可以認爲在多個方向上對光線進行反射和折射。
 
9.1.4 次表面散射(Subsurface Scattering)
 
       折射光會繼續在物體的內部相互作用。 正如前面提到的,金屬反射大部分入射光,剩餘的則被並迅速吸收掉。相反,非金屬表現出各種各樣的散射和吸收行爲,和 圖9.8中所示的液體杯相似。 低散射低吸收的材料是透明的,任何折射的光都能穿透整個物體。在5.5節中討論了在沒有折射的情況下繪製這些材料的簡單方法,折射將在14.5.2節中詳細介紹。在本章中,我們將關注不透明的物體,其中透射光經過多次散射和吸收,直到其中一些被重新發射回表面外。參見圖9.14。
圖 9.14  折射光線在材質中傳播時會被吸收。在這個例子中,吸收的大部分的是較長的波長,留下的主要是短波長的藍光。此外,它會在材質內粒子處發生散射。最終,一些折射的光線被散射出表面,就像從表面各個方向射出的藍色箭頭所示那樣。
 
        這種次表面散射(subsurface-scattered)光的入射點與出表面的距離各不相同。進出距離的分佈取決於材質中散射粒子的密度和性質。這些距離和着色尺度(像素的大小,或者着色樣本之間的距離)之間的關係很重要。如果入口到出口的距離比着色尺度小,出於着色目的,可以假設它們是零。這樣次表面散射與表面反射結合成一個局部着色模型, 認爲在某一點發出的光只依賴於同一點處的入射光。然而,由於次表面散射光與表面反射光有明顯不同的外觀,因此可以很容易將它們劃分爲單獨的着色項。高光項(specular term)模擬表面反射漫反射項(diffuse term)模擬局部次表面散射(local subsurface scattering)
        如果入口到出口的距離比着色尺度大,那麼就需要專門的渲染技術來捕捉光線從一個點進入表面然後從另一個點離開表面的視覺效果。這些全局次表面散射(global subsurface scattering)技術將在14.6節中詳細介紹。局部和全局次表面散射的區別如圖9.15所示。
圖 9.15 左圖中展示的是渲染中材質的次表面散射現象。展示了兩種不同的採樣大小,黃色和紫色。大的黃色圓圈代表一個單一的着色樣本,覆蓋面積大於次表面散射距離。因此,這些距離可以被忽略,使得次表面散射可以作爲局部着色模型中的漫反射項,如右圖所示。如果我們靠近這個表面,着色的樣本區域就會變小,如圖中紫色的圓圈。 與着色樣本覆蓋的區域相比,次表面散射距離算大的。這時就需要全局技術從這些樣本中生成逼真的圖像。 
 
       需要注意,局部和全局次表面散射技術模擬的是完全相同的物理現象。 每種情況的最佳選擇不僅取決於材質的屬性,而且還取決於觀察的尺度。 例如,當渲染一個正在玩塑料玩具的孩子的場景時,可能需要全局技術來精確地渲染孩子的皮膚,而玩具只需要局部漫反射着色模型就足夠了。這是因爲皮膚的散射距離比塑料的要大得多。然而,如果相機距離足夠遠,皮膚散射距離將小於一個像素,局部着色模型對兒童和玩具來說都是準確的。 相反,在一個極端的特寫鏡頭中,塑料有着明顯的非局部次表面散射,玩具將需要全局技術來進行準確渲染。

9.2 攝像機(The Camera)

       如8.1.1節所述,在渲染中,需要計算從着色表面點到攝像機位置的輻射率。這模擬了成像系統的一個簡化模型,如膠片相機、數碼相機或人眼。

       這種系統包含一個傳感器表面,由許多獨立的小傳感器組成的。像眼睛裏的視杆細胞和視錐細胞,數碼相機裏的光電二極管,或者膠片上的染色顆粒。每個傳感器檢測其表面的輻照度值,然後生成一個顏色信號。輻照度傳感器本身不能產生圖像,因爲它們平均了所有入射方向的光線。出於這個原因,一個完整的成像系統還需要包括一個帶有一個小孔徑(開口)的暗箱,它限制了光線進入和照射到傳感器的方向。 置於光圈處的透鏡使光線聚焦,因此每個傳感器只接收來自一小組入射方向的光線。暗箱、孔徑和透鏡的綜合作用使得傳感器具有方向性(directionally specific)。 這些傳感器測量的是平均輻射率,而不是測量平均輻照度——正如我們在8.1.1節中看到的,它量化了來自各個方向的光通量的表面密度,它量化了一束光的亮度和顏色。

        渲染模擬了一個特別簡單的成像傳感器,稱爲針孔相機,如圖9.16的上圖所示。針孔相機的光圈非常小——在理想情況下,一個零大小的數學點——沒有透鏡。點孔徑限制傳感器表面上的每個點只收集一束光線,離散傳感器收集一條窄錐狀光線,其基座覆蓋傳感器表面,其頂點位於孔徑處。渲染系統以一種稍微不同(但相當)的方式模擬針孔相機,如圖的9,16中間圖所示。 針孔孔徑的位置由點c表示,通常稱爲“攝像機位置”或“眼睛位置”。這一點也是透視轉換的投影中心。

        渲染時,每個着色樣本對應於一個射線,對應於傳感器表面上的一個採樣點。反走樣的過程可以解釋爲在每個離散的傳感器表面上重建收集的信號。然而,由於渲染不受物理傳感器的限制,我們可以更一般地對待這個過程,從離散的樣本重建出一個連續的圖像信號。

        雖然已經構建出了針孔相機,但對於實際使用的大多數相機或人眼來說,它們都是糟糕的模型。使用透鏡的成像系統模型如圖9.16的下圖所示。透鏡允許使用更大的光圈,這會增加成像系統收集的光量。但是它也導致相機的景深有限的,物體太近或太遠就會模糊。

圖 9.16  每個相機模型都包含一組像素傳感器。實心線將傳感器從場景收集的光線綁定在一起。每個圖中的嵌入圖像表示的是由像素傳感器上的單個樣本點收集到的光線。上圖是一個針孔相機,中間圖是一個典型的帶有相機點c的針孔相機的渲染系統模型,下圖是一個帶有鏡頭的更加真實的相機。聚焦在紅球上,其他兩個球在焦點之外。

 

        透鏡除了限制景深之外還有一個額外的效果。即使是在完美聚焦的點上,每個傳感器的位置接收到一組錐形的光線。理想的模型中,每個着色樣本代表一個單一的觀察光線,這有時會引入數學奇異點、數值不穩定性或視覺走樣。記住在渲染圖像時,物理模型有時可以幫助我們識別和解決這些問題。

9.3 雙向反射分佈函數(Bidirectional Reflectance Distribution Function,BRDF)

        最終,基於物理的渲染歸結爲計算沿一些視線進入相機的輻射率。 使用8.1.1節介紹的符號,對於給定的視圖射線,我們需要計算Li(c,−v),其中c爲攝像機位置,−v爲沿視線的方向。 我們用-v表示,因爲有兩種表示法。首先,Li()中的方向向量總是指向遠離給定點的地方,在本例中,這個點就是攝像機的位置。第二,視線向量v總是指向攝像機。

       本章我們假設沒有參與介質存在,因此進入相機的輻射率等於沿着相機方向最近物體表面的輻射率:

其中, p是視線與最近物體表面的交點。

       根據公式9.2,我們的新目標是計算Lo(p,v)。 本章我們不討論透明度和全局次表面散射的情況。 換句話說,我們關注的是局部反射率現象。這些現象包括表面反射和局部次表面散射,僅依賴入射光方向 l 和出射光方向v。局部反射率量化爲雙向反射率分佈函數(BRDF),記爲f(l,v)。

       現實世界(以及渲染場景)中的對象的表面很少具有一致的材質屬性。即使是由單一材料組成的物體,例如銀質雕像,也會有劃痕、污點、污漬和其他變化,導致其視覺屬性從一個表面點到下一個表面點發生變化。 從技術上講,捕捉基於空間位置的BRDF變化的函數稱爲空間變化BRDF函數 (spatially varying BRDF,SVBRDF)或空間BRDF (spatial BRDF,SBRDF)。然而,這種情況在實踐中太過普遍,以至更短的術語BRDF經常被使用,並且隱含地假定取決於表面位置。

       一般情況下,BRDF是四個標量變量的函數,各向同性(isotropic)BRDFs(實際是物體表面BRDF函數模型的一個集合)是一種重要的特殊情況。當入射方向和出射方向圍繞表面法線旋轉時,這樣的BRDFs保持不變,它們之間保持相同的相對角度。 如圖9.17所示。 各向同性BRDFs是三個標量變量的函數, 因爲只有一個在光線和相機之間的旋轉角 φ是必要的。 這意味着,如果將均勻的各向同性材質放在轉盤上並旋轉,在給定一個固定的光線和攝像機的情況下,它在所有旋轉角度下看起來都是一樣的。

圖 9.17  BRDF。方位角度φi和φo對於一個給定的切向量t。相對方位角φ,使用各向同性代替 φi和φo,並不需要參考切向量。

        因爲我們忽略了熒光和磷光等現象,我們可以假設入射光反射後波長沒有變化。反射光的數量可以根據波長變化,可以有兩種方式建模。要麼將波長作爲BRDF的附加輸入變量處理,要麼將BRDF作爲一個返回頻譜分佈的值。第一種方法有時用於離線渲染,而實時渲染則總是使用第二種方法。 由於實時渲染器將光譜分佈表示爲RGB三元組,這可以簡單認爲BRDF返回一個RGB值。

        爲了計算lLo(p,v),我們將BRDF加入到反射率方程(reflectance equation)中:

l∈Ω下標的積分符號意味着平面上面的單位半球表面。我們用dl表示l周圍的微分立體角

        爲簡潔起見,我們將省略Li()Lo()中的表面點p,反射率方程則爲:

假設

則有:

        BRDF只在光線和視圖方向都在表面以上的情況纔有意義。 但是在曲面下的視圖方向呢?換句話說,在點積n·v爲負的情況下? 理論上,這種情況永遠不會發生。 但在實際應用中可能會出現這種情況。 通過將n·v鉗制到0或使用其絕對值,可以避免視圖方向在次表面的BRDF,但這兩種方法都可能導致僞影。

        物理定律對任何BRDF施加兩個約束。第一個約束條件是基於赫爾姆霍茲互反律,即輸入和輸出角度可切換,函數值相同:

        在實踐中,BRDFs在渲染中經常違反基於赫爾姆霍茲互反律,除非離線渲染算法特別需要互易性,例如雙向路徑跟蹤。

        第二個約束是能量守恆——輸出的能量不能大於輸入的能量(不包括髮光的表面,這是一種特殊情況)。離線渲染算法例如路徑追蹤要求能量守恆,確保收斂。 對於實時渲染,精確的能量守恆是不必要的,但是近似的能量守恆是重要的。用BRDF渲染的表面如果太亮,明顯違背了能量守恆,看起來不現實。

         定向半球反射率(directional-hemispherical reflectance)R(l)是與BRDF相關的函數。 它可以用來測量BRDF的節能程度。 儘管它的名字有些令人生畏,但定向半球反射率是一個簡單的概念。 它測量的是來自某個方向的光的反射量,半球表面法線周圍的任何一個出射方向的數量。本質上,它測量的是給定輸入方向的能量損失。該函數的輸入是輸入方向向量l,定義如下:

        類似,但在某種意義上功能相反,半球定向反射率(hemispherical-directional reflectance)R(v)的定義爲:

如果BRDF是倒數的,則定向半球反射率和半球定向反射率相等,可以用相同的函數來計算。定向反射率(directional albedo)在這兩種反射率互換使用的情況下可以作爲一個綜合術語。

       由於能量守恆,定向半球反射率R(l)的值必須始終在[0,1]範圍內。反射值爲0表示入射光全部被吸收或以其他方式損失。如果所有的光都被反射,反射率將是1。在大多數情況下,它會在這兩個值之間。與BRDF一樣,R(l)的值也隨着波長的變化而變化,因此出於渲染的目的,它用一個RGB向量表示。由於每個組件(紅色、綠色和藍色)都被限制在[0,1]範圍內,因此可以將R(l)的值看作一個簡單的顏色值。 注意,此限制不適用於BRDF的值。作爲一個分佈函數,如果描述的分佈高度不均勻,BRDF可以在某些方向上具有任意高的值。BRDF節能的要求是R(l)對於所有l的可能值都必須不大於1。

        儘管它很簡單, Lambertian BRDF經常在實時繪製來表示局部次表面散射 (雖然它正在被更精確的模型所取代)。 Lambertian曲面的定向半球反射率也是一個常數。 f(l,v)爲一個常數值時,對方程9.8的求值,得到了作爲BRDF函數的定向半球反射率:

 Lambertian BRDF的恆定的反射率值傳通常稱爲漫射顏色(diffuse color) Cdiff 或反射率(albedo) ρ。 在這一章中,爲了強調與次表面散射的聯繫,我們將把這個量稱爲次表面反射率ρss。

因子1 /π是由於一個餘弦因子在半球的積分值是π。因此這個因子經常出現在BRDFs中。

        有一種理解BRDF方法是在保持輸入方向不變的情況下將其可視化。如圖9.18所示。給定一個入射光線的方向,BRDFs的值是否顯示出所有的出射方向。 在交點周圍的球形部分是漫反射部分,因爲出射光在任何方向上都有相同的輻射率。橢球片是鏡面高光波瓣(specular lobe)。當然,這些波瓣是在入射光的反射方向上,波瓣的厚度對應了反射的模糊性。根據互易性原理,這些相同的可視化也可以被認爲是每一個不同的入射光方向對一個出射光方向的貢獻。

圖 9.18  BRDFs的例子。每個圖形右側的綠色實線是入射光方向,綠色虛線和白色線爲理想的反射方向。在上面一行中,左邊的圖是Lambertian BRDF(一個簡單的半球)。中間圖是在Lambertian BRDF的基礎上添加了Blinn-Phong高光。右邊的圖展示的是Cook-Torrance BRDF。注意高光在反射方向不是最強的。在底部一行中,左圖展示了Ward的各向異性模型的一個特寫。 在這種情況下,鏡面波瓣是傾斜的。中間的圖展示了Hapke/Lommel-Seeliger “lunar surface” BRDF,具有較強的後向反射。右圖是Lommel-Seeliger散射,即灰塵表面將光散射到掠射角。

9.4 光照(Illumination)

        反射率方程(方程9.4)中的Li(l)項表示從場景的其他部分射向着色表面點的光。全局光照算法通過模擬光在整個場景中的傳播和反射來計算Li(l)。這些算法使用渲染方程(rendering equation),其中反射方程是一個特例。在局部光照算法中,給出算Li(l),並不需要計算。

       雖然時間和平行光是非物理抽象,但它們近似爲物理光源。這樣的推導是非常重要的,因爲我們可以將這些光線合併到一個基於物理的渲染框架中,並且確信我們理解了其中的錯誤。

       取一個小的遙遠的區域光,定義lc爲指向其中心的向量。定義光的顏色Clight,即白色Lambertian表面朝向光的反射亮度(n = lc)。這是一個直觀的對創作,因爲光的顏色直接對應於它的視覺效果。

       有了這些定義,平行光可以看作爲將區域光的大小縮小到零的極限情況,同時保持Clight的值。在這種情況下,反射率方程(方程9.4)中的積分被簡化爲一個單個的BRDF計算,大大降低了計算成本:

點積(n·l)通常被鉗制爲零,有:

注意第1.2節中介紹的x+符號,它表示負值被鉗制爲零。

        精準光源也可以同樣處理。唯一的區別是,區域光不需要是遠距離的,而Clight會隨着距離平方反比而衰減,如公式5.11所示。在多個光源情況下,對公式9.12進行多次計算,計算結果求和:

       方程9.14的因子π抵消了BRDFs(如公式9.11)經常出現的因子1/π。這個抵消操作將除法操作移出了着色器,並使着色方程更易於閱讀。然而,在將學術論文中的BRDFs應用於實時着色方程時,必須小心謹慎。通常,BRDF在使用前需要乘以π。

9.5 菲涅爾反射率(Fresnel Reflectance)

        物體的表面是周圍介質(通常是空氣)和物體材質之間的交界面。光與兩種物質之間的平面的相互作用遵循由Augustin-Jean Fresnel提出的菲涅耳方程(Fresnel Equations)。菲涅耳方程要求平面界面遵循幾何光學的假設。換句話說,表面被假定在1個波長和100個波長之間沒有任何不規則的大小。比這個範圍小的不規則大小對光線沒有影響,比這個範圍大的不規則大小也對光線無影響。 較大的不規則能有效地傾斜物體宏觀表面,但不影響其局部平坦性。

        入射在平面上的光分爲反射部分和折射部分。反射光的方向(由矢量ri表示)與表面法線的角度和表面法線n與入射光方向l相同的角度(θi)。我可以用n和l計算出反射向量ri:

如圖9.19所示。 反射的光量(只有入射光線的一部分)可以由菲涅耳反射率(Fresnel reflectance)F表示,F取決於入射角θi。

.

圖 9.19  在平面上的反射。光向量l在法線n周圍發生反射,從而產生ri。首先,l投影到n上,我們得到了法線的一個縮放版本:(n·l)n。然後我們對l求負,加上兩倍的投影向量得到反射向量。

        如第9.1.3節所述,反射和折射受平面兩側兩種物質的反射指數影響。我們將繼續使用9.1.3中用到的符號。數值n1爲入射光和反射光傳播的“界面上部分”的折射率,數值n2爲折射光傳播的“界面下”物質的折射率。

        菲涅耳方程描述的是F對θ,n1, n2的依賴。我們將描述這些方程的重要特徵,而不是介紹它們本身,它們有些複雜。

9.5.1 外反射(External Reflection)

        外反射(External reflection)是指n1<n2。換句話說, 光線來源於折射率較低的那一面。通常,這一面是空氣,折射率約爲1.003。爲了簡單起見,我們假設n1 = 1。相反的轉變,從物體到空氣,被稱爲內部反射(internal reflection),稍後將在9.5.3節中討論。

        對於一個給定的物質,菲涅耳方程可以理解爲一個反射率函數F(θi),只依賴了入射光角度。原則上,F(θi)的值在可見光譜是連續變化的。出於渲染目的,它的值被當作一個RGB向量。函數F(θi)有以下特徵:

        · 當θi = 0°,光線垂直於表面(l = n),F(θi)的值F0可以被認爲是物質的特有的反射顏色。θi = 0°這種情況被稱爲法線入射(normal incidence)。

        · 隨着θi的增加,光線射向表面的掠射角逐漸增加,F(θi)的貢獻就會越明顯,在θi= 90◦的時候達到1(白色)。

        圖9.20展示了幾種物質的F(θi)函數的可視化形式,。曲線是高度非線性的,它們幾乎沒有改變,直到我θ= 75◦左右,然後快速到1。從F0到1的增長大部分是單調的,儘管一些物質(如圖9.20中的鋁)在變白之前有輕微的下降。

圖 9.20  涅耳反射率F用於三種物質的外反射:玻璃、銅和鋁(從左到右)。最上面一行是F作爲波長和入射角的函數的三維圖。第二行展示的是每個入射角的F的光譜值轉換爲RGB,並展示了每個顏色通道的單獨曲線。由於玻璃的菲涅耳反射率是無色的,所以玻璃的曲線重合。在第三行,R、G和B展示的是入射角的正弦值,解釋了圖9.21所示的透視收縮。 第三行中的條帶使用相同的x軸,以顏色顯示RGB值。

       在鏡面反射中,出射角或視角的大小和入射角一樣。 這意味着入射光線以掠射角到達表面——隨着θi接近90°,同樣會以掠射角抵達眼睛。 因此,反射率的增加主要體現在物體的邊緣。此外,從相機的角度來看,表面反射率增加最強的部分透視收縮了,因此它們佔據的像素個數相對較小。爲了展示菲涅耳曲線不同部分比例的視覺感受,圖9.22展示了菲涅耳反射圖和顏色條紋。圖9.20的下半部分使用的是Sin(θi)而不是直接對θi。圖9.21說明了爲什麼sin(θi)是一個合適的選擇。

圖 9.21  斜着遠離眼睛的表面是透視收縮的。根據v和n之間夾角的正弦值,投影面上的點的透視收縮是一致的(對於鏡面反射來說,這與入射角相同)。因此,在圖9.20和圖9.22中,菲涅爾反射率與入射角的正弦值相對應。

圖 9.22  Schlick的菲涅耳反射率近似值與來自六種物質的外反射的正確值進行比較。上排三種物質和圖9.20中一樣:玻璃、銅和鋁(從左至右)。下排的三種物質分別是鉻、鐵和鋅。每種物質都有一個RGB曲線圖,實線表示完整的菲涅耳方程,虛線表示Schlick的近似。每條曲線下面的上面的顏色條展示的是完整菲涅耳方程的結果,而下面的顏色條展示的是Schlick近似的結果。

       從這一點,我們通常會使用符號F(n, l)而不是F(θi)表示菲涅耳函數,爲了強調相關的向量。θi是向量n和l的夾角。

       在掠射角處反射率的增加通常在渲染書刊中被稱爲菲涅爾效應(Fresnel effect,在其他領域,這個術語在無線電波傳輸中有着不同的含義)。 你可以通過一個簡單的實驗看到菲涅耳效應。拿起智能手機,坐在一個明亮的區域,比如電腦顯示器前。在不開機的情況下,首先將手機貼近胸部,低頭看手機,並將手機稍微調整角度,讓手機的屏幕反射到顯示器上。手機屏幕上應該有一個顯示器的相對微弱的反射。這是因爲玻璃的法線入射反射率很低。 現在把智能手機舉起來,讓它大致在你的眼睛和顯示器之間,然後再次調整它的屏幕角度來反射顯示器。 這時候顯示器在手機屏幕上的反射應該幾乎和顯示器本身一樣亮。

        除了它們的複雜性,菲涅耳方程還有其他的特性,這使得在渲染中很難直接使用它們。它們需要在可見光譜上採樣折射率值,這些值可能是複數。圖9.20中的曲線暗示了一種基於特徵的高光顏色f0的簡單方法。Schlick給出了菲涅耳反射率的近似值:

這個函數是在白色和F0之間進行RGB插值。儘管很簡單,但還是相當準確的。

       當使用Schlick近似時,F0是控制菲涅耳反射率的唯一參數。這很方便,因爲F0有一個良好的有效值範圍,[0,1],使用標準的顏色選擇接口很容易進行設置,還可以使用爲顏色設計的紋理格式進行紋理化。此外,F0的參考值可用於許多實際材料中。折射率也可以用來計算F0。它通常假設n1 = 1,對空氣折射率的近似值,用n代替n2來表示物體的折射率。這種簡化給出了以下方程:

這個方程甚至適用於複數折射率(如金屬折射率)。折射率在可見光譜上有顯著變化的時候,精確計算F0的RGB值首先要求計算F0需在波長的密集處進行採樣,然後使用8.1.3節中描述的方法將得到的光譜向量轉換爲RGB值。

       在一些應用中, Schlick近似更一般的形式爲:

這規定了顏色需要控制在90◦菲涅爾曲線的顏色範圍內,“銳度”同樣如此。這種更一般的形式的使用通常是爲了增加更多的藝術控制,但在某些情況下,它也可以幫助匹配物理現實。正如上面所說的,修改功率可以使某些材質變得更爲適合。此外,將F90設置爲白色以外的顏色可以幫助匹配菲涅耳方程不能很好描述的材質,比如表面覆蓋着細微塵埃和單個波長大小的顆粒。

9.5.2 常用的菲涅爾反射率(Typical Fresnel Reflectance Values)

        就其光學性質而言,物質可分爲三大類。有電介質(dielectric),它是絕緣體;金屬是導體;半導體,它的性質介於介電介質和金屬之間。

電介質的菲涅爾反射率(Fresnel Reflectance Values For Dielectrics)

        日常生活中遇到的大多數材質都是電介質——玻璃、皮膚、木頭、頭髮、皮革、塑料、石頭和混凝土等。水也是電介質,但日常生活中人們知道水是導電的,這種導電是由於水中摻雜了各種雜質。電介質的F0值相當低的——通常爲0.06或更低。這種低反射率在垂直入射時使得電介質的菲涅爾效應尤其明顯。電介質的光學性質在可見光譜上很少有很大的變化,這導致反射值是無色的。幾種常用介質的F0值如表9.1所示。這些值是標量,而不是RGB,因爲對於這些材質,RGB通道沒有顯著差異。爲了方便起見,表9.1包括線性值和用sRGB傳遞函數編碼的8位值(這種格式通常在紋理渲染應用程序中使用)。

表 9.1  來自各種電介質的外反射的F0值。每個值都給出了一個線性數字、一個紋理值(非線性編碼的8位無符號整數)和一個顏色樣本。如果給定一個值範圍,那麼顏色樣本就位於該範圍的中。回想一下高光色。例如,寶石通常有鮮豔的顏色,但這些顏色是由於物質內部的吸收而產生的,與它們的菲涅耳反射率無關。

       其他電介質的F0值可以從表中類似的物質中推斷出來。對於未知電介質,0.04是一個合理的默認值,與大多數常見材質相差不大。

       光一旦進入電介質,就可能被進一步散射或吸收。

金屬的菲涅爾反射率(Fresnel Reflectance Values for Metals)

       金屬的F0值很高——幾乎總是大於或等於0.5。有些金屬的光學性質在可見光譜範圍內變化很大,從而產生有色反射率值。幾種金屬的F0值如表9.2所示。

       與表9.1類似,表9.2有線性值和用於紋理的8位sRGB編碼值。然而,這裏我們給出了RGB值,因爲許多金屬都產生有色菲涅耳反射率。這些RGB值是使用sRGB(和Rec. 709)三原色和白點定義的。黃金的F0有些不同尋常。它有最強烈的顏色,紅色通道值略高於1(剛好在sRGB/Rec.709之外),並且藍色通道值特別低(表9.2中唯一顯著低於0.5)。它也是最亮的金屬之一 ,從它在表格中的位置可以看出,表格是按照亮度的增加來排序的。黃金的明亮和強烈的顏色反射率可能有助於其在歷史上獨特的文化和經濟意義。

        回想一下,金屬會立即吸收任何透射光,因此它們不會表現出任何次表面散射或透明性。金屬的所有可見顏色都來自於F0。

表 9.2  不同金屬(和一種合金)的外反射的F0值,按亮度增加進行排序。黃金的實際紅色值稍微超出了sRGB的範圍。所有值都是經過鉗制後的值。

半導體的菲涅爾反射率(Fresnel Reflectance Values For Semiconductors)

        正如我們所料,半導體的F0值介於最亮的電介質和最暗的金屬之間,如表9.3所示。實際中很少需要渲染這些物質,因爲大多數渲染場景並沒有散落的晶體硅塊。在實際應用中,應該避免F0值在0.2和0.45的範圍之間,除非您有意嘗試一些異域的或者不寫實的材質。

表 9.3  表示半導體(晶體硅)與亮電介質(金剛石)和暗金屬(鈦)的F0值之間的比較。

水的菲涅爾反射率(Fresnel Reflectance Values in Water)

        在討論外反射率時,我們假設渲染表面被空氣包圍。如果不是這樣呢,反射率就會改變,因爲它取決於界面兩側物質的折射率的比值。如果我們不能再假設n1=1,那麼我們需要把方程9.17中的n換成對應的折射率之比,n1 / n2。這產生了以下更一般的方程:

最常遇到n1不等於1的情況可能是在渲染水下場景的時候。由於水的折射率大約是空氣折射率的1.33倍,所以水下的F0值是不同的。這種效應在電介質中比在金屬中更明顯,如表9.4所示。

表 9.4  不同物質在空氣和水中的F0值的比較。從9.19式可以看出,折射率接近於水的電介質受到的影響最大。相比之下,金屬幾乎不受影響。

參數化菲涅爾值(Parameterizing Fresnel Values)

       一個常用的參數化組合是:高光顏色F0和漫反射顏色ρss的組合。 這種參數化利用了這樣一種觀察結果:金屬沒有漫反射顏色,電介質的F0是一組有限的可能值,它包括一個RGB表面顏色Csurf和一個標量參數m,稱爲“金屬”或“金屬度”。“如果m = 1,那麼F0設爲Csurf,ρss被設置爲黑色。如果m = 0,那麼F0設置爲電介質的值(常數或由一個額外的參數控制),ρss設置爲Csurf。

        使用金屬度參數化有一些缺點。它不能表示某些類型的材質,例如塗覆了電介質。在金屬和電介質的邊界處可能會出現瑕疵。

        一些實時應用程序中使用了一個參數化技巧:除了特殊的抗反射塗層外,沒有任何材質的F0值低於0.02。這個技巧是用來抑制表面區域的高光,代表空洞或空隙。不是使用一個單獨的高光遮蔽紋理,F0值低於0.02被用來“關閉”菲涅爾邊緣亮度。該技術首先由Schuler提出,並用於Unreal虛幻和Frostbite凍傷引擎。

9.5.3 內反射

       雖然外反射在渲染中更常見,但內反射有時也很重要。內反射發生在n1>n2時。換句話說,當光在一個透明物體內部傳播,並“從內部”遇到該物體的表面時,就會發生內反射。參見圖9.23。

圖 9.23 內反射發生在n1>n2時的表面處。

        菲涅爾方程是對稱的, 在此意義上,入射向量和透射向量可以互換,反射率保持不變。結合斯涅爾定律,這種對稱意味着F(θi)內反射曲線將類似於一個“壓縮”版本的外反射曲線。 兩種情況下F0的值相同,內反射曲線在θc爲90◦時達到完美反射。如圖9.24所示,從圖中還可以看出,在內反射的情況下,平均反射率要高一些。例如,這就是爲什麼氣泡在水下具有更高反光(銀色外觀)。

圖 9.24  玻璃-空氣界面處內外反射率曲線的比較。 內部反射曲線在臨界角θc處趨於1.0。

        內反射只發生在電介質中,因爲金屬和半導體能快速吸收在其內部傳播的任何光。由於電介質具有實數折射率,由折射率或由F0計算臨界角度很簡單:

公式9.16所示的Schlick近似對於外反射是正確的。 它也可用於內反射,用θt替代θi。

9.6 微觀幾何(Microgeometry)

       正如我們在前面的9.1.3節中所討論的,比一個像素小得多的不規則表面不可能被明確地建模,因此BRDF轉而在統計上對它們的聚合效應建模。現在我們繼續討論幾何光學領域,假定這些不規則性表面要麼小於一個波長(對光的行爲沒有影響),要麼大得多。

       每個可見表面點都包含許多微表面法線,將反射光反射到不同的方向。由於單個微表面的方向是隨機的,所以以統計分佈建模是有意義的。對於大多數表面,微觀幾何表面法線的分佈是連續的,在宏觀表面法線處有一個強烈的峯值。這種分佈的“緊密性”是由表面粗糙度決定的。表面越粗糙,微幾何法線就越“分散”。

       增加微觀粗糙度得到的可見效果要比使用反射的環境細節更加模糊。在越小越明亮的光源下,這種模糊的效果更廣泛和高光也更暗。來自粗糙表面的光線會變暗,因爲光能被分散到更寬的錐狀方向上了。這一現象可以在    圖9.12中看到。

       圖9.25展示了可視反射率是如何從單個微表面細節的聚合反射產生的。這一系列的圖像中,凸起尺度不斷減小,直到最後一張圖像中的凸起比單個像素都小得多。

圖 9.25  從可見的細節逐漸過渡到微觀尺度。圖像順序從左上到右下。表面形狀和光照是恆定的。只是表面細節的尺度發生了變化。

        對於大多數表面,微表面法線的分佈是各向同性的(isotropic),這意味着它是旋轉對稱的,缺乏任何固有的方向性。其它具有微觀結構的表面是各向異性的(anisotropic)。這樣的表面具有各向異性的表面法線分佈,導致反射和高光的方向模糊。見圖9.26。

圖 9.26  左圖是一個各向異性的表面(拉絲金屬)。注意反射的方向模糊了。右圖是一張類似表面的顯微照片。注意細節的方向。

        雖然擁有多個表面法線是微觀幾何對反射率的主要影響,但其他影響也很重要。陰影(Shadowing)是指光源被微觀的表面細節所遮擋,如圖9.27左圖所示。掩蔽(MsKing),一些面片在攝像機前隱藏了其他的一些面片,如圖9.27中間圖所示。

        

圖 9.27  微觀結構的幾何效應。左圖中,黑色虛線箭頭表示一個區域被其他微觀幾何圖形遮蔽形成陰影(Shadowed)(擋住了光線)。在中間圖中,紅色虛線箭頭表示被其他微觀幾何圖形遮擋(Masked,從視圖方向遮擋)的區域。右圖則展示了光在微觀結構間的相互反射。

        如果微觀幾何高度與表面法線存在相關性,那麼陰影(shadowing)和掩蔽(masking)可以有效地改變其法線分佈。例如,想象一個表面,凸起的部分被風化或其他過程磨平,而較低的部分仍然粗糙。如果光線是掠射角,較低的部分的表面將被掩蔽或處於陰影中,這使得表面變得光滑。見圖9.28。

圖 9.28  所示的微觀幾何高度與表面法線有很強的關聯性,其中凸起的區域是光滑的,而較低的區域是粗糙的。在上圖中,表面從一個接近宏觀表面法線的角度被照亮。從這個角度看,許多入射光線都可以到達這些坑洞,因此許多光線被散射到不同的方向。在下圖中,表面從一個斜視角度被照明。大部分凹坑在陰影中,很少有光線照射到凹坑上,大多數光線都是從表面的光滑部分反射出去。在這種情況下,外觀的粗糙度很大程度上取決於光照角度。

         到目前爲止,我們已經討論了微觀幾何對鏡面高光反射率,即表面反射率,的影響。在某些情況下,微觀表面細節也會影響次表面反射率。如果微觀幾何不規則性大於次表面散射距離,那麼陰影和掩蔽會導致逆反射(retroreflection)效應,光線會優先向入射方向反射。產生這種效果是因爲當觀察和光照方向有很大差異時,陰影和掩蔽將遮蔽照明區域。見圖9.29。逆反射會使粗糙的表面看起來很平。如圖9.30所示。

圖 9.29  由微觀粗糙度引起的逆反射。這兩張圖都展示了一個粗糙的表面,具有低菲涅耳反射率和高散射反射率,所以次表面反射率這時候在視覺上很重要。在左圖中,觀看和照明方向是相似的。微幾何部分是明亮的,也是最明顯的,有一個明亮的外觀。右圖中,觀看和照明方向有很大的不同。在這種情況下,視圖中明亮的區域被遮擋,可見區域被遮蔽,導致更暗的外觀。

圖 9.30 由於微觀表面粗糙,兩個物體呈現出逆反射行爲。

9.7 微表面理論(Microfacet Theory)

        許多BRDF模型都是基於微表面理論(Microfacet theory)的對微觀幾何的反射係數的數學分析。

        微表面模型的一個重要特性是微表面法線m的統計分佈。該統計分佈由表面的法線分佈函數(normal distribution function,NDF)定義。一些文獻使用了術語“distribution of normal”來避免與高斯正態分佈混淆。我們在方程中用D(m)來表示NDF。

        NDF D(m)是微表面法線在微幾何表面積上的統計分佈。對整個球面的微面法線D(m)進行積分就得到了微面面積。更有用的是,積分D(m)(n·m),即D(m)在宏觀表面(單位面積)上的投影,如圖9.31左圖所示。換句話說,即投影D(m)(n·m)被歸一化:

針對整個球體進行積分,這裏用Θ表示,不像前面講到的半球積分(用Ω表示)。在實踐中,大多數微觀結構模型用於圖形中是高度場,這意味着 Ω以外的各個方向m的D(m) = 0。然而,方程9.21對非高度場微觀結構也是適用的。

         通常,微表面和宏觀表面在垂直於任何視圖方向v的平面上的投影是相等的:

公式9.21和9.22的點積沒有被鉗制到0。圖9.31右圖說明了原因。方程9.21和9.22對函數施加了約束,D(m)必須滿足條件才能成爲有效的NDF。

圖 9.31  微觀表面的側面圖。 在左圖中,是對D(m)(n·m)的積分,微面區域投影到宏觀表面上,得到了宏觀表面的面積(長度,在這個側視圖中),按照慣例是1。 在右圖中,積分D(m) (v·m),微表面投射到垂直於v的平面上的面積,等於宏觀表面投影到這個平面上的投影,是cosθo或(v·n)。當多個微觀平面的投影有重疊時,微表面前後兩面的投影會相互抵消。

        再看一下圖9.31的右圖。有許多微表面的投影具有重疊,但最終渲染只關心可見的平面,即重疊區域最靠近攝像機的區域。這一事實提出了另一種方法來將微表面投影的區域集合和宏觀表面投影的區域聯繫起來:可視微表面投影區域的面積總和等於宏觀表面的投影區域面積。我們可以通過定義掩蔽函數(masking function)G1(m,v),用數學的方式來表示它:

如圖9.32所示。不像公式9.22,公式9.23的點乘需要被鉗制到0。微表面的背面是不可見,所以在這個例子中不被計數。G1(m,n)D(m)就是可見法線的分佈(distribution of visible normals)。

圖 9.32  將可視微表面的投影區域(亮紅色)在垂直於v的平面上積分,就得到了宏觀表面的投影區域。

        Heitz討論了Smith masking函數,該函數最初是爲高斯正態分佈導出的,後來推廣到任意NDFs。Heitz指出masking函數中,有兩個函數——Smith函數和Torrance-Sparrow “V-cavity”函數——均服從於方程9.23,因此這兩個函數在數學上是有效的。 他進一步表明,與Torrance-Sparrow函數,Smith函數更接近於隨機微表面的行爲。Heitz還證明了Smith masking函數可能是唯一既服從9.23方程又具有法線掩蔽獨立性(normal-masking independence)的函數。這意味着G1 (m,v)的值只要m不是背向的,即m·v ≥ 0,則其就不依賴於m的方向。Smith G1函數的形式如下:

其中

每個NDF的Λ(lambda)函數不同。

        Smith masking函數雖然有一些缺陷, 然而,在找到更好的替代方案之前,它是大多數渲染應用程序的最佳選擇。

        用微觀BRDF Fu(l,u,m),法線分佈函數D(m),遮蔽函數G1(m,v)以及宏觀 BRDF描述一個微觀幾何,形式如下:

積分爲半球Ω,n爲中心法線, 避免從次表面收集光。公式9.26沒有使用遮蔽函數G1(m,v),而是使用遮蔽-陰影聯合函數(joint masking-shadowing function)G2(l,v,m)。這個函數拓展自G1, 從兩個角度(視圖向量v和光向量l)可以看到的帶有法線m的微表面。 通過G2函數,公式9.26允許BRDF考慮掩蔽和陰影,但不考慮微表面之間的相互反射(見圖9.27)。 公式9.26求出的BRDFs都有的一個侷限,缺乏微表面相互反射,因此,這樣的BRDFs有些太暗了。

         eitz討論了G2函數的幾個版本。最簡單的是可分離的形式,其中掩蔽和陰影分別使用G1計算和然後乘在一起:

這種形式相當於假設掩蔽和陰影是不相關的事件。在現實中,其實不是這樣的,並且這種假設導致了使用這種G2形式的BRDFs過暗。

        考慮一個極端的例子,假如視角和光的方向相同。在這種情況下,G2應該等於G1,因爲所有可見的地方都沒有陰影,但是根據公式9.27, G2將等於G1的平方。

        如果微表面是一個高度場,然後每當v與l之間的相對方位角φ等於0◦時,G2(l,v, m)應該等於min(G1(v, m), G1(l, m))。方位角φ見圖9.17所示。這提出了一個通用的方法來說明掩蔽和陰影之間的相關性:

其中 λ(φ)是一種隨着φ增加,而逐漸從0增加到1的函數。 Ashikhmin等人提出了一個標準偏差爲15◦(∼0.26弧度)的高斯分佈:

Ginneken等人提出了一種不同的方案:

        不管光線和視角方向的相對對齊,還有一個理由可以說明在一個給定的表面點上,掩蔽和遮蔽是相互關聯的。兩者都與點相對於表面其餘部分的高度有關。對於較低的點,掩蔽的概率增加,陰影的概率也增加。如果使用Smith Masking函數,Smith height-correlated masking-shadowing function可以精確地解釋這種相關性:

        Heitz還描述了Smith G2的一種結合了方向和高度相關性的形式:

其中函數λ(v, l)可是一個經驗函數,公式9.29和9.30中的也是這樣。

        在這些選項中,Heitz推薦Smith函數的高度相關形式(公式9.31),因爲它與不相關形式的成本相似,且準確性更高。這種形式是在實踐中使用最廣泛的,儘管一些實踐者使用可分離形式(方程9.27)。

        一般的微表面BRDF(公式9.26)並不直接用於渲染。它是用來獲得封閉的解(精確或近似),給micro-BRDF Fu定一個具體的選擇。

9.8 表面反射的BRDF模型(BRDF Models for Surface Reflection)

        除了少數例外,基於物理的渲染中使用的高光BRDF術語都來自於微表面理論。在鏡面反射中,每一個微面都是一個完美光滑的菲尼爾鏡面。回想一下,這樣的鏡面每一束入射的光線都對應一個反射方向。這意味着除非v和l的反射方向平行,每個微表面的micro-BRDF Fu(l, v, m)都爲零,也就是對於給定了l和v,微表面法線m和半向量需要對齊,半向量(half vector)h如圖9.33所示。

圖 9.33  半向量h與光向量和視角向量形成等角(用紅色表示)。

        由式(9.26)推導出鏡面微表面模型有,對於所有的m≠h時,菲涅爾鏡面反射 micro-BRDF Fu(l, v,m)等於0, 因爲它把積分分解成在m = h處的積分函數的值。 這樣就得到了鏡面高光BRDF項;

我們使用公式9.34中的符號fspec來表示它只對表面(鏡面)的反射進行建模。在一個完整的BRDF中,它可能會有另外一個項,該項用於次表面(漫反射)着色。爲了對方程9.34有一些直觀的認識,可以認爲只有那些法線與半矢量對齊(m = h)的微表面才能正確地將光線從l反射到v中,見圖9.34。因此,反射光的數量取決於法線等於h的微觀面的數量。 這個值由D(h)表示,是那些從光和視圖方向都可見的微觀平面,它等於G2 (l,v,h)。每個微表面反射光的部分,由F(h,l)表示。

圖 9.34 表面的微表面形式。只有紅色微表面(它們的表面法線和半向量h對齊)對入射光向量l反射到視角向量v有貢獻。

        在遮罩陰影函數中使用半向量允許有一個小簡化。因爲涉及到的角度不可能大於90◦,所以公式9.24,9.31和9.32中的χ+條件可以移除掉。

9.8.1 法線分佈函數(Normal Distribution Functions)

        法線分佈函數對渲染表面的外觀有着明顯的影響。 NDF的形狀,如圖所示,在微面法線的球面上,決定了反射光線錐的寬度和形狀( 鏡面波瓣)。 這反過來又決定了鏡面高光的大小和形狀。NDF影響表面粗糙度的整體感知,以及更微妙的視覺效果,如高光是否有明顯的邊緣或被煙霧包圍。

        然而,鏡面波瓣並不是NDF形狀的簡單複製。它和高光形狀,扭曲的程度或多或少取決於表面曲率和視角。這種變形對於以掠射角觀察的平面尤其強烈,如圖9.35所示。

圖 9.35  左邊兩張圖是用非物理Phong反射模型渲染的。該模型的鏡面波瓣圍繞反射向量旋轉對稱。在計算機圖形學的早期,經常使用這種BRDFs。中間兩張圖使用的是基於物理的微面BRDF進行渲染。左上圖和中間圖展示了一個以掠射角照亮的平面。左上角展示了一個不正確的圓形高亮,而中間顯示了微面BRDF上的特徵高亮延伸。 中間圖的效果與現實相匹配,如右邊的照片所示。在下面兩張渲染圖中展示的球體上,高光形狀的差異很小,因爲在這種情況下,表面曲率是決定高光形狀的主要因素。

各向同性法線分佈函數(Isotropic Normal Distribution Functions)

       渲染中使用大多數NDF是各向同性的——關於宏觀表面法線n旋轉對稱。在這種情況下,NDF是一個變量函數——n和微表面法線m。理想情況下,NDF可以寫成cosθm的表達式,可以由n和m的點積計算得到。

        Beckmann NDF是光學社區(optics community)在第一個微表面模型中使用的法線分佈。今天仍在使用。當然還可以選擇使用Cook-Torrance BRDF。Beckmann法線分佈形式如下:

其實χ+(n·m)確保了NDF指向宏觀表面下方的全部微表面法線的值爲0。 這個屬性告訴我們,這個NDF,就像我們將在本節討論的所有其他NDF一樣,描述了一個微表面的高度場。αb參數控制表面的粗糙度。它正比於微幾何平面的斜率的均方根(Root Mean Square,RMS),所以αb = 0表示一個完美的光滑表面。

       Beckmann NDF是形狀不變量(shape-invariant)。正如Heitz定義到的,一個各向同性NDF,如果其粗糙度參數的影響相當於對微表面的縮放(拉伸),那麼是形狀不變量。形狀不變的NDF的形式可以寫作:

其實g表示一個任意的單變量函數。對於一個任意的各項同性的NDF, Λ 函數取決於兩個變量。第一個是粗糙度α,第二個就是向量(v或l)的入射角度。然而,對於一個性質不變得NDF,Λ 函數值取決於一個變量α:

其中,s表示v或l向量。

       Bechmann NDF的Λ 函數是

公式9.38的成本昂貴,因爲它包含erf(誤差函數)。因爲這個原因,通過用近似表示:

        接下來討論的是Blinn-Phong NDF。 在過去,它被廣泛地應用於計算機圖形學中,儘管在最近,它在很大程度上已經被其他NDF所取代。Blinn-Phong NDF仍然在一些計算非常昂貴的情況下使用(例如,在移動硬件上),因爲它的計算成本比本節討論的其他NDF要低。

       Blinn-Phong NDF是基於Phong 着色模型(非基於物理的)的:

αp是Phong NDF的粗糙度參數。值越高表示表面越光滑,值越低表示表面越粗糙。 αp通常是從一個用戶操作的參數通過一個非線性映射得到。例如,αp =  m的s次方,其中,s在0到1之間,m是αp的一個上邊界。這種映射方法被很多遊戲使用了,包括使命召喚:黑色行動,其中m被設置成8192。

       Beckmann和Blinn-Phong粗糙度參數的等效值可以使用α的關係式發現。當參數以這種方式匹配時,兩種分佈非常接近,特別是對於相對光滑的表面,如圖9.36左上圖所示。

       GGX分佈在電影遊戲上廣泛應用。GGX分佈形式如下:

其中, αg參數控制粗糙度。在迪士尼原則着色模型中,αg = r * r,其中r是用戶接口粗糙度值,在0和1之間。

       GGX分佈是形狀不變的,它的 Λ是相當簡單:

Smith G2和GGX結合起來,人們發現:

這個方程爲了簡潔,使用

       Karis提出了GGX的Smith G1函數的近似形式:

其中s可以用l或v代替。Hammon發現了一種有效的近似

使用了線性插值操作, lerp(x,y,s) = x(1 − s) + ys。

        圖9.36中展示了GGX和Becjmann分佈的比較,可以看出兩者有着根本上不同的形狀。GGX擁有窄峯,及圍繞這些山峯的更長的“尾巴”。 在圖的底部展示的圖中,我們可以看到GGX的長尾巴在高光的核心周圍形成了一種朦朧或發光的外觀。

圖 9.36 左上圖中,Blinn-Phong(藍色虛線)分佈和Beckmann(綠線)分佈值得比較,αb從0.025到0.2(參數關係式爲)。右上圖中是GGX(紅色)和Beckmann(綠色)分佈的比較。αb和左上圖一樣。αg根據眼睛進行了調整更適合高光大小。底圖中上排使用的Beckmann NDF,下排使用的是GGX。

         許多真實世界的材質顯示出類似的模糊高光,其尾部通常比GGX分佈的尾部還要長。如圖9.37所示。

圖 9.37  來自MEAR數據庫的合適鉻(chrome)的NDFs。左圖,鏡面峯值的比較:鉻(黑),GGX(紅色,αg= 0.006),Beckmann(綠色,αb = 0.013), Blinn-Phong(藍色虛線,n = 12000)。右圖是對應的高光渲染。

         Burley提出了generalized Trowbridge-Reite(GTR) NDF,其目的是爲了更好地控制NDF的形狀,特別是分佈的尾部:

γ參數控制着尾巴的形狀。當γ= 2時,GTR和GGX是一樣的。γ減小,尾分佈變得更長,γ增大,尾分佈變得更短。 k(α、γ)是規範化的因素,這裏單獨給出一個方程:

各項異性法線分佈函數(Anisotropic Normal Distribution Functions)

        雖然大多數材質是各向同性表面的,但有些材質的微觀結構具有顯著的各向異性,明顯影響了它們的外觀,例如,圖9.26。爲了準確地渲染這些材質,我們需要BRDFs,尤其是各向異性的NDFs。

        與各向同性NDF不同,各向異性NDF不能僅只是一個θm角度就計算出。需要額外的方向信息。在一般情況下,微表面法線m需要變換到由法線、切線和雙切向量n、t和b定義的局部框架或切線空間。在實踐中,這種轉換通常由三個單獨的點積:m·n、m·t和m·b表示。

        在將法線貼圖和各向異性BRDFs結合起來時,重要的是要確保法線貼圖會對切線向量和雙切向量以及法線產生擾動。這一過程通常是通過將修改的Gram-Schmidt過程應用於擾亂法向量n和內插頂點的切向量t0和雙切向量b0(以下假設n已經歸一化):

或者,在第一行之後,可以通過求n和t的叉積來生成正交的b向量。

        對於諸如拉絲金屬或捲髮等效果,需要對切線方向進行逐像素修改,通常由切線貼圖(tangent map)提供。這個貼圖是一個存儲每像素切線的紋理,類似於法線貼圖存儲每像素法線。切線貼圖通常存儲切向量在垂直於法線的平面上的二維投影。這可以和紋理過濾一起工作得很好,可以像法線貼圖一樣被壓縮。有些應用程序存儲了一個標量旋轉量,用於繞n旋轉切向量。雖然這種表現形式更緊湊,它很容易產生紋理濾波的誤差。

         創建各向異性NDF的一種常用方法是擴展現有的各向同性NDF。所使用的一般方法可以應用於任何形狀不變的各向同性NDF。各向同性形狀不變NDFs形式如下:

其中g函數是表示NDF形狀的一維函數。各向異性的形式則如下:

其中ax和ay分佈表示t方向和b方向上的粗糙度。如果ax = ay,則公式9.50表示的是各向同性。

        除了傳入Λ函數的變量a計算不一樣,各向異性的G2 遮擋-陰影函數和各向同性一樣:

其中,和公式9.37一樣,s表示的是v或l。

        用這種方法,各向異性的Beckmann NDF爲:

GGX NDF爲:

圖 9.38  使用各向異性NDFs渲染的球體:上面一行是Beckmann NDF,下面一行是GGX NDF。每一行的ay保持不變,ax從左到右依次遞增。

       雖然最直接參數化各向異性NDFs是使用兩次各向同性粗糙參數,一次對ax,一次對ay,有時候也使用其他參數。在迪士尼原則着色模型中,各向同性參數r和一個常量參數Kaniso(範圍從0到1)一起使用。ax和ay的計算如下:

0.9這個因子限制了寬高比爲10:1。

         Imageworks使用了一種不同的參數化形式,允許任意程度的各向異性:

9.8.2 多次彈射的表面反射(Multiple-Bounce Surface Reflection)

      正如前面9.7節中提到的,微表面BRDF框架不計算光的多次微表面反射(“反彈”)。這種簡化導致一些能量損失和表面過度暗化,特別是對粗糙金屬。

       Imageworks提出了給BRDF添加一個項來模擬光線在表面的多次反射:

其中RsF1是fsF1(F0設置爲1的高光BRDF項)的直接反射率(directional albedo)。 RsF1函數取決於粗糙度α和高度角θ。 它是相對平滑的,因此可以預先進行數值計算(使用公式9.8或9.9),並存儲在一個小的二維紋理中。Imageworks發現32×32分辨率就足夠了。       

這個函數是RsF1在半球上的cosine-weighted平均值。 它只取決於α,所以它可以存儲在一個一維的紋理中,或者一個廉價的曲線中。由於RsF1是關於n的旋轉對稱的,可以用一維積分來計算。我們也用變量µ替換µ= cosθ(見方程9.6)。

        

菲尼爾項也可以用同樣的方式計算。

       Imageworks給公式9.58提供了一個近似方案,使用Schlick形式(9.18):

如果使用原始的Schlick近似(方程9.16),則爲:

       在各向異性的情況下,爲了計算fms,Imageworks使用了一個ax和ay之間的中間粗糙度。這種近似避免了增加RsF1查找表的維數,並且它所引入的誤差很小。

        圖9.39 展示了Imageworks多次反彈高光項的效果。 

圖 9.39 在所有行中,表面的粗糙度從左到右增加。最上面的兩行是黃金材質。第一行是在沒有Imageworks多次反射項的情況下渲染的,而第二行是使用了多次反射項渲染的。最明顯的區別是粗糙的球體。接下來的兩行是黑色的絕緣體材質。第三行沒有使用多次反射項,第4行應用了多次反射項。這裏的差別比較微妙,因爲鏡面反射要低得多。

9.9 次表面散射的BRDF模型(BRDF Models for Subsurface Scattering)

         在上一節中,我們討論了表面或鏡面高光、反射。在這一節中,我們將討論問題的另一面,即在表面下折射的光會發生什麼變化。正如我們在9.1.4節中所討論的,這種光經歷了一些散射和吸收,並且它的一部分被重新發射出原表面。在這裏,我們將重點討論用於不透明電介質中的局部次表面散射或漫射表面響應的BRDF模型。金屬是無關緊要的,因爲它們沒有任何重要的地下光相互作用。透明的或有全局次表面散射的電介質將會在第14章介紹。

9.9.1 次表面的反射率(Subsurface Albedo)

        次表面反射率ρss是光線進入不透明的電介質的能量和逃出表面的光的能量的比。ρss的值在0(所有的光線被吸收)和1(沒有光被吸收)之間,並基於波長,所以ρss被建模爲一個渲染的RGB向量。在一些文章中,ρss通常被稱爲表面的漫射顏色,就像法線入射(normal-incidence)的菲涅耳反射F0通常稱爲高光顏色。

        次表面反射率可以被認爲是吸收和散射之間的“競賽”的結果——光在有機會散射出去之前會被吸收嗎?這就是爲什麼液體上的泡沫比液體本身要亮得多。泡沫的形成過程並沒有改變液體的吸收率,但是大量的氣體-液體界面(air-liquid interfaces)的加入大大增加了散射量。這導致大多數入射的光線在被吸收之前就被散射,結果得到了一個高的次表面反射率和明亮的外觀。 雪花與空氣之間的界面有相當大的散射,但吸收很小,導致整個可見光譜的次表面反射率爲0.8或更多。白色塗料稍微少一些,大約0.7。在日常生活中遇到的許多物質,如混凝土、石頭和土壤,平均在0.15到0.4之間。煤是一種次表面反射率極低的物質,接近0.0。

        許多材質在潮溼時會變暗,這個過程與液態泡沫的例子相反。如果這種材質是多孔的,水就能滲透進以前充滿空氣的空間。介質材料的折射率更接近於水而不是空氣。這種相對摺射率的降低同時也降低了光在材質內的散射,這樣光在逃出材質之前傳播的距離變得更長。這種變化使得更多的光被吸收,次表面反射率就變暗了。

        有一個常見的誤解(甚至在著名材料作者的指南中),那就是ρss的值永遠不會低於一個下限約0.015-0.03(在8位非線性sRGB編碼中爲30-50)。然而,這個下限是基於顏色測量,包括表面(高光)和次表面(漫反射)反射率,因此過高。實際的材質可以有更低的值。

        爲了獲得ρss在現實世界的表面中準確的值或紋理,把鏡面高光分離開來很重要。這種提取可以通過仔細使用受控光源和偏振濾光器來完成。爲了獲得準確的顏色,還應該進行校準。

9.9.2 次表面散射比例和和粗糙度(scale of Subsurface Scattering and Roughness)

        一些BRDF模型的局部次表面散射考慮到了表面粗糙度——通常通過使用微表面理論與漫反射 micro-BRDF fu——當然有一些沒有考慮。使用哪種類型的模型的決定因素不是簡單認爲表面有多粗糙,儘管這是一個常見的誤解。正確的決定因素和表面不規則性與次表面散射距離的相對大小有關。

        從圖9.40可以看出。如果微觀幾何不規則性大於次表面散射距離(左上圖),那麼次表面散射將表現出與微觀幾何相關的效應,如逆反射(圖9.29)。對於這樣的表面,應該使用粗糙表面漫反射模型。正如上面提到的,這些模型通常基於微表面理論,對每個微表面,次表面散射是局部的,這樣只會影響micro-BRDF fu。

        如果次表面散射距離都要大於不規則性(圖9.40右上圖),那麼表面可以認爲是一個平坦表面,像逆反射這種效應是不會發生的。次表面散射對微表面來說不是局部的,不能通過微表面理論來建模。在這種情況下,應該使用光滑表面的漫反射模型。

圖 9.40  三個表面具有相似的NDFs,但微觀幾何尺度與次表面散射距離之間的關係不同。在左上圖中,次表面散射距離小於表面的不規則性。在右上圖中,散射距離比表面的不規則性大。下面的圖中,微表面具有多個粗糙度的尺度。紅色虛線表示有效表面,只包含比次表面散射距離大的微觀結構。

        在中間情況下,表面的粗糙度比散射距離或大或小,那麼應該使用粗糙表面漫射模型,但有效表面(effective surface)只包括比散射距離大的不規則面。漫反射和鏡面反射都可以用微表面理論來建模,但它們的粗糙度值不同。高光項將使用基於實際表面的粗糙度的值,而漫射項將使用基於有效表面粗糙度的一個較低的值。

         觀察範圍也與此相關,因爲它決定了“微觀幾何”。例如,月球經常被引用作爲一個例子,因爲它表現出顯著的逆反射,這時應該使用粗糙表面漫反射模型。當我們從地球上觀察月球時,觀察的範圍如此之大,以至於一塊五英尺高的巨石都是“微觀幾何”。因此,我們觀察到粗糙表面的漫反射效應,如逆反射,並不令人驚訝。

9.9.3 光滑表面的次表面模型(Smooth-Surface Subsurface Models)

       光滑表面次表面模型適用於表面不規則性小於次表面散射距離的材質建模。在這種材質中漫射着色不直接受表面粗糙度的影響,如果漫反射和高光項是耦合的,那麼表面粗糙度可能會間接影響漫反射着色。

       正如在9.3節中介紹到的,實時渲染應用通常使用Lambertian項對局部次表面散射進行建模。這種情況下漫反射項爲:

Lambertian模型沒有考慮到表面反射光不能用於次表面散射。爲了改進這個模型,應該在表面反射項(鏡面高光)和次表面反射項(漫反射)之間進行能量權衡。菲涅爾效應意味着這surface-subsurface能量平衡與入射光角度θi變化有關。隨着入射角度的增大,漫反射減少高光反射增加。解釋這種平衡的一個基本方法是把漫反射項乘以1減去高光反射項的菲涅爾部分。如果高光項類似於一個平坦的鏡子,那麼漫反射項結果如下:

如果高光項是微表面BRDF項,那麼結果爲:

方程9.62和9.63的結果是出射光是均勻分佈的,因爲BRDF值不依賴於出射方向v,這一行爲是有道理的,因爲光在重新發射之前通常會經歷多次散射事件,所以其出射方向將是隨機的。然而,有兩個原因懷疑出射光不是完全均勻分佈的。首先,由於方程9.62中的擴散BRDF項隨入射方向變化,Helmholtz互反律意味着它也必須隨入射方向變化。第二,光線在射出時必須經過折射,這將對射出的光線施加一定的方向性。

        Shirley等人提出了一個權衡了菲尼爾效應和次表面反射的漫反射項,同時支持能量守恆和Helmholtz互反律。推導假設菲涅爾反射率採用Schlick近似(公式9.16):

公式9.64只適用於鏡面高光反射率爲完美菲涅爾鏡的表面。有一個廣義的版本 Kelemen-Szirmay-Kalos:

 

其中 , Rspec是高光項的定向反射率(9.3節),是其在半球上的餘弦加權平均值。Rspec值可以使用公式9.8或9.9預先計算並存儲在查找表中。平均值的計算方法與我們前面遇到的類似平均值相同:(方程9.57)。

        在Imageworks實現Kelemen-Szirmay-Kalos耦合漫反射項時,他們使用了一個三維查找表,折射率作爲第三軸。他們發現在積分中包含多次彈射反射項時使用Rspec比RsF1更平滑,因此一個16×16×16的表格就足夠了。圖9.41顯示了結果。

圖 9.41  第一行和第三行展示的是添加了朗伯項的鏡面高光項。第二行和第四行展示的是Kelemen-Szirmay-Kalos耦合漫反射項相同的高光項。最上面的兩行粗糙度值比最下面的兩行要低。在每一行中,粗糙度從左到右遞增。

        如果BRDF使用Schlick Fresnel近似,並且不包含多次彈射反射項,那麼可以將F0的值從積分中提出來。這樣做允許我們使用一個二維表來表示Rspec,在每個條目中存儲兩個量,而不是像Karis所討論的三維表。 另外,Lazarov提出了一個符合Rspec的解析函數,類似地從積分中提取F0來簡化擬合函數。

        Karis和Lazarov都將高光定向反射率Rspec用於不同的目的,與基於圖像的光照相關。關於該技術的更多細節可以在第10.5.2節中找到。如果這兩種技術在同一個應用程序中實現,那麼可以對這兩種技術使用相同的表查找,從而提高效率。

9.9.4 粗糙表面的次表面模型(Rough-Surface  Subsurface Models)

         作爲迪士尼原則材質模型的一部分,Burley包含了一個漫反射BRDF項,包含有粗糙度效果和匹配測量材質:

其中

α是高光粗糙度。在各向異性條件下,使用αx和αy之間得一箇中間值,這個方程通常被稱爲迪士尼漫反射模型(Disney diffuse model)。

        次表面項fss源自於Hanrahan-Krueger BRDF,其目的是作爲對遠距離物體的全局次表面散射的廉價替代品。用戶通過控制參數kss來控制fss和fd粗糙漫反射項的混合。

       由於迪斯尼漫反射模型使用和鏡面高光BRDF項一樣的粗糙度,因此對某些材質的建模可能會有困難。如圖9.40。然而,這將是一個微不足道的修改,即使用一個單獨的漫反射粗糙度值。

       使用與Gotanda相同的NDF、masking-shadowing函數和micro-BRDF,Hammon數值模擬了BRDF,包括相互反射。他指出,相互反射對於這種微表面結構非常重要,它佔了粗糙表面總反射率的一半。然而,第二次彈跳包含了幾乎所有丟失的能量,所以Hammon使用了兩次彈跳模擬。另外,可能是因爲相互反射的加入使數據變得平滑,Hammon能夠得到一個相當真實的仿真結果:

其中

αg是GGX高光粗糙度。爲了清晰起見,這裏的術語與Hammon的介紹略有不同。注意,fsmooth方程的耦合漫反射BRDF來自公式9.64但沒有ρss /π因子,因爲這已經在公式9.68乘過了。Hammon討論了“混合”BRDFs,使用其他光滑表面的BRDFs代替fsmooth,以提高性能或改進與在舊模型的兼容性。

        總的來說,Hammon的漫反射BRDF成本不高,而且是基於可靠的理論原理,儘管他沒有與測量數據進行比較。需要注意的是,表面不規則性大於散射距離的假設是推導BRDF的基礎,這可能會限制可以精確建模的材質類型。參見圖9.40。

        如公式9.61所示的簡單的Lambertian項仍然被許多實時渲染應用程序使用。Lambertian項除了低計算成本外,與其他漫反射模型相比,更容易使用間接照明和烘焙照明,而且它與更復雜的模型之間的視覺差異通常是微妙的。 然而,人們對照片級寫實的不斷追求,促使人們越來越多地使用更精確的模型。

9.10 布料的BRDF模型(BRDF Models for Cloth)

       布料往往具有不同於其他類型材質的微觀幾何結構。根據織物的類型,它可能有高度重複的編織微觀結構,圓柱體(線)從表面垂直突出,或兩者兼而有之。因此,織物表面的特徵外觀通常需要專門的着色模型,如各向異性高光、粗糙散射(通過突出的半透明纖維產生的光散射造成的明亮邊緣效應),甚至視角方向上顏色變化(由穿過布料的不同顏色的線造成的)。

       除了BRDF,大多數織物都有高頻空間的變化,這也是創造令人信服的織物外觀的關鍵。如圖9.42所示。

圖 9.42  遊戲《神祕海域4》的布料系統中使用的材質。左上角的球有一個標準的BRDF與GGX 微表面高光和Lambertian 漫反射。上排中間球體採用了面料BRDF。其他每個球體都添加了不同類型的逐像素變化,從左到右,從上到下分別是:織物編織細節、織物老化、不完美的細節和小皺紋。

9.10.1 經驗布料模型(Empirical Cloth Models)

       在《神祕海域2》中,布料表面使用下面的漫反射BRDF項:

其中Krim,Kinner,Kdiff分別表示控制邊緣光線,前向(內部)表面的光線以及Lambertian 項的比例因子。arim和ainner分別是衰減因子。 這種模型是非物理的,因爲有幾個與視圖相關的效果,但沒有一個依賴於光方向。

       相比之下,《神祕海域4》中的布料使用了微表面或微圓柱體模型,具體取決於布料的高光類型和經驗的次表面散射近似漫反射項:

其中,表示模型受光照影響也受BRDF影響。 箭頭右側的項替換左側的項。用戶指定的參數Cscatter是一種散射顏色,w(範圍爲[0,1])照明寬度。

        對於布料模型,迪斯尼使用了他們的漫反射BRDF項(9.9.4節),並在模型的粗糙散射中增加了一個光澤度:

其中Ksheen是一個用戶參數,用來調節光澤度的強度。光澤度顏色Csheen由白色和ρss混合得到。

9.10.2 微表面布料模型(Mircofacet Cloth Models)

        在遊戲《The Order:1886》中,布料BRDF結合了修改了的微表面BRDF和一般形式上的天鵝絨NDF。天鵝絨NDF一般形式如下:

其中a控制反向的高斯寬度,Kamp控制振幅。

        完整的布料BRDF爲:

        Imageworks使用了一種不同的反向的NDF來表示光澤度,可以被添加到任何BRDF中:

儘管對於這個NDF, Smith masking-shadowing函數沒有封閉形式的解,但是Imageworks使用解析函數來找到近似數值解。Estevez和Kulla討論了masking-shadowing函數的細節和光澤項與其他BRDF之間的能量守恆。有關使用Imageworks sheen項的一些示例,請見圖9.43。

圖 9.43  在一個紅色漫反射項中添加Imageworks光澤項。從左到右光澤粗糙度分佈爲0.15,0.25,0.40,0.65和1.0。

        到目前爲止,我們看到的每一種布料模型都侷限於特定種類的布料。在下一節中討論的模型試圖以更一般的方式對布料進行建模。

9.10.3 微圓柱布料模型(Micro- Cylinder Cloth Models)

        用於布料的微圓柱模型與用於頭髮的微圓柱模型非常相似,因此第14.7.2節中關於頭髮模型的討論可以提供額外的信息。 在這些模型的背後思想是假設表面被一根一維的線覆蓋。 Kajiya和Kay開發了一個簡單的BRDF模型,Banks爲這提供了堅實的理論基礎。所以它也被稱爲Kajiya-Kay BRDF或Banks BRDF。這個概念是基於這樣一種觀察,即由一維線組成的曲面在任何給定的位置上都有無窮多個法線,由垂直於該位置的切向量t的法線平面(normal plane)來定義。雖然許多新的微圓柱模型從這個框架開發出來,但是由於它的簡單性,Kajiya-Kay模型仍然有一些用途。例如,在遊戲《Uncharted 4》,Kajiya-Kay BRDF被用來表示絲綢和天鵝絨等閃亮面料的高光項。

        夢工廠(Dreamworks)使用相對簡單和藝術家可控的微圓柱體模型。紋理可以用來改變粗糙度,顏色,和線的方向,對天鵝絨和類似的織物的建模,這可以指出表面的平面。可以設置不同的參數,以模擬複雜的變色織物,如閃光絲。經過歸一化後是一種節能模型。

        Sadeghi等人提出了一種基於織物樣品測量的微圓柱體模型。該模型還考慮了佈線之間的屏蔽和陰影。

        在一些情況下,實際的頭髮BSDF模型(第14.7節)也可以用於布。Wu和Yuksel在實時布料渲染系統中實現的模型之一就來自迪斯尼動畫電影中使用的頭髮模型。

9.11 波動光學BRDF模型(Wave Optics BRDF Models)

        我們在前幾節中討論的模型依賴於幾何光度學,它把光看作是射線而不是波。幾何光學是基於這樣的假設:任何表面的不規則性要麼小於一個波長,要麼大於大約100個波長。       

       現實世界的表面就沒有那麼簡單。它們在所有尺度上都趨於不規則,包括1-100波長範圍。我們使用納米幾何(nanogeometry)這樣的不規則形狀來區分它們和前面討論過的微觀幾何不規則形狀。納米幾何對反射率的影響不能用幾何光學來模擬。這些效應取決於光的波動特性和波動光學(也稱爲物理光學)。

        厚度接近於光波長的表層或薄膜也會產生與光的波動性質有關的光學現象。

        在這一節中,涉及到波動光學現象,如衍射和薄膜干涉。

9.11.1 衍射模型(Diffraction Models)

        納米幾何會導致一個現象稱爲衍射。爲了解釋它我們需要用到惠更斯-菲涅爾(Huggens-Fresnel)原則,波陣面(wavefront)上的每一個點(波相位相同的點集)都可以被當作新的球形波的來源。如圖9.44所示。 當波遇到障礙物時,惠更斯-菲涅耳原理表明它們會在轉角處輕微彎曲,這就是衍射的一個例子。這種現象不能用幾何光學來預測。在光入射到一個平面的情況下,幾何光學能夠正確地預測光將在一個單一的方向上反射。惠更斯-菲涅爾原理提供了額外的見解。 它表明,表面上的球面波恰好排成一條直線,形成反射波陣面,而其他方向的波則通過相消干涉而被消除。當我們觀察具有納米不規則性的表面時,這種見解變得非常重要。由於表面點的高度不同,表面上的球面波不再那麼整齊地排列。如圖9.45。

圖 9.44  在左邊圖中,我們看到一個平面波陣面在真空中傳播。如果波陣面的每一點都被當作一種新的球形波的來源,新的波會在除正向外的所有方向上相互干擾,再次形成平面波陣面。在中間圖中,波遇到了一個障礙。在障礙物邊緣處的球形波在其右側沒有與之發生消極干擾的波,因此有些波在障礙物邊緣發生了衍射或“泄漏(leak)”。在右邊圖中,一個平面波陣面從一個平面發生反射。 平面波陣面與左邊表面點的接觸比右邊更早,因此從左邊表面點發出的球面波有更多的時間傳播,因此也就更大。不同尺寸的球面波陣面沿反射平面波陣面邊緣構成相長干涉,並在其他方向發生相消干涉。

 

圖 9.45  左圖中,我們看到平面波陣面入射到具有粗糙納米幾何結構的表面。在中間圖中,我們可以看到根據菲涅爾-惠更斯原理在表面形成的球面波。在右圖中,在發生了相長干涉和相消干涉之後,一些產生的波(紅色部分)形成了一個平面反射波。剩下的部分(紫色部分)是衍射的,根據波長的不同,不同方向的光傳播量也不同。

        如圖9.45所示,光線向不同方向散射。它的一部分被反射出來。在反射方向上構成一個平面波陣面。剩下的光以一種依賴於納米幾何結構的方向衍射出來。反射光和衍射光的區分取決於納米幾何凸起的高度,或者更精確地說,取決於高度分佈的方差。 衍射光在鏡面反射方向上的角擴散取決於與波長相關的納米幾何凸起的寬度。 與直覺相反的是,不規則性越大,傳播越小。如果不規則性大於100個光波波長,那麼衍射光和反射光之間的夾角就小得可以忽略不計了。不規則性的減小的會導致衍射光的擴散更廣,直到不規則性小於一個波長,這時就不會發生衍射。

        週期性納米幾何結構表面的衍射最爲明顯,因爲重複的圖案通過相長干涉增強了衍射光,從而產生彩色的彩虹色。這種現象可以在CD和DVD光盤和某些昆蟲中觀察到。雖然衍射也發生在非週期表面,計算機圖形界多年來一直認爲影響是輕微的。由於這個原因,除了少數例外,計算機圖形學文獻多年來大多忽略了衍射。      

9.11.2 薄膜干涉模型(Models for Thin-Film Interference)

       薄膜干涉(Thin-film interference)是一種波動光學現象, 從薄電介質層的頂部和底部反射的光路相互干擾。如圖9.46所示。

圖 9.46  除了主反射外,光還有多種折射、來自薄膜底的反射、從薄膜頂部表面內部反射或通過它的折射。這些路徑都是同一波的拷貝,但由於存在較短的相位延遲導致路徑長度的不同,因此它們之間存在相互干擾。

        不同波長的光不是相長干涉就是相消干涉,這取決於波長和光程長度差之間的關係。由於光程差隨角度的變化而變化,最終的結果是在相長干涉和相消干涉之間的不同波長的轉換產生彩虹色的偏移。

        薄膜需要很薄才能產生這種效果的原因與相干長度(coherence length)的概念有關。這個長度是光波的一個副本可以被移動並且仍然與原始波相干涉的最大距離。這個長度與光的帶寬(bandwidth)成反比,帶寬是光的光譜功率分佈(SPD)延伸的波長範圍。 激光的相干長度非常長,帶寬非常窄。可以是英里,這取決於激光的類型。這種關係是有道理的,因爲一個簡單的正弦波被許多波長位移後,仍然會與原始波發生相干干涉。如果激光真的是單色的,它將有一個無限的相干長度,但在實踐中激光器有一個非零帶寬。相反,具有極寬帶寬的光將具有混沌波形。 這是有意義的,這樣一個波形的副本在它停止與原始波相干干擾之前僅僅只需要被移位一個很短的距離。

        理論上,理想的白光是所有波長的混合物,相干長度爲零。然而,對於可見光光學來說,人類視覺系統的帶寬(只能在400-700納米範圍內感知光)決定了相干長度,大約是1微米。所以,在大多數情況下,“薄膜有多厚才能不再造成可見干擾?”是“大約1微米”。

        與衍射相似,多年來薄膜干涉被認爲是一種特殊的情況,只發生在表面如肥皂泡和油漬。 然而,Akin指出,薄膜干涉確實對許多日常表面提供了微妙的顏色,並提出瞭如何建模這種效果以增加真實感。如圖9.47所示。

圖 9.47  一種沒有薄膜干涉 (左)和有薄膜干涉(右)的皮革材料。薄膜干涉引起的鏡面高光着色增加了圖像的真實感。

9.12  多層材質(Layered Materials)

       在現實生活中,材料往往是層層疊加的。一個表面可能覆蓋着灰塵、水、冰或雪; 出於裝飾或保護的原因,它可能被塗上漆或其他塗層;或者它可能有多個層作爲它的基礎的一部分 ,如許多生物材料。

       一個最簡單的分層案例是一個透明的塗層(清漆層 clear coat),它是一些材料的基底上光滑透明的一層。例如,在粗糙的木材表面上塗上一層光滑的清漆。迪斯尼原則着色模型包括一個透明塗層項,虛幻引擎同樣有。

        透明塗層最顯著的視覺效果是光在透明層和底層的雙重反射。當襯底是金屬時,這第二次反射最爲顯著,因爲電介質透明塗層和襯底(金屬)之間的折射率差異最大。當襯底爲電介質時,其折射率接近於透明塗層的折射率,導致第二次反射相對較弱。這種效果類似於水下材料,見表9.4。

        透明層也可以染色。從物理角度來看,這種着色是吸收的結果。根據Beer-Lambert定律,吸收的光的數量取決於光穿過透明層的路徑長度(14.1.2)。這個路徑長度取決於視角和光線的角度,以及材料的折射率。更簡單的透明層,比如那些在迪士尼原則模型和虛幻引擎中實現的,建模沒有這種視圖依賴。 其他的則需要這種依賴,比如在PxrSurface材質的實現和以及Imageworks和Dreamworks的着色模型。Imageworks模型進一步允許連接任意數量的不同類型的層。

        通常情況下,不同的層可以有不同的表面法線。一些例子包括流過平坦路面的小溪,凹凸不平土壤表面的光滑冰層,或者覆蓋在紙板箱上的皺巴巴的塑料膜。電影行業使用的大多數分層模型都支持每層獨立的法線。這種做法在實時應用中並不常見,儘管虛幻引擎的透明塗層實現支持它作爲一個可選特性。

        Weidlich和Wilkie提出了一種層狀微表面模型,假設層的厚度與微表面的大小相比較小。他們的模型支持任意數量的層,並跟蹤從頂層到底層的反射和多次折射。它對於實時的實現來說足夠簡單,但是沒有考慮到層之間的多重切換。Jakob等人提出了一種全面而準確的模擬層狀材質的框架,包括多重反射。然不適合實時的實現,系統使用的思想可能對未來的實時技術有參考作用。

        特別值得注意的是,《使命召喚:無限戰爭》使用了一個分層材質系統。它允許用戶合成任意數量的材質層。它支持折射、散射和層間基於路徑長度的吸收,以及每層不同的表面法線。 結合高效的實施,特別是遊戲能以60HZ進行運行,使得實時材質前所未有的複雜性變得有可能。如圖9.48。

圖 9.48  展示了《使命召喚:無限戰爭》多層材質系統的各種特點。該材質模擬了具有扭曲和散射的幾何複雜表面,儘管每一面僅由兩個三角形構成。

9.13 混合和過濾材質(Blending and Filtering Materials)

       材質混合是將材質的各種屬性(例如BRDF參數)結合在一起的過程。例如,爲了給帶有鏽斑的金屬板建模,我們可以繪製一個蒙版紋理來控制鏽斑的位置,並使用它來混合鏽斑和金屬的材質屬性(高光顏色F0,漫射顏色ρss,和粗糙度α)。每個被混合的材質也可以在空間上變化,參數存儲在紋理中。混合可以作爲一個預處理來創建一個新的紋理,通常被稱爲“烘焙(baking)”,或 on the fly in the shader。 雖然表面法線n技術上不是BRDF參數,但它的空間變化對外觀來說是非常重要的,所以材質混合通常也包括法線貼圖混合。

       材質混合是許多實時渲染應用的關鍵。例如,遊戲《the Order: 1886》就有一個複雜的材質混合系統,允許用戶從一個龐大的庫中任意地創作材質,並由各種空間蒙版來控制。大多數材質混合都是通過離線預處理完成的,但某些合成操作可以根據需要延遲到運行時。這種運行時處理通常用於環境,爲平鋪紋理添加獨特的變化。流行的材料創作工具Substance Painter和Substance Designer使用類似的方法來合成材質。 

       混合法線貼圖需要注意。通常,通過將處理過程視爲高度圖之間的混合,可以獲得良好的結果,因爲法線圖是從高度圖中導出的。在某些情況下,例如在一個基本表面上覆蓋一個細節法線貼圖時,其他形式的混合也是可取的。

       材質過濾是一個與材質混合密切相關的課題。材質屬性通常存儲在紋理中,紋理通過GPU雙線性過濾和mipmapping等機制進行過濾。然而,這些機制是基於這樣一個假設:被過濾的數量(是着色方程的輸入)與最終顏色(着色方程的輸出)有線性關係。線性同樣適用於某些量,但不適用於一般情況。在法線貼圖或非線性BRDF參數(例如粗糙度)上使用線性mipmapping方法可以產生瑕疵。 這些瑕疵主要表現爲高光走樣(閃爍高光),或表面光澤度、亮度隨表面與相機距離的變化而發生意外變化。在這兩者中,鏡面高光走樣更爲明顯;緩和這些瑕疵的技術通常被稱爲鏡面高光反走樣技術。現在我們將討論其中的幾種方法。

9.13.1 過濾法線和法線分佈(Filtering Normals and Normal Distribution)

        要理解爲什麼會出現這些瑕疵以及如何解決它們,回想一下,NDF是對子像素表面結構的統計描述。當相機和表面之間的距離增加時,以前覆蓋多個像素的表面結構可能會縮小到子像素大小,從凹凸貼圖領域移動到NDF領域。這種轉換與mipmap鏈密切相關,後者描述了紋理細節如何減小到子像素大小。

        想象一個對象的外觀,如圖9.49左圖的圓柱體是如何進行建模的。外觀建模總是假定了一定的觀察尺度。宏觀(大尺度)幾何圖形被建模爲三角形,中觀(中尺度)幾何圖形被建模爲紋理,而小於單個像素的微觀幾何圖形通過BRDF建模。

圖 9.49 左圖的圓柱使用的是原始法線貼圖。中間圖使用了一個更低分辨率的法線貼圖,其中包含平均法線和重正化法線,如圖9.50的左下圖所示。在右圖中圓柱使用同樣低分辨率,但是包含符合理想NDF的法線和光澤度,如圖9.50的右下圖所示。右圖更好地表現了原始的外觀。當在低分辨率下渲染時,這個表面也不太容易出現走樣。

        如果用圖9.49中所示的比例,將圓柱體建模爲一個平滑的網格(宏觀)並用法線貼圖(中尺度)表示凸起部分是很合適的。選取了一個固定粗糙度爲α的Beckmann NDF來建模微觀法線分佈。這種組合在這個比例下很好地模擬了圓柱體的外觀。但是,當觀測尺度改變時會發生什麼呢?

        在圖9.50中,頂部的黑框圖中展示了表面的一小部分,四個法線貼圖覆蓋了這部分。假設我們渲染表面的尺度是每個法線貼圖紋素平均覆蓋一個像素。對每個紋素, 法線分佈(即分佈的平均值)用紅色箭頭表示,被黑色的Beckmann NDF所包圍。法線和NDF隱式指定了底層表面結構,如橫截面所示。中間的大隆起是法線貼圖的一個凸起,小的擺動是微觀表面結構。法線貼圖中的每個紋素,結合粗糙度,可以看作是收集了該紋素覆蓋的表面區域的法線分佈。

圖 9.50  圖9.49中的部分表面。上面一行展示了法線分佈(紅色顯示的是平均法線)和隱含的微觀幾何圖形。下面一行展示了將四個NDFs平均爲一個的三種方法。

        現在假設攝像機已經遠離物體,這樣一個像素可以覆蓋四個法線貼圖紋素。在這個分辨率下的表面的理想的表示方法,將會準確地表示在每個像素在所覆蓋的表面面積上收集到的所有法線的分佈。這種分佈可以通過對mipmap頂層的四個紋素的NDFs進行平均得到。圖9.50左下角的圖展示了理想的法線分佈。這個結果,如果用於這個低分辨率下的渲染,將最準確地代表表面的外觀。

        圖9.50底部中心圖展示的是法線平均值、每個分佈的平均值和粗糙度平均值組合的結果,其中粗糙度對應於每個分佈的寬度。結果有正確的法線平均值(紅色部分),但是分佈太窄。這個錯誤將導致表面看起來過於光滑。更糟的是,由於NDF太窄,它會引起走樣,有高光閃爍出現。

        我們不能用Beckmann NDF直接表示理想的法線分佈。然而,如果我們使用一個粗糙度貼圖,Beckmann粗糙度α可以在不同的紋素中變化。想象一下,對於每一個理想的NDF,我們都找到了與它在方向和寬度上最接近的定向Beckmann波瓣。我們將Beckmann波瓣的中心方向存儲在法線貼圖中,並將其粗糙度值存儲在粗糙度貼圖中。結果就如圖9.50右下圖所示。這個NDF更接近理想狀態。 與簡單的正態平均法相比,這種方法可以更準確地表示圓柱的外觀。

        目前討論的方法集中在高光響應,但法線方差也可以影響漫反射着色。考慮法線方差對n·l項的影響,可以幫助提高漫反射和鏡面高光着色的精度,因爲兩者在反射率積分中都乘以了這個因子。

        方差貼圖技術將法線分佈作爲一個平滑高斯波瓣的近似。如果每個像素都覆蓋了成千上萬個突起,這是一個合理的近似,它們都可以平滑地平均。然而,在很多情況下,一個像素只能覆蓋幾百或幾千個突起,這可能會導致“閃爍”的外觀。一個例子可以在圖9.25中看到,這是一系列的圖像, 如果你觀察這些球體的動畫渲染,從一幀到另一幀會出現嘈雜的高光閃爍。

         如果我們要畫出這樣一個曲面的NDF,它看起來就像圖9.51左圖所示。當球體動畫時,h向量在NDF上移動,跨越明亮和黑暗的區域,這導致了“閃閃發光”的外觀。如果我們在這個表面上使用方差貼圖技術,它將有效地使用一個平滑的NDF來近似這個NDF,類似於圖9.51右邊的NDF,這就失去了“閃閃發光”的細節。

圖 9.51  左邊是一個隨機的凹凸不平的表面的一個小區域(一面上的幾十個突起)的NDF。在右邊是一個大約相同寬度的Beckmann NDF波瓣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章