為什麼需要模擬HDR

光是什麼?

光可以理解為是不同波長的能量,並不是所有光我們都能看到,我們只能看到通常所謂的「可見光」,它們具有一定範圍,這個範圍在下面光譜中顯示了出來:

來自Hortilux[1]

從圖中標示可知我們的可見光波長範圍是380nm ~ 780nm.

我們如何感知光

以前,人們只能用眼睛感知光的存在,隨著科技發展,我們還有了數碼相機和攝像機。作為目前我們最廣泛日常接觸的三大感光媒介,它們是如何讓我們獲得對光的感知的呢?

我們先來看看人眼的感知方式:

來自Wiki[2]

人眼的感光系統目前已知[2]有三種細胞組成:棒狀細胞(Rods), 椎體細胞(Cones), 光敏性視網膜神經節細胞(photosensitive retinal ganglion cells). 其中第三種細胞並不直接參与感光工作,而是負責晝夜節律和瞳孔反射的功能。前兩種則是主要服務於我們的直接視覺感知功能的. 棒狀細胞大約有12億個,主要集中分布在瞳孔周圍,他們對光非常敏感,在低亮度環境下主要是棒狀細胞為我們提供視覺功能。而椎體細胞只有大約6百萬個,只能感知足夠亮度的光(所以我們在弱光下視力欠佳,因為只有一種細胞在工作. 同時,椎體細胞又分為三種來分別感知長,中,短波範圍的可見光. 說到這裡就需要引入另一張圖:

來自Wiki[2]

現在我們猜也能猜到,前面的三種椎體細胞幫我們感知紅,綠,藍三種顏色. 了解了人眼工作的基本原理,作為補充我們可以看看一張示意圖,讓我們形象的理解這些感光細胞如何分布在人眼中的:

來自Wiki[2], 圖右是患有色盲的人眼,你能才出他/她對什麼顏色無法識別嗎?

接著我們看看數碼相機如何感光的:

來自Steves DIGICAMS[3]

這裡有個概念叫做拜爾濾色鏡(Bayer filter)[4]. 這個命名來自於它的發明者布萊斯.拜爾.這個技術主要是模擬人眼工作原理,同時利用插值技術去復原一副彩色圖片.(說到這裡我不禁想起一個概念:棋盤格渲染.)

最後我們再看看攝像機是如何感光的:

圖片來自Canon[5]

早期的照片和錄像都是用膠片[6]的,大致工作原理是膠片上有多層感光乳膠層,乳膠層對光線敏感,將他們暴露在光線下乳膠層就會在光線照射區域變暗。通過這種方式就能記錄外界景象曝光時的顏色。

基於物理的真實光感

對於圖形學,我們一直在追求的一個目標就是達到儘可能的精確描述場景,對於光照渲染,我們有一套基於PBR的理論模型. 但是, 從計算到展現的過程中, 會不會有一些因素導致我們無法看到真實的顏色?

人眼的光譜響應區間,來自Nikon[7]

相機的光譜響應區間,來自Nikon[7]

在計算機中,RGB是個廣泛使用的表達顏色的格式。前面說到人眼的椎體細胞感受RGB三種顏色其實是不正確的,牛頓曾經在十七世紀發現了組成白光的其中顏色,又稱光譜色:

來自Wiki[8]

所有可見光都包含在這個色彩空間中,封閉圖形之外是不存在的顏色。所以我們只需要確保計算機能顯示這個色彩空間內的顏色,就能模擬出人眼看到的現實世界的顏色。但是由於硬體和技術限制,計算機是無法完全表達這麼多顏色的。把RGB理解為三原色比單純理解為紅綠藍更加合適。由於我們選擇使用RGB格式,所以我們需要把這三種顏色混合出模擬現實世界的各種顏色,優點是簡單,缺點是無法模擬出所有顏色:

來自Wiki[8]

我們用RGB能模擬出的所有顏色都在這個三角形內。上圖符合Rec.709標準,隨著技術發展,當我們使用上Rec.2020標準的硬體時,我們可以在表達更多的色彩:

來自Wiki[9]

也許有人會問,我們什麼時候可以把光譜里所有顏色都能表達出來呢?答案是:硬體目前雖然不行,但是標準已經出來了,那就是大名鼎鼎的AcademyColorEncodingSystem:ACES[10].

來自DigPro 2015[11]

雖然目前跟遊戲不是很相關,但是總算解決了色彩覆蓋度不完全的問題。下面就是硬體的問題了。大家都熟悉我們目前常用的設備都是LDR的,想要表現出HDR的效果就需要使用ToneMapping進行一個色彩轉換. ToneMapping的一個依據就是Tone Response,在遊戲中我們更多使用的是Gamma,我們經常使用Gamma=2.2是由於他接近sRGB的Tone Response Curve。


[1]Light Quality, Spectrum and Distribution | EYE Hortilux

[2]Photoreceptor cell

[3]How digital cameras detect color

[4]Bayer filter

[5]Canon : Canon Technology

[6]Photographic film

[7]RGB Digital Camera Color

[8]Spectral color

[9]Rec. 2020

[10]ACES

[11]ACEScg a common color encoding for visual effects applications


推薦閱讀:

趁熱度來做個捏臉
拓幻圖形學工程師教學手冊(第三講)|一字一字敲出OpenGL學習教程
讓角色半透明:後期模糊(二)
譯:UE4是如何渲染一幀的(1)

TAG:計算機圖形學 | 遊戲開發 |