《Real-Time Rendering 4th Edition》讀書筆記--簡單粗糙翻譯 第八章 光和顏色 Light And Color

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

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

因爲時間有限,接下來的幾章要精簡翻譯了!!!

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

“Unweave a rainbow, as it erewhile made

The tender-person’d Lamia melt into a shade.”

如剛纔拆解彩虹那般,讓光鮮嬌嫩的雷米亞黯然失色。

—— 約翰·濟慈

        
        在本章中,我們將學習各種物理的光量,爲後面的章節打下基礎,這些章節將從更物理的角度討論渲染。我們還將學習更多關於渲染過程中經常被忽視的“後半部分”:將代表場景線性光量的顏色轉換爲最終顯示顏色。

8.1 光量(Light Quantities)

         任何基於物理的渲染方法的第一步都是以精確的方式來量化光線。 首先介紹輻射度學(radiometry),因爲這涉及到光的物理傳輸的核心領域。 我們接着討論了光度學(photometry),它處理的是由人眼靈敏度加權的光值。 我們對顏色的感知是一種心理物理現象(psychophysical phenomenon):對物理刺激的心理感知

8.1.1 輻射度學(Radiometry)

         輻射度學研究的是電磁輻射的測量。 正如將在9.1節中更詳細地討論的那樣,這種輻射以波的形式傳播。 不同波長的電磁波——具有相同相位的兩個相鄰點之間的距離,例如兩個相鄰的波峯——具有不同的性質。 在自然界中,電磁波的波長範圍很廣,從長度不到百分之一納米的伽馬波到長達數萬公里的極低頻(ELF)電波。 人類所能看到的光波只是這一範圍的一小部分,從大約400納米的紫外光延伸到700多納米的紅光。如圖8.1所示。
圖 8.1 顯示在整個電磁波譜範圍內的可見光的波長範圍
 
         輻射度量(radiometry quantities)用於測量電磁輻射的各個方面:總能量(overall energy)、功率(隨時間變化的能量,energy over time)和相對於面積、方向或兩者的功率密度(power density)。這些度量列於表8.1。
表 8.1  輻射量及單位。 分別是輻射通量、 輻照度、 輻射強度、輻射率
 
         在輻射度學中基本單位是輻射通量(radiant flux),Φ輻射通量是隨時間-功率流動的輻射能量,以瓦特(watt,W)爲單位量。
         輻照度(irradiance)輻射通量相對於面積的密度,即dΦ/ dA。輻照度是根據面積來定義的,面積可以是空間中想象的面積,但通常是物體的表面。它的單位是瓦特每平方米。
         在我們討論下一個量之前,我們需要先介紹立體角(solid angle)的概念,它是角度概念的三維擴展。 一個角度可以被認爲是一個平面上連續的方向集合的大小的度量,它的弧度值等於這個方向集合與半徑爲1的封閉圓相交的弧的長度。 類似地,立體角可以表示三維空間中連續的方向集合的大小,測量單位爲球面度(steradians,縮寫爲sr),其定義爲和半徑爲1的封閉球體相交斑塊的面積。 立體角是由符號ω表示。
         在兩個維度上,一個2π弧度角覆蓋整個單位圓。 延伸到三維空間上,4π球面度的立體角將覆蓋整個單位球。圖8.2展示了一個立體角的球面度的表示。
圖 8.2  從圓球的剖面圖上去掉一個立體角的圓錐體。形狀本身與測量無關。球體表面的覆蓋纔是關鍵。
 
         現在我們可以介紹輻射強度(radiant intensity,I),是輻射通量方向,更準確地說立體角(dΦ/ dω)密度。它的單位是瓦特每球面度。
         最後,輻射率(radiance,L)是單一射線中電磁輻射的量度 更準確地說,它被定義爲輻射通量對單位面積和單位立體角的密度
