在遊戲引擎渲染管線中,我們對于R、G、B通道顔色資訊的數值範圍通常設定在[0,1]之間(或者是[0,255])。其中,0代表沒有光亮度,1代表顯示器能夠顯示的最大光亮度。這個表示方式雖然直接易懂,但它并不能反映真實世界中光亮度的情況。在真實世界的光照環境中,光亮強度有時候會超過顯示器能夠顯示的最大亮度。而且,人眼在觀察真實世界的物體時,會根據光照強度進行自我調節。是以,更加真實的渲染方式是讓顔色值超過1。這種光照計算方式或環境光照圖就是我們常常在遊戲引擎中看到的HDR(High Dynamic Range)光照或者HDR環境貼圖。但是,采用HDR渲染出來的亮度值會超過顯示器能夠顯示最大值。此時,我們需要将光照結果從HDR轉換為顯示器能夠正常顯示的LDR。這一過程我們通常稱之為Tone Mapping。下圖是Unity引擎對采用HDR渲染的圖檔使用了Tone Mapping和沒有使用Tone Mapping的對比結果:

其中,上圖是沒有使用Tone Mapping的結果,下圖是使用了Tone Mapping的結果。可以看到,在沒有使用Tone Mapping的渲染結果中,有很大一部分像素的光亮度是超過了顯示器能夠顯示的最大值。在視覺上,這些地方變得過曝了。而在使用了Tone Mapping的渲染結果中,像素光亮度變得正常,視覺上也更加真實。
今天我們要介紹的這一篇論文是于2002年發表在Siggraph會議上的論文“Photographic Tone Reproduction for Digital Images”。這篇論文提出了一種新的Tone Mapping的方法,使得經過該方法轉換的結果從視覺上看起來更加接近真實世界的物體。首先,我們來看看這篇論文的結果圖,如下圖所示:
其中,左圖是采用線性縮放的結果,右圖是采用論文中的算法進行轉換的結果。可以看到,在簡單的線性縮放結果中,許多細節部分丢失了;而論文算法轉換的結果則很好地保留了圖像的細節部分。接下來,我們将對論文中的算法部分做詳細介紹。
首先,文章作者對整個圖像做了一個光亮度的映射,其作用類似于設定相機的曝光。這一操作實際就是對每一個像素做固定縮放。根據前人對Tone Mapping的研究結論,論文作者認為光亮度的log平均值能夠反映圖檔中像素光亮度的特征。是以,作者用該值對每個像素作縮放。
若用Lω(x,y)表示像素(x,y)的光亮度,則log平均值可表示為:
其中,N 表示像素個數,δ 是一個用于避免奇異值的常數。縮放後的光亮度 L(x,y) 可用如下公式表示:
其中,α 是一個縮放參數,被稱為Key Value,不同的 α 值對應了不同的縮放程度,如下圖所示:
但是,僅僅做簡單線性縮放是不夠的。對于光亮度變化不是很大的圖檔,這種方法可以将像素的光亮度很好地壓縮到一定範圍,但是對于大多數圖檔,絕大部分像素光亮度是在某一個範圍之内,而少數高亮的像素比平均值高太多,很容易産生過曝,如:光源、高光反射等。是以,通常在經過線性縮放之後,還需要利用非線性的算子對圖像進行處理。文中作者列舉了一種常用的算子:
其中,Ld(x,y)表示經過非線性算子處理後的像素,Lwhite表示圖檔中被映射到白色亮度的像素中的最小值。由于是非線性的,對于亮度高的像素縮放更大,是以該公式能夠防止線性縮放中無法處理的過曝情況。但是,這種簡單的算子通常容易導緻細節丢失。作者觀察到,在傳統列印技術中,為了提高列印結果的品質,通常會采用一種dodying-and-burning的方法。該方法的原理是根據列印内容的不同,在不同區域減少光亮度(dodying)或者增加光亮度(burning)。論文作者通過實驗,對比了簡單非線性映射以及dodying-and-burning處理後的結果,如下圖所示:
其中,上排圖檔中太陽被樹枝遮擋住,是以不包含高亮的區域,下面的圖檔則包含高光反射。左邊一列圖檔同樣是采用簡單非線性算子(Simple Operator)縮放,經過觀察可以發現,下圖中的書中文字完全被高光覆寫。由此可見,簡單的非線性算子縮放會丢失很多細節。
論文作者在經過觀察和測試之後,基于dodging-and-burning方法,提出了一種自适應的dodging-and-burning方法,下面我們将詳細說明。
自适應dodging-and-burning的特點是,找出對比度大的邊緣包圍的區域,然後對該區域進行處理。是以,作者提出利用高斯核卷積的方法來找出這些區域。對于不同的縮放系數 s,在不同的像素點(x,y),計算高斯核函數 Ri(x,y,s)與圖像 L(x,y)的卷積。則卷積結果 Vi(x,y,s)可表示為:
其中,Ri(x,y,s)可表示為:
然後,論文作者定義了一個誤差函數,計算不同 αi 參數的卷積結果之差,來衡量圖像局部像素的光亮度分布。則誤差函數 V 可以表示為:
通過對不同的縮放參數 s 進行計算,找出符合如下公式的參數:
其中,ϵ 是一個門檻值,sm 是對每個像素計算出的縮放參數。當我們獲得每一個像素的縮放參數後,對每一個像素進行不同的縮放計算:
進而獲得最終的Tone Mapping結果。下圖顯示了計算過程:
其中,左圖顯示了計算縮放參數的過程,Center表示内圈高斯計算的範圍,Surround表示外圈高斯計算的範圍。右圖顯示了用不同縮放參數進行縮放後的結果。通過觀察可以發下,當縮放太小時無法有效地提取出圖像細節,而縮放太大時會出現黑色的Artifacts。
論文作者将dodging-and-burning計算結果與前人的結果進行了對比實驗。如下圖所示:
其中,New operator表示了論文的實作結果。
論文作者提出了一種新的Tone Mapping的算法,它通過對dodging-and-burning列印技術的觀察和分析,對于不同的區域采用不同的縮放系數,提出了自适應dodging-and-burning的方法,能夠将高動态圖轉換成低動态圖時防止高亮部分過曝,并且能達到在亮部和暗部都能保持細節的目的。
作者資訊:
Erik Reinhard,著名計算機圖形學學者,目前在Technicolor Research and Innovation做研究工作;
Michael Stark,計算機圖形學研究者,曾就讀于美國猶他大學;
Peter Shirley,著名計算機圖形學大牛,真實感渲染專家,猶他大學客座教授,NVidia首席科學家;
James Ferwerda,著名計算機圖形學學者,羅徹斯特理工學院副教授。
論文連結:
http://www.cmap.polytechnique.fr/~peyre/cours/x2005signal/hdr_photographic.pdf
這是侑虎科技第225篇原創文章,歡迎轉發分享,未經作者授權請勿轉載。如果您也有任何獨到的見解或者全新的發現也歡迎聯系我們,一起探讨。(QQ群465082844)
原文出處:侑虎科技
本文作者:admin
轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。