光線投射 Ray Casting [1968]
光線投射(Ray Casting),作為光線追蹤算法中的第一步,其理念起源于1968年,由Arthur Appel在一篇名為《 Some techniques for shading machine rendering of solids》的文章中提出。其具體思路是從每一個(gè)像素射出一條射線,然后找到最接近的物體擋住射線的路徑,而視平面上每個(gè)像素的顏色取決于從可見光表面產(chǎn)生的亮度。
光線投射:每像素從眼睛投射射線到場景
光線追蹤 Ray Tracing [1979]
1979年,Turner Whitted在光線投射的基礎(chǔ)上,加入光與物體表面的交互,讓光線在物體表面沿著反射,折射以及散射方式上繼續(xù)傳播,直到與光源相交。這一方法后來也被稱為經(jīng)典光線跟蹤方法、遞歸式光線追蹤(Recursive Ray Tracing)方法,或 Whitted-style 光線跟蹤方法。
光線追蹤方法主要思想是從視點(diǎn)向成像平面上的像素發(fā)射光線,找到與該光線相交的最近物體的交點(diǎn),如果該點(diǎn)處的表面是散射面,則計(jì)算光源直接照射該點(diǎn)產(chǎn)生的顏色;如果該點(diǎn)處表面是鏡面或折射面,則繼續(xù)向反射或折射方向跟蹤另一條光線,如此遞歸下去,直到光線逃逸出場景或達(dá)到設(shè)定的最大遞歸深度。
經(jīng)典的光線追蹤:每像素從眼睛投射射線到場景,并追蹤次級光線((shadow, reflection, refraction),并結(jié)合遞歸
光線追蹤(Ray tracing)是三維計(jì)算機(jī)圖形學(xué)中的特殊渲染算法,跟蹤從眼睛發(fā)出的光線而不是光源發(fā)出的光線,通過這樣一項(xiàng)技術(shù)生成編排好的場景的數(shù)學(xué)模型顯現(xiàn)出來。這樣得到的結(jié)果類似于光線投射與掃描線渲染方法的結(jié)果,但是這種方法有更好的光學(xué)效果,例如對于反射與折射有更準(zhǔn)確的模擬效果,并且效率非常高,所以當(dāng)追求高質(zhì)量的效果時(shí)經(jīng)常使用這種方法。
以下這張圖示可以很好的說明光線追蹤方法的思路:
Ray Tracing Illustration First Bounce
基于光線追蹤渲染出的效果圖1
基于光線追蹤渲染出的效果圖2
典型的光線追蹤渲染效果圖
光線跟蹤的一個(gè)最大的缺點(diǎn)就是性能,需要的計(jì)算量非常巨大,以至于目前的硬件很難滿足實(shí)時(shí)光線追蹤的需求。傳統(tǒng)的光柵圖形學(xué)中的算法,利用了數(shù)據(jù)的一致性從而在像素之間共享計(jì)算,而光線跟蹤通常是將每條光線當(dāng)作獨(dú)立的光線,每次都要重新計(jì)算。但是,這種獨(dú)立的做法也有一些其它的優(yōu)點(diǎn),例如可以使用更多的光線以抗混疊現(xiàn)象,并且在需要的時(shí)候可以提高圖像質(zhì)量。盡管它正確地處理了相互反射的現(xiàn)象以及折射等光學(xué)效果,但是傳統(tǒng)的光線跟蹤并不一定是真實(shí)效果圖像,只有在非常近似或者完全實(shí)現(xiàn)渲染方程的時(shí)候才能實(shí)現(xiàn)真正的真實(shí)效果圖像。由于渲染方程描述了每個(gè)光束的物理效果,所以實(shí)現(xiàn)渲染方程可以得到真正的真實(shí)效果,但是,考慮到所需要的計(jì)算資源,這通常是無法實(shí)現(xiàn)的。于是,所有可以實(shí)現(xiàn)的渲染模型都必須是渲染方程的近似,而光線跟蹤就不一定是最為可行的方法。包括光子映射在內(nèi)的一些方法,都是依據(jù)光線跟蹤實(shí)現(xiàn)一部分算法,但是可以得到更好的效果。
分布式光線追蹤 Distributed Ray Tracing [1984]
Cook于1984年引入蒙特卡洛方法(Monte Carlo method)到光線跟蹤領(lǐng)域,將經(jīng)典的光線跟蹤方法擴(kuò)展為分布式光線跟蹤算法(Distributed Ray Tracing),又稱為隨機(jī)光線追蹤(stochasticray tracing),可以模擬更多的效果,如金屬光澤、軟陰影、景深( Depthof Field)、運(yùn)動模糊等等。
路徑追蹤 Path Tracing [1986]
Kajiya于1986年提出了路徑追蹤算法的理念,開創(chuàng)了基于蒙特卡洛的全局光照這一領(lǐng)域。根據(jù)渲染方程, Kajiya 提出的路徑追蹤方法是第一個(gè)無偏(Unbiased)的渲染方法。路徑追蹤的基本思想是從視點(diǎn)發(fā)出一條光線,光線與物體表面相交時(shí)根據(jù)表面的材質(zhì)屬性繼續(xù)采樣一個(gè)方向,發(fā)出另一條光線,如此迭代,直到光線打到光源上(或逃逸出場景),然后用蒙特卡洛的方法,計(jì)算其貢獻(xiàn),作為像素的顏色值。
簡單來說,路徑追蹤 = 光線追蹤+ 蒙特卡洛方法。
基于路徑追蹤渲染的效果圖
雙向路徑追蹤 Bidirectional Path Tracing [1993,1994]
雙向路徑追蹤(Bidirectional Path Tracing)的基本思想是同時(shí)從視點(diǎn)、光源打出射線,經(jīng)過若干次反彈后,將視點(diǎn)子路徑( eye path) 和光源子路徑( light path) 上的頂點(diǎn)連接起來(連接時(shí)需要測試可見性),以快速產(chǎn)生很多路徑。這種方法能夠產(chǎn)生一些傳統(tǒng)路徑追蹤難以采樣到的光路,所以能夠很有效地降低噪聲。 進(jìn)一步的, [Veach 1997]將渲染方程改寫成對路徑積分的形式,允許多種路徑采樣的方法來求解該積分。
Ray Casting ,Ray Tracing,Path Tracing的區(qū)別
初學(xué)者往往會弄不明白光線投射(Ray Casting ),光線追蹤(Ray Tracing),路徑追蹤(Path Tracing)三者的的區(qū)別,龔大 @叛逆者 在https://www.zhihu.com/question/29863225這個(gè)答案中的回答已經(jīng)很精辟,本文就直接引用了過來:
? Ray Tracing:這其實(shí)是個(gè)框架,而不是個(gè)方法。符合這個(gè)框架的都叫raytracing。這個(gè)框架就是從視點(diǎn)發(fā)射ray,與物體相交就根據(jù)規(guī)則反射、折射或吸收。遇到光源或者走太遠(yuǎn)就停住。一般來說運(yùn)算量不小。
? Ray Casting:其實(shí)這個(gè)和volumetric可以脫鉤。它就是ray tracing的第一步,發(fā)射光線,與物體相交。這個(gè)可以做的很快,在Doom 1里用它來做遮擋。
? Path Tracing:是ray tracing + 蒙特卡洛法。在相交后會選一個(gè)隨機(jī)方向繼續(xù)跟蹤,并根據(jù)BRDF計(jì)算顏色。運(yùn)算量也不小。還有一些小分類,比如Bidirectional path tracing。
-
蒙特卡洛
+關(guān)注
關(guān)注
0文章
13瀏覽量
8154 -
光線追蹤
+關(guān)注
關(guān)注
0文章
183瀏覽量
21462
原文標(biāo)題:光線投射 ,光線追蹤與路徑追蹤的區(qū)別
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論