這個面積是在垂直於射線的平面上測量的, 如果測量的其他方向的表面上的輻射率,那麼必須要使用餘弦校正因子。 可能會遇到術語“投影面積”來定義輻射率的情況。
         輻射率(radiance)是傳感器(如眼睛或照相機)測量的值(詳細信息請參閱9.2節),所以它對於渲染來說極爲重要。 計算着色方程的目的是爲了計算沿着給定射線(從着色表面點到攝像機)的輻射率。沿着這條射線的L值等價於第5章中着色部分中基於物理的Cshaded。 輻射率的公制單位是瓦特每平方米每球面度。
         環境中的輻射可以看作是5個變量的函數(或6個,包括波長),稱爲輻射分佈(radiance distribution) 其中三個變量指定位置,另外兩個指定方向。這個函數描述了所有的光在空間中移動。 渲染過程可以理解爲,眼睛和屏幕定義一個點和一組方向(例如,通過每個像素的射線),然後在眼睛處對每個方向進行計算。 在13.4節討論的基於圖像的渲染使用了一個相關的概念,稱爲光場(light field)。
        在着色方程中,輻射率通常用 Lo(x,d) 或 Li(x,d)表示, 這意味着從x點發出的光或者進入x點的光。 方向向量d表示射線的方向,根據慣例,它總是指向遠離x的方向 然而這種慣例在Li的情況下會有些令人困惑, 因爲d指向光傳播的相反方向,因爲對於點積之類的計算這很方便
         輻射率的一個重要特性是它不受距離的影響 忽視大氣影響,如霧。 換句話說,不管與觀察者的距離有多遠,一個表面都會有相同的亮度 距離越遠,表面覆蓋的像素越少,但每個像素處的表面輻射是恆定的
         大多數光波是包含有許多不同波長的混合物。 最直觀的是光譜功率分佈(spectral power distribution,SPD) 示了光的能量是如何分佈在不同波長上的。圖8.3展示了三個例子, 值得注意的是,儘管在圖8.3中的中間SPDs和底層SPDs之間不同很大,他們被認爲是同樣的顏色。 很明顯,人類的眼睛對光譜儀不太敏感。我們將在8.1.3節中詳細討論顏色視覺。
圖 8.3 三種不同光波的SPDs( spectral power distribution,光譜功率分佈)。 最上面的SPD是一種綠色激光,它的光譜分佈非常窄。 中間的SP是在相同的綠色激光基礎上再加一個紅色激光和一個藍色激光組成的光。 底層的SPD是標準的D65光源,這是一個典型的中性白色參考,用來代表戶外照明, 這樣的spd是典型的自然光,它的能量連續分佈在可見光譜上。
 
         所有輻射量都有光譜分佈,因爲這些分佈是在波長上的密度,它們的單位是原始量除以納米。例如,輻照度的光譜分佈的單位是瓦特每平方米每納米
         由於完整的SPDs很難用於渲染,特別是在交互速率下,因此在實踐中輻射量被表示爲RGB三元組。 在8.1.3節中,我們將解釋這些三元組如何與光譜分佈相關。

8.1.2 光度學(Photometry)

         輻射度學只研究了物理量,而沒有考慮人的感知。 一個相關的領域,光度學(photometry),類似輻射度學,除了它是通過人眼的敏感度來衡量一切的 輻射計算的結果通過乘以CIE光度曲線(CIE photometric curve)轉換爲光度單位,該曲線是一個以555 nm爲中心的鐘形曲線,表示眼睛對不同波長的光的響應。如圖8.4所示。
圖 8.4  光度曲線。
 
         轉換曲線和測量單位是光度學理論和輻射度學理論的唯一區別。 每個輻射量都有一個對應的光度學度量。表8.2展示了對應關係。
表 8.2  輻射度學和光度學的度量及其單位。光通量(luminous flux)、 照度(illuminance)、光度(luminous intensity)、 亮度(luminance)
 
         亮度(luminance)通常用來描述平面的亮度 例如,高動態範圍(HDR)電視屏幕的峯值亮度通常在500到1000 nits之間。 相比之下,晴空的亮度約爲8000 nits, 一個60瓦的燈泡大約有12萬nits,而地平線上的太陽有60萬nits。

