欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

動畫渲染方法和裝置與流程

文檔序號:11135359閱讀:541來源:國知局
動畫渲染方法和裝置與制造工藝

本發(fā)明涉及動畫渲染技術(shù)領(lǐng)域,特別是涉及一種動畫渲染方法和裝置。



背景技術(shù):

隨著網(wǎng)頁游戲的發(fā)展,開發(fā)者越來越關(guān)注用戶體驗(yàn),一款交互流暢的游戲往往能夠吸引更多的玩家。原生的Flash播放器使用矢量動畫作為動畫原件,但CPU渲染矢量動畫損耗較大,當(dāng)Flash舞臺同時渲染一定數(shù)量級別的矢量動畫時,CPU容易因計(jì)算能力不足導(dǎo)致出現(xiàn)明顯動畫跳幀和不明卡頓現(xiàn)象,給用戶帶來了不好的體驗(yàn)。CPU對位圖的渲染比矢量圖要高一個數(shù)量級,所以即使舞臺同時播放的動畫數(shù)量相同,位圖動畫也能比矢量動畫播放的更加流暢。所以通常通過中間件將矢量動畫轉(zhuǎn)化為位圖動畫進(jìn)行渲染,并且通過開發(fā)中間件,將矢量動畫轉(zhuǎn)化為位圖動畫,一般只需要在原動畫原件的基礎(chǔ)上做版本轉(zhuǎn)化和標(biāo)記的小改動即可,在降低CPU損耗的同時,完全兼容舊的程序和邏輯。然而,雖然完整轉(zhuǎn)化成位圖動畫后,動畫的運(yùn)行效率會大大升高,但第一次轉(zhuǎn)換將會使用大量的CPU資源,使得游戲在短暫時間內(nèi)會出現(xiàn)明顯卡頓。



技術(shù)實(shí)現(xiàn)要素:

基于此,有必要針對上述技術(shù)問題,提供一種能降低CPU資源消耗的動畫渲染方法和裝置。

一種動畫渲染方法,所述方法包括:獲取待渲染動畫的幀數(shù);根據(jù)所述待渲染動畫的幀數(shù)生成對應(yīng)數(shù)量的子任務(wù),并將所述子任務(wù)存入流水線池中;通過舞臺渲染待渲染動畫,其中,對于待渲染動畫的每一幀,則取出所述流水線池中的子任務(wù),以流水線的方式通過所述子任務(wù)將待渲染動畫的每一幀矢量圖轉(zhuǎn)換為位圖,將轉(zhuǎn)換得到的位圖存入到對象池中。

在其中一個實(shí)施例中,通過舞臺渲染待渲染動畫的步驟包括:獲取待渲染動畫的配置參數(shù);根據(jù)所述配置參數(shù)判斷待渲染動畫是否為實(shí)時動畫;如果待渲染動畫為實(shí)時動畫,則創(chuàng)建一條流水線,使用創(chuàng)建的流水線渲染所述待渲染動畫;如果待渲染動畫為非實(shí)時動畫,則使用預(yù)先設(shè)置的多條流水線對所述待渲染動畫進(jìn)行渲染。

在其中一個實(shí)施例中,在使用創(chuàng)建的流水線渲染所述待渲染動畫的步驟之后,還包括:渲染結(jié)束后,將所述創(chuàng)建的流水線進(jìn)行銷毀,并釋放內(nèi)存。

在其中一個實(shí)施例中,通過舞臺渲染待渲染動畫的步驟包括:當(dāng)以流水線的方式渲染到待渲染動畫的某一幀時,根據(jù)預(yù)先設(shè)置的渲染加速表檢測是否該幀對應(yīng)的圖像已繪制過;若是,則跳過渲染,根據(jù)所述渲染加速表獲取對應(yīng)該幀的已繪制的幀數(shù)據(jù)。

