在《硬影像》與羅登導演聊渲染技術
這周末,我參與錄製了羅登導演(知乎: @Nordenbox)主持的《硬影像》播客節目,《硬影像》由 IPN 出品,由羅登主持,是一個關注影像之一切的播客。談論影像背後的技術,歷史和哲理。我們用比較通俗的方式討論了渲染相關的許多話題和內容,大家可以訪問以下鏈接進行收聽。
收聽地址:全局光照:實時與離線渲染
另外,由於實際說話的時候可能由於緊張,口誤等原因,口述的內容可能沒有文字的構句那麼嚴謹,這裡我也提供一個整理的文字版本,其中大部分內容是跟談話內容相關的,但是注意這裡不是訪談的文字版本,而是重新的描述。此外,這裡可能並沒有包含訪談的全部內容,而文字版本也可能稍微加了一點其它的內容。
什麼是渲染?
渲染主要是指將一個用數字的方式描述的場景,轉化為一副可視數字圖像的過程。生成一副數字圖像包括許多程序和步驟,例如物體的建模,場景的設置,遊戲和影視中還包括物理模擬,動畫控制,AI等等,其中渲染處於整個流程的最後一步,當前面所有流程結束之後,我們得到一個靜態的場景描述,例如每個物體的3D位置,模型數據,貼圖,攝像機位置和角度,光源設置等,然後渲染器執行渲染的過程將其生成一副2D的由像素組成的數字圖像。由此也可以看出,渲染的流程相對比較獨立於其它數字內容的製作流程,我們甚至可以很容易地針對不同(例如時間)需求對同樣的場景使用或切換不同的渲染演算法或渲染器。
形象的說就是,當每一時刻演員的動作完成之後,並且攝影師的鏡頭位置和方向確定後,攝像機要得到當前時刻整個可視場景的圖像信息的過程。這個過程其實就是光照從光源發出,經過與場景的各個物體的反射或折射之後進入攝像機的傳輸過程,在術語上,渲染和光照傳輸其實就是等同的概念。當然這個例子有一點區別就是攝影的過程其實不是一個特定「時刻」而是一小段時間內接收光子的過程,也就是曝光時間,所以真實攝像機可以通過調節曝光時間來捕捉一些運動特徵,如運動模糊(motion blur),然後數字攝像機則只能針對特定時刻進行計算,所以對於這種運動特徵通常需要特別的方式來處理,例如在實時渲染中通過跟蹤一個運動矢量(motion vector)來計算運動模糊效果,當然在離線渲染中我可以將光照傳輸函數加入進一個時間的維度,使得每個路徑樣本同時包含對時間的採樣,來實現對所謂曝光時間參數的模擬。
渲染中最重要的技術要點是什麼?
要回答這個問題,我們需要首先了解渲染器是怎樣解決或者說計算上述的光照傳輸過程,傳統解決光照傳輸最經典的方法是光線追蹤,理解了光線追蹤的思路,我們就可以很自然地看到光照傳輸的困難,進而明白渲染中最主要的一些技術要點。
首先什麼是光線追蹤?
為了在數字計算機中模擬光照傳輸,我們需要從光學中了解光的一些特徵。我們看到的物體表面上每一個點的顏色,是來自於這個點所在的平面上空整個半球180度範圍所有方向的光照的結果,因此當我們需要計算最終圖像上特定一個像素的顏色時,它的過程類似這樣:首先從攝像機沿這個像素的方向發射一條光線,然後光線會在半球空間發散成無數的光線,這些每條光線在空氣中沿直線傳播,直到遇到另一個物體時發生上述相似的發散過程,最後直到光線擊中一個發光體而終止。同樣的光照傳輸過程也可以反過來從光源向攝像機方向進行描述。

