2021年4月14日 星期三

既是起點也是終點 - 光線追蹤渲染。

2018年末,NVIDIA正式推出全球首款支援即時性光線追蹤渲染技術的NVIDIA Quadro RTX,同時發布最新Turing架構系列GPU,宣告進入了光線追渲染的新世代。
 
即時性光線追渲染的實現對計算機圖學絕對稱得上革命性的改變,不過在討論光線追渲染(ray tracing)之前,必須先解釋與之對應的傳統渲染方法:光柵化渲染(rasterization)。
 
計算機圖學的傳統渲染標準流程為定義完要建構的虛構場景及內含諸多的虛構光源和虛構物體,接著計算每個虛構物體的形變方式、坐標變換、紋理填充、距離遠近,再將其投影至螢幕上,經過名為光柵化的過程,確定每個畫素具備的虛構場景資訊並將其匯總起來,最後決定該畫素呈現顏色以上過程中的每一步皆須考慮虛構物體與虛構光源的相對位置關係及成像影響,從而生成逼真的畫面。
 
從以上簡單敘述的光柵化渲染流程中,很容易看出一個關鍵問題,即光柵化渲染對虛構場景裏各項虛構物體的交互影響考慮甚微,虛構物體彼此之間近乎完全獨立,當然了這樣帶來的好處是利於平行處理,壞處則是如此方式所渲染出的場景,因為缺乏虛構物體間接光源交互影響,和現實場景情況差異甚大,看起來難免有股虛假感。
 
譬如在渲染陰影這方面,傳統光柵化渲染的陰影,並非該區塊真正的光影特性,實際上陰影也是一個虛構物體,建構該虛構物體時刻意定義了其和遮蔽物體與虛構光源的關係後,陰影邊緣部分再套用特殊的數學模型或紋理填充使其輪廓顯得模糊。
 
鏡面反射和水面倒影亦是用建構一個虛構物體得來,縱使相關數學模型已經做得相當不錯,但光柵化渲染終究不是製造真正的光影,尤其當虛構場景的精緻度與內容量不斷上升時,實在難以幫每個虛構物體都建構完善的對應虛構陰影。

光追追蹤渲染功能開啟後的水面倒影效果比較

現實場景中每個物體所產生的視覺效果,絕不僅只考慮自身與幾個主要光源之間的關係,周邊其他物體及間接光源對其也會或多或少產生影響,甚至某些情況下影響權重並不亞於主要光源,其所形成的陰影、反射與倒影等光影特性,和周邊其他物體及間接光源的關係就更複雜了,這些都是光柵化渲染遇到的難題。

光追追蹤渲染功能開啟後的光滑表面反射效果比較

然而若完全仿照現實場景視覺效果的產生方式,把場景內所有物體和所有光源的交互關係全部納入考慮,對目前的工程技術來說,計算量勢必大至無法負荷。
 
時間軸拉回到西元前數百年,古希臘哲學家們曾經探討過人眼的視覺機制,Pythagoras提出一有趣猜想,他認為可能是人眼對觀察視角發出無數個某種不知名媒介,而該媒介會把接觸到的一切資訊,包括任何物體的形狀、距離、溫度、顏色……等,盡皆傳回人眼感知,從而產生視覺。 

隨著科技和醫學的進步,我們知道Pythagoras的猜想並不正確,不過他提醒了一件重要事情,不在觀察者視角內的光線資訊,對人眼不構成視覺效果,某程度而言納入考慮其實沒有意義,又由於光線乃直線前進,理論上光線接收方一定可以逆向循跡找到光線發出方或光線源頭。
 
光線追渲染的實現概念,正是來自觀察者對接收到的光線進行逆向追


假設螢幕上的每個畫素皆有從觀察者視角對虛構場景所發出的近於無限多條逆向光線,既然某條光線在虛構場景裏經過諸多虛構物體的反射或折射後,最後會匯集到某個畫素上,那麼該條光線必然存在於觀察者視角經由該畫素所發出的近於無限多條逆向光線之中。
 
接著計算每條逆向光線打到了虛構場景裏的哪個虛構物體的哪個位置,該位置屬於平面還是曲面?該位置材質對光線的反彈和吸收比例為何?種種因素都會影響該條光線造成的視覺效果,如果打到的位置材質帶有透射或折射屬性,那麼當然會產生多條光線需要繼續往下追蹤,除此之外,光線在路徑上隨著距離的衰減、漫射等光學特性都需考慮在內。
 
當每個畫素確實由接近無限多條逆向光線及接近無數次逆向追匯集資訊而成,透過光線追蹤渲染所生成的影像,和現實場景拍攝出來的畫面將非常接近。
 