在其中一個實(shí)施例中,渲染加速表中記錄了幀序號,若待渲染動畫的兩個幀對應(yīng)的動畫原件相同,則渲染加速表中這兩幀對應(yīng)的幀序號相同;所述根據(jù)渲染加速表獲取對應(yīng)該幀的已繪制的幀數(shù)據(jù)的步驟為:獲取所述渲染加速表中對應(yīng)該幀的幀序號,根據(jù)該幀序號獲取已繪制的對應(yīng)該幀序號的幀數(shù)據(jù)存儲的內(nèi)存區(qū)域,從該內(nèi)存區(qū)域中獲取已繪制的幀數(shù)據(jù)。

一種動畫渲染裝置,所述裝置包括:幀數(shù)獲取模塊,用于獲取待渲染動畫的幀數(shù);子任務(wù)生成模塊,用于根據(jù)所述待渲染動畫的幀數(shù)生成對應(yīng)數(shù)量的子任務(wù),并將所述子任務(wù)存入流水線池中;渲染模塊,通過舞臺渲染待渲染動畫,其中,對于待渲染動畫的每一幀,則取出所述流水線池中的子任務(wù),以流水線的方式通過所述子任務(wù)將待渲染動畫的每一幀矢量圖轉(zhuǎn)換為位圖,將轉(zhuǎn)換得到的位圖存入到對象池中。

在其中一個實(shí)施例中,渲染模塊包括:參數(shù)獲取模塊,用于獲取待渲染動畫的配置參數(shù);判斷模塊,用于根據(jù)所述配置參數(shù)判斷待渲染動畫是否為實(shí)時動畫;實(shí)時動畫渲染模塊,用于如果待渲染動畫為實(shí)時動畫,則創(chuàng)建一條流水線,使用創(chuàng)建的流水線渲染所述待渲染動畫;非實(shí)時動畫渲染模塊,用于如果待渲染動畫為非實(shí)時動畫,則使用預(yù)先設(shè)置的多條流水線對所述待渲染動畫進(jìn) 行渲染。

在其中一個實(shí)施例中,所述裝置還包括:內(nèi)存釋放模塊,用于渲染結(jié)束后,將所述創(chuàng)建的流水線進(jìn)行銷毀,并釋放內(nèi)存。

在其中一個實(shí)施例中,渲染模塊還包括:檢測模塊,用于當(dāng)以流水線的方式渲染到待渲染動畫的某一幀時,根據(jù)預(yù)先設(shè)置的渲染加速表檢測是否該幀對應(yīng)的圖像已繪制過;加速模塊,用于若該幀對應(yīng)的圖像已繪制過,則跳過渲染,根據(jù)所述渲染加速表獲取對應(yīng)該幀的已繪制的幀數(shù)據(jù)。

在其中一個實(shí)施例中,渲染加速表中記錄了幀序號,若待渲染動畫的兩個幀對應(yīng)的動畫原件相同,則渲染加速表中這兩幀對應(yīng)的幀序號相同;所述加速模塊還用于獲取所述渲染加速表中對應(yīng)該幀的幀序號,根據(jù)該幀序號獲取已繪制的對應(yīng)該幀序號的幀數(shù)據(jù)存儲的內(nèi)存區(qū)域,從該內(nèi)存區(qū)域中獲取已繪制的幀數(shù)據(jù)。

上述動畫渲染方法和裝置,通過獲取待渲染動畫的幀數(shù),根據(jù)所述待渲染動畫的幀數(shù)生成對應(yīng)數(shù)量的子任務(wù),并將所述子任務(wù)存入流水線池中,通過舞臺渲染待渲染動畫,其中,對于待渲染動畫的每一幀,則取出所述流水線池中的子任務(wù),以流水線的方式通過所述子任務(wù)將待渲染動畫的每一幀矢量圖轉(zhuǎn)換為位圖,將轉(zhuǎn)換得到的位圖存入到對象池中。以流水線的方式一個個處理待渲染動畫的每一幀,能夠減少CPU資源消耗,避免了一次性轉(zhuǎn)換使用大量CPU資源造成動畫游戲卡頓的現(xiàn)象。

