鄭凱東 馮天星 王家華
摘 要:全局光照是指一種渲染技術(shù),既考慮場(chǎng)景中來(lái)自直接光源的照明,又考慮場(chǎng)景中其他物體反射后的照明。而實(shí)時(shí)全局光照將在毫秒級(jí)時(shí)間單位內(nèi),考慮到光和介質(zhì)本身的性質(zhì)來(lái)精確計(jì)算,保證高質(zhì)量輸出效果。本文主要研究在景物模擬中,實(shí)時(shí)光照所產(chǎn)生的光影效果對(duì)其真實(shí)性的影響。
關(guān)鍵詞: 場(chǎng)景光照;全局光照;實(shí)時(shí)GI; 渲染管線
文章編號(hào): 2095-2163(2019)03-0244-04 中圖分類(lèi)號(hào): TP311 文獻(xiàn)標(biāo)志碼: A
1 實(shí)時(shí)全局光照
Unity 引擎 5.0中更新了實(shí)時(shí)全局照明。在舊的版本里燈光渲染烘焙一次成型,無(wú)法進(jìn)行任何更改。但通過(guò)實(shí)時(shí)全局光照技術(shù)之后,可以在烘焙場(chǎng)景之后更改場(chǎng)景的燈光、環(huán)境光和材質(zhì)屬性,通過(guò)這種方式可以隨意改變燈光的顏色和亮度,從而達(dá)到同一場(chǎng)景中生成不同視效的目的。光照效果如圖1所示。
由圖1可以看到,同樣的2個(gè)小球,在不同照明方式下,顏色在光線表面之間“反彈”時(shí)傳遞,從而產(chǎn)生更加逼真的效果。
實(shí)時(shí)照明是場(chǎng)景中照明對(duì)象的最基本方式,用于照亮角色或其他可移動(dòng)幾何體[1]。而來(lái)自Unity實(shí)時(shí)燈光的光線在使用時(shí)不會(huì)反射。在單獨(dú)實(shí)時(shí)燈光的效果中,只有落在聚光燈錐體內(nèi)的表面才會(huì)受到影響。因?yàn)闆](méi)有反射光與折射光,陰影是完全黑色的。為了使用全局照明等技術(shù)創(chuàng)建更逼真的場(chǎng)景,需要啟用Unity的預(yù)計(jì)算照明解決方案[2]。
使用預(yù)計(jì)算實(shí)時(shí)GI時(shí),就是計(jì)算Unity編輯器場(chǎng)景中靜態(tài)幾何體周?chē)姆瓷涔獠⒋鎯?chǔ)此數(shù)據(jù)以供在運(yùn)行時(shí)使用的過(guò)程[3]。此過(guò)程減少了必須在運(yùn)行時(shí)執(zhí)行的照明計(jì)算次數(shù),允許實(shí)時(shí)反彈照明,同時(shí)保持交互式幀速率。傳統(tǒng)靜態(tài)光照貼圖不響應(yīng)場(chǎng)景中光照條件的變化,而是預(yù)先計(jì)算復(fù)雜場(chǎng)景源交互的實(shí)時(shí)GI操作[4]。使用預(yù)計(jì)算將會(huì)產(chǎn)生更精細(xì)的照明細(xì)節(jié),與傳統(tǒng)光照貼圖相比,Unity的預(yù)計(jì)算實(shí)時(shí)GI提供了一種用于交互式地更新復(fù)雜場(chǎng)景照明的技術(shù)。其中所需的實(shí)時(shí)分辨率值比傳統(tǒng)光照貼圖紋理密度小幾個(gè)數(shù)量級(jí)。 這是因?yàn)檫^(guò)程中只是捕捉這些光照貼圖中的間接照明,而這往往是非常柔和或“低頻率” [5]。使用預(yù)計(jì)算實(shí)時(shí)GI時(shí),多數(shù)情況下會(huì)通過(guò)實(shí)時(shí)陰影、而不是高分辨率光照貼圖提供清晰陰影。通過(guò)這種方式,用戶可以創(chuàng)建具有豐富全局照明和反射光的照明環(huán)境,實(shí)時(shí)響應(yīng)照明的變化[6]。實(shí)時(shí)光照系統(tǒng)采用與否的場(chǎng)景區(qū)別見(jiàn)圖2。
由圖2可以看到,在運(yùn)用了實(shí)時(shí)GI后,因?yàn)橛辛朔瓷涔?、折射光的加入,?chǎng)景中沒(méi)有直接光照的地方也不是一片漆黑,更貼近現(xiàn)實(shí)世界中的原貌。
2 光線追蹤
光線追蹤方法的主要思想是一根單一地從一個(gè)視點(diǎn)向成像方向平面上的像素發(fā)射出的光線,以找到與該光線相交的最近物體的交點(diǎn)[7]。如果該點(diǎn)處表面是粗糙散射面,則計(jì)算光源直接照射該點(diǎn)產(chǎn)生的顏色;如果該點(diǎn)處表面是光滑鏡面或折射表面,則繼續(xù)向反射或折射方向跟蹤另一條光線,如此形成了一個(gè)遞歸的光線穿梭,直至光線逃逸出場(chǎng)景或達(dá)到設(shè)定的最大遞歸深度。由此,研究通過(guò)跟蹤與光學(xué)表面相互作用的光來(lái)獲得光線穿過(guò)路徑的光的模型[8]。
渲染方程可以理解成全局光照算法的基礎(chǔ),可以描述由光能傳輸而產(chǎn)生的各種現(xiàn)象。該等式描述了從x點(diǎn)看到的光發(fā)射總量[9]。并可將其解讀為:在一定方向的物體表面上某點(diǎn)在某個(gè)方向上的輻射率與場(chǎng)景中光能傳遞達(dá)到穩(wěn)定狀態(tài)后入射輻射亮度之間的關(guān)系。渲染方程根據(jù)光的物理學(xué)原理及能量守恒定律,完美描述了光能在場(chǎng)景中的傳播[7]。很多真實(shí)感渲染技術(shù)都是對(duì)其進(jìn)行簡(jiǎn)化的求解,以達(dá)到優(yōu)化性能的目的。渲染方程的數(shù)學(xué)公式可表示如下:
其中,Li表示從半球上某一角度ω′ 入射的光。反射項(xiàng)ρ表示光線如何被反射到觀察點(diǎn),該項(xiàng)的取值依賴于入射角ω′和觀察者的角度ω[11]。
由式(1)可知,從某一觀察點(diǎn)看到的光是從場(chǎng)景中物體表面點(diǎn)入射的光(Le)與從觀察點(diǎn)上方的半球入射的光的疊加?;趯?shí)時(shí)光線追蹤的實(shí)時(shí)全局光照如圖3所示。
默認(rèn)情況下,光線跟蹤通常是將每條光線視為獨(dú)立的光線,每條路徑在每次更新時(shí)都要重新計(jì)算[12]。這意味著該技術(shù)可為場(chǎng)景提供直射光,并隨時(shí)更新每一幀。一旦燈光和游戲物體在場(chǎng)景中移動(dòng),燈光將立即更新,這可以在場(chǎng)景和游戲視圖中觀察到[13]。由此可知,光線跟蹤的嚴(yán)重缺陷之一就是性能,其中涉及的計(jì)算量較為可觀,以致于當(dāng)前的硬件難以滿足實(shí)時(shí)光線追蹤的需求。
3 路徑追蹤
路徑追蹤算法的提出,開(kāi)創(chuàng)了基于蒙特卡洛的全局光照這一研究領(lǐng)域。路徑追蹤的原理示意如圖4所示。其基本思想是從當(dāng)前視點(diǎn)發(fā)射出一條光線,當(dāng)光線與物體表面相交時(shí)根據(jù)表面的材質(zhì)屬性選擇繼續(xù)采樣一個(gè)方向,發(fā)出另一條光線,迭代直到光線照射到光源上(或逃逸出場(chǎng)景),然后使用蒙特卡洛的方法,計(jì)算其作為像素的顏色值的貢獻(xiàn)[14]。光照計(jì)算時(shí)由一個(gè)遞歸的結(jié)構(gòu),變成一個(gè)路徑函數(shù)的積分,因此蒙特卡洛的每個(gè)隨機(jī)數(shù)只要產(chǎn)生一條路徑即可。
光線從攝像機(jī)或光源出發(fā),執(zhí)行ray casting得到光線與場(chǎng)景的交點(diǎn),在表面處對(duì)BSDF進(jìn)行采樣得到一個(gè)散射方向,對(duì)新的光線執(zhí)行ray tracing得到新的交點(diǎn)[15],重復(fù)上述過(guò)程直至得到一條全路徑(路徑擊中光源或攝像機(jī)),最后通過(guò)公式(2)、(3)計(jì)算出貢獻(xiàn)值[16]。對(duì)此公式可表示為:
通過(guò)路徑追蹤的過(guò)程得到一條路徑樣本,因此稱為路徑追蹤。但路徑采樣也仍存在不足,如完全依賴隨機(jī),有相當(dāng)部分的路徑組合由于表面間可能被遮擋而形成無(wú)效的路徑。因此,大部分實(shí)現(xiàn)都是以增量的形式,在每個(gè)有效的反射或折射方向上進(jìn)行隨機(jī)采樣,以形成更多的有效路徑[17]。
同時(shí),還將考慮到每個(gè)路徑樣本獨(dú)立,缺乏對(duì)整個(gè)圖像分布函數(shù)的了解。為了解決這個(gè)問(wèn)題,可以通過(guò)將每一個(gè)頂點(diǎn)直接連接光源進(jìn)行直接光照,從而獲得確定性的子路徑;或當(dāng)光源與可見(jiàn)區(qū)域比較隔離時(shí),采用雙向路徑追蹤分別從光源和攝像機(jī)進(jìn)行路徑采樣,再將2條子路徑連接起來(lái),以快速產(chǎn)生很多路徑[18]。該方法可以產(chǎn)生一些傳統(tǒng)路徑追蹤難以采樣到的光路,因此可以有效地降低噪聲。進(jìn)一步地,還將以對(duì)路徑積分的形式重寫(xiě)渲染方程,允許多路徑采樣方法來(lái)求解積分。
4 景物模擬仿真效果及分析
本文所做自然景物模擬實(shí)驗(yàn)環(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 配置的計(jì)算機(jī)。采用Unity 2018.3.6和C#編程實(shí)現(xiàn)。
在景物模擬中,由于景物的復(fù)雜性和不確定性,其真實(shí)感一直是人們研究的重點(diǎn)。如層巒疊嶂的群山掩映在云煙中,山腳下是一汪清潭倒映著陽(yáng)光和云朵,山峰的錯(cuò)落有致和水波蕩漾必然帶來(lái)其顏色光影的不一致,如果只有直接光照,將導(dǎo)致陽(yáng)光直射的部分較為明亮,其它部分過(guò)于昏暗。當(dāng)下,通常是經(jīng)過(guò)改變天空盒,或者添加遮罩層的方式予以解決。但是如果是在大型游戲或影視作品中,需要?jiǎng)討B(tài)景物的時(shí)候就遠(yuǎn)遠(yuǎn)滿足不了沉浸感的要求。
在以往的制作中,繪制光影一般選擇光柵化,但光柵化在制作中即已完成,也就是說(shuō)無(wú)法滿足實(shí)時(shí)渲染的要求,從而對(duì)開(kāi)發(fā)者提出了挑戰(zhàn),無(wú)法巨細(xì)無(wú)遺地對(duì)每個(gè)細(xì)節(jié)進(jìn)行光影處理,這也是光柵化無(wú)法擁有更真實(shí)效果的原因[19]。
在Unity2018版本中,已經(jīng)封裝了RealTimeGI算法,即在Inspector面板選擇著色器類(lèi)型,調(diào)整SkyBox模擬天空的變化。著色器實(shí)際就是一段嵌入到渲染管線內(nèi)的程序,可以控制GPU運(yùn)算圖像效果的算法。接下來(lái),在Lighting面板中的Environment Lighting中制定好光源,在Preview面板可以靈活調(diào)節(jié)太陽(yáng)高度、燈光類(lèi)型烘焙屬性等參數(shù)以模擬自然界中的日升日落[20]。
運(yùn)用本文討論的實(shí)時(shí)全局光照所模擬的山水景色的對(duì)比如圖5、圖6所示。其中,以光源為視點(diǎn)渲染的紋理和以攝像機(jī)為視點(diǎn)渲染的紋理大小均為 1048×424,屏幕分辨率為1920×1080。由此可以看出,運(yùn)用實(shí)時(shí)光照后,因?yàn)橛辛朔瓷涔?,一些原本模糊的?xì)節(jié)變得較為明亮清晰,巖石上的紋路也一清二楚,更加貼近生活場(chǎng)景。
5 結(jié)束語(yǔ)
本文研究了實(shí)時(shí)全局光照及其2種追蹤方法,分別是光線追蹤與路徑追蹤。雖然實(shí)時(shí)光照有很多優(yōu)點(diǎn),如真實(shí)性好,代入感、沉浸感強(qiáng),減少光柵化的工作量。但其龐大的計(jì)算量和對(duì)GPU極高的要求卻仍不容忽視,亟待獲得真正解決。因此,合理選擇算法模型,兼顧真實(shí)感和計(jì)算量即已成為今后該方面的研究重點(diǎn)。
參考文獻(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ì)的實(shí)時(shí)全局光照明繪制[J]. 軟件學(xué)報(bào), 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ī)模場(chǎng)景渲染下的分布式光線跟蹤算法研究[D]. 長(zhǎng)沙:湖南大學(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]陳純毅, 楊華民, 李文輝,等. 基于幀間虛擬點(diǎn)光源重用的動(dòng)態(tài)場(chǎng)景間接光照近似求解算法[J]. 吉林大學(xué)學(xué)報(bào)(工學(xué)版), 2013, 43(5):1352-1358.
[18]袁璐. 基于立即輻射度的實(shí)時(shí)全局光照算法[J]. 現(xiàn)代計(jì)算機(jī)(專(zhuā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.