一種基于OpenSceneGraph的三維動(dòng)畫(huà)制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于場(chǎng)景圖形模擬仿真技術(shù)領(lǐng)±或,更具體地,涉及一種基于OpenSceneGraph的三維動(dòng)畫(huà)制作方法。
【背景技術(shù)】
[0002]OpenSceneGraph(OSG)是一個(gè)開(kāi)源的高性能三維圖像清染引擎,基于修改的LGPL協(xié)議(OSGPL)免費(fèi)發(fā)布,廣泛用于視覺(jué)仿真、游戲、虛擬現(xiàn)實(shí)、科學(xué)可視化和建模等領(lǐng)域,它以成為工業(yè)標(biāo)準(zhǔn)的OpenGL為底層平臺(tái),使用可移植性的ANSI C++編寫(xiě)而成;解決了使用OpenGVS、Vega等商業(yè)引擎開(kāi)發(fā)成本過(guò)高,不利于產(chǎn)品推廣的問(wèn)題,從實(shí)用的角度上更有意義,效果不亞于商業(yè)視景渲染軟件。
[0003]虛擬視景技術(shù),是虛擬仿真視景技術(shù)中一個(gè)重要分支,其組成部分主要包括仿真建模技術(shù)、動(dòng)畫(huà)仿真技術(shù)和實(shí)時(shí)視景生成技術(shù)。在虛擬視景中,動(dòng)畫(huà)的渲染非常重要,可以添加更多的娛樂(lè)和互動(dòng)。目前,OSG中實(shí)現(xiàn)逼真的動(dòng)畫(huà)技術(shù)主要是骨骼動(dòng)畫(huà),其顯示效果非常逼真。但其技術(shù)難度非常高。在一些場(chǎng)景中,有一部分動(dòng)畫(huà)起到很重要的錦上添花的效果,使得場(chǎng)景更加真實(shí)、絢麗,但這部分動(dòng)畫(huà)效果主要是視覺(jué)上的需求,并不需要精確度;這種情況下使用骨骼動(dòng)畫(huà)將會(huì)耗費(fèi)大量的資源。
[0004]以制作海底魚(yú)群運(yùn)動(dòng)動(dòng)畫(huà)為例,游動(dòng)的魚(yú)群、波動(dòng)的海草是必不可少的場(chǎng)景成員,若使用骨骼動(dòng)畫(huà)來(lái)實(shí)現(xiàn),需要制作大量三維模型,并進(jìn)行魚(yú)類(lèi)身體游動(dòng)的計(jì)算,而大量的魚(yú)群游動(dòng)不是簡(jiǎn)單的平動(dòng),其還具有魚(yú)類(lèi)身體的扭動(dòng);但它們大部分并非是場(chǎng)景中的主體目標(biāo),而是修飾整個(gè)場(chǎng)景,使其更具有真實(shí)性;為了實(shí)現(xiàn)真實(shí)動(dòng)畫(huà)效果采用骨骼動(dòng)畫(huà),計(jì)算工作量巨大,將耗費(fèi)大量資源。
【發(fā)明內(nèi)容】
[0005]針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于OpenSceneGraph的三維動(dòng)畫(huà)制作方法,其目的在于利用二維圖片運(yùn)動(dòng)達(dá)到高度仿真三維動(dòng)畫(huà)視覺(jué)效果,克服了傳統(tǒng)模型動(dòng)畫(huà)實(shí)現(xiàn)的復(fù)雜性。
[0006]為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種基于OpenSceneGraph的三維動(dòng)畫(huà)制作方法,包括以下步驟:
[0007](I)刪除原始圖片中的背景紋理,獲得僅包含目標(biāo)物體紋理信息的第一圖片,將所述第一圖片保存為帶有透明度信息的格式,獲得僅包含目標(biāo)物體紋理信息且?guī)в型该鞫鹊牡诙D片;
[0008](2)設(shè)置第二圖片每一幀的紋理坐標(biāo)對(duì)應(yīng)關(guān)系,獲得各幀對(duì)應(yīng)的子圖;
[0009](3)對(duì)所述子圖添加廣告牌;
[0010](4)采用OpenSceneGraph的路徑動(dòng)畫(huà)類(lèi)創(chuàng)建路徑動(dòng)畫(huà)對(duì)象,并將該路徑動(dòng)畫(huà)對(duì)象關(guān)聯(lián)至步驟(3)所述廣告牌的節(jié)點(diǎn),使得路徑動(dòng)畫(huà)對(duì)象成為廣告牌子節(jié)點(diǎn);
[0011](5)采用OpenSceneGraph的矩陣變換類(lèi)創(chuàng)建矩陣變換對(duì)象和矩陣變化節(jié)點(diǎn),將步驟(3)所述廣告牌的節(jié)點(diǎn)關(guān)聯(lián)至所述矩陣變換對(duì)象下;通過(guò)所述矩陣變換對(duì)象改變圖片的位置和姿態(tài)信息,產(chǎn)生相對(duì)于三維場(chǎng)景參考系的位置和姿態(tài)變化效果;
[0012](6)采用OpenSceneGraph的單視景器類(lèi)創(chuàng)建單視景器對(duì)象,采用OpenSceneGraph的組節(jié)點(diǎn)類(lèi)創(chuàng)建場(chǎng)景根節(jié)點(diǎn),將步驟(5)中獲得的矩陣變換對(duì)象關(guān)聯(lián)至所述根節(jié)點(diǎn)下,并將單視景器對(duì)象的場(chǎng)景數(shù)據(jù)設(shè)置為根節(jié)點(diǎn);
[0013](7)采用OpenSceneGraph的幀函數(shù)完成各幀的場(chǎng)景數(shù)據(jù)更新并清染繪制場(chǎng)景,獲得二維動(dòng)畫(huà)。
[0014]優(yōu)選地,步驟(2)創(chuàng)建子圖的步驟具體如下:
[0015](2.1)采用OpenSceneGraph的紋理類(lèi)創(chuàng)建紋理對(duì)象,并設(shè)置紋理大小、紋理顏色格式特征;
[0016](2.2)采用OpenSceneGraph的幾何體類(lèi)創(chuàng)建幾何體對(duì)象,且將其設(shè)置為動(dòng)態(tài)數(shù)據(jù)變量,使得該變量可在每一幀進(jìn)行數(shù)據(jù)更新,且指定所述幾何體對(duì)象局部坐標(biāo)系的笛卡爾坐標(biāo)系;
[0017](2.3)采用OpenSceneGraph的三維數(shù)組類(lèi)創(chuàng)建三維數(shù)組對(duì)象,用以存放紋理,采用OpenSceneGraph的二維數(shù)組類(lèi)創(chuàng)建二維數(shù)組對(duì)象,用以存放紋理坐標(biāo);進(jìn)行紋理映射,完成幾何體對(duì)象與紋理坐標(biāo)綁定;
[0018](2.4)將上述紋理坐標(biāo)對(duì)象與幾何體對(duì)象進(jìn)行關(guān)聯(lián),并設(shè)置幾何體的定點(diǎn)數(shù)組;
[0019](2.5)采用OpenSceneGraph的四維數(shù)組類(lèi)創(chuàng)建顏色數(shù)組對(duì)象,將顏色對(duì)象關(guān)聯(lián)到步驟(2.2)中創(chuàng)建的幾何體對(duì)象上;并將所述包含目標(biāo)物體紋理信息且?guī)в型该鞫鹊膱D片分為20*20的小格子,將小格頂點(diǎn)坐標(biāo)與顏色坐標(biāo)一對(duì)一對(duì)應(yīng),完成紋理映射;
[0020](2.6)創(chuàng)建圖片對(duì)象,將步驟⑴獲得的包含目標(biāo)物體紋理信息且?guī)в型该鞫鹊膱D片數(shù)據(jù)存入該圖片對(duì)象,并將圖片對(duì)象關(guān)聯(lián)至(2.1)中創(chuàng)建的紋理對(duì)象上;
[0021](2.7)采用OpenSceneGraph的屬性對(duì)象類(lèi)創(chuàng)建屬性對(duì)象;獲得紋理映射與屬性設(shè)置完全的子圖;
[0022]通過(guò)步驟(2)進(jìn)行每一幀子圖創(chuàng)建,在每一幀進(jìn)行數(shù)據(jù)更新,完成圖片基于自身的運(yùn)動(dòng)。
[0023]優(yōu)選地,步驟(2.1)包括以下子步驟:
[0024](2.1.1)利用OpenSceneGraph的紋理類(lèi)的設(shè)置紋理大小函數(shù)設(shè)置紋理對(duì)象大?。?br>[0025](2.1.2)利用OpenSceneGraph的屬性類(lèi)的設(shè)置紋理屬性和模式函數(shù)設(shè)置紋理對(duì)象的紋理格式,使其具有透明度通道,以免系統(tǒng)自動(dòng)對(duì)背景紋理填充顏色;
[0026](2.1.3)利用OpenSceneGraph的紋理類(lèi)的設(shè)置過(guò)濾方式函數(shù)設(shè)置紋理過(guò)濾方式允許進(jìn)行插值或者均和,指定放大縮小的函數(shù)。
[0027]優(yōu)選地,步驟(2.7)包括以下子步驟:
[0028](2.7.1)利用OpenSceneGraph的屬性類(lèi)創(chuàng)建屬性對(duì)象,設(shè)置紋理屬性和模式,并將步驟(2.1)中獲得的紋理對(duì)象關(guān)聯(lián)到所述屬性對(duì)象上;
[0029](2.7.2)利用OpenSceneGraph的屬性類(lèi)的設(shè)置模式函數(shù)關(guān)閉光照,以消除陰影對(duì)圖片顏色的干擾;
[0030](2.7.3)利用OpenSceneGraph的屬性類(lèi)的設(shè)置模式函數(shù)開(kāi)啟紋理混合模式;
[0031](2.7.4)將所述屬性對(duì)象關(guān)聯(lián)到步驟(2.2)中獲得的幾何體對(duì)象。
[0032]總體而言,通過(guò)本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
[0033](I)本發(fā)明提供的三維動(dòng)畫(huà)制作方法,通過(guò)預(yù)處理刪除原始圖片的背景,采用帶有透明度且刪除背景的二維圖片改變其紋理坐標(biāo)及頂點(diǎn)對(duì)應(yīng)關(guān)系產(chǎn)生動(dòng)畫(huà)效果;
[0034](2)本發(fā)明提供的三維動(dòng)畫(huà)制作方法,添加廣告牌技術(shù)使圖片始終面向視角,利用二維圖片運(yùn)動(dòng)達(dá)到高度仿真三維動(dòng)畫(huà)視覺(jué)效果;
[0035](3)本發(fā)明提供的三維動(dòng)畫(huà)制作方法,利用二維圖片運(yùn)動(dòng)達(dá)到高度仿真三維動(dòng)畫(huà)視覺(jué)效果,克服了傳統(tǒng)模型動(dòng)畫(huà)實(shí)現(xiàn)的復(fù)雜性,大大減少了計(jì)算工作量;與傳統(tǒng)利用骨骼動(dòng)畫(huà)等方法,本發(fā)明所提供的方法,減少了建模、設(shè)計(jì)精細(xì)模型的運(yùn)動(dòng)的工作,大大降低了制作難度和制作成本,但同時(shí)獲得了良好的視覺(jué)效果。
【附圖說(shuō)明】
[0036]圖1是本發(fā)明提供的基于OpenSceneGraph的三維動(dòng)畫(huà)制作方法的流程示意圖;
[0037]圖2為實(shí)施例中采用的原始圖片;
[0038]圖3為實(shí)施例中對(duì)原始圖片進(jìn)行背景刪除后獲得的圖片;
[0039]圖4為實(shí)施例中經(jīng)過(guò)預(yù)處理后帶有透明度信息的圖片;
[0040]圖5為實(shí)施例中基于OpenSceneGraph的三維動(dòng)畫(huà)效果圖。
【具體實(shí)施方式】
[0041]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0042]實(shí)施例以魚(yú)類(lèi)動(dòng)畫(huà)的制作為例,具體闡述本發(fā)明提供的動(dòng)畫(huà)制作方法;其流程如圖1所示,包括圖片預(yù)處理步驟、創(chuàng)建子圖步驟、添加廣告牌步驟、創(chuàng)建路徑動(dòng)畫(huà)步驟、創(chuàng)建矩陣變化節(jié)點(diǎn)步驟、更新場(chǎng)景數(shù)據(jù)步驟、渲染繪制場(chǎng)景步驟。
[0043]實(shí)施例中,待處理的圖片之一如圖2所示;下面以圖2所示圖片為例,進(jìn)一步闡述本發(fā)明提供的基于OSG的動(dòng)畫(huà)制作方法,該方法包括以下步驟:
[0044](I)對(duì)圖2所示的原始圖片進(jìn)行預(yù)處理,利用圖像處理軟件對(duì)圖2所示的原始圖片進(jìn)行背景刪除處理,并存儲(chǔ)為帶有透明通道的圖片;實(shí)施例中,利用Adobe Photoshop對(duì)原始圖片進(jìn)行預(yù)處理,具體步驟如下:
[0045](1.1)將原始圖片添加至圖層,并對(duì)圖層進(jìn)行柵格化;
[0046](1.2)采用魔術(shù)棒和套索工具,刪除魚(yú)體以外的背景部分,獲得如圖3所示去除背景的圖片;
[0047](1.3)將圖3獲得的圖片保存為帶有透明度的png格式,如圖4所示;
[0048](2)創(chuàng)建子圖,包括如下子步驟:
[0049](2.1)利用OpenSceneGraph的二維紋理類(lèi)創(chuàng)建OSG的二維紋理對(duì)象,命名為texture,用于創(chuàng)建圖片紋理;設(shè)置該二維紋理對(duì)象的各項(xiàng)特征,包括以下子步驟:
[0050](2.1.1)利用OpenSceneGraph的二維紋理類(lèi)的設(shè)置紋理大小函數(shù),設(shè)置二維紋理對(duì)象texture的大小,包括紋理的寬度和高度;
[0051](2.1.2)利用OpenSceneGraph的二維紋理類(lèi)的設(shè)置紋理格式函數(shù),將texture內(nèi)在紋理格式設(shè)為GL_RGBA格式(顏色空間RGBA);該格式具有alpha通道,在繪制三維場(chǎng)景時(shí)對(duì)帶有透明度的圖片不進(jìn)行背景填充;
[0052](2.1.3)利用OpenSceneGraph的二維紋理類(lèi)的設(shè)置紋理過(guò)濾方式函數(shù)設(shè)置二維紋理對(duì)象texture的過(guò)濾模式;由于提供的紋理圖像與屏幕坐標(biāo)大小不同,通過(guò)設(shè)置過(guò)濾模式,允許插值或均和,指定放大縮小的函數(shù),設(shè)置為線性模式,用2*2的包含紋理數(shù)據(jù)的數(shù)組加權(quán)作為紋理;
[0053](2.2)利用OpenSceneGraph的幾何體類(lèi)創(chuàng)建幾何體對(duì)象,命名為polyGeom,將該幾何體對(duì)象PolyGeom設(shè)置為動(dòng)態(tài)數(shù)據(jù)變量,以實(shí)現(xiàn)幾何體的更新繪制,且該幾何體對(duì)象指定polyGeom局部坐標(biāo)系為笛卡爾坐標(biāo)系;
[0054](2.3)利用OpenSceneGraph的三維數(shù)組向量類(lèi)創(chuàng)建三維向量組對(duì)象,命名為vertices,利用OpenSceneGraph的二維數(shù)組向量類(lèi)創(chuàng)建二維向量組對(duì)象,命名為texcoords,確定紋理坐標(biāo),進(jìn)行紋理映射,完成幾何體頂點(diǎn)與紋理坐標(biāo)綁定;
[0055](2.4)將三維向量組對(duì)象vertices關(guān)聯(lián)到幾何體對(duì)象polyGeom,設(shè)置幾何體對(duì)象polyGeom的定點(diǎn)數(shù)組;
[0056](2.5)創(chuàng)建子圖坐標(biāo)和紋理映射關(guān)系;具體包括以下步驟:
[0057](2.5.1)利用OpenSceneGraph的四維數(shù)組向量類(lèi)創(chuàng)建顏色數(shù)組對(duì)象,將顏色對(duì)象關(guān)聯(lián)到步驟(2.2)中創(chuàng)建的幾何體對(duì)