附圖說明

圖1為一個實(shí)施例中動畫渲染方法的流程圖;

圖2為一個實(shí)施例中通過舞臺渲染待渲染動畫的流程圖;

圖3為另一個實(shí)施例中通過舞臺渲染待渲染動畫的流程圖;

圖4為一個實(shí)施例中動畫渲染裝置的結(jié)構(gòu)框圖;

圖5為一個實(shí)施例中渲染模塊的結(jié)構(gòu)框圖;

圖6為另一個實(shí)施例中渲染模塊的結(jié)構(gòu)框圖。

具體實(shí)施方式

為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

如圖1所示,在一個實(shí)施例中,提供了一種動畫渲染方法,該方法具體包括以下步驟:

步驟102,獲取待渲染動畫的幀數(shù)。

具體的,待渲染動畫為矢量動畫,矢量動畫是指在計(jì)算機(jī)中使用數(shù)學(xué)方程來描述屏幕上復(fù)雜的曲線,利用圖形的抽象運(yùn)動特征來記錄變化的畫面信息的動畫。Flash播放器原生使用矢量動畫,CPU渲染矢量動畫損耗較大,一般需要通過中間件將矢量動畫轉(zhuǎn)化為位圖動畫進(jìn)行渲染,位圖動畫即是用一張一張的靜態(tài)圖片,使用計(jì)時器計(jì)算幀率來記錄變化的畫面信息的動畫,CPU渲染位圖的損耗相對矢量圖小。

步驟104,根據(jù)所述待渲染動畫的幀數(shù)生成對應(yīng)數(shù)量的子任務(wù),并將所述子任務(wù)存入流水線池中。

在本實(shí)施例中,首先確認(rèn)待渲染動畫的幀數(shù)N,每一幀生成一個子任務(wù),所以共生成N個子任務(wù)。生成的N個子任務(wù)存入流水線池。其中,流水線池是用來暫時存儲子任務(wù)的任務(wù)池,可從流水線池中以流水線的方式取出一個一個的子任務(wù)來對每一幀矢量圖進(jìn)行處理。

步驟106,通過舞臺渲染待渲染動畫,其中,對于待渲染動畫的每一幀,則取出所述流水線池中的子任務(wù),以流水線的方式通過所述子任務(wù)將待渲染動畫的每一幀矢量圖轉(zhuǎn)換為位圖,將轉(zhuǎn)換得到的位圖存入到對象池中。

在本實(shí)施例中,通過游戲幀驅(qū)動,F(xiàn)lash播放器舞臺開始渲染,每渲染一幀則需要取出流水線池中的一個子任務(wù),通過取出的子任務(wù)將待渲染動畫的當(dāng)前要渲染的一幀矢量圖轉(zhuǎn)換為位圖。對象池用來存儲轉(zhuǎn)換得到的位圖,播放每一幀轉(zhuǎn)換得到的位圖即可實(shí)現(xiàn)動畫播放。

具體的,比如,一個500幀的矢量動畫,分成500個子任務(wù),在幀率為30 的舞臺中一個個渲染,每一個子任務(wù)需要1/30秒完成,那么每一秒可以渲染30張矢量圖,完整播放轉(zhuǎn)換得到的位圖需要16.7秒的時間。

本實(shí)施例中,由于以流水線的方式一個個處理待渲染動畫的每一幀,能夠減少CPU資源消耗,避免了一次性轉(zhuǎn)換使用大量CPU資源造成動畫游戲卡頓的現(xiàn)象。

