全局光照記錄和總結

源自《Real-Time Rendering 3rd》,此書被稱為渲染中的“九陰真經”和毛星云的文章,結合做的總結,感謝
下面是正文
全局光照在離線渲染中常用,實時渲染也是利用預渲染,將知識按照自己的理解方式歸納總結以便查閱

全局光照 = 直接光照(Direct Light) + 間接光照(Indirect Light)

可以分為以下方向:
Ray tracing 光線追蹤
Path tracing 路徑追蹤
Photon mapping 光子映射
Point Based Global Illumination 基于點的全局光照
Radiosity 輻射度
Metropolis light transport 梅特波利斯光照傳輸
Spherical harmonic lighting 球諧光照
Ambient occlusion 環境光遮蔽
Voxel-based Global Illumination 基于體素的全局光照
Light Propagation Volumes Global Illumination
Deferred Radiance Transfer Global Illumination
Deep G-Buffer based Global Illumination

光線追蹤(Ray Tracing)
又分為
遞歸式光線追蹤(Whitted-style Ray Tracing),
分布式光線追蹤(DistributionRay Tracing),
蒙特卡洛光線追蹤(Monte Carlo Ray Tracing)。

路徑追蹤(Path tracing)又分為
蒙特卡洛路徑追蹤(Monte Carlo Path Tracing),
雙向路徑追蹤(Bidirectional Path Tracing),
能量再分配路徑追蹤(Energy Redistribution Path Tracing)。

路徑追蹤,就是基于光線追蹤,結合了蒙特卡洛方法而成的

1.遞歸式光線追蹤(Recursive Ray Tracing)方法:在光線投射的基礎上,讓光線在物體表面沿著反射,折射以及散射方式上繼續傳播,直到與光源相交。
主要思想:從視點向成像平面上的像素發射光線,找到與該光線相交的最近物體的交點,如果該點處的表面是散射面,則計算光源直接照射該點產生的顏色;如果該點處表面是鏡面或折射面,則繼續向反射或折射方向跟蹤另一條光線,如此遞歸下去,直到光線逃逸出場景或達到設定的最大遞歸深度。


image.png

