白云菲
(中南民族大學(xué)計(jì)算機(jī)科學(xué)學(xué)院 湖北 武漢 430074)
在高質(zhì)量圖形的實(shí)時(shí)生成要求下,如何從軟件方面著手減少圖形畫面的復(fù)雜度,已成為VR圖形生成的主要目標(biāo)。研究人員提出多種圖形生成加速方法,細(xì)節(jié)層次(Levers of Detail,LOD)模型就是其中一種主要方法。傳統(tǒng)幾何建模中,一般的LOD技術(shù)的原理是根據(jù)物體距離視點(diǎn)的遠(yuǎn)近來決定所建模型的頂點(diǎn)數(shù)目[2]。對(duì)于粒子系統(tǒng),我們可以結(jié)合LOD技術(shù),進(jìn)行物體模擬,即當(dāng)視點(diǎn)較近時(shí),每次產(chǎn)生較多的粒子,視點(diǎn)較遠(yuǎn)時(shí),則可以產(chǎn)生較少的粒子,從而對(duì)粒子模擬進(jìn)行簡化,減少系統(tǒng)計(jì)算量,提高繪制效率。丁強(qiáng)等人提出的基于LOD技術(shù)的火焰模擬[3],能夠在減少計(jì)算量的基礎(chǔ)上,對(duì)火焰進(jìn)行較好地模擬,但是,簡化后的圖像并沒有根據(jù)視覺特征效果對(duì)粒子系統(tǒng)進(jìn)行精簡,據(jù)此,本文基于火焰幾何模型中粒子的視覺重要度,對(duì)該技術(shù)進(jìn)行了改進(jìn),在模擬火焰燃燒方面,能夠達(dá)到更好的效果。
對(duì)粒子屬性的初始化設(shè)置一般可以通過簡化的隨機(jī)過程來控制[4],對(duì)于每一個(gè)屬性首先確定其變化范圍,然后在該范圍內(nèi)隨機(jī)地確定它的值,隨機(jī)性效果可以通過具有一定的概率分布隨機(jī)函數(shù)來產(chǎn)生,進(jìn)而影響粒子系統(tǒng)的整體外觀輪廓,屬性的變化范圍則由給定的平均期望值和最大方差來確定,其基本表達(dá)式為:
(1)式中Value為任意一個(gè)需要隨機(jī)確定的粒子屬性值;MeanVlaue為該屬性的平均值;Rand()為[-1,1]中的隨機(jī)數(shù)函數(shù);VarValue為方差,即屬性在平均值附近的變化范圍。在火焰粒子系統(tǒng)中初始的位置、初始的運(yùn)動(dòng)速度、受力都可以由式(1)式來直接生成。
粒子的屬性變化構(gòu)成了粒子的運(yùn)動(dòng)變化,對(duì)于透明度和顏色、生命值、粒子大小等屬性,通過式(2)[5]進(jìn)行控制:
式中,ValueStart為粒子系統(tǒng)該屬性的初始值,ValueEnd為此粒子終止時(shí)的屬性值,LifeTime為粒子的壽命值,TimeDelta則為此幀與上一幀的時(shí)間跨度值。某一幀粒子的位置可以由其速度和上一幀的位置得到。
(3)(4)式中P為位置,V為速度,A為加速度。計(jì)算粒子系統(tǒng)的總體受力算法[6]如下:
I:計(jì)算當(dāng)前粒子各個(gè)方向受力情況;
II:根據(jù)受力求出加速度;
III:利用(3)(4)式求出速度與位置的改變。
在粒子生成步驟中,結(jié)合LOD(層次細(xì)節(jié))模型,對(duì)粒子系統(tǒng)產(chǎn)生新粒子的數(shù)目值設(shè)置為:
上式中,N0表示沒有進(jìn)行簡化的原始幾何模型的頂點(diǎn)數(shù),Nm表示第m級(jí)簡化模型的頂點(diǎn)數(shù)。粒子系統(tǒng)中,在距離Lm產(chǎn)生的粒子數(shù)均值作為Nm。即當(dāng)視點(diǎn)較近時(shí),每次產(chǎn)生較多的粒子,視點(diǎn)較遠(yuǎn)時(shí),則產(chǎn)生數(shù)量線性較少的粒子,這樣就降低了很多計(jì)算機(jī)處理的時(shí)間,提高了系統(tǒng)的繪制效率。
上述方法實(shí)現(xiàn)了計(jì)算量的降低,但是,并沒有對(duì)粒子的視覺重要程度進(jìn)行判斷,只是線性地根據(jù)距離減少粒子的生成數(shù)量。頂點(diǎn)視覺重要度決定了頂點(diǎn)的凹凸幾何特性,在三維場景渲染中,凹凸性高的點(diǎn)更多能夠決定場景的真實(shí)度[7]。
頂點(diǎn)的視覺重要度的確定由頂點(diǎn)視覺特征因子和頂點(diǎn)曲度特征因子共同決定[8],根據(jù)法曲率可以計(jì)算頂點(diǎn)曲度特征因子,法曲率反映了曲面在一點(diǎn)處沿指定方向的彎曲程度和彎曲方向,可以對(duì)曲面在一點(diǎn)處沿任意方向的彎曲性量化。高斯曲率和平均曲率共同確定法曲率,進(jìn)而確定了頂點(diǎn)曲度特征因子。
通過對(duì)頂點(diǎn)視覺重要度的計(jì)算,在粒子系統(tǒng)更新時(shí)可根據(jù)視覺重要度為零的點(diǎn)進(jìn)行剔除,可以使頂點(diǎn)的重要視覺特征得以最大保持,并最大程度地降低系統(tǒng)的渲染時(shí)間。即在粒子系統(tǒng)中首次渲染場景時(shí),對(duì)粒子進(jìn)行掃描并記錄每個(gè)粒子的視覺重要程度,在后續(xù)的更新粒子過程中,對(duì)記錄中平坦點(diǎn)位置的粒子不進(jìn)行渲染,以減少渲染量。
利用OpenGL圖形開發(fā)庫,在VC++6.0環(huán)境下,對(duì)火焰粒子系統(tǒng)進(jìn)行模擬,并將粒子的LOD簡化策略及平坦點(diǎn)剔除加入了火焰粒子系統(tǒng)的實(shí)現(xiàn)。系統(tǒng)中采用的幀率為32,即每幀所用渲染時(shí)間為0.03125s,設(shè)置初始L0=50,N0=10;采用線性LOD簡化模型。
由實(shí)驗(yàn)數(shù)據(jù)可知,引入平坦點(diǎn)剔除后,為達(dá)到相同的視覺效果,系統(tǒng)產(chǎn)生新粒子數(shù)量減少約20%-25%左右,即在引用LOD技術(shù)進(jìn)行線性降低粒子發(fā)射量的基礎(chǔ)上,結(jié)合考慮粒子系統(tǒng)中每個(gè)粒子的視覺重要程度,對(duì)視覺凹凸性低的點(diǎn)予以剔除,能夠在保持視覺效果的基礎(chǔ)上,給系統(tǒng)減少計(jì)算負(fù)擔(dān),提高渲染效率。
[1]Revees W T.Particle Systems:A Technique for Modeling a Class of Fuzzy Objects[C]∥Proc of ACM SIGGRAPH’83,1983,17(3):359-376.
[2]郭陽明,翟正軍,陸艷紅.虛擬場景生成中的LOD技術(shù)綜述[J].計(jì)算機(jī)仿真,2005,12(22):180-185.
[3]丁強(qiáng),陳青林,左福強(qiáng).基于 LOD的火焰粒子生成技術(shù)[J].計(jì)算機(jī)應(yīng)用,2005(25):257-258.
[4]彭群生,鮑虎軍,金小剛.計(jì)算機(jī)真實(shí)感圖形的算法基礎(chǔ)[M].北京:科學(xué)出版社,2003.
[5]陳志偉,馬小虎.基于粒子系統(tǒng)和紋理繪制的火焰模擬[J].計(jì)算機(jī)工程與科學(xué).2010,1(32):71-73.
[6]DANIEL SANCHEZ2CRESPO DALMAU.游戲核心算法編程內(nèi)幕[M].邱仲潘,譯.北京:中國環(huán)境科學(xué)出版社,2004.
[7]Frutuoso G M.Silva NSA simplification algorithm.Geometrical vs.visual quality[C].5th International Conference on Computational Science and Applications,2007.