High Dynamic Range

來源:互聯網
上載者:User

    本文描述的是即時渲染領域內的HDR高動態範圍渲染技術,此技術可粗略理解為在LDR表面呈現HDR情境。
    首先,DR動態範圍是指某環境下某物理量最高值與最低值之比值。HDR全稱High Dynamic Range,即高動態範圍,通常指DR值達10的10次方以上。例如,室外太陽光的亮度與室內陰暗角落的地磚的亮度之比值可以達到10的10次方以上,這樣的情境就可以稱為具有高動態範圍。
    既然有高動態範圍,相應也有低動態範圍LDR,最明顯的例子就是我們的電腦顯示器。顯示器的DR(即對比)一般不會超過10的4次方。
    如果不作任何處理,直接在LDR表面呈現HDR情境,可以預計,會出現過曝光或欠曝光情況,丟失情境細節,1。


圖1 直接HDR—>LDR映射導致丟失情境細節
那麼,如何在一個LDR表面呈現HDR情境並且最大限度保留情境細節呢?從人類視覺系統可以找到這個問題的答案。
    人類視網膜是LDR表面,人類的視覺系統會根據情境的平均亮度,自動調整進入視網膜的光量(通過調整瞳孔大小實現),使視網膜盡量多地接收情境細節。人們根據這種機制,研製出機械鏡頭裡的光圈。在攝影時,攝影師根據情境的平均亮度,調整光圈大小,保證捕捉足夠的細節。例如,在較暗的環境下應使用大光圈,如下兩圖對比:
 
圖2 ISO 800 f/8 1/10秒 無閃光 (此情況屬於欠曝光)

 
圖3 ISO 800 f/3.2 1/10秒 無閃光
很明顯,光圈1/8的照片,只能看見字母,鍵盤的鍵帽已看不見,丟失細節,而光圈1/3.2的照片效果剛剛好,細節得到充分的保留。細心的朋友可能也發現,光圈1/3.2的照片數字鍵4、5、6略顯模糊而光圈1/8的照片沒有模糊。是的,這又是光圈的另一個效果,景深(Depth of Field或DoF)。即時渲染的DoF效果將在以後的文章中介紹。
    回到即時渲染HDR上,有沒有類似機械鏡頭光圈這樣的組件?沒有,但有方法可以近似實現光圈效果,這個方法就是Tone Mapping(色調映射)。Tone Mapping詳細資料可參閱《Photographic Tone Reproduction for Digital Images》這篇paper。下面將Tone Mapping精髓一一列出。
    Tone Mapping可以理解為以下步驟(例子):
1.有一HDR情境,一LDR表面(電腦顯示器),如下:
 
圖4
其中,本例中的HDR情境有大部分細節都是高亮度(d區)且不乏低亮度地區(a、b區)。如果直接在LDR表面呈現HDR情境,a、b地區將表現為全黑,而d區的大部分只能以全白形式呈現。如下兩圖對比(圖片來源DirectX SDK):
 
圖5 HDR直接映射到LDR表面,高亮度地區細節丟失,或者稱之為過曝光

 
圖6 這是期望的結果,最大限度保留細節
因為HDR情境大量細節集中在高亮的d區,所以我們應該盡量把d區細節呈現出來,即使是使用LDR表面呈現。接下來的工作就是要達到這個目的。
2.計算HDR情境的平均亮度。計算平均亮度使用以下公式:
Lavg = exp[ 1 / N( sum[ log( delta + L( x, y ) ) ] ) ]
其中L(x,y)是像素(x,y)的亮度(亮度可以通過RGB計算:Lum = 0.27R + 0.67G + 0.06B),delta是一個極小的值,防止L(x,y)為零,N是情境總像素。可以預計,本例的情境的平均亮度還是會集中在d地區。
3.根據HDR情境的平均亮度,進行HDR—>LDR映射。使用以下公式:
Cscaled( x, y ) = a * Chdr( x, y ) / Lavg       (1)
及Cdest( x, y ) = Cscaled( x, y ) / ( 1 + Cscaled( x, y ) )   (2)
其中,(1)式作用是根據Lavg對原有情境的亮度進行線性縮放。其中,Chdr是HDR情境像素的顏色,Cscaled是縮放後的顏色,Cdest是LDR對應HDR像素的顏色。關鍵參數a一般情況下設定為0.18。這裡說一下a的由來,假設在LDR表面(電腦顯示器)全黑為0,全白為1,在0和1之間有9個過渡灰階:
 