在一個實(shí)施例中,當(dāng)需要一次性加載大量的動畫時,使用預(yù)加載模式。預(yù)加載模式是指使用一次性轉(zhuǎn)換方式轉(zhuǎn)換矢量動畫。當(dāng)待處理的矢量動畫不在預(yù)加載中時,則使用流水線的方式轉(zhuǎn)換矢量動畫。具體的,以網(wǎng)頁游戲?yàn)槔?,剛打開游戲時,往往需要一次性加載大量的動畫,此時使用預(yù)加載模式,同時設(shè)置轉(zhuǎn)換進(jìn)度條,當(dāng)需要的動畫轉(zhuǎn)換完畢后進(jìn)入交互場景。進(jìn)入游戲場景后,所需要的動畫是動態(tài)加入游戲場景的,此時使用流水線的方式進(jìn)行轉(zhuǎn)換,能夠減少CPU資源消耗,避免出現(xiàn)動畫游戲卡頓的現(xiàn)象。

在一個實(shí)施例中,如圖2所示,通過舞臺渲染待渲染動畫的步驟包括:

步驟202,獲取待渲染動畫的配置參數(shù)。

在本實(shí)施例中,預(yù)先配置了待渲染動畫的配置參數(shù),包括待渲染動畫的文件大小、動畫的長寬、動畫的幀數(shù)以及動畫的播放屬性,其中動畫的播放屬性包括實(shí)時動畫和非實(shí)時動畫,實(shí)時動畫是指需要實(shí)時播放的動畫,非實(shí)時動畫是不需要實(shí)時播放的動畫,相對而言,實(shí)時動畫的處理優(yōu)先等級比非實(shí)時動畫的處理優(yōu)先等級更高。

步驟204,根據(jù)所述配置參數(shù)判斷待渲染動畫是否為實(shí)時動畫。

在本實(shí)施例中,待渲染動畫的配置參數(shù)中包含表示為實(shí)時動畫和非實(shí)時動畫的標(biāo)記,比如,設(shè)定參數(shù)isRealTime=true,則表示為實(shí)時動畫;設(shè)定參數(shù)isRealTime=false,則表示為非實(shí)時動畫

在本實(shí)施例中,根據(jù)動畫的不同,將動畫分為實(shí)時動畫和非實(shí)時動畫,如果配置參數(shù)isRealTime=true,則表示實(shí)時動畫,將會加入到高速流水線;如果配置參數(shù)isRealTime=false,則表示非實(shí)時動畫,將會加入到低速流水線。系統(tǒng)為高速流水線分配的內(nèi)存多于低速流水線,所以高速流水線轉(zhuǎn)換的效率通常比低速流水線轉(zhuǎn)換的效率高。

步驟206,如果待渲染動畫為實(shí)時動畫,則創(chuàng)建一條流水線,使用創(chuàng)建的流水線渲染所述待渲染動畫。

在本實(shí)施例中,如果待渲染動畫為實(shí)時動畫,則立即創(chuàng)建一條流水線,使用創(chuàng)建的流水線渲染待渲染動畫。具體的,預(yù)先留有一定資源用于增加流水線,該類流水線也稱之為高速流水線,用來渲染實(shí)時動畫。通過游戲幀驅(qū)動,F(xiàn)lash播放器舞臺開始渲染,從流水池中取出的子任務(wù)將待渲染的實(shí)時動畫的當(dāng)前要渲染的一幀矢量圖轉(zhuǎn)換為位圖。每當(dāng)有實(shí)時動畫需要轉(zhuǎn)換時,則立即增加一條流水線進(jìn)行轉(zhuǎn)換,不需要等待,轉(zhuǎn)換效率高。

在一個實(shí)施例中,渲染結(jié)束后,將所述創(chuàng)建的流水線進(jìn)行銷毀,并釋放內(nèi)存。當(dāng)一個實(shí)時動畫轉(zhuǎn)換完畢,將先前為這個實(shí)時動畫創(chuàng)建的流水線銷毀,節(jié)省了內(nèi)存。

步驟208,如果待渲染動畫為非實(shí)時動畫,則使用預(yù)先設(shè)置的多條流水線對所述待渲染動畫進(jìn)行渲染。

