Talk about light transport methods

最近又再次回顧了iliyan GeorgeV的light transport course,感受對於算法背後的思想方法和數學原理又有了不少的啓發和思考,所以寫下來權當記錄。算法

渲染問題的本質是解渲染方程,實際上也就是解光場在場景中與材質表面相互做用的結果和分佈,用數學上的話來講實際上也就是解一個光的路徑積分的問題,蒙特卡洛方法去解決也就是朝場景發射光線,而後與表面相互做用,若是擊中光源就獲得輻射值,最後取均值。這種方法的核心問題在於當光場複雜場景複雜時,盲目而均勻發射的光線樣本很難打中光源而成爲有效樣本(反彈的深度達到了限制,或者能量被吸取乾淨),形成最終結果的噪聲很大。全部的light transport方法的目的就是去把握這個複雜並且未知(在你開始渲染以前你無法知道)光分佈的重要性,從而更有效的發射樣本解決問題。app

光場分佈的複雜性是不言而喻的,不只光源能夠分不少種,數目也能夠不少,材質表面的複雜屬性也可能致使光的分佈被改變,最典型的就是焦散。light transport方法解決的問題有點相似先有雞仍是先有蛋的問題,只有當你渲染完成以後你才能知道這個高維函數真實的樣子,可是你又必須瞭解這個函數的樣子從而去根據他的形狀在強的地方多發射些樣本。機器學習

這類問題實際上在科學計算領域比較常見,所以現有的不少方法都是借鑑了科學計算中的方法,大致來講能夠分紅兩類,一類屬於經典蒙特卡洛方法,另外一類是mcmc,也就是利用了markov chain monte carlo。固然之後確定還有更多的算法和更多學科之間的交叉出現。函數

先來看最簡單的path tracing,前面已經提到過,path tracing是向場景中發射光線並但願他可以順利打中光源產生貢獻,這種方法通常在科研領域叫作implicit sampling(光源並不必定能被擊中)問題在於這種方法收斂速度很慢,一個很常見的改進就是所謂的explicit sampling,也就是在每個光線與物體表面交到的點進行一次與光源的鏈接嘗試,若是沒有遮擋(科研上通常把這種光線稱爲shadow ray)就把這兩種結果按照MIS的方式結合(以前的文章說到過,這是一種結合兩種採樣方法的方式)。這樣的改進實際上增長了有效樣本的機率(利用了光源的信息)所以提升了收斂速度。學習

explict sampling

Bidirectional path tracing:剛纔所說的方法實際上在複雜場景中,或者存在着caustic路徑的場景中依然是效果不好的,想象一個主要用間接照明照亮的場景,上面的兩種方法都很可貴到擊中光源的樣本。不過shadow ray的思想實際上啓發了BDPT的算法,若是咱們從光源和攝像機都發射光線,而且在它們每前進一步的時候都嘗試去用shadow ray鏈接兩個端點,那麼咱們找到有效的光的採樣方法的機率就增大了不少。
圖片描述優化

如圖所示,實際上咱們能夠想象這全部的對光路徑採樣方式的集合構成了一個空間(也就是所謂的path space)可是在這個路徑空間中因爲場景的複雜性咱們無法知道哪一種方法是最好的,哪一種方法又幾乎打不中光源,所以最保險的方法就是每種都進行一次嘗試,而後把全部的結果結合起來,這也就是bidirectional的核心思想了。spa

BDPT已是一個很是魯棒的算法,可以應對大部分的複雜光照和場景,不過若是你細心的話確定會想到若是這全部的採樣方式都不好怎麼辦?那這種狀況下BDPT的效果不是與Path tracing同樣糟糕麼?很遺憾,這種場景真的存在。blog

考慮一個陽光照耀下的水池的光路:圖片

圖片描述

而後嘗試着用咱們的connection的方法去鏈接路徑中的每一個節點,咱們會發現,每一種鏈接都無法進行,由於純鏡面和diffuse之間無法進行shadow ray 鏈接(或者說鏈接老是失敗)而從光源發出的光無法打中咱們理論上無限小的相機,因而咱們惟一的但願只能靠從攝像機發出的光線,但願他能隨機打中光源(沒有更好的採樣方式了)那麼若是光源體積很小的狀況下,狀況就會很糟,收斂速度就會狠慘不忍賭,這也就是科研文章常提到的SDS路徑。內存

Vertex Connection and merging: 對於上面的問題一種很明顯的思路就是既然咱們的鏈接失敗,那把鏈接的條件放寬可不能夠呢?可是放寬的鏈接條件怎麼去精確近似純鏡面呢?這樣的方法真的能夠有,最近提出的VCM方法就是這個思路:

圖片描述

圖中的x1和x2之間的鏈接是很困難的,由於一個是純鏡面,一個是diffuse,可是假如如今咱們從x1發射光線獲得交點x2‘而且對於必定半徑內的x2 x2’咱們把他當成一個vertex,那麼咱們獲得有效採樣方法的機率天然就大不少。

換個角度看圖的右邊,咱們會發現這種方法與另外一種統計有偏的渲染方法photon mapping有相似之處,VCM把左邊相似BD的方法叫作vertex connection, 右邊相似photon mapping 的方法叫作vertex merging,而VCM等因而再次在兩種方法之間作了一個結合(MIS)在Vertex connection效果好的地方用connection,而在Vertex connection失效的地方用merging.

那麼對於merging形成的誤差,VCM採用的是逐步縮小merging的半徑來達到最終的一個統計無偏結果。

實際上merging的優點並非在於他的採樣方法比傳統方法效率高,而在於他可以重用大量的light path,經過查找photon map的方法用一樣的光線實現巨大量的樣本收集(空間換時間)。這些實現細節具體能夠參閱論文。

VCM能很好處理SDS路徑問題,在各類場景中的適應性都比較好。可是咱們也看到從PT到BD到VCM算法實現的複雜性愈來愈高,VCM還須要巨量內存支持photon map,因此工業界基本上還停留在PT的階段(由於它足夠快,適應性強)如何找到這些高級算法和實際生產的結合點,還很值得研究。

從以上的論述中能夠看出傳統蒙特卡洛方法的特色:暴力搜索每一種可能的採樣方法,儘可能避免徹底靠隨機採樣去擊中目標,若是咱們把思路擴展到機器學習和優化理論上的話,就會發現這些方法都是力圖求一個local的最優解,換句話說,這些方法找到的有效路徑每每是local最優的,若是跳出這個local的限制,每次都嘗試去尋找全局最優的採樣方式呢?MLT就是把metropolis hasting 算法應用在light transport中的一種算法,下一篇再說把。。

相關文章
相關標籤/搜索