鄭凱東 馮天星 王家華
摘 要:全局光照是指一種渲染技術(shù),既考慮場景中來自直接光源的照明,又考慮場景中其他物體反射后的照明。而實時全局光照將在毫秒級時間單位內(nèi),考慮到光和介質(zhì)本身的性質(zhì)來精確計算,保證高質(zhì)量輸出效果。本文主要研究在景物模擬中,實時光照所產(chǎn)生的光影效果對其真實性的影響。
關(guān)鍵詞: 場景光照;全局光照;實時GI; 渲染管線
文章編號: 2095-2163(2019)03-0244-04 中圖分類號: TP311 文獻(xiàn)標(biāo)志碼: A
1 實時全局光照
Unity 引擎 5.0中更新了實時全局照明。在舊的版本里燈光渲染烘焙一次成型,無法進(jìn)行任何更改。但通過實時全局光照技術(shù)之后,可以在烘焙場景之后更改場景的燈光、環(huán)境光和材質(zhì)屬性,通過這種方式可以隨意改變燈光的顏色和亮度,從而達(dá)到同一場景中生成不同視效的目的。光照效果如圖1所示。
由圖1可以看到,同樣的2個小球,在不同照明方式下,顏色在光線表面之間“反彈”時傳遞,從而產(chǎn)生更加逼真的效果。
實時照明是場景中照明對象的最基本方式,用于照亮角色或其他可移動幾何體[1]。而來自Unity實時燈光的光線在使用時不會反射。在單獨實時燈光的效果中,只有落在聚光燈錐體內(nèi)的表面才會受到影響。因為沒有反射光與折射光,陰影是完全黑色的。為了使用全局照明等技術(shù)創(chuàng)建更逼真的場景,需要啟用Unity的預(yù)計算照明解決方案[2]。
使用預(yù)計算實時GI時,就是計算Unity編輯器場景中靜態(tài)幾何體周圍的反射光并存儲此數(shù)據(jù)以供在運行時使用的過程[3]。此過程減少了必須在運行時執(zhí)行的照明計算次數(shù),允許實時反彈照明,同時保持交互式幀速率。傳統(tǒng)靜態(tài)光照貼圖不響應(yīng)場景中光照條件的變化,而是預(yù)先計算復(fù)雜場景源交互的實時GI操作[4]。使用預(yù)計算將會產(chǎn)生更精細(xì)的照明細(xì)節(jié),與傳統(tǒng)光照貼圖相比,Unity的預(yù)計算實時GI提供了一種用于交互式地更新復(fù)雜場景照明的技術(shù)。其中所需的實時分辨率值比傳統(tǒng)光照貼圖紋理密度小幾個數(shù)量級。 這是因為過程中只是捕捉這些光照貼圖中的間接照明,而這往往是非常柔和或“低頻率” [5]。使用預(yù)計算實時GI時,多數(shù)情況下會通過實時陰影、而不是高分辨率光照貼圖提供清晰陰影。通過這種方式,用戶可以創(chuàng)建具有豐富全局照明和反射光的照明環(huán)境,實時響應(yīng)照明的變化[6]。實時光照系統(tǒng)采用與否的場景區(qū)別見圖2。
由圖2可以看到,在運用了實時GI后,因為有了反射光、折射光的加入,場景中沒有直接光照的地方也不是一片漆黑,更貼近現(xiàn)實世界中的原貌。
2 光線追蹤
光線追蹤方法的主要思想是一根單一地從一個視點向成像方向平面上的像素發(fā)射出的光線,以找到與該光線相交的最近物體的交點[7]。如果該點處表面是粗糙散射面,則計算光源直接照射該點產(chǎn)生的顏色;如果該點處表面是光滑鏡面或折射表面,則繼續(xù)向反射或折射方向跟蹤另一條光線,如此形成了一個遞歸的光線穿梭,直至光線逃逸出場景或達(dá)到設(shè)定的最大遞歸深度。由此,研究通過跟蹤與光學(xué)表面相互作用的光來獲得光線穿過路徑的光的模型[8]。
渲染方程可以理解成全局光照算法的基礎(chǔ),可以描述由光能傳輸而產(chǎn)生的各種現(xiàn)象。該等式描述了從x點看到的光發(fā)射總量[9]。并可將其解讀為:在一定方向的物體表面上某點在某個方向上的輻射率與場景中光能傳遞達(dá)到穩(wěn)定狀態(tài)后入射輻射亮度之間的關(guān)系。渲染方程根據(jù)光的物理學(xué)原理及能量守恒定律,完美描述了光能在場景中的傳播[7]。很多真實感渲染技術(shù)都是對其進(jìn)行簡化的求解,以達(dá)到優(yōu)化性能的目的。渲染方程的數(shù)學(xué)公式可表示如下:
其中,Li表示從半球上某一角度ω′ 入射的光。反射項ρ表示光線如何被反射到觀察點,該項的取值依賴于入射角ω′和觀察者的角度ω[11]。
由式(1)可知,從某一觀察點看到的光是從場景中物體表面點入射的光(Le)與從觀察點上方的半球入射的光的疊加。基于實時光線追蹤的實時全局光照如圖3所示。
默認(rèn)情況下,光線跟蹤通常是將每條光線視為獨立的光線,每條路徑在每次更新時都要重新計算[12]。這意味著該技術(shù)可為場景提供直射光,并隨時更新每一幀。一旦燈光和游戲物體在場景中移動,燈光將立即更新,這可以在場景和游戲視圖中觀察到[13]。由此可知,光線跟蹤的嚴(yán)重缺陷之一就是性能,其中涉及的計算量較為可觀,以致于當(dāng)前的硬件難以滿足實時光線追蹤的需求。
3 路徑追蹤
路徑追蹤算法的提出,開創(chuàng)了基于蒙特卡洛的全局光照這一研究領(lǐng)域。路徑追蹤的原理示意如圖4所示。其基本思想是從當(dāng)前視點發(fā)射出一條光線,當(dāng)光線與物體表面相交時根據(jù)表面的材質(zhì)屬性選擇繼續(xù)采樣一個方向,發(fā)出另一條光線,迭代直到光線照射到光源上(或逃逸出場景),然后使用蒙特卡洛的方法,計算其作為像素的顏色值的貢獻(xiàn)[14]。光照計算時由一個遞歸的結(jié)構(gòu),變成一個路徑函數(shù)的積分,因此蒙特卡洛的每個隨機數(shù)只要產(chǎn)生一條路徑即可。
光線從攝像機或光源出發(fā),執(zhí)行ray casting得到光線與場景的交點,在表面處對BSDF進(jìn)行采樣得到一個散射方向,對新的光線執(zhí)行ray tracing得到新的交點[15],重復(fù)上述過程直至得到一條全路徑(路徑擊中光源或攝像機),最后通過公式(2)、(3)計算出貢獻(xiàn)值[16]。對此公式可表示為:
通過路徑追蹤的過程得到一條路徑樣本,因此稱為路徑追蹤。但路徑采樣也仍存在不足,如完全依賴隨機,有相當(dāng)部分的路徑組合由于表面間可能被遮擋而形成無效的路徑。因此,大部分實現(xiàn)都是以增量的形式,在每個有效的反射或折射方向上進(jìn)行隨機采樣,以形成更多的有效路徑[17]。
同時,還將考慮到每個路徑樣本獨立,缺乏對整個圖像分布函數(shù)的了解。為了解決這個問題,可以通過將每一個頂點直接連接光源進(jìn)行直接光照,從而獲得確定性的子路徑;或當(dāng)光源與可見區(qū)域比較隔離時,采用雙向路徑追蹤分別從光源和攝像機進(jìn)行路徑采樣,再將2條子路徑連接起來,以快速產(chǎn)生很多路徑[18]。該方法可以產(chǎn)生一些傳統(tǒng)路徑追蹤難以采樣到的光路,因此可以有效地降低噪聲。進(jìn)一步地,還將以對路徑積分的形式重寫渲染方程,允許多路徑采樣方法來求解積分。
4 景物模擬仿真效果及分析
本文所做自然景物模擬實驗環(huán)境為:Windows 10 professional,CPU為Intel(R) Core(TM) I7-6700 CPU @ 3.40 GHz,內(nèi)存為8 GB DDR4 2400,顯卡為GTX765 2GB GDDR5 配置的計算機。采用Unity 2018.3.6和C#編程實現(xiàn)。
在景物模擬中,由于景物的復(fù)雜性和不確定性,其真實感一直是人們研究的重點。如層巒疊嶂的群山掩映在云煙中,山腳下是一汪清潭倒映著陽光和云朵,山峰的錯落有致和水波蕩漾必然帶來其顏色光影的不一致,如果只有直接光照,將導(dǎo)致陽光直射的部分較為明亮,其它部分過于昏暗。當(dāng)下,通常是經(jīng)過改變天空盒,或者添加遮罩層的方式予以解決。但是如果是在大型游戲或影視作品中,需要動態(tài)景物的時候就遠(yuǎn)遠(yuǎn)滿足不了沉浸感的要求。
在以往的制作中,繪制光影一般選擇光柵化,但光柵化在制作中即已完成,也就是說無法滿足實時渲染的要求,從而對開發(fā)者提出了挑戰(zhàn),無法巨細(xì)無遺地對每個細(xì)節(jié)進(jìn)行光影處理,這也是光柵化無法擁有更真實效果的原因[19]。
在Unity2018版本中,已經(jīng)封裝了RealTimeGI算法,即在Inspector面板選擇著色器類型,調(diào)整SkyBox模擬天空的變化。著色器實際就是一段嵌入到渲染管線內(nèi)的程序,可以控制GPU運算圖像效果的算法。接下來,在Lighting面板中的Environment Lighting中制定好光源,在Preview面板可以靈活調(diào)節(jié)太陽高度、燈光類型烘焙屬性等參數(shù)以模擬自然界中的日升日落[20]。
運用本文討論的實時全局光照所模擬的山水景色的對比如圖5、圖6所示。其中,以光源為視點渲染的紋理和以攝像機為視點渲染的紋理大小均為 1048×424,屏幕分辨率為1920×1080。由此可以看出,運用實時光照后,因為有了反射光,一些原本模糊的細(xì)節(jié)變得較為明亮清晰,巖石上的紋路也一清二楚,更加貼近生活場景。
5 結(jié)束語
本文研究了實時全局光照及其2種追蹤方法,分別是光線追蹤與路徑追蹤。雖然實時光照有很多優(yōu)點,如真實性好,代入感、沉浸感強,減少光柵化的工作量。但其龐大的計算量和對GPU極高的要求卻仍不容忽視,亟待獲得真正解決。因此,合理選擇算法模型,兼顧真實感和計算量即已成為今后該方面的研究重點。
參考文獻(xiàn)
[1] DACHSBACHER C, STAMMINGER M, DRETTAKIS G, et al. Implicit visibility and antiradiance for interactive global illumination[J]. ACM Transactions on Graphics,2007,26(3):61.
[2]LAINE S, SARANSAARI H, KONTKANEN J, et al. Incremental instant radiosity for real-time indirect illumination [C]// Proceedings of Eurographics Symposium on Rendering Techniques. Grenoble, France: dblp, 2007:277-286.
[3]WALTER B, ARBREE A, BALA K, et al. Multidimensional lightcuts [J]. ACM Transaction Graphics(S0730-0301),2006,25(3): 1081-1088.
[4]GAUTRON P, BOUATOUCH K, PATTANAIK S. Temporal radiance caching[J]. IEEE Transactions on Visualization and Computer Graphics, 2007,13(5):891-901.
[5]孫鑫,周昆,石教英. 可變材質(zhì)的實時全局光照明繪制[J]. 軟件學(xué)報, 2008,19(4):1004-1015.
[6]PAN Minghao, WANG Rui, LIU Xinguo, et al. Precomputed radiance transfer field for rendering inter reflections in dynamic scenes[J]. Computer graphics Forum,2007,26(3):485-493.
[7]WANG Rui, WANG Kun, PAN Minghao, et al. An efficient GPU-based approach for interactive global illumination[C]//ACM Transactions on Graphics, 2009,28(3):91(1-8).
[8]VIITANEN T, KOSKELA M, IMMONEN K, et al. Sparse sampling for real-time ray tracing [C]// Proceedings of the 13th International Joint Conference on Computer Vision, Imaging and Computer Graphics Theory and Applications - Volume 1: GRAPP. Funchal, Madeira, Portugal:dblp, 2018:295-302.
[9]SHIVARAJU S,PUDUR G. Splay thread cooperation on ray tracing as a load balancing technique in speculative parallelism and GPGPU[J]. The International Arab Journal of Information Technology, 2018, 15(1):167-176.
[10]LEE W J, HWANG S J, SHIN Y, et al. Fast stereoscopic rendering on mobile ray tracing GPU for virtual reality applications[C]//IEEE International Conference on Consumer Electronics. Las Vegas, NV, USA :IEEE,2017:355-357.
[11]PRARD-GAYOT A, KALOJANOV J, SLUSALLEK P. GPU ray tracing using irregular grids[J]. Computer Graphics Forum. 2017,36(2):477-486.
[12]鄭越. 大規(guī)模場景渲染下的分布式光線跟蹤算法研究[D]. 長沙:湖南大學(xué), 2014.
[13]CALAZAN R M, RODRGUEZ O C, NEDJAH N. Parallel ray tracing for underwater acoustic predictions[M]// GERVASI O. Computational Science and Its Applications-ICCSA 2017. ICCSA 2017. Lecture Notes in Computer Science. Cham :Springer,2017,10404:43-55.
[14]MONIL M A H. Stingray-HPC: A scalable parallel seismic raytracing system[C]//The 26th Euromicro International Conference on Parallel, Distributed and Network-Based Processing. Cambridge, UK:[s.n.],2018:1-11.
[15]RITSCHEL T, ENGELHARDT T, GROSCH T, et al. Micro-rendering for scalable, parallel final gathering[J]. Acm Transactions on Graphics, 2009, 28(5):132.
[16]GUZEK K, NAPIERALSKI P. Efficient rendering of caustics with streamed photon mapping[J]. Bulletin of the Polish Academy of Sciences, Technical Sciences, 2017, 65(3):361-368.
[17]陳純毅, 楊華民, 李文輝,等. 基于幀間虛擬點光源重用的動態(tài)場景間接光照近似求解算法[J]. 吉林大學(xué)學(xué)報(工學(xué)版), 2013, 43(5):1352-1358.
[18]袁璐. 基于立即輻射度的實時全局光照算法[J]. 現(xiàn)代計算機(專業(yè)版), 2018(2):63-66.
[19]KAPLANYAN A, DACHSBACHER C. Cascaded light propagation volumes for real-time indirect illumination[C]// Proceedings of the 2010 ACM SIGGRAPH symposium on Interactive 3D Graphics and Games. Washington, D.C: ACM, 2010:99-107.
[20]CRASSIN C, NEYRET F, SAINZ M, et al. Efficient rendering of highly detailed volumetric scenes with GigaVoxels[M]// Crassin2010 GPU Pro.USA: AK Peters, 2010:643-676.