這個過程就稱為光線追蹤,其中每個由光源到攝像機(或者由攝像機到光源)的過程中所有直線的光線段連接起來就構成一條路徑。因此為了模擬光照傳輸,顯然每一個靜態幀都需要產生大量的光線,這些光線的數量理論上是無窮的,實踐中複雜的場景起碼都是億級別的。
那麼實際上在程序演算法上怎樣解決這個問題呢?
在數學上,上述的光線追蹤過程實際上是個高維積分,很難求解,一般使用的是稱為蒙特卡洛(Monte Carlo method)的近似方法,該方法就是針對一定的概率密度函數每次產生一個隨機的路徑,這稱為路徑採樣,然後計算這條路徑的光照貢獻值,最後把所有路徑平均起來就得到每個像素的顏色值。這樣的方法也稱為路徑追蹤(Path tracing)。光線追蹤演算法的困難點其實有很多,例如焦散效果,體積渲染,間接漫反射光照等,以下挑選幾個比較顯著的。
首先是噪點比較嚴重
由於這些路徑是隨機產生的,因此有些路徑產生的幾率非常小,這就會導致比較大的噪點,所謂噪點就是由於這種隨機性使得某些區域在早期得到更多的樣本而使得這些區域內的顏色值過大,表現為那種比較白的亮點。在數學中,大數定律是能夠保證在無窮的樣本數量下,這些噪點最終是可以被完全消除的,但是這樣的計算量和計算時間也是非常昂貴的;改善採樣方法是可以減少噪點,所以當前離線渲染很多努力都是在開發一些更有效的採樣方法,例如雙向路徑追蹤,梅特波利斯演算法,光子映射等。

?
光線追蹤演算法對處理器架構不友好
現代處理器使用的是一種多級緩存的架構,這些緩存的分級是根據訪問速度來劃分的,越快的緩存成本越昂貴,所以其容量非比較小,例如在一般的架構中,最靠近處理器的一級緩存,它的讀取速度大約為1-3個時鐘周期,但是其大小只有如32KB;二級緩存可以達到2MB,但是其讀取速度卻需要30個時鐘周期,然後主存可以達到8GB,其讀取速度為220多個時鐘周期。這就好比說你在書桌上處理一件事情,你可能需要查詢一些數據,讓後你會在書桌上放一本或幾本相關圖書,需要的時候隨時比較快的翻閱,但是可能有時候這幾本書的內容是不夠的,所以你需要起身到書房內的書架上查找另一些書籍,這就需要更多的時間,因為你需要起身行走的時間;然後如果你家裡沒有,你不得不去圖書館查詢,這就需要更多時間;這裡的書桌,書架和圖書館就好比一二三級緩存結構,書桌旁的書獲取很快,但是只能放幾本書,而圖書館的容量很大,但是需要花很多時間獲取。而且除了容量,你每次攜帶的圖書數量也是有限的,這稱為帶寬(bandwidth),也就是你每個時間只能攜帶多少數據。

