李 綱
(川北醫(yī)學(xué)院 計(jì)算機(jī)與數(shù)學(xué)教研室, 四川 南充637007)
在虛擬機(jī)場(chǎng)的圖形應(yīng)用中,為了加強(qiáng)虛擬機(jī)場(chǎng)場(chǎng)景畫面真實(shí)性,做到與真實(shí)機(jī)場(chǎng)場(chǎng)景類似的光照效果。 不僅要能夠模擬白天的機(jī)場(chǎng)場(chǎng)面,還要能夠隨著時(shí)間的推移,從白天的場(chǎng)景過(guò)渡到夜間場(chǎng)景。而早晨和黃昏以及夜晚場(chǎng)景中存在復(fù)雜多樣的局部燈光光照?qǐng)鼍?諸如地面建筑、電燈或廣告牌等在晚上發(fā)出的局部燈光,高桿燈的照明對(duì)周圍局部地面和建筑的照明效果,候機(jī)樓大廳發(fā)射出的燈光等。整個(gè)場(chǎng)景夜間有著較為復(fù)雜的多燈光局部照明情況,對(duì)其的真實(shí)模擬比較困難。 虛擬仿真應(yīng)用對(duì)場(chǎng)景渲染的實(shí)時(shí)性也有較高要求。
計(jì)算機(jī)圖形學(xué)中的全局光照算法通過(guò)基于物理的渲染方程對(duì)場(chǎng)景中逐像素地進(jìn)行光照計(jì)算[1-4],能夠?qū)?chǎng)景做到模擬真實(shí)的光照,由于需要進(jìn)行多次反復(fù)計(jì)算光子的運(yùn)動(dòng)和反射,雖然能夠獲得較好的全局光照效果,但在場(chǎng)景范圍大的情況下,光照計(jì)算需要消耗大量的時(shí)間。 由于虛擬機(jī)場(chǎng)場(chǎng)景里面有大量不同類型的光源,要做到對(duì)這些光源的光照按物理光照原理進(jìn)行模擬,需要的時(shí)間難以滿足虛擬現(xiàn)實(shí)應(yīng)用對(duì)繪制畫面的實(shí)時(shí)性要求[5-6]。 近年來(lái),有研究人員在全局光照方法實(shí)時(shí)化方面做了一些工作,但仍然存在許多局限性。 通過(guò)體素錐追蹤的方式進(jìn)行了交互式的間接光照渲染,但其幀率只有5-30 幀/s[7]。 李用CPU 上通過(guò)Phong 光照模型預(yù)計(jì)算多光源的光照?qǐng)D,用GPU 計(jì)算間接光照并結(jié)合光照?qǐng)D合成最后的圖像,在3 個(gè)光源的情況下,紋理大小為1024 × 1024,屏幕分辨率1440 × 900 時(shí),最高幀率只有26 幀/s[8]。 在全局光照實(shí)時(shí)化方面也有很多研究,但難以做到虛擬仿真應(yīng)用要求的幀率。虛擬仿真應(yīng)用場(chǎng)景中機(jī)場(chǎng)場(chǎng)景的渲染時(shí)間在整個(gè)渲染時(shí)間片中要求不能占據(jù)過(guò)多的時(shí)間,除場(chǎng)景外還有其它的特效等,也要占用一定的計(jì)算時(shí)間片,因此對(duì)場(chǎng)景的渲染要求更高的渲染幀率,而現(xiàn)有的全局光照加速方法還無(wú)法滿足這樣的虛擬仿真要求。 另外,虛擬機(jī)場(chǎng)場(chǎng)景中的建筑物在夜間也有比較復(fù)雜的局部燈光,多光源全局光照繪制算法的繪制效率較低,也使得目前的全局光照方法無(wú)法用于虛擬機(jī)場(chǎng)仿真的應(yīng)用環(huán)境中。
本文提出將Blinn-Phone 光照模型與真實(shí)的Rayleigh 散射環(huán)境光照數(shù)據(jù)修改后的環(huán)境光照數(shù)據(jù)相結(jié)合,形成較為真實(shí)的白天環(huán)境光照?qǐng)鼍啊?夜間的局部燈光光照則采用紋理記錄局部的燈光光照信息。為模擬早晨和黃昏場(chǎng)景光照的漸變,將夜間的局部光照紋理數(shù)據(jù)與白天的環(huán)境光照信息根據(jù)不同時(shí)刻點(diǎn)進(jìn)行融合,形成模擬真實(shí)的早晨和黃昏光照?qǐng)鼍啊?/p>
Phone 光照模型是計(jì)算圖形學(xué)中的經(jīng)典光照模型。 其計(jì)算公式如式(1)和式(2)所示。
其中ka為環(huán)境光反射系數(shù),Ipa為環(huán)境光光強(qiáng),kdIpd(L·N) 為漫反射分量,ksIps(V·R)n為鏡面反射分量,n 為物體表面光滑度因子,表面越光滑則值越大。L 為光線入射方向,V 為視點(diǎn)方向。
Blinn-Phone 光照模型如式(3)和式(4)所示,該光照模型是對(duì)經(jīng)典的Phone 光照模型的改進(jìn),其主要優(yōu)點(diǎn)是計(jì)算過(guò)程比Phone 光照模型要簡(jiǎn)單,計(jì)算速度較Phone 光照模型更快。 由于虛擬現(xiàn)實(shí)應(yīng)用對(duì)實(shí)時(shí)性的要求較高,因此在虛擬機(jī)場(chǎng)的應(yīng)用環(huán)境下,場(chǎng)景光照的繪制過(guò)程所采用的光照模型選擇上,沒(méi)有采用經(jīng)典的Phone 光照模型,而是采用繪制速度更快的Blinn-Phone 光照模型作為場(chǎng)景繪制的光照模型。
其中,ka為環(huán)境光反射系數(shù),Ipa為環(huán)境光光強(qiáng),kdIpd(L·N) 為漫反射分量,ksIps(N·H)n為鏡面反射分量。N 為物理表面法向量, L 為光線入射方向,V 為視點(diǎn)方向,H 為入射方向L 和視點(diǎn)方向V 的中間向量。
由于白天室外的光照主要來(lái)自于太陽(yáng)光,屬于單一光源,因此式(3)可以簡(jiǎn)化為式(5)
其中,太陽(yáng)光照作為環(huán)境光Ipa的主要來(lái)源,在一天24 小時(shí)內(nèi)的光照顏色是不同的。 其對(duì)天空的照射可以通過(guò)Rayleigh 散射進(jìn)行近似描述[9-14],如圖1 所示。
圖1 天空Rayleigh 散射顏色的紋理圖像Fig. 1 The Texture of Rayleigh scatter color of the sky
由圖1 可知,太陽(yáng)光的光照顏色隨著時(shí)間的推移由全黑漸變?yōu)槊髁恋奶焖{(lán)色,再漸變?yōu)槿凇?在清晨和黃昏時(shí),由于大氣散射,出現(xiàn)微紅的光照特征。 因此,根據(jù)天空的Rayleigh 散射可以獲得太陽(yáng)光光照在24 小時(shí)不同時(shí)段的光照顏色,以此顏色作為地面場(chǎng)景建筑物或路面繪制時(shí)所使用的環(huán)境光顏色。 但由于太陽(yáng)光投射到地面時(shí),通常是白色而并不是天空一樣的藍(lán)色,因此對(duì)天空照射的Rayleigh 散射圖須加以修改,以適應(yīng)地面場(chǎng)景的光照。
根據(jù)圖1 的Rayleigh 散射數(shù)據(jù),由藝術(shù)人員制作生成太陽(yáng)光環(huán)境光照紋理如圖2 所示,此紋理保留了Rayleigh 散射圖的基本光照情況,但又有所區(qū)別。 中午12 點(diǎn)的光照顏色是白色而不是天空的藍(lán)色。 通過(guò)紋理圖2 能夠模擬太陽(yáng)光對(duì)地面場(chǎng)景24小時(shí)不同時(shí)段的光照情況。
圖2 太陽(yáng)光對(duì)地面場(chǎng)景的環(huán)境光模擬圖Fig. 2 The ambient light recording texture of the sun
黎明時(shí)環(huán)境光的顏色比較偏紅色,中午時(shí)顏色偏白色,而傍晚時(shí)又比較偏黃色。 為了實(shí)現(xiàn)這種效果,使用了一張保存了二十四小時(shí)光照顏色的紋理,如圖2 所示。 該紋理記錄了二十四小時(shí)不同時(shí)刻環(huán)境光的顏色,從中可以明顯看到不同時(shí)刻環(huán)境光顏色的差別。 如果現(xiàn)實(shí)應(yīng)用中需要模擬晴天、陰天或雨雪天等不同天氣條件下的環(huán)境光照,可以通過(guò)使用類似圖2 的多張紋理圖,并根據(jù)不同天氣條件替換對(duì)應(yīng)的光照紋理圖,可模擬各種不同氣象條件下的地面環(huán)境光照。
通過(guò)Blinn-Phone 光照模型結(jié)合光照紋理采樣,可以很好的模擬出一天24 小時(shí)全局光照顏色的變化。 但場(chǎng)景中的各種物體(如建筑物、飛行器和地面),除了白天的全局光照顏色外,在夜晚的夜間場(chǎng)景會(huì)有更加復(fù)雜的局部燈光光照。 只通過(guò)一張由白天到夜晚的顏色記錄紋理無(wú)法完全實(shí)現(xiàn)對(duì)復(fù)雜地面場(chǎng)景的日夜?jié)u變以及夜晚燈光的局部光照模擬。
夜間場(chǎng)景內(nèi)的燈光情況較為復(fù)雜。 建筑物內(nèi)部發(fā)出的燈光,地面和燈桿上的照明燈光以及地面對(duì)燈光的反射,還有運(yùn)動(dòng)物體(如車輛和飛機(jī))內(nèi)部也有燈光射出。 為了實(shí)時(shí)繪制從白天的環(huán)境光照到夜晚的局部燈光光照變化,在同一套模型中使用了雙重紋理的方法,來(lái)記錄場(chǎng)景的白天和夜晚的顏色或光照情況。 雙重紋理的示例圖如圖3 所示,該圖是機(jī)場(chǎng)中某建筑物夜間(左圖)和白天(右圖)的紋理。白天的紋理只包括建筑物本身的顏色,而夜間紋理則真實(shí)地記錄了建筑物夜晚的環(huán)境光照以及建筑物內(nèi)部的局部燈光光照。 整個(gè)虛擬機(jī)場(chǎng)內(nèi)的幾何體(包括靜止的建筑物和運(yùn)動(dòng)的車輛、飛機(jī)等)均采用類似圖3 的兩層紋理,第一層紋理為場(chǎng)景幾何體白天紋理,第二層紋理為場(chǎng)景幾何體夜晚紋理,其中夜晚紋理記錄了場(chǎng)景中各種局部燈光的照射效果,包括建筑物內(nèi)部燈光、路燈、車輛和飛行器內(nèi)部燈光等。
圖3 場(chǎng)景中某建筑物夜晚(左)和白天(右)的紋理Fig. 3 Night texture(left) and daylight texture(right) of a building
場(chǎng)景中物體在某時(shí)刻點(diǎn)t 的顏色不僅與其白天所呈現(xiàn)的幾何體材質(zhì)顏色(即圖3 右圖)有關(guān),也與圖2 中的時(shí)間和環(huán)境光照顏色有關(guān)。 隨著時(shí)間的變化,場(chǎng)景由白天變?yōu)橐雇砘蛴梢雇碜優(yōu)榘滋?通過(guò)Blinn-Phone 光照模型結(jié)合環(huán)境光照紋理圖片產(chǎn)生環(huán)境光照的交替變化。 而建筑或運(yùn)動(dòng)物體的光照需要考慮環(huán)境光全黑的夜間紋理(圖3 左圖)與白天紋理(圖3 右圖)的轉(zhuǎn)換,而轉(zhuǎn)換的自變量則是時(shí)間t。 因此某時(shí)刻點(diǎn)t 的物體顏色是一個(gè)與時(shí)間相關(guān)的分段函數(shù),則場(chǎng)景物體某一時(shí)刻點(diǎn)t 的物體顏色由分段函數(shù)式(6) 決定。 根據(jù)圖2 的環(huán)境光紋理的不同時(shí)刻點(diǎn)的顏色值,不考慮天空光線散射造成的光照,假定日出的時(shí)刻點(diǎn)(由黑轉(zhuǎn)亮) 為t2,日落的時(shí)刻點(diǎn)(由亮轉(zhuǎn)黑) 為t7,太陽(yáng)升高到足夠高的位置而只有白色環(huán)境光的時(shí)刻點(diǎn)為t4,太陽(yáng)剛落下到剛出現(xiàn)黃色環(huán)境光的時(shí)刻點(diǎn)為t6,則可以通過(guò)公式(6)計(jì)算出不同時(shí)間段內(nèi),場(chǎng)景物體在某個(gè)時(shí)刻點(diǎn)t 的顏色值。 日出前或太陽(yáng)落下后,只使用圖3 左圖的夜間紋理,即只考慮夜間的局部燈光光照,此時(shí)的太陽(yáng)環(huán)境光紋理圖2 所對(duì)應(yīng)的是全黑的紋理。 當(dāng)太陽(yáng)升到較高位置時(shí),此時(shí)地面建筑或電燈等發(fā)出的局部燈光基本可視為已完全關(guān)閉,即使有未關(guān)閉的燈光也較難在白天分辨出來(lái)。 這個(gè)時(shí)間段忽略掉局部燈光光照,而只使用圖3 右圖的白天紋理數(shù)據(jù)。 當(dāng)處于黎明或黃昏時(shí),由于既有太陽(yáng)的光照又有局部的燈光光照,則不能單獨(dú)使用白天或夜間的光照數(shù)據(jù)。 在對(duì)光照建模時(shí),不考慮云層等對(duì)太陽(yáng)光突然的遮擋造成的光照突變,默認(rèn)為太陽(yáng)光照變化是連續(xù)的。 因此,黎明或黃昏時(shí)的光照模擬采用對(duì)白天的顏色紋理和夜間光照紋理線性插值的方式,完成對(duì)黎明或黃昏漸變光照的繪制,具體的分時(shí)段光照繪制公式(6)為
其中, nightTex 是場(chǎng)景物體記錄夜晚的紋理顏色,dayDiff 是場(chǎng)景物體通過(guò)Blinn-Phong 光照模型計(jì)算的白天物體的光照顏色。
光照?qǐng)鼍暗睦L制采用的計(jì)算機(jī)操作系統(tǒng)為Windows7 操作系統(tǒng),CPU 為Xeon E3-1230,圖形處理硬件為NVidia GeForce 1080ti。 機(jī)場(chǎng)模型的面片數(shù)量為74 378 個(gè),繪制幀率可達(dá)100 幀/s 左右,達(dá)到了繪制實(shí)時(shí)性的要求。
同一視點(diǎn)下的同一建筑物在不同時(shí)間段的燈光繪制效果如圖4~8 所示。 其中圖4 為凌晨5:00 的建筑物光照及局部燈光繪制效果,此時(shí)計(jì)算幾何體顏色使用的紋理為夜間局部燈光光照紋理nightTex,與此類似,圖8 展示了晚上22:30 時(shí)的場(chǎng)景繪制效果,所使用的紋理仍為nightTex;而圖5 和圖7 分別為早晨6:20 和傍晚19:30 的建筑物光照繪制效果,此時(shí)的光照繪制是nightTex 與dayDiff 通過(guò)公式(6)計(jì)算后得到的圖像融合后的光照繪制效果,這兩個(gè)時(shí)間點(diǎn)的光照繪制既有白天的紋理、環(huán)境光又有夜間的局部燈光的效果,較好地模擬了天剛亮或天剛黑時(shí),既有天光又有局部燈光照射的融合光照?qǐng)鼍啊?圖6 為中午12:00 的繪制效果,此時(shí)由于太陽(yáng)光強(qiáng)較強(qiáng)的原因,建筑物內(nèi)的燈已經(jīng)關(guān)閉或基本不可見,因此只使用dayDiff 的顏色,即只采用Blinn-Phone 光照模型而不考慮建筑物局部燈光。
圖4 凌晨5:00 場(chǎng)景中某建筑物的光照效果Fig. 4 Light illumination scene at 5:00 am
圖5 早晨6:30 場(chǎng)景中某建筑物的光照效果Fig. 5 Light illumination scene at 6:30 am
圖6 上午11:00 場(chǎng)景中某建筑物的光照效果Fig. 6 Light illumination scene at 11:00 am
圖7 傍晚19:30 場(chǎng)景中某建筑物的光照效果Fig. 7 Light illumination scene at 7:30 pm
圖8 晚上22:30 場(chǎng)景中某建筑物的光照效果Fig. 8 Light illumination scene at 10:30 pm
本文通過(guò)Blinn-Phone 光照模型,結(jié)合修改的Rayleigh 散射環(huán)境光紋理數(shù)據(jù)及單模型雙重紋理的方式,成功地實(shí)現(xiàn)了對(duì)虛擬機(jī)場(chǎng)場(chǎng)景的實(shí)時(shí)漸變的真實(shí)感光照,滿足了虛擬現(xiàn)實(shí)應(yīng)用對(duì)光照的真實(shí)感和實(shí)時(shí)性的要求。 由于虛擬機(jī)場(chǎng)的場(chǎng)景除地面場(chǎng)景外,還有太陽(yáng)、月亮、星星和云層等,如何對(duì)這些常見的自然景觀進(jìn)行模擬,物理真實(shí)的實(shí)時(shí)繪制,進(jìn)而考慮各種物體間的相互使用,比如太陽(yáng)的光照,夜晚的星光和月亮如何模擬將是下一步的研究方向之一。