專利名稱:場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種偽3D的場(chǎng)景動(dòng)態(tài)光影技術(shù),尤其是涉及一種運(yùn)用頂點(diǎn)光照技術(shù)的場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法。
背景技術(shù):
目前,電子游戲,尤其是偽3D游戲(45度視角游戲)里面普遍采用場(chǎng)景動(dòng)態(tài)光影技術(shù)使游戲玩家產(chǎn)生如臨其境,如見其物的視覺效果。所述動(dòng)態(tài)光影技術(shù)是游戲中用來依照光源決定四周環(huán)境所見模樣的一種技術(shù),是游戲研發(fā)人員用來讓玩家更融入游戲的工具之一。譬如說向一個(gè)黑暗的地方發(fā)射火箭,當(dāng)火箭前進(jìn)時(shí)它會(huì)照亮走廊的四周。而當(dāng)火箭過去之后,這些被照亮的區(qū)域又會(huì)恢復(fù)到他們?cè)镜牧炼取?chǎng)景動(dòng)態(tài)光影技術(shù)首先在計(jì)算機(jī)中構(gòu)造出所需場(chǎng)景的幾何模型,然后根據(jù)假定的光照條件,計(jì)算畫面上可見的各景物表面的光照效果。
現(xiàn)有的場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法選擇光照效果的方式有光照貼圖(LightingMap)和頂點(diǎn)光照(Vertex Lighting)。光照貼圖方式是由設(shè)計(jì)人員在設(shè)計(jì)游戲場(chǎng)景時(shí)將預(yù)先設(shè)計(jì)好的紋理和光源生成光照貼圖,這樣我們?cè)陬A(yù)定的場(chǎng)景或即將發(fā)生的時(shí)間就能看見預(yù)先設(shè)計(jì)好的那幅光照貼圖。這樣的好處是能看到由設(shè)計(jì)人員精心設(shè)計(jì)的游戲畫面,缺點(diǎn)是非實(shí)時(shí)性,而且要花費(fèi)大量時(shí)間去設(shè)計(jì)畫面,這對(duì)于游戲開發(fā)來說無疑是浪費(fèi)時(shí)間。
頂點(diǎn)光照方式則是對(duì)于物體的頂點(diǎn)進(jìn)行計(jì)算頂點(diǎn)與光源的遠(yuǎn)近距離,最后可以在運(yùn)行3D程序時(shí)實(shí)時(shí)顯示動(dòng)態(tài)光源效果?,F(xiàn)有一些已開發(fā)的游戲在采用頂點(diǎn)光照技術(shù)實(shí)現(xiàn)動(dòng)態(tài)光影效果,生成一幅真實(shí)感的游戲場(chǎng)景時(shí),通常采用步驟將當(dāng)前區(qū)域(屏幕可見范圍)劃分為固定大小的水平固定網(wǎng)格,每一網(wǎng)格稱為一個(gè)象素;統(tǒng)一按照障礙物和光源位置逐個(gè)象素地計(jì)算各象素的亮度;最后統(tǒng)一將每個(gè)需要照亮的物體離散成物體網(wǎng)格,并根據(jù)各物體網(wǎng)格所在象素的亮度進(jìn)行照亮。該現(xiàn)有技術(shù)可稱之為“整體網(wǎng)格點(diǎn)亮計(jì)算光照法”,其具有一些缺點(diǎn)
1)計(jì)算復(fù)雜,光照速度低,由于首先將當(dāng)前區(qū)域劃分為固定水平光照網(wǎng)格,并計(jì)算各網(wǎng)格的亮度,其計(jì)算量過大,造成運(yùn)算速度下降,且實(shí)時(shí)性受到限制。
2)光照精度低,由于是根據(jù)水平固定網(wǎng)格的亮度照亮物體網(wǎng)格,即光照精度取決于水平固定網(wǎng)格大小,考慮到運(yùn)算速度的問題,水平固定網(wǎng)格通常較粗以降低計(jì)算量,造成光照精度受到限制。而且先計(jì)算網(wǎng)格大小,再將物體離散成物體網(wǎng)格,并根據(jù)水平固定網(wǎng)格的亮度照亮物體網(wǎng)格,在水平網(wǎng)格與物體網(wǎng)格對(duì)齊時(shí)經(jīng)常產(chǎn)生誤差。
3)光照精度不易調(diào)整,由于將當(dāng)前區(qū)域劃分為固定大小的水平網(wǎng)格,使得調(diào)節(jié)被光照的物體網(wǎng)格大小也不能提高光照精度。
發(fā)明內(nèi)容
由于現(xiàn)有技術(shù)的場(chǎng)景光照速度和精度不夠,本發(fā)明解決的技術(shù)問題在于提供一種場(chǎng)景光照速度快、精度高的場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法。
為此,本發(fā)明解決技術(shù)問題的技術(shù)方案是一種場(chǎng)景動(dòng)態(tài)光影的實(shí)現(xiàn)方法,包括步驟1)生成場(chǎng)景中的遮擋物列表;2)確定光源衰減范圍,對(duì)位于光源衰減范圍中的遮擋物生成光源對(duì)應(yīng)的動(dòng)態(tài)陰影錐列表;3)判斷可以被照亮的物體是否位于視野之中,如在視野之中,則將其離散成具有頂點(diǎn)的物體網(wǎng)格;4)針對(duì)視野中的光源,判斷離散成物體網(wǎng)格的物體是否位于光源的衰減范圍內(nèi),如果不在,則不進(jìn)行計(jì)算;如果在,則進(jìn)入步驟5);5)計(jì)算光源對(duì)衰減范圍內(nèi)未處于陰影錐的物體網(wǎng)格的光照。
相對(duì)于現(xiàn)有技術(shù),本發(fā)明的有益效果是首先,由于只將視野中可以被照亮的物體離散成物體網(wǎng)格,相對(duì)現(xiàn)有技術(shù)首先劃分當(dāng)前區(qū)域再離散物體的做法,可以將物體離散成更多的物體網(wǎng)格以提高光照精度,而且可減小計(jì)算量,提高光照速度。其次,由于生成陰影錐列表,其不但可以產(chǎn)生陰影加強(qiáng)顯示效果,而且能剔除那些不在陰影里的頂點(diǎn),使它們不被處理,加強(qiáng)了光照速度。再次,由于光照的精度取決于物體網(wǎng)格的大小,動(dòng)態(tài)改變被光照的物體網(wǎng)格可以實(shí)際調(diào)節(jié)光照的細(xì)節(jié)度。這樣可以為不同配置高低的機(jī)器采用不同的細(xì)節(jié)度計(jì)算方式,比較靈活。另外,計(jì)算網(wǎng)格物體的光照時(shí)是真正計(jì)算光源到被光照頂點(diǎn)的實(shí)際距離,光照精度得到提高。
圖1是本發(fā)明場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法的流程圖;圖2是本發(fā)明場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法生成陰影錐的原理圖。
圖3是本發(fā)明場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法生成陰影錐的流程圖。
圖4是本發(fā)明場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法在新加入遮擋物時(shí)的工作流程圖;圖5是本發(fā)明場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法在新加入遮擋物時(shí)的工作流程圖;圖6是本發(fā)明場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法在新加入遮擋物時(shí)的工作流程圖。
具體實(shí)施例方式
請(qǐng)參考圖1,本發(fā)明場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法包括生成場(chǎng)景中的遮擋物列表的步驟101;確定光源衰減范圍,對(duì)位于光源衰減范圍中的遮擋物生成光源對(duì)應(yīng)的動(dòng)態(tài)陰影錐列表的步驟102;判斷可以被照亮的物體是否位于視野之中,如在視野之中,則將其離散成具有頂點(diǎn)的物體網(wǎng)格的步驟103;針對(duì)視野中的光源,判斷離散成物體網(wǎng)格的物體是否位于光源的衰減范圍內(nèi)的步驟104,如果不在,則不進(jìn)行計(jì)算;如果在,則計(jì)算光源對(duì)衰減范圍內(nèi)未處于陰影錐的物體網(wǎng)格的光照的步驟105。
請(qǐng)一并參考圖2,首先實(shí)施步驟101,對(duì)于場(chǎng)景中存在的遮擋物20,生成一個(gè)遮擋物列表,隨后執(zhí)行步驟102,確定光源10的衰減范圍,光源10對(duì)場(chǎng)景中的位于衰減范圍內(nèi)的遮擋物列表進(jìn)行判斷并生成陰影錐列表。本發(fā)明所謂遮擋物20是指游戲場(chǎng)景中出現(xiàn)的牌坊、碑塔、建筑物或其他可以遮擋光源10的光照的景物。
步驟102的一個(gè)實(shí)施方式請(qǐng)一并參考圖3,首先實(shí)行步驟121,確定光源衰減范圍。場(chǎng)景中的光源10由一個(gè)光源位置向量以及光源衰減半徑r確定,所述光源衰減半徑可以根據(jù)不同的游戲場(chǎng)景而選取,選取光源衰減半徑則同時(shí)確定了光源10的光源衰減范圍。其次實(shí)行步驟122,確定遮擋物20的遮擋線段。所謂遮擋線段是指遮擋物20和場(chǎng)景相交的輪廓,當(dāng)所述輪廓為其他形狀如圓形時(shí),將其轉(zhuǎn)化為遮擋線段進(jìn)行處理。再執(zhí)行步驟123,生成陰影錐。由于遮擋物20的遮擋線段進(jìn)入了光源10的衰減范圍,所以在遮擋線段上方形成了陰影。光源10與遮擋線段兩端連線組成了陰影錐的兩條交叉直線。生成陰影錐的作用在于陰影錐能產(chǎn)生陰影以加強(qiáng)顯示效果,而且能快速剔除那些不在陰影里的頂點(diǎn)(詳后述),使它們不被處理,加快運(yùn)算速度。
再次參考圖1和圖2,在生成陰影錐列表的步驟102之后,開始繪制游戲場(chǎng)景中的物體。首先執(zhí)行步驟103,判斷物體是否在視野之中,當(dāng)某個(gè)可以被照亮的物體30處于視野之中時(shí),將其離散成物體網(wǎng)格31。所謂物體30可看成由若干圖素組成,所述圖素一般采用四個(gè)頂點(diǎn)圍成的空間四邊形進(jìn)行描述,要將物體30離散成為物體網(wǎng)格31就必須在四個(gè)頂點(diǎn)中間插值來增加頂點(diǎn),這個(gè)過程可以采用等距離插值的方法,給定要插值形成的物體網(wǎng)格31的大小,自動(dòng)生成其中的頂點(diǎn)。
所謂視野,這里指的是屏幕可見的范圍,當(dāng)所述需繪制的物體30不在屏幕的可見范圍,即視野之內(nèi)時(shí),則不對(duì)其進(jìn)行計(jì)算光照的處理,以達(dá)到降低計(jì)算量提高速度的目的。同理,當(dāng)光源不在視野,即屏幕可見的范圍內(nèi)時(shí),要對(duì)其進(jìn)行剔除處理,以減小計(jì)算時(shí)的計(jì)算量。
隨后執(zhí)行步驟104,當(dāng)視野中的光源10被確定后,判斷離散成物體網(wǎng)格31的物體30是否位于光源10的衰減范圍內(nèi),如果不在,則不進(jìn)行計(jì)算;如果在,則進(jìn)入步驟105,計(jì)算光源對(duì)衰減范圍內(nèi)未處于陰影錐的物體網(wǎng)格的光照。本實(shí)施方式中,所述步驟105可以這樣進(jìn)行按線性衰減計(jì)算進(jìn)入光源衰減范圍且未處于陰影錐的物體網(wǎng)格311的頂點(diǎn)的亮度;采用平滑插值的方法計(jì)算進(jìn)入光源衰減范圍且未處于陰影錐的物體網(wǎng)格311中頂點(diǎn)之間區(qū)域的亮度。位于陰影中的物體網(wǎng)格312的頂點(diǎn)由于不受光源10的影響將被剔除而不受處理,以達(dá)到降低計(jì)算量提高速度的目的。所謂線性衰減是指根據(jù)組成物體30的每個(gè)頂點(diǎn)離光源10的距離來確定頂點(diǎn)亮度,當(dāng)然為達(dá)到一定的特技效果,也可以采用平方衰減等其他方法。另外,計(jì)算頂點(diǎn)之間區(qū)域的亮度可以采用的插值的方法有很多,本實(shí)施方式采用平滑插值的方法可以利用顯示卡硬件加速的方法,而且平滑插值也是真實(shí)光照通常采用的方法。如果要實(shí)現(xiàn)特效,也可以采用其他插值方法。
為了進(jìn)一步降低運(yùn)算時(shí)的計(jì)算量,提高運(yùn)算速度,本發(fā)明場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法還可以包括遮擋物預(yù)加入的步驟,在場(chǎng)景還未生成前,首先確定遮擋線段,生成陰影錐,實(shí)現(xiàn)預(yù)先增加一部分遮擋物和光源到場(chǎng)景中的目的。
本發(fā)明方法中,還可以根據(jù)不同的游戲場(chǎng)景和需要實(shí)現(xiàn)的特殊光影效果,控制光照開關(guān),所謂光照開關(guān)是控制光源開啟和關(guān)閉的單元。當(dāng)光照開關(guān)關(guān)閉后,所有繪制的物體都不參與構(gòu)造物體網(wǎng)格和計(jì)算光照,當(dāng)光照開關(guān)打開后,才將繪制的可照亮的物體離散成物體網(wǎng)格并計(jì)算光照。
此外,還可以控制光照精度等級(jí),本發(fā)明中,光照精度取決于物體網(wǎng)格的大小,動(dòng)態(tài)改變被光照的物體網(wǎng)格可以實(shí)際調(diào)節(jié)光照的細(xì)節(jié)度,改變物體網(wǎng)格的頂點(diǎn)數(shù)量就改變了細(xì)節(jié)度,頂點(diǎn)越多,細(xì)節(jié)度越高,這樣可以為不同配置高低的機(jī)器采用不同的細(xì)節(jié)度計(jì)算方式,比較靈活。所謂光照的細(xì)節(jié)度指的是被照亮的物體得到的光強(qiáng)在物體表面的過渡效果。
請(qǐng)一并參閱圖4至圖6,當(dāng)場(chǎng)景發(fā)生改變時(shí),本發(fā)明場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法可以進(jìn)行實(shí)時(shí)調(diào)整。
參考圖4,新加入遮擋物時(shí),執(zhí)行步驟將其與場(chǎng)景中的遮擋物合并的步驟401,調(diào)整場(chǎng)景中的遮擋物列表的步驟402,對(duì)各光源生成陰影錐的步驟403,調(diào)整光源的陰影錐列表的步驟404,重新計(jì)算場(chǎng)景中物體的光照的步驟405。
參考圖5,打開新的光源時(shí),執(zhí)行步驟該光源對(duì)場(chǎng)景中的遮擋物依次生成陰影錐的步驟501,生成所述光源的陰影錐列表的步驟502;重新計(jì)算場(chǎng)景中物體的光照的步驟503。
參考圖6,移動(dòng)光源時(shí),執(zhí)行步驟清除其原有的陰影錐列表的步驟601,該光源對(duì)場(chǎng)景中的遮擋物依次生成陰影錐的步驟602,生成所述光源的陰影錐列表的步驟603;重新計(jì)算場(chǎng)景中物體的光照的步驟604。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以作出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種場(chǎng)景動(dòng)態(tài)光影的實(shí)現(xiàn)方法,包括步驟1)生成場(chǎng)景中的遮擋物列表;2)確定光源衰減范圍,對(duì)位于光源衰減范圍中的遮擋物生成光源對(duì)應(yīng)的動(dòng)態(tài)陰影錐列表;3)判斷可以被照亮的物體是否位于視野之中,如在視野之中,則將其離散成具有頂點(diǎn)的物體網(wǎng)格;4)針對(duì)視野中的光源,判斷離散成物體網(wǎng)格的物體是否位于光源的衰減范圍內(nèi),如果不在,則不進(jìn)行計(jì)算;如果在,則進(jìn)入步驟5);5)計(jì)算光源對(duì)衰減范圍內(nèi)未處于陰影錐的物體網(wǎng)格的光照。
2.根據(jù)權(quán)利要求1所述的場(chǎng)景動(dòng)態(tài)光影的實(shí)現(xiàn)方法,其特征在于步驟2)包括步驟6)確定遮擋物的遮擋線段;7)連接光源和遮擋線段兩端形成兩條交叉直線;8)生成陰影錐。
3.根據(jù)權(quán)利要求1所述的場(chǎng)景動(dòng)態(tài)光影的實(shí)現(xiàn)方法,其特征在于步驟2)進(jìn)一步包括步驟9)新加入遮擋物時(shí),將其合并至場(chǎng)景中的遮擋物列表,并修改光源的陰影錐列表;10)打開新的光源時(shí),生成所述新的光源對(duì)場(chǎng)景中的遮擋物列表的陰影錐列表;11)移動(dòng)光源時(shí),先清除其原有的陰影錐列表,再生成新的陰影錐列表。
4.根據(jù)權(quán)利要求1所述的場(chǎng)景動(dòng)態(tài)光影的實(shí)現(xiàn)方法,其特征在于步驟5)進(jìn)一步包括按線性衰減計(jì)算進(jìn)入光源衰減范圍且未處于陰影錐的物體網(wǎng)格的頂點(diǎn)的亮度。
5.根據(jù)權(quán)利要求4所述的場(chǎng)景動(dòng)態(tài)光影的實(shí)現(xiàn)方法,其特征在于步驟5)進(jìn)一步包括采用平滑插值的方法計(jì)算進(jìn)入光源衰減范圍且未處于陰影錐的物體網(wǎng)格中頂點(diǎn)之間的亮度。
6.根據(jù)權(quán)利要求1所述的場(chǎng)景動(dòng)態(tài)光影的實(shí)現(xiàn)方法,其特征在于還包括遮擋物預(yù)加入的步驟。
7.根據(jù)權(quán)利要求1所述的場(chǎng)景動(dòng)態(tài)光影的實(shí)現(xiàn)方法,其特征在于還包括控制光照開關(guān)的步驟。
全文摘要
本發(fā)明公開了一種場(chǎng)景動(dòng)態(tài)光影實(shí)現(xiàn)方法,包括步驟生成場(chǎng)景中的遮擋物列表;確定光源衰減范圍,對(duì)位于光源衰減范圍中的遮擋物生成光源對(duì)應(yīng)的動(dòng)態(tài)陰影錐列表;判斷可以被照亮的物體是否位于視野之中,如在視野之中,則將其離散成具有頂點(diǎn)的物體網(wǎng)格;針對(duì)視野中的光源,判斷離散成物體網(wǎng)格的物體是否位于光源的衰減范圍內(nèi),如果不在,則不進(jìn)行計(jì)算;如果在,則計(jì)算光源對(duì)衰減范圍內(nèi)未處于陰影錐的物體網(wǎng)格的光照。本發(fā)明可應(yīng)用于偽3D游戲,可以提高光照精度,改善場(chǎng)景圖像品質(zhì),而且減小實(shí)現(xiàn)場(chǎng)景動(dòng)態(tài)光影效果時(shí)的計(jì)算量,提高光照速度。
文檔編號(hào)G06T15/50GK1547163SQ20031011889
公開日2004年11月17日 申請(qǐng)日期2003年12月4日 優(yōu)先權(quán)日2003年12月4日
發(fā)明者羅洪波 申請(qǐng)人:北京金山數(shù)字娛樂科技有限公司