關於離線渲染有哪些資料可以推薦的?
關於離線渲染最近最全面的Survey可能是Per H. Christensen和Wojciech Jarosz 2016年的:https://www.cs.dartmouth.edu/~wjarosz/publications/christensen16path.html
我針對其中的一些重要內容做點說明,同時考慮到這篇Survey是偏工業運用的,我再補充一點處於研究性質的一些熱點新技術。由於這方面資料幾乎都是論文為主,我說些相應概念和技術名詞,可以對照閱讀相關主題的論文。分兩個部分:
首先,工業運用中的主流技術,這方面包括Pixar的RenderMan,Disney的Hyperion以及Weta的Manuka等渲染器,主流當然還是CPU渲染,幾個比較突出的技術包括:
- VCM/UPS:由於BPT的缺點是不能處理SDS(specular-diffuse-specular)路徑,PM的缺點是處理diffuse表面不如BPT,2012年的VCM/UPS(Vertex connection merging/Unified path sampling)演算法是一個很大的突破,它開始嘗試將BPT和PM結合起來,使用PM對light subpath採樣,並且將演算法統一到BPT中,這樣BPT就可以有效處理SDS。近幾年中VCM/UPS幾乎成了現在主流的離線渲染解決方案(參見The Path to Path-Traced Movies這篇論文);當然,VCM/UPS的缺點是,因為它仍然是BPT的思路,eye subpath並不知道light subpath的情況,所以儘管它能處理SDS,但是兩個subpath連接的時候形成的很多full path由於可見性(尤其對於複雜visibility的場景)而對光照貢獻率很低,而MLT則很擅長處理Visibility的問題,所以Robust Light Transport Simulation via Metropolized Bidirectional Estimators這篇論文就基於VCM/UPS來使用MLT對light subpath進行採樣,這樣保證了兩個subpath之間的連接更符合最終圖像分布。這篇論文也就同時把BPT,PM和MLT三大基礎演算法組合在了一起! 不過目前MLT方法在工業中運用還不多。
- 光線排序和連貫性:由於光線傳輸的隨意性使得其並不能利用硬體的指令執行模型以及緩存系統,所以考慮光線的連貫性或者對光線進行排序是能夠大大提升路徑追蹤效率的方法,這方面,基於連貫性(coherence)的路徑追蹤技術將這些數據分組成一些小的數據包,稱為光線包(ray packet),這些數據包包含多個內存相鄰的數據,並能能夠被同一個指令執行。傳統的基於光線包的技術主要是針對主要光線(Primary rays),即攝像機向場景發射出的光線,之後的光線可能向場景隨處發射,並且對性能影響更大。2013年,迪斯尼的Christian Eisenacher等在一篇名為《sorted deferred shading for production path tracing》的論文中提出了一種改進方法,這種方法的核心思想是在實際計算之前對光線進行排序,這是Disney的In-house渲染器Hyperion的重要組成部分,這些技術最早用於《超能陸戰隊》當中。
- 降噪技術:由於蒙特卡洛方法帶來的方差,使得需要增加4倍的採樣數量才能換來2倍的方差減少,所以每像素採樣數是制約路徑渲染器性能的重要因素。然而,光增加採樣數量並不能有效的解決噪點問題,因為圖像的噪點分部通常是不均勻的,所以我們非常渴望能夠在方差更大的區域放置更多的採樣,這樣能夠更有效的減少方差,從而在少量的spp條件下獲得非常高的圖像質量。降噪技術是目前工業當中非常重要的部分,《瘋狂動物城》《海底總動員2》這些沒有一部不是嚴重依賴於降噪技術。降噪技術的核心是適應性採樣和適應性重建,這些技術將採樣的過程分成多個迭代的過程,每次對採樣結果進行誤差分析,根據誤差分布來得出一個採樣分布圖,用於在下一迭代中在方差更大的地方放置更多的採樣。降噪技術主要有兩大類方法:基於路徑空間的方法,這類方法直接對路徑採樣的過程進行跟蹤,比如使用頻率域分析或者微分分析等,由於計算量比較大,工業中主要使用第二種基於圖像空間的方法,這方面的核心人物是Fabrice Rousselle。
其次,處於研究中的一些熱點技術:傳統的蒙特卡洛方法中每個抽樣之間是獨立的,它並不能有效辨識這種頻率變化特徵,要想能夠辨識圖像的分布特徵,我們需要了解每個路徑的局部特徵,即我們要考慮光線之間的相關性,這可以從多個層面改善路徑追蹤演算法的效率。以下舉幾種熱點技術:
- 頻率域分析:這類技術在光線追蹤的過程中,還同時跟蹤一條該光線(稱為中心光線)對應的一個局部光照場(Local Light Field),這其實是一個像素範圍內的空間-方法-時間(spatial-direction-temporal)分布,這個分布會隨著光線的傳輸過程變化,例如表面的BRDF反射,直線傳播,陰影遮擋等,如果能夠跟蹤這個分布的變化,就能夠有效地分析圖像的一些局部特徵。這可以用來實現紋理過濾,適應性採樣和適應性重建等很多有用的運用。頻率域分析當前比較高效的實現是協方差追蹤,它用一個橢圓形的高斯分布來近似這個局部光照場的分布,而這個橢圓形高斯分布可以用該局部光照場的協方差矩陣來表示,這方面的核心人物是Frédo Durand和Laurent Belcour等。
- 流形/微分幾何:流形探索技術的思路是利用費馬原理能夠非常有效地尋找光澤路徑,它主要用於MLT中用於尋找鏡面,光澤路徑,但是它不能成為一種獨立採樣演算法,因為流形探索依賴於一條已有路徑;另外,流形探索在Weta還被用於在漫反射頂點處計算透過光澤的半透明體直達光源的「直接光源」計算,因此渲染焦散效果,層表面散射非常有效。這方面的核心人物是PBRT的作者之一Wenzel Jakob等。
- 梯度域渲染:梯度域渲染技術也是與具體採樣演算法相對獨立,可以是傳統的PT,BPT或MLT,它通過在已有路徑上計算梯度來提供圖像的高頻部分信息,最後通過泊松方程重建圖像,傳統的蒙特卡洛演算法善於對低頻部分進行採樣,而篩選泊松方程的實質是梯度場充當了高頻區域的採樣,所以同樣同等採樣演算法和採樣數下渲染質量高得多。
以上只是些相對重要和熱門的技術,當然不是全部,望參考。
這取決於你打算怎麼用了。研究?做渲染器?自娛自樂?
PBRT出到第三版了 第二版中文也出了
離線渲染方面絕對的良心之作,手把手叫你寫一個離線渲染器。
缺點是太大部頭,有長且陡的學習曲線
如果想快點上手看到效果,網上也有一百行左右的renderer
比如:smallpt: Global Illumination in 99 lines of C++
有朋友問中文版鏈接,統一回復:《物理渲染:從理論到現實(第2版)》 馬特·法爾 (Matt Pharr), 格雷格·漢弗萊斯 (Greg Humphreys), 李秋霞【摘要 書評 試讀】圖書
推薦閱讀:
※為什麼一些 3D 遊戲的植被效果看上去還是像紙片一樣?《神秘海域4》的 3D 植被效果是如何實現的?
※Redshift是否會對動畫產生革命性的變化?
※物理材質與光線追蹤的關係?
※windows平台下有類似framebuffer的東西嗎?
※為什麼虛幻4的渲染要比unity強,強在哪裡了,想知道底層原理解釋?