骨骼動畫的渲染方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種骨骼動畫的渲染方法和系統(tǒng),所述方法包括:獲取待渲染的骨骼動畫的動畫幀,并判斷是否緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù);若是,則將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫;若否,則通過CPU計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù),并在滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存;將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫。實(shí)施本發(fā)明的方法和系統(tǒng),可在緩存有待渲染的動畫幀的骨骼姿勢矩陣數(shù)據(jù)時(shí),將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫,無需消耗CPU資源,可提高3D引擎的渲染性能。
【專利說明】骨骼動畫的渲染方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)圖形【技術(shù)領(lǐng)域】,特別是涉及一種骨骼動畫的渲染方法和系統(tǒng)?!颈尘凹夹g(shù)】
[0002]目前一般的Flash3D引擎中,實(shí)現(xiàn)骨骼動畫的時(shí)候,都是每幀使用CPU即時(shí)計(jì)算全局骨骼姿勢矩陣數(shù)據(jù),然后再提交給GPU,渲染出3D骨骼動畫模型來。實(shí)際游戲運(yùn)用中,玩家、怪物、NPC等各種角色,他們的每種動作都是需要反復(fù)播放。
[0003]但是骨骼動畫需要反復(fù)播放時(shí),則會因?yàn)槊繋貜?fù)計(jì)算動畫的全局骨骼姿勢矩陣數(shù)據(jù),CPU計(jì)算量大,造成性能大量消耗,會嚴(yán)重影響3D引擎的整體渲染能力。
【發(fā)明內(nèi)容】
[0004]基于此,有必要針對上述實(shí)現(xiàn)骨骼動畫的技術(shù)中CPU性能消耗量大、影響引擎渲染能力的問題,提供一種骨骼動畫的渲染方法和系統(tǒng)。
[0005]一種骨骼動畫的渲染方法,包括以下步驟:
[0006]獲取待渲染的骨骼動畫的動畫幀,并判斷是否緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù);
[0007]若是,則將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫;
[0008]若否,則通過CPU計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù),并在滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存;
[0009]將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫。
[0010]一種骨骼動畫的渲染系統(tǒng),包括:
[0011]判斷模塊,用于獲取待渲染的骨骼動畫的動畫幀,并判斷是否緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù);
[0012]第一渲染模塊,用于在緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)時(shí),將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫;
[0013]緩存模塊,用于在未緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)時(shí),通過CPU計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù),并在滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存;
[0014]第二渲染模塊,用于將計(jì)算出的所述骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫。
[0015]上述骨骼動畫的渲染方法和系統(tǒng),在緩存有待渲染的動畫幀的骨骼姿勢矩陣數(shù)據(jù)時(shí),將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫,無需消耗CPU資源,可提高3D引擎的渲染性能,在為緩存有且滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存,可為下一次的渲染直接提供所需的骨骼姿勢矩陣數(shù)據(jù),使得不再持續(xù)消耗CPU資源,進(jìn)一步提高3D引擎的渲染性能。【專利附圖】
【附圖說明】
[0016]圖1是本發(fā)明骨骼動畫的渲染方法第一實(shí)施方式的流程示意圖;
[0017]圖2是本發(fā)明骨骼動畫的渲染方法第二實(shí)施方式的流程示意圖;
[0018]圖3是本發(fā)明骨骼動畫的渲染系統(tǒng)第一實(shí)施方式的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0019]請參閱圖1,圖1是本發(fā)明骨骼動畫的渲染方法第一實(shí)施方式的流程示意圖。
[0020]本實(shí)施方式的所述骨骼動畫的渲染方法包括以下步驟:
[0021]步驟101,獲取待渲染的骨骼動畫的動畫幀,并判斷是否緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)。
[0022]步驟102,若是,則將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫。
[0023]步驟103,若否,則通過CPU計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù),并在滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存。
[0024]步驟104,將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫。
[0025]本實(shí)施方式所述的骨骼動畫的渲染方法,在緩存有待渲染的動畫幀的骨骼姿勢矩陣數(shù)據(jù)時(shí),將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫,無需消耗CPU資源,可提高3D引擎的渲染性能,在為緩存有且滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存,可為下一次的渲染直接提供所需的骨骼姿勢矩陣數(shù)據(jù),使得不再持續(xù)消耗CPU資源,進(jìn)一步提高3D引擎的渲染性能。
[0026]其中,對于步驟101,所述動畫幀為當(dāng)前待渲染的動畫畫面,所述動畫幀的骨骼姿勢矩陣優(yōu)選地,緩存在緩存池中。
[0027]在一個(gè)實(shí)施例中,所述獲取待渲染的骨骼對象的動畫幀的步驟包括以下步驟:
[0028]創(chuàng)建用于播放所述骨骼動畫的骨骼動畫對象。
[0029]加載播放所述骨骼動畫所需要的動畫資源。
[0030]將所述動畫資源的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為內(nèi)存的數(shù)據(jù)結(jié)構(gòu)。
[0031]啟動所述骨骼動畫的動畫播放模式。
[0032]其中,所需要的動畫資源優(yōu)選地包括貼圖、3D模型、骨骼、骨骼姿勢數(shù)據(jù)。
[0033]優(yōu)選地,加載的所述動畫資源位二進(jìn)制數(shù)據(jù),在GPU中進(jìn)行動畫渲染時(shí),需要將二進(jìn)制的動畫資源轉(zhuǎn)換為與GPU內(nèi)存匹配的數(shù)據(jù)結(jié)構(gòu),即3D引擎需要的數(shù)據(jù)格式。啟動所述骨骼動畫的動畫播放模式優(yōu)選地,為將所述動畫資源添加到顯示列表。
[0034]將所述動畫資源添加到顯示列表,即將動畫資源添加到3D引擎,等待渲染。
[0035]在另一個(gè)實(shí)施例中,在所述獲取待渲染的骨骼動畫的動畫巾貞的步驟之前,還包括以下步驟:
[0036]統(tǒng)計(jì)所述待渲染的骨骼動畫的各個(gè)動畫幀,在所述骨骼動畫中的播放總次數(shù)。
[0037]通過CPU計(jì)算出播放總次數(shù)超高播放閾值的動畫幀的骨骼姿勢矩陣數(shù)據(jù),并計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存。[0038]其中,所述播放總次數(shù)為所述動畫幀在整個(gè)骨骼動畫的播放過程中的重復(fù)播放次數(shù)。所述播放閾值優(yōu)選地為2。
[0039]對于步驟102,優(yōu)選地,所述骨骼姿勢矩陣數(shù)據(jù)存儲在緩存池內(nèi),所述骨骼姿勢矩陣可以是前一次渲染所述動畫幀時(shí)緩存的,也可以是在啟動所述骨骼動畫的動畫播放模式之前緩存的。
[0040]進(jìn)一步地,所述將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫的步驟還可以包括以下步驟:
[0041]執(zhí)行所述骨骼動畫的幀函數(shù)(骨骼動畫的計(jì)算方法)。
[0042]對于步驟103,所述通過CPU計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)的步驟包括以下步驟:
[0043]轉(zhuǎn)換所述動畫幀對應(yīng)的局部分層骨架,生成全局骨骼姿勢。
[0044]通過骨骼數(shù)量、四元數(shù)、所述全局骨骼姿勢進(jìn)行數(shù)據(jù)運(yùn)算,計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)。
[0045]其中,所述全局骨骼姿勢是所述動畫幀中骨骼對象的所有骨骼的骨骼姿勢數(shù)據(jù)。四元數(shù)為3D中的一種數(shù)據(jù)結(jié)構(gòu),代表著一個(gè)四維空間,相對于復(fù)數(shù)為二維空間,能方便的表示3D旋轉(zhuǎn)。
[0046]在另一個(gè)實(shí)施例中,所述在滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存的步驟還包括以下步驟:
[0047]判斷所述動畫幀在所述骨骼動畫中的播放總次數(shù)是否超過播放閾值,若是,則將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存。
[0048]本實(shí)施例所述的骨骼動畫的渲染方法,在播放總次數(shù)是超過播放閾值時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存,可為下一次的渲染直接提供所需的骨骼姿勢矩陣數(shù)據(jù),使得反復(fù)播放動畫的3D模型不再持續(xù)消耗CPU資源,提高3D引擎的渲染性倉泛。
[0049]其中,所述播放總次數(shù)超過播放閾值是一個(gè)緩存條件,在其他實(shí)施方式中,還可以設(shè)置其他緩存條件,如CPU計(jì)算出骨骼姿勢矩陣數(shù)據(jù),即將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存。
[0050]優(yōu)選地,所述播放閾值為2,還可以是其他數(shù)值。
[0051]對于步驟104,所述將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫的步驟包括以下步驟:
[0052]將所述骨骼姿勢矩陣數(shù)據(jù)傳送至所述骨骼動畫對象。
[0053]通過3D引擎的GPU對象把所述骨骼姿勢矩陣數(shù)據(jù)傳輸?shù)紾PU。
[0054]將渲染所述骨骼動畫所需的著色程序Shader傳輸?shù)紾PU。
[0055]將所述骨骼動畫的3D模型的頂點(diǎn)數(shù)據(jù)、貼圖、全局坐標(biāo)矩陣數(shù)據(jù)傳輸?shù)紾PU。
[0056]根據(jù)模型頂點(diǎn)、貼圖、骨骼、全局坐標(biāo)矩陣數(shù)據(jù)與骨骼姿勢矩陣數(shù)據(jù),通過著色程序Shader在GPU內(nèi)進(jìn)行渲染運(yùn)算,在屏幕上渲染出與所述動畫幀對應(yīng)的骨骼動畫。
[0057]其中,著色程序Shader為著色程序,用于GPU的編程。
[0058]請參閱圖2,圖2是本發(fā)明骨骼動畫的渲染方法第二實(shí)施方式的流程示意圖。
[0059]本實(shí)施方式的骨骼動畫的渲染方法與第一實(shí)施方式的區(qū)別在于:所述將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫的步驟包括以下步驟:
[0060]步驟201,將緩存池內(nèi)緩存的所述骨骼姿勢矩陣數(shù)據(jù)傳送至所述骨骼動畫的骨骼動畫對象。
[0061]步驟202,所述骨骼動畫對象接收所述骨骼姿勢矩陣數(shù)據(jù),并將所述骨骼姿勢矩陣數(shù)據(jù)傳送至GPU。
[0062]步驟203,向GPU輸入全局坐標(biāo)矩陣數(shù)據(jù)。
[0063]步驟204,根據(jù)所述骨骼姿勢矩陣數(shù)據(jù)、所述全局坐標(biāo)矩陣數(shù)據(jù)與緩存的模型頂點(diǎn)、貼圖和骨骼,在所述GPU中通過著色程序Shader進(jìn)行渲染運(yùn)算,在顯示屏幕上渲染出與所述動畫幀對應(yīng)的骨骼動畫。
[0064]本實(shí)施方式所述的骨骼動畫的渲染方法,在緩存有與所述骨骼動畫對應(yīng)的骨骼姿勢數(shù)據(jù)時(shí),無需再向所述GPU中傳輸模型頂點(diǎn)、貼圖、骨骼,可直接使用緩存的模型頂點(diǎn)、貼圖和骨骼,進(jìn)行動畫渲染,可進(jìn)一步提高3D引擎的渲染性能。
[0065]優(yōu)選地,所述模型頂點(diǎn)優(yōu)選地為3D模型的頂點(diǎn)。
[0066]請參閱圖3圖3是本發(fā)明骨骼動畫的渲染系統(tǒng)第一實(shí)施方式的結(jié)構(gòu)示意圖。
[0067]本實(shí)施方式的所述骨骼動畫的渲染系統(tǒng)包括判斷模塊100、第一渲染模塊200和第二渲染模塊300,其中:
[0068]判斷模塊100,用于獲取待渲染的骨骼動畫的動畫幀,并判斷是否緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)。
[0069]第一渲染模塊200,用于在緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)時(shí),將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫。
[0070]緩存模塊300,用于在未緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)時(shí),通過CPU計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù),并在滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存。
[0071]第二渲染模塊400,用于將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫。
[0072]本實(shí)施方式所述的骨骼動畫的渲染系統(tǒng),在緩存有待渲染的動畫幀的骨骼姿勢矩陣數(shù)據(jù)時(shí),將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫,無需消耗CPU資源,可提高3D引擎的渲染性能,在為緩存有且滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存,可為下一次的渲染直接提供所需的骨骼姿勢矩陣數(shù)據(jù),使得不再持續(xù)消耗CPU資源,進(jìn)一步提高3D引擎的渲染性能。
[0073]其中,對于判斷模塊100,所述動畫幀為當(dāng)前待渲染的動畫畫面,所述動畫幀的骨骼姿勢矩陣優(yōu)選地,緩存在緩存池中。
[0074]在一個(gè)實(shí)施例中,判斷模塊100還用于:
[0075]創(chuàng)建用于播放所述骨骼動畫的骨骼動畫對象。
[0076]加載播放所述骨骼動畫所需要的動畫資源。
[0077]將所述動畫資源的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為內(nèi)存的數(shù)據(jù)結(jié)構(gòu)。
[0078]啟動所述骨骼動畫的動畫播放模式。
[0079]其中,所需要的動畫資源優(yōu)選地包括貼圖、3D模型、骨骼、骨骼姿勢數(shù)據(jù)。
[0080]優(yōu)選地,加載的所述動畫資源位二進(jìn)制數(shù)據(jù),在GPU中進(jìn)行動畫渲染時(shí),需要將二進(jìn)制的動畫資源轉(zhuǎn)換為與GPU內(nèi)存匹配的數(shù)據(jù)結(jié)構(gòu),即3D引擎需要的數(shù)據(jù)格式。啟動所述骨骼動畫的動畫播放模式優(yōu)選地,為將所述動畫資源添加到顯示列表。
[0081]在另一個(gè)實(shí)施例中,還包括緩存模塊,用于在獲取待渲染的骨骼動畫的動畫幀之IIJ:
[0082]統(tǒng)計(jì)所述待渲染的骨骼動畫的各個(gè)動畫幀,在所述骨骼動畫中的播放總次數(shù)。
[0083]通過CPU計(jì)算出播放總次數(shù)超高播放閾值的動畫幀的骨骼姿勢矩陣數(shù)據(jù),并計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存。
[0084]其中,所述播放總次數(shù)為所述動畫幀在整個(gè)骨骼動畫的播放過程中的重復(fù)播放次數(shù)。所述播放閾值優(yōu)選地為2。
[0085]對于第一渲染模塊200,優(yōu)選地,所述骨骼姿勢矩陣數(shù)據(jù)存儲在緩存池內(nèi),所述骨骼姿勢矩陣可以是前一次渲染所述動畫幀時(shí)緩存的,也可以是在啟動所述骨骼動畫的動畫播放模式之前緩存的。
[0086]進(jìn)一步地,所述將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫的步驟還可以包括以下步驟:
[0087]執(zhí)行所述骨骼動畫的幀函數(shù)。
[0088]對于緩存模塊300,所述通過CPU計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)的步驟包括以下步驟:
[0089]轉(zhuǎn)換所述動畫幀對應(yīng)的局部分層骨架,生成全局骨骼姿勢。
[0090]通過骨骼數(shù)量、四元數(shù)、所述全局骨骼姿勢進(jìn)行數(shù)據(jù)運(yùn)算,計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)。
[0091]其中,所述全局骨骼姿勢是所述動畫幀中骨骼對象的所有骨骼的骨骼姿勢數(shù)據(jù)。
[0092]在另一個(gè)實(shí)施例中,所述緩存模塊300還可用于:
[0093]判斷所述動畫幀在所述骨骼動畫中的播放總次數(shù)是否超過播放閾值,若是,則將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存。
[0094]本實(shí)施例所述的骨骼動畫的渲染系統(tǒng),在播放總次數(shù)是超過播放閾值時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存,可為下一次的渲染直接提供所需的骨骼姿勢矩陣數(shù)據(jù),使得反復(fù)播放動畫的3D模型不再持續(xù)消耗CPU資源,提高3D引擎的渲染性倉泛。
[0095]其中,所述播放總次數(shù)超過播放閾值是一個(gè)緩存條件,在其他實(shí)施方式中,還可以設(shè)置其他緩存條件,如CPU計(jì)算出骨骼姿勢矩陣數(shù)據(jù),即將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存。
[0096]優(yōu)選地,所述播放閾值為2,還可以是其他數(shù)值。
[0097]對于第二渲染模塊400,所述將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫的步驟包括以下步驟:
[0098]將所述骨骼姿勢矩陣數(shù)據(jù)傳送至所述骨骼動畫對象。
[0099]通過3D引擎的GPU對象把所述骨骼姿勢矩陣數(shù)據(jù)傳輸?shù)紾PU。
[0100]將渲染所述骨骼動畫所需的著色程序Shader傳輸?shù)紾PU。
[0101]將所述骨骼動畫的3D模型的頂點(diǎn)數(shù)據(jù)、貼圖、全局坐標(biāo)矩陣數(shù)據(jù)傳輸?shù)紾PU。
[0102]根據(jù)模型頂點(diǎn)、貼圖、骨骼、全局坐標(biāo)矩陣數(shù)據(jù)與骨骼姿勢矩陣數(shù)據(jù),通過著色程序Shader在GPU內(nèi)進(jìn)行渲染運(yùn)算,在屏幕上渲染出與所述動畫幀對應(yīng)的骨骼動畫。
[0103]其中,著色程序Shader為著色程序,用于GPU的編程。
[0104]以下所述是本發(fā)明骨骼動畫的渲染系統(tǒng)第二實(shí)施方式。
[0105]本實(shí)施方式的骨骼動畫的渲染系統(tǒng)與第一實(shí)施方式的區(qū)別在于:第一渲染模200還可用于:
[0106]將緩存池內(nèi)緩存的所述骨骼姿勢矩陣數(shù)據(jù)傳送至所述骨骼動畫的骨骼動畫對象。
[0107]所述骨骼動畫對象接收所述骨骼姿勢矩陣數(shù)據(jù),并將所述骨骼姿勢矩陣數(shù)據(jù)傳送至 GPU。
[0108]向GPU輸入全局坐標(biāo)矩陣數(shù)據(jù)。
[0109]根據(jù)所述骨骼姿勢矩陣數(shù)據(jù)、所述全局坐標(biāo)矩陣數(shù)據(jù)與緩存的模型頂點(diǎn)、貼圖和骨骼,在所述GPU中通過著色程序Shader進(jìn)行渲染運(yùn)算,在顯示屏幕上渲染出與所述動畫幀對應(yīng)的骨骼動畫。
[0110]本實(shí)施方式所述的骨骼動畫的渲染系統(tǒng),在緩存有與所述骨骼動畫對應(yīng)的骨骼姿勢數(shù)據(jù)時(shí),無需再向所述GPU中傳輸模型頂點(diǎn)、貼圖、骨骼,可直接使用緩存的模型頂點(diǎn)、貼圖和骨骼,進(jìn)行動畫渲染,可進(jìn)一步提高3D引擎的渲染性能。
[0111]優(yōu)選地,所述模型頂點(diǎn)優(yōu)選地為3D模型的頂點(diǎn)。
[0112]以上所述實(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)。
【權(quán)利要求】
1.一種骨骼動畫的渲染方法,其特征在于,包括以下步驟: 獲取待渲染的骨骼動畫的動畫幀,并判斷是否緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù); 若是,則將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫; 若否,則通過CPU計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù),并在滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存; 將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫。
2.根據(jù)權(quán)利要求1所述的骨骼動畫的渲染方法,其特征在于,所述獲取待渲染的骨骼對象的動畫幀的步驟包括以下步驟: 創(chuàng)建用于播放所述骨骼動畫的骨骼動畫對象; 加載播放所述骨骼動畫所需要的動畫資源; 將所述動畫資源的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為內(nèi)存的數(shù)據(jù)結(jié)構(gòu); 啟動所述骨骼動畫的動畫播放模式。
3.根據(jù)權(quán)利要求1所述的骨骼動畫的渲染方法,其特征在于,所述通過CPU計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)的步驟包括以下步驟: 轉(zhuǎn)換所述動畫幀對應(yīng)的局部分層骨架,生成全局骨骼姿勢; 通過骨骼數(shù)量、四元數(shù)、所述全局骨骼姿勢進(jìn)行數(shù)據(jù)運(yùn)算,計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)。
4.根據(jù)權(quán)利要求1所述的骨骼動畫的渲染方法,其特征在于,所述將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫的步驟包括以下步驟: 將緩存池內(nèi)緩存的所述骨骼姿勢矩陣數(shù)據(jù)傳送至所述骨骼動畫的骨骼動畫對象; 所述骨骼動畫對象接收所述骨骼姿勢矩陣數(shù)據(jù),并將所述骨骼姿勢矩陣數(shù)據(jù)傳送至GPU ; 向GPU輸入全局坐標(biāo)矩陣數(shù)據(jù); 根據(jù)所述骨骼姿勢矩陣數(shù)據(jù)、所述全局坐標(biāo)矩陣數(shù)據(jù)與緩存的模型頂點(diǎn)、貼圖和骨骼,在所述GPU中通過著色程序Shader進(jìn)行渲染運(yùn)算,在顯示屏幕上渲染出與所述動畫幀對應(yīng)的骨骼動畫。
5.根據(jù)權(quán)利要求1至4中任意一項(xiàng)所述的骨骼動畫的渲染方法,其特征在于,所述在滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存的步驟包括以下步驟: 判斷所述動畫幀在所述骨骼動畫中的播放總次數(shù)是否超過播放閾值,若是,則將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存。
6.一種骨骼動畫的渲染系統(tǒng),其特征在于,包括: 判斷模塊,用于獲取待渲染的骨骼動畫的動畫幀,并判斷是否緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù); 第一渲染模塊,用于在緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)時(shí),將緩存的骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫; 緩存模塊,用于在未緩存有所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)時(shí),通過CPU計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù),并在滿足緩存條件時(shí),將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存; 第二渲染模塊,用于將計(jì)算出的所述骨骼姿勢矩陣數(shù)據(jù)傳送至GPU,渲染出與所述動畫幀對應(yīng)的骨骼動畫。
7.根據(jù)權(quán)利要求6所述的骨骼動畫的渲染系統(tǒng),其特征在于,所述判斷模塊還用于: 創(chuàng)建用于播放所述骨骼動畫的骨骼動畫對象; 加載播放所述骨骼動畫所需要的動畫資源; 將所述動畫資源的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為內(nèi)存的數(shù)據(jù)結(jié)構(gòu); 啟動所述骨骼動畫的動畫播放模式。
8.根據(jù)權(quán)利要求6所述的骨骼動畫的渲染系統(tǒng),其特征在于,所述第二渲染模塊還用于: 轉(zhuǎn)換所述動畫幀對應(yīng)的局部分層骨架,生成全局骨骼姿勢; 通過骨骼數(shù)量、四元數(shù)、所述全局骨骼姿勢進(jìn)行數(shù)據(jù)運(yùn)算,計(jì)算出所述動畫幀的骨骼姿勢矩陣數(shù)據(jù)。
9.根據(jù)權(quán)利要求6所述的骨骼動畫的渲染系統(tǒng),其特征在于,所述第一渲染模塊還用于: 將緩存池內(nèi)緩存的所述骨骼姿勢矩陣數(shù)據(jù)傳送至所述骨骼動畫的骨骼動畫對象; 所述骨骼動畫對象接收所述骨骼姿`勢矩陣數(shù)據(jù),并將所述骨骼姿勢矩陣數(shù)據(jù)傳送至GPU ; 向GPU輸入全局坐標(biāo)矩陣數(shù)據(jù); 根據(jù)所述骨骼姿勢矩陣數(shù)據(jù)、所述全局坐標(biāo)矩陣數(shù)據(jù)與緩存的模型頂點(diǎn)、貼圖和骨骼,在所述GPU中通過著色程序Shader進(jìn)行渲染運(yùn)算,在顯示屏幕上渲染出與所述動畫幀對應(yīng)的骨骼動畫。
10.根據(jù)權(quán)利要求6至9中任意一項(xiàng)所述的骨骼動畫的渲染系統(tǒng),其特征在于,所述緩存模塊還用于判斷所述動畫幀在所述骨骼動畫中的播放總次數(shù)是否超過播放閾值,若是,則將計(jì)算出的骨骼姿勢矩陣數(shù)據(jù)與所述動畫幀對應(yīng)緩存。
【文檔編號】G06T13/40GK103617643SQ201310627192
【公開日】2014年3月5日 申請日期:2013年11月29日 優(yōu)先權(quán)日:2013年11月29日
【發(fā)明者】陳蘇俊 申請人:廣州菲動軟件科技有限公司