黎婭娟,馬萬峰
(四川大學計算機學院,成都 610065)
隨著科技的發(fā)展,增強現(xiàn)實[1]越來越火爆,而增強現(xiàn)實的其中一個重要的技術就是虛實融合技術。虛實融合需要虛擬物體以及真實場景在光照、幾何以及時間上的一致性。光照一致性[2-3]指的是虛擬物體光照效果的真實性,其光照效果與環(huán)境一致,有與環(huán)境同樣明顯的明暗、陰影等效果,從而和背景融為一體。幾何一致性是指虛擬物體和真實環(huán)境幾何空間的一致性。時間一致性則指的實時交互。目前的AR技術最缺少的就是光照一致性,因為很難獲得真實場景中的光源信息,而真實場景中的光源不再是簡單的點光源、平行光源等,而是各種復雜的光源混雜在一起的。
目前,國內(nèi)外對虛實結合中的光照一致性均有了一定成果。1993年,F(xiàn)ournirer等[4]提出了利用基于圖像的光照算法,使得虛擬物體與真實場景融合的思路。2003年,Daisuke Miyazaki等人[5]根據(jù)單視點拍攝的圖像,測量了反射信息、幾何信息以及光照信息等,估算了光源的位置分布信息。2006年,Tommy Jonson等人[6-7]利用輻射量的技術,把真實場景變化成環(huán)境貼圖,利用Phong模型來模擬太陽光照,這是一個基于戶外的系統(tǒng)。2009年,Banterle等人[8]提出了利用基于圖像的光照技術,恢復整個場景的HDR圖像,從而進行光照計算。2014年,Chen等[9]利用場景理解技術來估計真實場景的幾何信息,進行光照估計。
本文提出的方法是在已有真實場景的HDR圖像的基礎上,將HDR上每一個像素點當作光源,預處理生成輻照貼圖和含有MipMap等級的貼圖,進行漫反射光照和鏡面反射光照,同時在虛擬物體底部加上虛擬的無限大的平面,利用環(huán)境光遮蔽算法生成陰影,光照與陰影結合,即可渲染出虛擬物體最終的光照值。
本文通過光照模型對虛擬物體進行光照計算。光照模型,也叫做明暗模型,是用來計算物體任意點的顏色值的一種模型。光照模型有局部光照和全局光照兩種模型,局部光照僅僅只考慮了可見光源對物體的影響,沒有考慮到物體相互間的光照等。而在全局光照中,場景中的物體不僅僅會受到直接來自光源的光照,同時還會收到周圍環(huán)境其他物體的反射光折射光等各種光的影響?,F(xiàn)實生活中的光照就是全局光照[10]。
本文由于已有周圍環(huán)境光照的所有信息,所以本文的光照就是全局光照。本文采用的是Cook-Torrance光照模型,它是基于物理的光照模型[11]。光線照射到物體表面會發(fā)生漫反射、鏡面反射、折射等現(xiàn)象,本文只考慮其中的漫反射和鏡面反射,該Cook-Torrance光照模型就是用來模擬不同材質的反射效果的模型。詳細算法會在下一節(jié)詳細說明[14]。
本節(jié)主要介紹IBL算法中的漫反射和鏡面反射以及SSAO算法,以及如何將兩個算法融合,渲染最終的畫面。輸入一張高動態(tài)范圍的全景圖作為背景,即真實環(huán)境,將全景圖變換成立方體貼圖,將立方體貼圖上的每一個像素點作為虛擬光源,采用Cook-Torrance光照模型對虛擬物體進行光照,利用SSAO生成對應的AO紋理。最后結合,使得虛擬物體和真實環(huán)境很好地融合。
本文根據(jù)輸入的全景圖,轉化為立方體貼圖(Cubemap),也稱為天空盒。由公式(1),生成天空盒上p點所對應的方向上的輻照值,假設p點一直在立方體正中心。公式(1)與圖1結合一起,就是求點p處ωo方向上的輻射值,這個表達式取決于入射方向ωi在天空盒上的每一個采樣方向,因為p點所在平面的下半部球上的方向為負值,不考慮在內(nèi),所以本文僅需要考慮在其半球上的入射光線。本文對p點ωo方向所在的半球上所有的入射光線ωi加權求平均值,即生成了ωo方向上的輻照值。本文用的黎曼求和積分計算積分方程,在p點所在的半球領域Ω上進行均勻的采樣得到各個入射方向 ωi上的輻射值,加權平均后即Li(p,ωi)(n﹒ωi),乘以常量即是積分方程,因為是預處理,可以適當增加采樣數(shù)量,使得結果更加的精確。
圖1 半球積分
為了進一步簡化積分計算,對公式(1)化簡,將直角坐標系轉化為極坐標系,見公式(2)。因為是在半球領域上積分,所以
對積分繼續(xù)化簡,因為生成的樣例的數(shù)量是固定的,所以分別在θ、φ方向上采樣n1、n2數(shù)量的樣本,公式(2)可化簡為公式(3)
漫反射的計算是采用預計算的方式,預計算的過程:在初始化的時候,計算環(huán)境貼圖上任意一點P上的出射方向ωo上的輻照值,將計算的結果以FBO的形式輸出到另一張立方體貼圖紋理上。因為Cubemap有6個面,所以初始化時需要在前后左右上下6個方向上繪制6遍。后續(xù)在每幀計算漫反射光照時,僅需要通過虛擬物體的法向量來采樣之前生成好的Cubemap即可,從而達到很好的實時性。輸入的環(huán)境貼圖與根據(jù)輻照值生成的輻照貼圖見圖2。
圖2環(huán)境貼圖和輻照貼圖
鏡面反射的計算同漫反射的計算一樣,均是預計算出相關的紋理。但鏡面反射的預計算會更復雜,鏡面反射的相關方程見公式(4)。
為了方便預計算,我們將光照部分分為兩個獨立的部分,分別積分然后組合得到最后的結果,見公式(4)。式子的第一部分就是預過濾環(huán)境貼圖部分,與漫反射中的輻照貼圖類似,均是立方體貼圖。但不一樣的是,本次立方體貼圖是含有MipMap等級的立方體貼圖,等級由虛擬物體的粗糙度和金屬度確定,粗糙度越高,金屬度越低,采樣向量越分散,導致反射畫面更加模糊,因此MipMap等級更高。由于我們不能提前知道視線的方向,故本文是假設視線方向總是等于虛擬物體的某點的法向量,因此,不需考慮視線方向。式子第二部分就是反射積分的BRDF部分,BRDF也就是雙向反射分布函數(shù),它是根據(jù)給定的入射方向上的輻照值,來確定出射方向上的輻射率,也就是,入射光線經(jīng)過物體表面反射,BRDF是描述變量如何在各個出射方向上分布的函數(shù)。我們假定照射的輻照度為白色,那么我們就可以在給定粗糙度、法向量和光線方向上計算BRDF部分。本文第二部分仍然會預計算生成一張BRDF的二維紋理,見圖3,該紋理存儲了一個對于菲涅耳方程縮放的值(紅色部分)和一個偏執(zhí)值(綠色部分)。我們把BRDF的法線向量和入射光線方向的點乘的結果作為水平坐標,把BRDF的粗糙度作為垂直坐標。將兩部分進行合成即生成了鏡面反射光照。
圖3 BRDF二維圖像
屏幕空間環(huán)境光遮蔽(SSAO)是一種模擬間接光照的算法,在本文,它用來替代軟陰影[12],常見的陰影算法陰影映射和點陰影等[13],但是前提是可見的固定光源?,F(xiàn)實世界中的光源并不是固定的,根據(jù)HDR圖像分析光源難度大,且現(xiàn)實生活中光源是多光源的,這就更加增加了難度。因此本文用屏幕空間環(huán)境光遮蔽算法代替軟陰影,但是該算法僅適用于光照很復雜,沒有明顯光源的環(huán)境。屏幕空間環(huán)境光遮蔽將褶皺、孔洞以及非常靠近的墻面變暗的方法來模擬間接光照,也就是本文的軟陰影,從而消除懸浮感。因為這些區(qū)域很大部分都被周圍的幾何體遮蔽,光線難以流失,因此會看上去暗一些。
屏幕空間環(huán)境光遮蔽具體是這樣計算的:對于模型的每一個三角面片,根據(jù)周圍的面片的深度值計算遮蔽因子,遮蔽因子越多,即光照越暗。采集三角面片中心所在球內(nèi)的多個隨機的樣本點的深度,與當前面片的深度值進行對比,比當前面片高的樣本數(shù)量即是遮蔽因子。如圖4(a)所示,灰色部分的樣本是高于當前面片的深度值,也就是遮蔽因子,灰色越多,當前面片越暗。
由于采樣的區(qū)域是一個球體,這樣會導致一個平面接受的光照最多為50%,因為平面至少有一半的數(shù)量是遮蔽因子,但是在真實世界,平面是沒有任何遮擋的,不應該是灰色。因此,本文將采樣區(qū)域改為面片法向量所在平面的半球,如下圖4(b)。由于僅僅對半球體內(nèi)采樣,沒有考慮到當前面片底部的樣本,因此不會出色灰蒙蒙的效果。
屏幕空間環(huán)境光遮蔽需要輸入三角面片的位置信息、法線向量,計算出遮蔽因子后最終通過FBO將屏幕上每一個像素點所對應的環(huán)境光照比率存儲在二維紋理上,但是此時有很多重復的噪聲紋理,故本文會對生成二維紋理進行模糊化處理,從而創(chuàng)建一個光滑的遮蔽結果,如圖5,供后續(xù)的光照計算使用。
圖4遮蔽因子
圖5 枕頭的AO貼圖
本節(jié)中將會展示輸入同一個模型在不同的環(huán)境中的變化以及不同的模型在同一環(huán)境中的變化,以及加入SSAO算法與不加SSAO算法的對比圖。實驗環(huán)境為NVIDIA GeForce GTX 1050。
本節(jié)第一個實驗為佛像和花瓶模型的不同材質在同一環(huán)境下的光照,材質屬性有漫反射材質、鏡面反射材質以及漫反射和鏡面反射均有的材質。渲染結果見圖6,圖中第一行的模型為佛像,第二行的模型為花瓶。第一列的材質均為全部漫反射材質,第二列材質介于漫反射和鏡面反射中間,第三列材質為全部鏡面反射??梢钥闯?,光線照射到全漫反射材質時,因為光線全部向四面八方發(fā)散,因此沒有突出的亮斑;而光線照射到處于漫反射和鏡面反射均有的材質時,會有少量的比較模糊的亮斑,有反射周圍場景的模糊感,同時還有自身的顏色;光線照射到全鏡面反射材質時,因為是鏡面材質,會全部反射周圍的場景,沒有自身的顏色,因此渲染圖成透明玻璃狀態(tài),完全地反射了周圍環(huán)境。不同的模型在相同場景中均能夠與場景很好的融合,給人真實的感覺,本文的算法確實能夠較好的模擬不同的虛擬物體在相同場景的渲染效果。同時,用Fraps軟件測試幀率,花瓶模型為470幀左右,佛像模型在450幀浮動,遠遠超過實時的要求,也說明了本文算法的優(yōu)勢性,能夠實時的滿足全局光照效果。
本文第二個實驗為材質漫反射和鏡面反射之間的佛像模型在不同的環(huán)境下的光照結果,輸入的HDR圖像均不相同。渲染結果見圖7,虛擬物體的色調基本與周圍環(huán)境一致。明亮的場景中,虛擬物體也很明暗;反之,灰暗的場景中,虛擬物體也隨之很暗。實驗表面,本文算法很好的兼容性,針對不同的環(huán)境,虛擬物體都能很好地與場景融合。
本文第三個實驗為枕頭模型在房間里的光照結果,渲染結果見圖8。左圖是沒有SSAO的結果,右圖是加入SSAO的結果。通過對比可以發(fā)現(xiàn),因為右圖有陰影的效果,明顯比左圖真實,同時消除了懸浮感,右圖的枕頭的AO圖見圖5,通過在枕頭底部加入一塊平面替代真實環(huán)境的沙發(fā),達到了枕頭與沙發(fā)間陰影的效果,使得整個虛擬物體更加的真實。由于SSAO算法每一幀需要繪制,因此很耗效率,測試幀率,關閉SSAO為285幀左右,開啟SASAO為60幀左右,仍然可以滿足實時渲染的要求。實驗表明,SSAO算法確實能夠很好的解決軟陰影問題,從而消除虛擬物體的懸浮感,達到更好的真實效果。
本文第四個實驗是在實驗三的基礎上,改變真實環(huán)境的主題色,測試枕頭顏色的變化,渲染結果見圖9??梢钥吹剑S著環(huán)境色調的變化,枕頭光照顏色隨之變化,與場景的變化一致。實驗再次驗證,本文算法能夠很好地保證虛擬物體與環(huán)境光照的一致性。
圖6 不同材質的虛擬物體在同一環(huán)境下的渲染結果
圖7 相同材質的虛擬物體在不同環(huán)境下的渲染結果
圖8 相同材質的虛擬物體在不同環(huán)境下的渲染結果
圖9 相同材質的虛擬物體在不同環(huán)境下的渲染結果
本文提出的方法,通過輸入HDR圖像與虛擬物體,能夠輸出虛擬物體與場景虛實融合的效果,達到全局光照的效果,使得場景與虛擬物體光照一致性,給人真實的感覺,并能夠達到實時要求。經(jīng)過測試,同一虛擬物體在不同場景中以及不同虛擬物體在相同場景中,均能很好的與場景融合。
本文算法針對光源不明顯的場景,效果很真實,在以后的研究中,我們會針對單光源的場景,分析光源所在位置,從而使用別的陰影算法,達到真實的效果,消除懸浮感。