8.1.3 色度學(Colorimetry)

         在8.1.1節中,我們已經看到,我們對光的顏色的感知與光的SPD(光譜功率分佈)密切相關。 我們也看到這不是簡單的一對一對應。 圖8.3中的底部的SPD和中間SPD完全不同,但被認爲是完全相同的顏色。 色度學研究的是光譜功率分佈和人眼對顏色的感知之間的關係。
         人類可以分辨大約1000萬種不同的顏色。 人眼對於顏色感知,是通過視網膜上三種不同類型的錐受體工作的,每種類型的受體對不同的波長有不同的反應。 其他動物有不同數量的顏色受體,在某些情況下多達15個。 因此,對於一個給定的SPD,我們的大腦只從這些受體接收到三種不同的信號。這也是爲什麼只用三個數字就可以精確地表示任何顏色刺激。
         但是哪三個數字呢?CIE (Commission Internationale d 'Eclairage)提出了一套測量顏色的標準條件,並使用它們進行了顏色匹配實驗。 調色時,三種不同顏色的光投射在白色屏幕上,使它們的顏色疊加在一起形成一個色塊。  圖8.5中展示了一組三種光(r、g和b)的測試結果。 這些光幾乎是單色的,每一束光的能量分佈都集中在一種波長附近:r爲645 nm, g爲526 nm, b爲444 nm。 將每組匹配權值與測試波長相關聯的函數稱爲顏色匹配函數(color-matching functions)
圖 8.5  r, g, b 2度調色曲線。這些調色曲線不能與用於調色實驗的光源的光譜分佈相混淆,這裏是純波長。
 
         這些顏色匹配函數將光譜功率分佈轉換爲三個值。 對於任意的光譜分佈,顏色匹配函數可以乘以每個結果曲線下的分佈和麪積(即,積分)給出相對的數值,設置光的顏色,以匹配由光譜感知到的顏色。 考慮到不同的光譜分佈可以分解爲相同的三個權值, 在觀察者看來它們是一樣的。 給出匹配權值的光譜分佈稱爲條件等色(metamers)
         三種加權的r、g、b光不能直接代表所有可見的顏色,因爲它們的顏色匹配函數對不同的波長會有負的權值。 CIE提出了三種不同的假設光源,它們對所有可見波長的顏色匹配函數的權值都是正的。 這些曲線是原始的r、g和b顏色匹配函數的線性組合。 因爲這要求光源的光譜功率分佈在某些波長上是負的,所以這些光是不可實現的數學抽象。他們的顏色匹配函數如圖8.6所示。其中Y和光度曲線(圖8.4)一樣,因爲這條曲線將輻射率轉換爲了亮度
圖 8.6  Jdd-Vos-modified CIE(1978) 2度顏色匹配函數。注意,這兩個x部分是在同一條曲線上。
 
         與前面顏色匹配函數對比,x(λ),y(λ)和z(λ)是通過乘法和集合來把任何SPD(λ)減少到三個數值
這些X,Y,X三色值(tristimulus values) 是在CIE XYZ空間中定義顏色的權重。它會很方便顏色分爲亮度(明亮度)和色度(chromaticity) 色度是指顏色與亮度無關的特性 例如,兩種深淺不同的藍色,一種暗的,一種亮的,可以有相同的色度,儘管亮度不同。
         爲此,CIE通過將顏色投射到X+Y +Z = 1平面上來定義一個二維色度空間。如圖8.7所示。 該空間中的座標稱爲x和y,其計算方法如下:
z值沒有提供額外的信息,所以通常省略它。 色度座標( chromaticity coordinates)x和y的座標圖被稱爲CIE 1931色度圖。如圖8.8所示。 圖中曲線的輪廓顯示了可見光譜的顏色所在,而連接光譜兩端的直線稱爲紫色線(purple line) 黑點表示光源D65的色度,通常用白點(white point)表示——色度用來定義白色或無色(無色)的刺激。
圖 8.7  CIE RGB三原色的RGB顏色立方體顯示在XYZ空間中,以及它在X + Y + Z = 1平面上的投影(紫色)。 藍色輪廓表示可能覆蓋的色度值空間, 從原點輻射出來的每條線都有一個恆定的色度值,只是亮度不同。
 
圖 8.8  CIE 1931年色度圖。 曲線用相應純色的波長標記。 白色三角形和黑點分別表示用於sRGB和Rec. 709顏色空間的色域和白點。
 
         總之,我們從一個實驗開始,這個實驗使用了三種單波長的光,並測量了每一種光需要多少來匹配其他波長的光。有時爲了匹配,這些純光必須添加到正在查看的樣本中。這就給出了一組顏色匹配函數,將它們組合起來創建一組沒有負值的新顏色匹配函數。 有了這組非負的顏色匹配函數,我們可以將任何光譜分佈轉換爲定義顏色的色度和亮度的XYZ座標,該座標可以簡化爲xy來描述色度,而亮度保持不變。
         給定一個顏色點(x,y),畫一條線穿過白點和這個點到邊界(光譜或紫色線)。 色點的相對距離與到區域邊緣的距離之比即爲顏色的激發純度(excitation purity 區域邊緣上的點定義了主波長(dominant wavelength) 這些色度術語在圖形中很少見, 取而代之,我們使用的是飽和度(saturation)色調(hue) 它們分別與激發純度和主波長有寬鬆的相關性。
         色度圖描述了一個平面。 要完全描述一種顏色所需要的第三個維度是Y值,即亮度 這些定義加在一起就是所謂的xyY(xyY-coordinate system)座標系 色度圖對於理解在渲染中如何使用顏色以及渲染系統的限制非常重要。 電視或計算機顯示器通過使用設置R、G和B顏色值來顯示顏色。 每個顏色通道控制一個顯像原色(display primary)顯像基色會發出具有特定光譜功率分佈的光。三種原色的每一種都按其各自的顏色值進行縮放,並將它們疊加在一起,創建一個單一光譜功率分佈(觀察者感知到的只有一個)
         色度圖中的三角形表示標準電視或計算機顯示器的色域(gamut) 三角形的三個角是三原色,三原色是屏幕可以顯示的最飽和的紅色、綠色和藍色。 色度圖的一個重要特性是,這些有限的顏色可以用直線連接起來,以表示整個顯示系統的極限。 這些直線代表了通過混合這三種三原色可以顯示的顏色的界限。 白點表示當R、G和B的顏色值相等時,顯示系統產生的色度。 需要注意的是,顯示系統的全部範圍是一個三維體。 色度圖只顯示了這個體積在二維平面上的投影。
圖 8.9   CIE 1976 UCS圖,展示了三個RGB顏色空間(sRGB、DCI-P3和ACEScg)的原色和白點。sRGB繪圖也可以用於Rec. 709,因爲這兩個顏色空間具有相同的原色和白點。
 
         在圖8.9所示的三個RGB空間中,sRGB是目前爲止實時渲染中最常用的。 值得注意的是,在本節中,我們使用“sRGB顏色空間”來表示具有sRGB三原色和白點的線性顏色空間,而不是在5.6節中討論的非線性sRGB顏色編碼。 大多數計算機顯示器是爲sRGB顏色空間設計的,同樣的原色和白點也適用於Rec. 709顏色空間,它被用於高清電視顯示,因此對遊戲機很重要。 然而,更多的顯示器是用更廣泛的色域。
         從RGB空間到XYZ空間的轉換是線性的,可以用RGB空間的原色和白點導出的矩陣來完成。 通過矩陣轉置和結合,可以將矩陣從XYZ轉換至任意RGB空間,或者在兩個不同的RGB空間之間。 注意,在這樣的轉換之後,RGB值可能爲負,也可能大於1。 這些顏色超出了色域,在目標RGB空間中不可複製。可以使用各種方法將這些顏色映射到目標RGB色域中。
         一種常用的轉換是將RGB顏色轉換爲灰度亮度值(grayscale luminance value) 由於亮度與Y係數相同,因此此操作只是RGB-to-XYZ轉換的“Y部分” 換句話說,它是RGB係數和RGB-to- XYZ矩陣的中間行的點積。對於sRGB和Rec. 709空間,公式爲:
這又把我們帶到了光度曲線,如圖8.4所示。 這條曲線表示了一個標準觀察者的眼睛對不同波長的光做出的反應,它乘以了三個原色的光譜功率分佈,每條結果曲線都被集成的。 這三個結果的權重構成了上面的亮度方程。 紅色、綠色和藍色的灰度強度值不相等的原因是因爲眼睛對不同波長的光有不同的敏感度。
         色度學能告訴我們兩種顏色刺激是否匹配,但不能預測它們的外觀。 給定的XYZ顏色刺激的外觀在很大程度上取決於照明、周圍顏色和先決條件等因素。
         顏色外觀模型是更廣泛的視覺感知領域的一部分,包括掩蔽(masking)等效應。

8.1.4 用RGB顏色渲染(Rendering with RGB Colors

         嚴格地說,RGB值代表的是感知量,而不是物理量使用它們進行基於物理的渲染在技術上是一個類別錯誤。 正確的方法是對光譜量進行所有的渲染計算,要麼通過密集採樣,要麼在合適的基礎上進行投影,最後才轉換成RGB顏色
         例如,最常見的渲染操作之一是計算一個物體反射光。 物體的表面通常反射某些波長的光要比其他的多,這是由它的光譜反射率曲線(spectral reflectance curve)所描述的。 嚴格正確的計算反射光顏色的方法是將入射光的SPD乘以每個波長的光譜反射率,然後把得到的反射光SPD轉換成RGB顏色 在一個RGB渲染器中將光和表面的RGB顏色相乘,得到反射光的RGB顏色。在一般情況下,這不會給出正確的結果。 爲了說明這一點,我們將查看一個比較極端的示例,如圖8.10。
圖 8.10   頂部的圖展示了一種設計用於投影屏幕的材料的光譜反射率。 下兩張圖顯示了兩種相同RGB顏色光源的光譜功率分佈:中間爲RGB激光投影儀,底部爲D65標準光源。 屏幕材料將反射約80%的光,因爲它有反射峯,與投影儀的原色波峯一致。 然而,它對D65光源的光反射不到20%,因爲大多數光源的能量是在屏幕的反射峯值之外。 對這個場景進行RGB渲染可以預測到屏幕對兩種光線反射的強度是相同的。
 
         我們的例子使用的是一種設計用於激光投影儀的屏幕材料。它具有高反射率的窄波段來匹配激光投影儀的波長和大多數其他波長的低反射率。這導致它反射大部分來自投影儀的光,但吸收大部分來自其他光源的光。在這種情況下,RGB渲染器會產生嚴重的錯誤。
         圖8.10所示的情況並不是典型。實際中遇到的曲面的光譜反射率曲線要光滑得多,如圖8.11所示。典型光源的SPD類似於D65發光體,而不是例子中的激光投影儀。當光源SPD和表面光譜反射率都是光滑的時候,RGB渲染帶來的誤差相對較小。
圖 8.11  黃色香蕉的光譜反射率。
 
         預測性渲染應用程序(predictive rendering application)中,這些細微的錯誤可能很重要。例如,兩個光譜反射率曲線在一個光源下可能有相同的顏色外觀,但在另一個光源下卻沒有。這一問題被稱爲metameric failure或illuminant metamerism,例如在給汽車車身部件塗油漆時就會引起高度關注。RGB渲染在試圖預測這種類型效果的應用程序中是不合適的。

8.2 從場景到屏幕(Scene To Screen)

         本書接下來的幾章主要討論基於物理的渲染問題。 給定一個虛擬場景,基於物理的渲染的目標是計算在真實場景中出現的亮度。

8.2.1  高動態範圍顯示編碼(High Dynamic Range Display Encoding)

         本節的內容建立在第5.6節的基礎上,5.6節介紹了顯示編碼。
         在5.6節討論了標準動態範圍(standard dynamic range,SDR)監視器的顯示編碼, 它們通常使用sRGB顯示標準和SDR電視,而SDR電視又使用Rec.709和Rec.1886標準。 這兩套標準具有相同的RGB色域和白點(D65),並且有些相似(但不完全相同)的非線性顯示編碼曲線。 他們也有大致相似的參考白色亮度水平(80 cd/m爲sRGB, 100 cd/m2 爲Rec. 709/1886)。 這些亮度規範並沒有被顯示器和電視製造商嚴格遵守,實際上他們更傾向於生產白色亮度水平更亮的顯示器。
         HDR顯示使用Rec. 2020和Rec. 2100標準。 Rec. 2020定義了一個有明顯更寬色域的顏色空間,如圖8.12所示,並且與Rec. 709和sRGB顏色空間具有相同的白點(D65)。 Rec. 2100定義了兩套非線性顯示編碼:感知量化器(perceptual quantizer,PQ)混合log-gamma(hybrid log-gamma,HLG) HLG編碼在渲染場景中使用的並不多,因此我們將重點關注PQ,它定義了10,000 cd/m2的峯值亮度值。
圖 8.12  CIE 1976 UCS圖,展示了Rec.2020 和sRGB/ Rec.709 顏色空間的色域和白點(D65)。並給出了DCI-P3顏色空間的色域,用作比較。
 
         儘管峯值亮度和色域規範對於編碼目的很重要,但就實際顯示而言,它們多少還只是夢寐以求。 實際上,和Rec. 2020相比,顯示色域更接近於DCI-P3(顯示在圖8.12中)。 由於這個原因,HDR顯示器的內部色調映射和色域映射從標準規範到實際顯示性能都比較出色。
         在應用程序端,有三種方法用於將圖像轉換到HDR顯示,但根據顯示和操作系統的不同,這三種方法並不都可用:
         1. HDR10——廣泛支持HDR顯示器以及PC和控制檯操作系統。 幀緩衝格式是每像素32位,每個RGB通道有10個無符號整數位,alpha通道有2個無符號整數位。 它使用PQ非線性編碼和Rec.2020顏色空間。 每個HDR10顯示模型執行自己的色調映射,這些映射沒有標準化或文檔化。
         2. scRGB(線性變體)——僅Windows操作系統支持。 名義上,它使用sRGB三原色和白電平(white level),但是支持RGB值小於0和大於1。幀緩衝格式是每個通道16位,存儲線性RGB值。它可以和任何HDR10一起使用,因爲會被驅動程序轉換成HDR10。它主要是使用方便並且向後兼容sRGB。
        3. 杜比視覺(Dolby Vision)——專有格式,還沒有廣泛被各種顯示器支持或任何控制檯(在撰寫本文時)。它的幀緩衝格式是每個通道自定義的12位,使用是PQ非線性編碼和Rec.2020顏色空間。顯示內置色調映射是標準叉乘模型(不是點乘)。

8.2.2 色調映射(Tone Mapping)

         在第5.6節和第8.2.1節中,我們討論了顯示編碼,即顯示硬件把線性輻射值轉換爲非線性代碼值的過程。 顯示編碼所用的函數是顯示的電光傳遞函數(electrical optical transfer function,EOTF)的逆函數,保證輸入的線性值與顯示發出的線性輻射率相匹配。
        色調映射(Tone Mapping)色調復現(Tone Reproduction) 是轉換場景輻射率值爲顯示輻射率值的過程 在此步驟中應用的轉換稱爲端到端傳輸函數(end-to-end transfer function),或從場景到屏幕轉換(scene-to-screen transform) 理解色調映射的關鍵概念是圖像狀態(image state) 有兩種基礎圖像狀態。 場景參考圖像(scene-referred images)是根據場景輻射率值定義的顯示參考圖像(display-referred images)是根據顯示輻射率值定義的。 圖像狀態與編碼無關。 兩種圖像狀態下圖像既可以是線性編碼,也可以是非線性編碼 圖8.13展示了圖像狀態、色調映射和顯示編碼是如何在成像管線(imaging pipeline)中是如何配合的,實現顏色值從初始的渲染到最終顯示出來。
圖 8.13  合成(渲染)圖像的成像管線。我們渲染線性的場景參考輻射率值,通過色調映射變換到線性顯示參考輻射率值。然後經過顯示編碼,應用EOTF的逆函數把線性顯示輻射率值轉換成非線性編碼值(編碼值),然後傳遞給顯示器,最後顯示硬件應用EOTF函數把非線性顯示值轉換成從屏幕發射到眼睛的線性輻射率值
 
         關於色調映射的目的有幾個常見的誤解。 它不是爲了確保場景到屏幕的轉換是一個恆等轉換,能在顯示器上完美重現場景亮度值。 它也不是將每一個比特的信息從場景的高動態範圍“擠壓”到顯示的低動態範圍,雖然動態範圍在解釋場景和顯示之間的差異確實發揮了重要的作用。
         要理解色調映射的目標,最好將其視爲圖像再現的一個實例。圖像再現的目標是在給定顯示屬性和觀看條件的情況下,儘可能接近地再現出顯示參考圖像,即觀察者在觀察原始場景時產生的感知印象。參見圖8.14。
圖 8.14  圖像再現的目的是爲了由再現圖像(右)所喚起的感知印象儘可能接近原場景(左)。
 
         視覺系統彌補了絕對亮度的差異,這是一種適應能力(adaptation) 由於這種能力,在昏暗的房間裏,在屏幕上顯示的戶外場景的再現圖像可以產生與原始場景相似的感覺,儘管再現的亮度小於原始場景的1%。然而,適應機制提供的補償機制並不完善。 在較低的亮度水平下,感知到的對比度會降低(史蒂文斯效應),感知到的“色度”也會降低(亨特效應)。
         然而,這種對比的增加加劇了現有的一個問題。 由於場景的動態範圍通常比顯示器的大得多,我們不得不選擇一個狹窄的亮度值窗口來重現,窗口上方和下方的值被裁剪爲黑色或白色。 增強對比會進一步縮小這個窗口。爲了部分抵消暗部和亮部的剪裁,使用了一個柔軟的衰減,將一些陰影和高光的細節帶回來。
         曝光(exposure的概念對於色調映射至關重要。 攝影學中,曝光指的是控制落在膠片或傳感器上的光量 然而,在渲染中,曝光是在色調再現變換應用之前對場景參考圖像執行的線性縮放操作 曝光的棘手之處在於決定使用什麼比例因子。 色調的再現變換和曝光是緊密聯繫在一起的。 
         按曝光比例縮放,然後應用色調再現變換的過程是一種全局色調映射(global tone mapping),相同的映射應用到所有像素上 相比之下,基於周圍像素和其他因素,局部色調映射(local tone mapping)過程使用不同的像素到像素的映射。實時渲染應用中大部分使用的是全局色調映射。
         需要記住,場景參考的圖像和顯示參考的圖像從根本上是不同的 物理操作僅在操作場景參考的數據有效 由於顯示的侷限性和我們討論過的各種感知效果 ,這兩種圖像狀態之間總是需要進行非線性變換
色調再現變換(Tone Reproduction Transform)
        色調再現變換通常表示爲一維曲線,將場景參考的輸入值映射到顯示參考的輸出值 這些曲線既可以單獨應用於R、G和B值,也可以應用於亮度。 在前一種情況下,結果將自動出現在顯示色域中,因爲每個顯示引參考RGB通道值都在0到1之間。 然而,在RGB通道上執行非線性操作(尤其是剪裁)可能會導致飽和度和色相的變化,以及亮度的期望變化。
        通過將色調曲線應用於亮度,可以避免色相和飽和度的變化(至少會減少),但是,顯示參考顏色可能不在顯示的RGB色域內,在這種情況下,需要將其映射回來。
 
        色調映射的一個潛在問題是,將非線性函數應用於場景參考像素顏色可能會導致某些抗鋸齒技術問題。這個問題(以及解決它的方法)在第5.4.2節有討論。
 
曝光(Exposure)
        
         計算曝光的常用技術依賴於分析場景參考亮度值。爲了避免引入卡頓,這種分析通常是通過對前一幀進行採樣來完成的。
        
         根據Reinhard等人的建議,在早期實現中使用的一個指標是對數平均場景亮度( log-average scene luminance。通常,曝光是通過計算幀數的對數平均值來確定的。這個對數平均是通過執行一系列下采樣(down-sampling)的後處理過程來計算的,直到最後計算出幀的單個值。
        
         使用平均值往往對一些異常值過於敏感,例如,少量的明亮像素可能會影響整個幀的曝光。 後來的實現改進了這個問題,取而代之的是使用亮度值的直方圖。相比於平均值, 直方圖允許計算中位數,這更健壯。直方圖中的其他數據點也可以用來改進結果。
        
         到目前爲止討論的技術的問題是像素亮度是驅動曝光的錯誤量度。 如果我們看攝影實踐中,比如Ansel Adams’ Zone System和入射光度計如何被用來設置曝光,很明顯,最好是單獨使用光照(沒有表面反照率的影響)來確定曝光。這樣做是可行的,近似的說,攝影曝光是用來抵消光照的。 這使得物體表面主要顏色符合人類視覺系統的顏色恆常性(color constancy) 以這種方式處理曝光還可以確保傳遞給色調轉換的值是正確的。 例如,電影或電視行業中使用的大多數色調轉換都被設計成將曝光的場景參考值0.18映射到顯示參考值0.1,在主要場景照明中0.18表示18%灰度卡。
        
         在許多遊戲中,靜態曝光等級是根據已知的場景照明值爲環境的不同部分手動設置的。這樣做可以避免曝光的意外動態變化。

8.2.3 顏色分級(Color Grading)

         在8.2.2節中,我們提到了擇優圖像再現的概念,即生成看起來比原始場景更好的圖像。 通常這涉及到圖像顏色的創造性操作,這一過程被稱爲顏色分級(color grading)
        
          Selan展示瞭如何從顏色分級或圖像編輯應用程序中將任意顏色轉換“烘焙”到三維顏色查找表(look up table,LUT) 使用輸入R、G和B值作爲x-、y-和z-座標來在表中查找新顏色,因此可以用於從輸入到輸出顏色的任何映射,直到LUT分辨率的限制。 Selan的烘焙過程首先獲取一個標識LUT(將每個輸入的顏色映射到相同的顏色),然後對它進行“切片(slicing)”以創建一個二維圖像。 然後,將這個分割的LUT圖像加載到顏色分級應用程序中。 需要注意,只能將顏色操作應用於LUT,避免空間操作,例如模糊。保持編輯過的LUT, “包裝”成一個三維GPU紋理,然後應用在渲染應用程序中。 Iwanicki提出了一種聰明的方法,使用最小二乘最小化(least-squares minimization)來減少在LUT中存儲顏色轉換時的採樣錯誤。
 
         在後來的出版物中,Selan區分了執行顏色分級的兩種方法。一種方法是對顯示參考的圖像數據進行顏色分級另一種方法是對通過顯示參考的圖像數據(可以通過顯示轉換預覽)執行顏色分級操作。儘管顯示參考的顏色分級方法更容易設置,但是場景參考的數據分級可以產生更高保真的結果。
 
圖 8.16  遊戲《神祕海域4》中的一個場景。 最上面的遊戲截圖沒有顏色分級。 另外兩個截屏都應用了顏色分級操作。 這裏用了一個極端的顏色分級操作:乘以高度飽的青色。 在左下角的截圖中,顏色分級應用於顯示參考(後色調映射)圖像,在右下角的截圖中,顏色分級應用於場景參考(前色調映射)圖像。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章