在本實(shí)施例中,預(yù)先設(shè)置多條流水線用于處理非實(shí)時動畫,這類流水線也稱之為低速流水線。如果待渲染動畫為非實(shí)時動畫,將會加入低速流水線,低速流水線通常只有固定的幾條通道。通過游戲幀驅(qū)動,F(xiàn)lash播放器舞臺開始渲染,從流水池中取出的子任務(wù)將待渲染的非實(shí)時動畫的當(dāng)前要渲染的一幀矢量圖轉(zhuǎn)換為位圖。低速流水線最多只能同時轉(zhuǎn)換與預(yù)先設(shè)置的流水線數(shù)量相同的動畫,當(dāng)待渲染的動畫數(shù)量少于預(yù)先設(shè)置的流水線數(shù)量時,可以對待渲染的非實(shí)時動畫進(jìn)行并行計(jì)算;當(dāng)待渲染的動畫數(shù)量多于預(yù)先設(shè)置的流水線數(shù)量時,后面的待渲染的動畫則需要等待。具體的,假如低速流水線預(yù)先設(shè)置4條流水線,此時加入舞臺的動畫最多同時轉(zhuǎn)換4個,如果存在6個非實(shí)時動畫需要渲染,另外2個動畫要等到前4個動畫渲染完畢后才開始渲染。

在本實(shí)施例中,一方面不需要額外為待渲染的非實(shí)時動畫預(yù)留內(nèi)存,另一方面,還可以對待渲染的非實(shí)時動畫進(jìn)行并行計(jì)算。

在一個實(shí)施例中,如圖3所示,通過舞臺渲染待渲染動畫包括:

步驟302,當(dāng)以流水線的方式渲染到待渲染動畫的某一幀時,根據(jù)預(yù)先設(shè)置的渲染加速表檢測是否該幀對應(yīng)的圖像已繪制過。

在本實(shí)施例中,在渲染加速表中相同的幀對應(yīng)的幀序號相同。通過檢測當(dāng)前幀的序號是否出現(xiàn)過用來判斷當(dāng)前幀對應(yīng)的圖像是否已繪制過。

步驟304,若是,則跳過渲染,根據(jù)所述渲染加速表獲取對應(yīng)該幀的已繪制的幀數(shù)據(jù)。

在本實(shí)施例中,當(dāng)渲染加速表檢測到對應(yīng)的圖片已經(jīng)繪制過,則獲取對應(yīng)幀的已繪制的幀數(shù)據(jù)。

在一個實(shí)施例中,渲染加速表中記錄了幀序號,若待渲染動畫的兩個幀對應(yīng)的動畫原件相同,則渲染加速表中這兩幀對應(yīng)的幀序號相同。

在本實(shí)施例中,渲染加速表中相同的幀對應(yīng)的幀序號相同。具體的,假設(shè)存在一個6幀的矢量動畫原件A(動畫元件A:1,2,3,4,5,6),其中,第2,4幀完全一樣,第3,5幀完全一樣,其余不同。那么相應(yīng)的加速表可以表示為:1,2,3,2,3,6。因?yàn)榈?,4幀完全一樣,第3,5幀完全一樣,所以在加速表中它們對應(yīng)的幀序號相同。

步驟306,若否,則開始渲染。

在本實(shí)施例中,當(dāng)檢測到當(dāng)前的幀未繪制過,那么以流水線的方式開始對當(dāng)前幀進(jìn)行渲染。

在一個實(shí)施例中,根據(jù)渲染加速表獲取對應(yīng)該幀的已繪制的幀數(shù)據(jù)的步驟為:獲取所述渲染加速表中對應(yīng)該幀的幀序號,根據(jù)該幀序號獲取已繪制的對應(yīng)該幀序號的幀數(shù)據(jù)存儲的內(nèi)存區(qū)域,從該內(nèi)存區(qū)域中獲取已繪制的幀數(shù)據(jù)。