因此,鑒於這種情況,理想的演算法是,你的每個處理只涉及到同一本書,直到處理完同一本書才會需要其它書,也就是對書的需求不會出現交叉的情況。而緩存的情況也會自動獲取相鄰的內容數據,你在使用一級緩存的時候,二級緩存就會自動把這些數據附近的數據讀取進來,這稱為預取(pre-fetching)技術,如果你的數據訪問是連續的,那麼理論上你不需要更多時間等待。
然而在光線追蹤中,光線在場景中隨機穿行,因此對場景數據的訪問完全是隨機的,比如每次從內存中讀取進來一個模型數據,可能只做一條光線的訪問就沒用了,然後下一條光線有需要訪問另外的數據,這樣整個場景的數據的大部分時間都停留在「運輸」上,處理器大量時間處於等待狀態。因此迪士尼自家渲染器Hyperion的最大特點就是對光線在執行相交計算之前按方向進行排序,這樣使得每一束光線儘可能與相鄰的物體相交,這些一次讀取進緩存的數據可以被充分利用,減少運輸成本。
什麼是全局光照?
其實這是一個更主要是針對實時渲染的名詞,由於離線的光線追蹤演算法的成本很高,所以實時渲染通常不計算完整的路徑,而是只直接計算所謂的直接光照(direct lighting),即光線從光源出發,經過與場景中表面的一次交互之後,然後就進入攝像機,即是只計算攝像機直接能夠看到的那些表面的光照,這樣的直接光照能夠被GPU的光柵化技術快速處理,實際上現代圖形處理器最早就是為了加速對直接光照的處理而誕生,光柵化主要是對全部物體遍歷一次,然後對每個點執行一次光照計算,其實也就是循環所有光源,看這個點能不能被光照照射,即有沒有被其它物體遮擋,有照射則直接計算反射光照,沒有就忽略。這樣的直接光照又稱為局部光照(local Illumination)。早期的遊戲都是只有直接光照的,然而這樣的光照結果顯然不能滿足要求,所以才引出全局光照(Global Illumination)這個名詞,簡稱GI,由於多次反彈的光照計算成本很高,因此GI的實現很複雜,通常都是使用一些近似技術,我們後面再討論。而對於離線渲染,它本身主要都是考慮完整路徑的光照的,所以離線渲染中的光照傳輸其實天生就是全局光照。當然,早期的離線渲染器由於當期處理器的限制,其實演算法跟現在的實時渲染差不多,所以在早期的離線渲染器中也有這樣的區分。
什麼是RenderMan RIS?
這是一個完全基於路徑追蹤的新版本,以取代基於Reyes的舊版本,Reyes是一種非常古老的近似方法,它還要起源於1987年Robert Cook提出的Reyes演算法,它使用類似現代實時渲染的一些方法進行渲染,它不是基於物理的渲染,並且流程比較複雜,比如不同的效果需要使用不同的shader來實現,美術需要控制很多渲染相關的參數,修改起來非常麻煩,渲染器的修改往往需要美術人員學習新的技術。但是Reyes的架構還是非常穩健,高效的,所以直到去年的《魔獸世界》都還是使用基於Reyes的RenderMan版本。
也正是由於Reyes的穩健和高效,使Pixar放慢了對基於物理的更真實和高質量的路徑追蹤演算法的開發和使用。基於路徑追蹤的渲染演算法最早在1998年已經被藍天工作室(Blue Sky Studios)使用於製作了短片《Bunny》,好像內地時光網上翻譯為《棕兔夫人》,然後於2006年被用於製作第一步動畫長片《怪獸屋》(Monster House),渲染器是Arnold。
使用RIS的流程則會更加簡單,可以更集中於內容創作,編輯期的預覽反饋更真實和實時。Pixar自家的《Finding Dory》及其後續Pixar自家電影都使用RIS,第三方電影更慢一些,例如《Tomorrowland》,《Doctor Strange》等都是基於Reyes的版本,《Warcraft》是工業光魔最後一部使用Reyes渲染的電影,《Rogue One》則是第一部工業光魔開始使用RIS版本的電影。RenderMan RIS比迪士尼自家的Hyperion都還晚,Hyperion的第一部電影是2014年的《超能陸戰隊》。
這是不是意味著RenderMan已經落於後於其它較早擁抱路徑追蹤的商業渲染器了?
這個問題當然不能簡單地以擁抱路徑追蹤演算法的早晚來定論,這是外行人的觀點。我們以下從兩個方面來說明,一個是RenderMan的技術架構,當然後面我們還會舉例一些技術進行分析,其二是Pixar的技術團隊的實力。
RenderMan RIS的技術架構
首先一句話描述,RenderMan RIS使用的幾乎是目前世界上基於路徑追蹤渲染演算法的最好的渲染器架構。路徑追蹤演算法只是一種基本思路,實際每個渲染器的實現差異是非常大的,涉及的內容也非常多,很多渲染器都會針對自己已有的一些製作經驗和流程對其中的某些部分進行特別優化,例如很多渲染器會將一些並行性比較高的計算轉移到GPU去執行,或者對某些效果進行特別處理,例如將頭髮,布料,體積渲染,次表面散射等交給特別的渲染通道去執行,這些渲染通道可以使用一些(可能不是完全基於路徑追蹤的)近似方法
上述這些改進和優化表面上看起來提高了渲染器的效率,然而卻損害了路徑追蹤演算法的整體架構,因為很多發表的論文都是針對一個特定的方面,而且大多都是在某種程度上的近似,這些方法跟路徑追蹤的思路反而是相悖的,因為路徑追蹤演算法其實是一種很暴力(brute force)的方法,它保證最高的質量,但是卻抵制近似,因此如果一個渲染器要加入某種近似,一定是需要對渲染器相應的方面進行特殊處理或對路徑採樣方法做出一些限制,例如Hyperion的光線排序雖然很厲害,但是它基本上只適用於單向路徑追蹤演算法,而不能使用更高效的雙向路徑追蹤演算法以及其它更高級的如梅特波利斯演算法,光子映射等,當然它們總是可以對渲染器進行修改以適應新的演算法,但問題是這種改動量往往是非常大的,每次添加一個新功能都需要修改很多地方,甚至對美術製作流程做出影響。
RenderMan是怎樣處理這個問題的呢?RenderMan更重視渲染器的底層系統架構,而將渲染器性能的優先順序置於系統架構之後,RenderMan會很謹慎地隨便加入一些上層局部的優化,它基本上只會考慮哪些最基礎級別的重大的演算法改進。它最初基於PBRT渲染器建立而來,PBRT是眾所周知的非常好的路徑追蹤演算法基本架構,擁有非常優秀和靈活的架構,它已經有十幾年的歷史,並且獲得過2014年的奧斯卡科學與技術成就獎。RenderMan一直保持著這個基礎架構,不會輕易加入影響這個架構的一些局部優化的內容,但是它在基礎級別加入了最近幾年比較重大的一些基礎級別的新技術,例如VCM,UPBP(後面討論)等,正是由於RenderMan維持比較穩固的基礎架構,它才能以最小的改動成本加入這種基礎級別的改進,反過來這種基礎級別的演算法改進對渲染器整體提升是非常重大的,而其它渲染器由於在上層做太多優化,使得要兼容新的基礎演算法不太容易,這不僅改動較大,可能影響整個美術製作流程,因此渲染器的發展反而會受到限制。
另一個方面是為什麼RenderMan一直保持只使用CPU渲染,表面上看起來GPU能高效地做很多事情,但是其實路徑追蹤演算法天然是對CPU更友好的,所謂的GPU渲染不過是需要花很多時間將渲染演算法中可以並行的部分提取出來交給GPU處理的,但是這種提取工作非常繁瑣,而且一旦基礎演算法改動,這些工作都要重來。當然RenderMan準備在22版本之後加入CPU+GPU的混合模式,稱為XPU,這是因為現階段基礎演算法發展已經比較完善了,這個時機開始做GPU的提取比較合
RenderMan的「技術團隊」實力
放眼當今世界,在視效與動畫領域,沒有任何一家公司的研究實力能夠超過迪士尼,迪士尼總共有5個比較主要的研究中心:皮克斯,工業光魔(ILM),迪士尼(瑞士)蘇黎世(Zurich)研究中心,迪士尼動畫以及卡耐基梅隆大學實驗室。這五大研究中心的成果都是共享的,並且為了提高研究質量,這五個中心的研究工作甚至會交叉形成競爭,最後優勝出的技術被採用,而所有這些成果都是通過皮克斯的RenderMan這個出口進入到工業當中。所以可以看到幾乎Hyperion具有的先進技術,都同時也被運用到RenderMan當中,例如髮絲,布料,次表面散射,體積渲染等,同時由於前面說過RenderMan具有更穩健的基礎架構,所以它甚至比Hyperion更容易採用最新具有重大意義的基礎架構級別的成果,例如VCM技術,基於光束採樣的UPBP體積渲染技術(後面會討論)。
適應性採樣
適應性採樣在RenderMan中大量使用,例如一個1920 x 911 解析度的靜態幀有174 9210個像素,每個像素會發射上千條路徑,傳統的做法是對每個像素都發射固定數量的路徑,然而根據圖像的顏色分布不同,有些區域顏色變化比較小,因此隨機路徑出現的誤差較小,這些區域可以使用更少的路徑即可達到很好的效果,而另一些區域如物體的邊緣或陰影邊界,這些區域顏色變化比較大,隨機數更容易產生更大的誤差,因此可以對這些像素區域放置更多的路徑樣本,這種技術稱為適應性採樣(adaptive sampling),它能夠根據圖像分布自適應地調整每個區域路徑樣本的數量。