就以上述提到渲染陰影的例子繼續討論,光線追蹤渲染概念下的陰影,不再是建構一個虛構物體,光線追蹤渲染可以如實反應該區塊的光影特性,陰影中間主要受到遮蔽物體和虛構光源的影響,陰影邊緣則會接收到其他虛構物體的間接光源,顯現柔和模糊的效果,不須經過後製加工就很接近現實情況。
 
實際上若使用光線追渲染,每個虛構物體所呈現的視覺效果都遠比光柵化渲染看起來更加真實,尤其牽涉到環境光源遮蔽、暗處的陰影漸層、非光滑表面的模糊倒影之類的細節部分,畫面呈現的空間層次感與亮暗對比性,相較過往改善得非常有感。
 
聽起來光線追渲染的概念本身並沒有多難理解?是的,其實相關概念及數學模型早在1979年便有人提出。那麼為什麼2018NVIDIA推出支援即時性光線追渲染技術的GPU能夠造成轟動呢?
 
基本上非即時性光線追渲染已在電影、廣告等資金充足且注重高品質視覺特效的行業裏廣泛應用,進一步的難題在於即時性。 

因為即使沒有完全仿照現實場景視覺效果的產生方式,改用觀察者對接收到的光線進行逆向追,此技術所需要的計算量仍然過於龐大,每個畫素起碼要計算成千上萬條逆向光線才能形成不錯的效果,如大型特效電影之類,每個畫素的形成都是追蹤了數十萬條甚至上百萬條逆向光線。

那麼NVIDIA是如何保證滿足如此龐大計算量的性能需求的呢?在其推出的Turing架構GPU中,新增了一個專門加速光線追渲染的硬體加速器,想了解該硬體的加速原理,首先要知道光線追渲染常運用到的「邊界空間分層遍歷算法」(Bounding Volume Hierarchy)。

具體來說,欲渲染的虛構場景內存在某個虛構物體,先將該虛構物體所處位置的母邊界空間明確標示出來,再繼續把虛構物體各細節部分不斷切分成更細碎的子邊界空間。當考慮某條逆向光線和該虛構物體的關係前,可以藉由計算是否和母邊界空間有所相交而判斷,若和母邊界空間有所相交,則再計算和各子邊界空間的相交關係,如此反覆往下探索直到獲得該虛構物體最底層的位置資訊。

邊界空間分層遍歷算法大幅減少每條逆向光線需要遍歷整個虛構場景的計算量,而且相關資訊亦可提供周遭性質相近的逆向光線使用,大大提高執行效率。

NVIDIATuring架構GPU中新增的硬體加速器,主要功能便是為邊界空間分層遍歷算法做獨家改良及特殊硬體加速,使光線追蹤渲染計算速度得到了巨大提升。

事實上即時性光線追蹤渲染仍在起步階段,還是那個提過很多次的老問題,計算量十分龐大。雖然開啟光線追蹤渲染功能,可以得到更真實的視覺效果,但由於GPU性能依然不是那麼游刃有餘,會需要付出解析度、更新率雙雙降低的代價,一來一回之下實際畫面效果沒有明顯提升,因此光線追蹤渲染並沒有廣受青睞。

故目前對光線追蹤渲染相關技術的探討是計算機圖學領域相當熱門的題目,例如對「邊界空間分層遍歷算法」的改良,邊界空間是否存在更好的切分方法?子邊界空間該細切到何等程度?又如「體素光錐追蹤」(Voxel Cone Tracing),把鄰近虛構物體的光影特性做結合或降頻採樣,以減少逆向光線計算量,諸如此類提升效率的演算法或在計算量和視覺效果之間做取捨的評估。

不過我相信以目前GPU性能的提升速度,即時性光線追蹤渲染在可預見的未來幾年內會成為必備的功能。

光線追蹤渲染不僅為使用者帶來了更接近現實場景的畫面,還可以降低虛構場景畫面開發難度,因為很多從事虛構場景畫面相關美化的藝術專業人員,並不具備任何計算機圖學的基礎知識,只能以現實場景的光影特性去調整畫面,然而這在光柵化渲染的時代未必有效,而光線追渲染一定程度上將會改變如此情況。

計算機圖學渲染技術的起點,乃為使用者呈現彷彿現實場景的畫面,過去很長一段時間卻因為性能因素而暫時屈就光柵化渲染,如今隨著硬體性能的提升,出現了實現即時性光線追蹤渲染效果的可能,光線追蹤渲染的普及,或許也將是計算機圖學渲染技術的終點。



沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。