在本實(shí)施例中,相同的幀對應(yīng)的幀序號相同,兩者共用同一塊內(nèi)存區(qū)域,當(dāng)檢測到當(dāng)前幀已繪制過,則根據(jù)該幀序號獲取對應(yīng)該幀序號的幀數(shù)據(jù)存儲的內(nèi)存區(qū)域,從該內(nèi)存區(qū)域中獲取已繪制的幀數(shù)據(jù),節(jié)省了內(nèi)存。

如圖4所示,在一個實(shí)施例中,提供了一種動畫渲染的裝置,該裝置包括:

幀數(shù)獲取模塊402,用于獲取待渲染動畫的幀數(shù)。

子任務(wù)生成模塊404,用于根據(jù)所述待渲染動畫的幀數(shù)生成對應(yīng)數(shù)量的子任務(wù),并將所述子任務(wù)存入流水線池中。

渲染模塊406,用于通過舞臺渲染待渲染動畫,其中,對于待渲染動畫的每 一幀,則取出所述流水線池中的子任務(wù),以流水線的方式通過所述子任務(wù)將待渲染動畫的每一幀矢量圖轉(zhuǎn)換為位圖,將轉(zhuǎn)換得到的位圖存入到對象池中。

在一個實(shí)施例中,如圖5所示,渲染模塊406包括:

參數(shù)獲取模塊406A,用于獲取待渲染的配置參數(shù)。

判斷模塊406B,根據(jù)所述配置參數(shù)判斷待渲染動畫是否為實(shí)時動畫。

實(shí)時動畫渲染模塊406C,如果待渲染動畫為實(shí)時動畫,則創(chuàng)建一條流水線,使用創(chuàng)建的流水線渲染所述待渲染動畫。

非實(shí)時動畫渲染模塊406D,用于如果待渲染動畫為非實(shí)時動畫,則使用預(yù)先設(shè)置的多條流水線對所述待渲染動畫進(jìn)行渲染。

在一個實(shí)施例中,所述裝置還包括:

內(nèi)存釋放模塊,用于使用高速流水線渲染結(jié)束后,將所述創(chuàng)建的流水線進(jìn)行銷毀,并釋放內(nèi)存。

在一個實(shí)施例中,如圖6所示,渲染模塊406包括:

檢測模塊406E,當(dāng)以流水線的方式渲染到待渲染動畫的某一幀時,根據(jù)預(yù)先設(shè)置的渲染加速表檢測是否該幀對應(yīng)的圖像已繪制過。

加速模塊406F,若是,則跳過渲染,根據(jù)所述渲染加速表獲取對應(yīng)該幀的已繪制的幀數(shù)據(jù)。

在一個實(shí)施例中,渲染加速表中記錄了幀序號,若待渲染動畫的兩個幀對應(yīng)的動畫原件相同,則渲染加速表中這兩幀對應(yīng)的幀序號相同。

在一個實(shí)施例中,加速模塊406F還用于獲取所述渲染加速表中對應(yīng)該幀的幀序號,根據(jù)該幀序號獲取已繪制的對應(yīng)該幀序號的幀數(shù)據(jù)存儲的內(nèi)存區(qū)域,從該內(nèi)存區(qū)域中獲取已繪制的幀數(shù)據(jù)。

以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
岐山县| 蓬安县| 东阿县| 永福县| 响水县| 芦山县| 荣昌县| 二连浩特市| 马山县| 琼结县| 佛学| 乐昌市| 临猗县| 阆中市| 海盐县| 榆中县| 阜平县| 清涧县| 汕头市| 浦县| 梁河县| 抚宁县| 文水县| 铅山县| 青田县| 三台县| 汉中市| 仙桃市| 海城市| 柳河县| 威信县| 亳州市| 宣化县| 东山县| 兰州市| 巫溪县| 公安县| 香格里拉县| 五华县| 集贤县| 甘孜|