這樣的適應性採樣同樣適用於巨量點光源場景中的光源選擇,例如《尋夢環遊記》電影當中的死亡之地(land of the dead)整個場景具有826 5557個點光源,也就是對於每條路徑都需要遍歷這800多萬個光源,顯然計算量非常高,如果我們在對光源的採樣迭代過程中不斷根據前面樣本的誤差分布對每個區域的採樣分布進行適應性調整,即可以以比較少的光源樣本選擇達到比較好的光照結果。

降噪處理
對於路徑追蹤演算法,當路徑樣本數量較少時,始終會有噪點,更多的路徑樣本數量可以減少噪點,增強圖像的質量,但是這會花費更多的渲染時間,理論上需要無限的樣本數量才能完全消除噪點。為了節省渲染時間,降噪技術(denoising)被引入渲染器中用於對使用較少路徑樣本渲染的圖像結果進行降噪處理。降噪處理的思路類似而對圖片進行濾鏡處理,使圖片變得更加平滑,但是離線渲染中的降噪還是要複雜得多,它使用的平滑的依據是局部區域內樣本誤差的大小,並根據誤差分布來決定平滑的範圍,其它一些像素信息如深度,法線等也被引入降噪技術以幫助更好地降噪。

降噪是近幾年離線渲染領域的熱點,也是光線追蹤演算法向實時渲染轉換的關鍵技術之一,因為實時的光線追蹤會使用更少的路徑樣本。
毛髮渲染
毛髮渲染是迪士尼和皮克斯的關鍵技術之一,2003年Marschner提出了渲染毛髮的著名的Marschner模型,該模型將一根毛髮描述為一個圓柱形的並在圓面上具有一定鱗片結構的線狀結構,並描述了光在毛髮內部的傳播行為,遵循Marschner模型的毛髮渲染能夠呈現出比較真實的毛髮效果,皮克斯在此基礎上進一步發現使用橢圓形而不是圓截面的毛髮絲更接近物理真實,因此提出改進的皮克斯Marschner毛髮模型。