每像素從眼睛投射射線到場景,并追蹤次級光線((shadow, reflection, refraction),并結合遞歸

2.分布式光線跟蹤算法(Distributed Ray Tracing)引入蒙特卡洛方法(Monte Carlo method)到光線跟蹤領域,可以模擬更多的效果,如金屬光澤、軟陰影、景深( Depthof Field)、運動模糊等等。

3.路徑追蹤的基本思想是基于蒙特卡洛的全局光照,從視點發出一條光線,光線與物體表面相交時根據表面的材質屬性繼續采樣一個方向,發出另一條光線,如此迭代,直到光線打到光源上(或逃逸出場景),然后用蒙特卡洛的方法,計算其貢獻,作為像素的顏色值。
路徑追蹤 = 光線追蹤+ 蒙特卡洛方法。


image.png

路徑追蹤渲染效果圖

4.雙向路徑追蹤(Bidirectional Path Tracing)的基本思想是同時從視點、光源打出射線,經過若干次反彈后,將視點子路徑( eye path) 和光源子路徑( light path) 上的頂點連接起來(連接時需要測試可見性),以快速產生很多路徑。這種方法能夠產生一些傳統路徑追蹤難以采樣到的光路,所以能夠很有效地降低噪聲。 進一步的, [Veach 1997]將渲染方程改寫成對路徑積分的形式,允許多種路徑采樣的方法來求解該積分。

5.梅特波利斯光照傳輸(Metropolis Light Transport)方法,路徑追蹤( Path Tracing)中一個核心問題就是怎樣去盡可能多的采樣一些貢獻大的路徑,而該方法可以自適應的生成貢獻大的路徑,簡單來說它會避開貢獻小的路徑,而在貢獻大的路徑附近做更多局部的探索,通過特殊的變異方法,生成一些新的路徑,這些局部的路徑的貢獻往往也很高。 與雙向路徑追蹤相比, MLT 更加魯棒,能處理各種復雜的場景。比如說整個場景只通過門縫透進來的間接光照亮,此時傳統的路徑追蹤方法因為難以采樣到透過門縫的這樣的特殊路徑而產生非常大的噪聲。


image.png

一張圖理解光線追蹤 Ray Tracing


image.png

典型的光線追蹤渲染效果圖

光線跟蹤的一個最大的缺點就是性能,需要的計算量非常巨大,以至于目前的硬件很難滿足實時光線追蹤的需求。傳統的光柵圖形學中的算法,利用了數據的一致性從而在像素之間共享計算,而光線跟蹤通常是將每條光線當作獨立的光線,每次都要重新計算。但是,這種獨立的做法也有一些其它的優點,例如可以使用更多的光線以抗混疊現象,并且在需要的時候可以提高圖像質量。盡管它正確地處理了相互反射的現象以及折射等光學效果,但是傳統的光線跟蹤并不一定是真實效果圖像,只有在非常近似或者完全實現渲染方程的時候才能實現真正的真實效果圖像。由于渲染方程描述了每個光束的物理效果,所以實現渲染方程可以得到真正的真實效果,但是,考慮到所需要的計算資源,這通常是無法實現的。于是,所有可以實現的渲染模型都必須是渲染方程的近似,而光線跟蹤就不一定是最為可行的方法。包括光子映射在內的一些方法,都是依據光線跟蹤實現一部分算法,但是可以得到更好的效果。

6.光線投射(Ray Casting)
作為光線追蹤算法中的第一步,其理念起源于1968年,由Arthur Appel在一篇名為《 Some techniques for shading machine rendering of solids》的文章中提出。其具體思路是從每一個像素射出一條射線,然后找到最接近的物體擋住射線的路徑,而視平面上每個像素的顏色取決于從可見光表面產生的亮度。

Ray Casting ,Ray Tracing,Path Tracing區別
Ray Tracing:這其實是個框架,而不是個方法。符合這個框架的都叫raytracing。這個框架就是從視點發射ray,與物體相交就根據規則反射、折射或吸收。遇到光源或者走太遠就停住。一般來說運算量不小。
Ray Casting:其實這個和volumetric可以脫鉤。它就是ray tracing的第一步,發射光線,與物體相交。這個可以做的很快,在Doom 1里用它來做遮擋。
Path Tracing:是ray tracing + 蒙特卡洛法。在相交后會選一個隨機方向繼續跟蹤,并根據BRDF計算顏色。運算量也不小。還有一些小分類,比如Bidirectional path tracing。

環境光遮蔽 Ambient Occlusion
環境光遮蔽(Ambient Occlusion,簡稱AO)是全局光照明的一種近似替代品,可以產生重要的視覺明暗效果,通過描繪物體之間由于遮擋而產生的陰影, 能夠更好地捕捉到場景中的細節,可以解決漏光,陰影漂浮等問題,改善場景中角落、鋸齒、裂縫等細小物體陰影不清晰等問題,增強場景的深度和立體感。

可以說,環境光遮蔽在直觀上給玩家的主要感覺體現在畫面的明暗程度上,未開啟環境光遮蔽特效的畫面光照稍亮一些;而開啟環境光遮蔽特效之后, 局部的細節畫面尤其是暗部陰影會更加明顯一些。

Ambient Occlusion的細分種類有:

SSAO-Screen space ambient occlusion
SSDO-Screen space directional occlusion
HDAO-High Definition Ambient Occlusion
HBAO+-Horizon Based Ambient Occlusion+
AAO-Alchemy Ambient Occlusion
ABAO-Angle Based Ambient Occlusion
PBAO
VXAO-Voxel Accelerated Ambient Occlusion
一般而言,Ambient Occlusion最常用方法是SSAO,如Unreal Engine 4中的AO,即是用SSAO實現。


image.png

光線追蹤代碼

for each pixel of the screen
{
    Final color = 0;
        Ray = { starting point, direction };
        Repeat
    {
        for each object in the scene
            {
                    determine closest ray object/intersection;
            }
            if intersection exists
                {
                    for each light inthe scene
                    {
                            if the light is not in shadow of anotherobject
                            {
                                    addthis light contribution to computed color;
                            }
                }
           }
               Final color = Final color + computed color * previous reflectionfactor;
               reflection factor = reflection factor * surface reflectionproperty;
               increment depth;
      } until reflection factor is 0 or maximumdepth is reached
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375