圖7 LDR亮度過渡
中間(即第六格)格的亮度為0.18,把HDR情境的平均亮度映射到第六格,就可以保證在LDR表面保留最多的細節。經過線性縮放後,我們得到了一個(以LDR中等亮度為中心點的)可以投影到(LDR表面)0-1區間的亮度分布區間。其實這個步驟的作用就是使LDR中等亮度與HDR的平均亮度重合。最後把這個區間的所有顏色投影到0-1區間,這項工作就由公式(2)完成。
    值得注意的是,參數a可以根據實際情況設定,a值越高(範圍0.0-1.0),LDR呈現出來的情境灰階越高,也就是越向白色(1.0)靠攏;另外,公式(2)稱為Tone Mapping Operator,這個Operator可以有多種形式,一些Operator還能把高亮度細節重新恢複出來而不是白色一片,具體資訊參閱《Photographic Tone Reproduction for Digital Images》。
    經過上述3步驟轉換,在LDR表面就可以呈現HDR情境並且保留最大限度的細節,當然,仍然會丟失一些細節,就像在猛烈陽光的室外,你無法透過屋子的視窗窺探室內的情況。注意了,如果在這種情況下沒有Tone Mapping(瞳孔縮小),呈現你眼前的可能是白茫茫一片,什麼都看不見。我小時候就有過這樣的經曆,因為醫生要檢查眼底(視網膜),所以要擴大瞳孔,瞳孔擴大後,在室外看什麼東西都很刺眼且看不清楚。
    完成Tone Mapping後,為了增強視覺效果,通常會加入Bloom特效,Bloom就是對情境有高光的像素進行模糊處理。另外,一些由鏡頭產生物理現象也可以加上,例如六角型或星星折射等。
    到目前為止的討論都是以理論為主,以下簡要說明在D3D下如何?。
    首先,我們要渲染出HDR情境,才能進行HDR—>LDR映射。HDR情境需要使用浮點Render Target來渲染,一般是使用D3DFMT_A16B16G16R16F浮點格式。這是因為普通的A8R8G8B8整數格式無法記錄大於1.0的值(0-255映射為0.0-1.0,除非進行資料壓縮)。另外,情境的光源也有要求,亮度範圍再也不是0.0-1.0,而是可以使用大於1.0的亮度值,這個值可以看作是光源實際物理亮度。
    得到HDR情境後(使用Render To Texture),就可以進行平均亮度計算。在實際應用中,為了提高效率,通常不會對HDR情境進行逐個像素計算,而是先把HDR情境downsample到比較小的尺寸(1/16),再進行平均亮度計算。downsample過程可以迭代幾次,以減少計算量。
    得到平均亮度後,就可以進行HDR—>LDR映射。這個映射過程可以加入一些視覺特效:實現一個亮度漸層過程,類比從高亮環境進入較暗環境(或相反情況)時人眼瞳孔變化。具體方法如下:記錄連續兩幀的Lavg,例如a幀(即前一幀)是高亮環境,b幀(當前幀)是較暗環境,得到Lavg[a] > Lavg[b],假如view point不移動,Lavg[b]將恒定且代表當前Lavg,這時,把b幀映射到LDR,在公式Cscaled( x, y ) = a * Chdr( x, y ) / Lavg的Lavg不直接使用Lavg[b],而是用Lt[b],Lt[b]=Lavg[a]+(Lavg[b]-Lavg[a])*delta,接著在渲染b+1幀是,Lt[b+1]=Lt[b]+(Lavg[b+1]-Lt[b])*delta,其中delta是小於1大於0的數。由於view point不動,所以Lavg[b+n]=Lavg[b+1]=Lavg[b]。使用這個方法,經過若干幀(如n幀)渲染後,Lt[n]會趨向與Lavg[b]相等,從而實現亮度過渡效果,改變delta的大小,可控制這個過渡效果的期間。
    完成HDR—>LDR映射後,可以加入Bloom或鏡頭折射效果,突出高亮部分。Bloom效果比較容易實現,把情境的高亮部分過濾出來後,加入模糊後再與最終畫面混合就ok了。而鏡頭折射效果還真不好說,具體可參考DirectX SDK或者這裡。
    HDR渲染已是一個常用特效,本文目的是加深對HDR渲染的認識,希望本文對想瞭解HDR渲染的朋友有協助。另外,我強烈推薦閱讀《Photographic Tone Reproduction for Digital Images》這篇paper,讀過的都懂的。另外,也可以參考DirectX SDK例子:HDRLighting以及這裡。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.