在Marschner模型中,一根毛髮可以使用一個紋理當中的一條線段表述,該紋理被貼到一個曲面網格上,網格可以接受物理影響而使髮絲跟隨移動,而紋理上的每個線段只提供毛髮的位置,它的尺寸和實際光照均由Marschner模型進行計算,該模型根據一個觀察方向和入射光計算出毛髮的真實光照顏色。

在很多渲染器中,毛髮,次表面散射,布料等特殊效果都是使用獨立於其它表面渲染的一個通道,也即是說在渲染完所有表面之後再對這些特殊效果使用單獨的渲染流程進行特殊處理,這往往會使製作流程變得更加複雜,渲染演算法架構也會更加複雜,而RenderMan現在可以將所有這些特殊效果融入到表面的著色計算當中,也就是說場景中所有渲染計算都是使用一個統一的路徑追蹤通道完成,這大大簡化了製作流程,這也是得益於前面介紹的比較穩固的渲染架構。例如在漸進式的互動式閱覽中,這些特殊效果能夠跟其它表面渲染同步展現,而不需要等表面渲染完畢才開始渲染這些特殊效果,這大大節省了設計時間及提高了效率,在設計階段預覽的技術也稱為live rendering。
體積渲染
體積渲染是RenderMan的另一個重要技術,所謂體積(Volume)是相對於表面(surface)的一個概念,比如在表面上光照只在每個表面位置處發射反射或折射,而在體積中,例如煙霧,雲等環繞的環境中,由於空氣中不再是真空,而是到處都充滿著粒子,所以光在這樣的環境傳播時,會與分布於整個空間中的粒子發射碰撞而發射散射,因此體積中每個位置都需要計算光照交互,我們也稱體積為參與介質(participate media),因為整個體積都是參與光照交互。
這樣的計算量顯然是非常大的,傳統的方法就是對於一束穿過一個體積的光束,在該光束上執行光線步進(ray marching)演算法,也就是隨機選擇該光束上的一些點執行光照計算,然後將所有採樣點的光照累加起來,這樣的技術也稱為基於點採樣(point sampling)的技術。

然而由於點採樣滿足不了體積內處處發生交互的這樣一種連續的交互方式,所以渲染效果比較差,計算時需要使用大量密集的點採樣,才能使光照效果看起來比較真實。於是,迪士尼蘇黎世研究中心的Wojciech Jarosz(目前已經離開迪士尼任英國達特茅斯(Dartmouth)大學的助理教授)提出了具有革新意義的基於光束採樣(beam sampling)的體積渲染技術,該技術使用一種特殊的方式直接計算體積中的一條光束(而不是一系列點)的光照,不僅大大提升了計算效率,而且提高了渲染質量,是離線渲染領域體積渲染的重要里程碑。
什麼是實時渲染,它與離線渲染有哪些差別?
實時渲染是對渲染加了一個時間限制,即要求整個光照傳輸的過程在比如1/60秒之內完成,而在實時圖像程序中,整個運行時的計算還要處理其它如動畫,AI等其它工作,實際上留給渲染的時間更是只有幾百毫秒。所以顯然目前實時渲染不能使用上述離線渲染的光照傳輸方法,因為上述方法需要數分鐘甚至數小時的時間來處理一幀的圖像。
實時渲染演算法與離線渲染演算法的差異較大,主要表現為實時渲染通常將光照傳輸的過程分成兩個方面,即直接光照和間接光照,直接光照是指光子從光源發射出後只與表面進行一次反彈即進入攝像機,而間接光照就是在所有需要經歷2次及以上反彈的光照,後者又稱為全局光照。
怎樣計算直接光照,或者說渲染管線的基本流程
直接光照的處理通常是借用現代專用圖形處理器(GPU)的光柵化流程來處理的,圖形處理器的渲染管線循環遍歷場景中的每個物體的每個頂點一次,並使用光柵化程序對這些頂點進行插值以計算表面上每個像素位置處的顏色,在計算每個像素的顏色時,我們直接計算來自光源的光照,即循環所有場景中的光源看是否每個光源對該像素形成光照,其可見性或者是否被遮擋由一個陰影貼圖來判定,陰影貼圖中存儲的是每個光源所能看到的表面像素位置,它是通過向攝像機置於光源位置處,然後渲染一個全場景的圖,並記錄那些所有直接可見的表面像素位置。最後,像素之間的遠近關係通過一個深度緩存來判斷,深度緩存記錄了當前已處理的圖像上每個像素位置的深度值,在遍歷後面的像素表面時,它將當前位置與深度緩存中已有的位置的深度值進行比較,如果當前位置更靠近攝像機,則丟掉深度緩存中之前存儲的像素並用當前像素代替,同時存儲當前像素的深度值至深度緩存中供後面比較使用。上述的流程是高度並行化的,得益於現代圖形處理器的並行架構特徵,所以能夠被高效計算。
怎樣計算間接光照,或者說常用的實時全局光照技術
間接光照的計算複雜度要遠遠高於直接光照,當前幾乎沒有任何方法能夠實時完整的計算全部光照傳輸過程,所有方法都是基於一定的假設作出的一些近似處理。例如漫反射光照是與觀察方向無關的,所以對於靜態物體,其漫反射光照可以被預計算出來並存儲在一個貼圖中,然後在實時運行時就只有一個貼圖操作而不需要執行光照計算;例如對於來自較遠的環境的間接光照(如來自天空的光照),由於表面的位置相對於表面與這些環境的距離可以忽略不計,所以整個環境光只與方向相關,從而可以將整個環境的間接光照保存在一個環境貼圖,在渲染的時候只需要計算出入射方向就可以從環境貼圖中查詢到一個光照值進行計算;對於動態物體,如人物角色,它的間接光照看起來無法預存,但是考慮到間接光照的變化頻率是非常小的,所以我們可以在角色會經過的空間範圍內存儲一些比較稀疏的光照分布,類似於將間接光轉換為一些「點」光源,然後當角色經過時可以使用附近的這些光源進行插值計算;幾乎所有現代大型高質量遊戲的渲染都涉及到很多這樣的預處理計算。當然在實時渲染中還有很多對不同方面的一些近似方法。
現在實時渲染看起來非常逼真,那這樣的實時渲染畫質與離線渲染的差異到底在哪裡?
上述的描述看起來實時渲染跟離線渲染的差異還是很大的,那為什麼現代很多遊戲的畫質看起來感覺跟影視的畫質差不多呢?其實我們之所以有這樣的疑問,是因為我們的眼睛根本無法分辨精確的顏色,研究人眼識別周圍環境光照的學科稱為視覺感知(visual perception),所謂感知並不是一種精確度量,我們無法擁有對兩個圖像的真實差異進行分辨的能力,我們能分辨的誤差具有一定的範圍,例如人眼對於物體的邊緣形狀感知是非常明顯的,如果沒有陰影就沒有立體的感覺,消除邊緣部分的鋸齒等措施就可以使眼睛的不適大大減小;例如對於任意一張圖片,我們無法分辨這張圖片中2%以下的誤差,因此我們就可以忽略對這部分誤差範圍內計算。這些因素加上上述的一些高質量的預處理計算,所以我們會覺得一些實時渲染遊戲作品的畫質很高。
實時渲染有哪些應用場景?
現在人們開始越來越把目光投向實時渲染,例如很多動畫短片都大量採用實時渲染來進行計算。另外,例如VR等應用場景對任意視角的渲染要求,也使得實時渲染的需求大大提升,可以預計實時渲染技術會對於很多需要對數字可視化的場景,例如醫學成像,物理定律的可視化模擬,化學微觀結構的可視化演示,軍事化的模擬訓練等等發揮較大的作用
但是,目前實時渲染的結果只是對人眼是「正確的」,並不是對計算機是正確的,所以那些需要得到精密渲染結果而不是僅僅用於人眼觀察的場景是不應該使用實時渲染技術的。
另外,在離線和實時的時間要求之間,還有一個互動式(interactive)的時間要求,例如很多3D軟體中的需求,也就是在某種程序的編輯階段,而不是最終的運行時階段,我們可能不需要完全實時的程序,但是需要在幾秒或者很短的時間內得到編輯結果的反饋,例如遊戲和影視場景的編輯,在這種需求下,當前的實時渲染並不是一種很好的選擇,因為他的最終結果需要依賴於大量時間的預計算;相反,基於光線追蹤的技術,雖然得到最終高質量的渲染結果需要大量的時間,但是卻可以在較短時間內使用少量的樣本得到整個編輯的反饋,並且由於更多的時間花在後面對更小誤差的處理上,實際上得到一個快速能夠反饋編輯結果的時間是很快的,這方面一些離線渲染技術反而是更好的選擇。
電影渲染是非實時渲染,以後會不會用到實時渲染中
毫無疑問,未來的實時渲染一定是光線追蹤,這不僅是因為它的渲染結果是更物理真實的,還因為它簡潔一致的光照傳輸模型,當前的實時渲染融入了太多繁雜的近似計算,這些近似處理並不是必須的,而是受限於硬體限制,但是這使得工程師要去了解非常多各種各樣的近似技術。人類科技的發展是趨向於高度簡潔和抽象化的,因為這也是人更易於理解的,光線追蹤就符合這樣的特徵。
但另一方面,光線追蹤的實時化並不僅僅是硬體發展的要求,路徑採樣基礎演算法架構的改進也是非常重要的,我們仍然還需要再演算法層面做很多改進工作,甚至也有可能發現全新的光照演算法。
怎麼樣,聽/看完上述內容,是不是很想買一本《全局光照技術》來讀一讀呢?本書正在摩點網火爆眾籌預購哦,已經超過12萬的預定量,很多小夥伴已經在你前面踏上進軍圖形學的軌道上,此次眾籌也是全宇宙最快最優先獲取《全局光照技術》圖書的途徑,快去看看吧!

預購地址:《全局光照技術》出版在即!揭秘工業中最前沿的渲染技術-發現項目-摩點會想
[1] PIXAR Deep Dive on SSS : SIGGRAPH Preview
[2] Pixars RenderMan | Learn
[3] RenderMan/RIS and the start of next 25 years
[4] Sampling Modes - RenderMan 21 - Renderman Documentation
[5] PxrMarschnerHair - RenderMan 21 - Renderman Documentation
[6] Beam rendering extended at SIGGRAPH 2014
[7] Sorted Deferred Shading For Production Path Tracing
[8] Reyes
[9] Physically-based Rendering: From Theory to Implementation
推薦閱讀:
※Image Based Lighting
※用Atlas實現多張貼圖混合的地形及注意事項
※為了忘卻的紀念:析OpenGL史上第二偉大的擴展,DSA
※OpenGL+FreeType 模仿黑客帝國數碼雨 V2.0
