本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及匹配實(shí)現(xiàn)方法及相關(guān)裝置。
背景技術(shù):
目前很多領(lǐng)域或虛擬場景中均涉及到物體或人物的仿真。例如,計(jì)算機(jī)圖形學(xué)或計(jì)算機(jī)動(dòng)畫領(lǐng)域中物體或人物的3D建模。
以人物仿真為例,人物的身體上可能需要掛接掛件,例如手表、飄帶、頭盔,乃至刀、槍、劍等。在傳統(tǒng)仿真過程中,會(huì)將人體與上述掛件設(shè)計(jì)為一個(gè)整體,也即將掛件作為人體的一部分,其缺點(diǎn)是適應(yīng)性差。舉例來講,假定N個(gè)人物均需要配備頭盔,則需要針對(duì)每一個(gè)人物建立模型,并且每個(gè)模型中人體與頭盔是一體的。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供匹配實(shí)現(xiàn)及相關(guān)裝置,以解決傳統(tǒng)仿真方式適應(yīng)性差的問題。
為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供如下技術(shù)方案:
一種匹配實(shí)現(xiàn)方法,應(yīng)用于終端,所述匹配實(shí)現(xiàn)方法包括:
獲取虛擬掛件針對(duì)虛擬對(duì)象的掛接修正信息;所述虛擬掛件獨(dú)立于所述虛擬對(duì)象;所述掛接修正信息用于適配所述虛擬掛件與虛擬對(duì)象;
確定所述虛擬對(duì)象的形態(tài);
根據(jù)所述虛擬對(duì)象的形態(tài)及所述掛接修正信息,調(diào)整所述虛擬掛件的形態(tài);
將調(diào)整形態(tài)后的虛擬掛件,裝備在所述虛擬對(duì)象上。
一種匹配實(shí)現(xiàn)裝置,應(yīng)用于終端,所述裝置包括:
獲取單元,用于獲取虛擬掛件針對(duì)虛擬對(duì)象的掛接修正信息;所述虛擬掛件獨(dú)立于所述虛擬對(duì)象;所述掛接修正信息用于適配所述虛擬掛件與虛擬對(duì)象;
確定單元,用于確定所述虛擬對(duì)象的形態(tài);
調(diào)整單元,用于根據(jù)所述虛擬對(duì)象的形態(tài)及所述掛接修正信息,調(diào)整所述虛擬掛件的形態(tài);
顯示單元,用于將調(diào)整形態(tài)后的掛件,裝備在所述虛擬對(duì)象上。
一種終端,包括上述的匹配實(shí)現(xiàn)裝置。
在本發(fā)明實(shí)施例中,虛擬掛件與虛擬對(duì)象是相互獨(dú)立的,可分別進(jìn)行設(shè)計(jì)開發(fā)。掛接修正信息,可令虛擬部件與虛擬對(duì)象相適配。這樣,同一部件可適配不同的虛擬對(duì)象。與設(shè)計(jì)為一個(gè)整體的現(xiàn)有方式相比較,其適應(yīng)性大大提高了。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的終端的計(jì)算機(jī)架構(gòu)示例圖;
圖2、圖3、圖5a、5b為本發(fā)明實(shí)施例提供的匹配實(shí)現(xiàn)方法示例性流程圖;
圖4a和圖4b為本發(fā)明實(shí)施例提供的骨骼影響網(wǎng)格頂點(diǎn)的示例圖;
圖6a和圖6b為本發(fā)明實(shí)施例提供的骨骼影響掛接點(diǎn)的示例圖;
圖7為本發(fā)明實(shí)施例提供的現(xiàn)有骨骼蒙皮流程圖;
圖8為本發(fā)明實(shí)施例提供的匹配實(shí)現(xiàn)裝置的示例性結(jié)構(gòu)圖。
具體實(shí)施方式
本發(fā)明可能使用的技術(shù)名詞、簡寫或縮寫如下:
3dsMax:一種用來制作3D模型、動(dòng)畫、特效等的電腦軟件;
蒙皮:在3dsMax中把模型面數(shù)和頂點(diǎn)附著在骨骼上的叫法;
骨骼:在3dsMax中創(chuàng)建的用來控制模型動(dòng)畫的虛擬物體。
本發(fā)明提供的匹配實(shí)現(xiàn)方法及相關(guān)裝置(匹配實(shí)現(xiàn)裝置、終端)可應(yīng)用于虛擬現(xiàn)實(shí)領(lǐng)域、計(jì)算機(jī)圖形學(xué)、計(jì)算機(jī)動(dòng)畫等領(lǐng)域。
例如,可應(yīng)用于虛擬現(xiàn)實(shí)領(lǐng)域中對(duì)航天員的仿真。再例如,可應(yīng)用于計(jì)算機(jī)動(dòng)畫領(lǐng)域,尤其是游戲場景下的角色裝扮等。
上述匹配實(shí)現(xiàn)裝置可以軟件的形式應(yīng)用于上述終端(諸如臺(tái)式機(jī)、移動(dòng)終端、ipad、平板電腦等)中,或以硬件(例如具體可為終端的控制器/處理器)的形式作為上述設(shè)備的組成部分。
當(dāng)以軟件形式存在時(shí),上述匹配實(shí)現(xiàn)裝置具體可為一應(yīng)用程序,例如手機(jī)APP、終端應(yīng)用程序等,也可作為某應(yīng)用程序或操作系統(tǒng)的組件。
圖1示出了上述終端的一種通用計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)。
上述計(jì)算機(jī)系統(tǒng)可包括總線、處理器1、存儲(chǔ)器2、通信接口3、輸入設(shè)備4和輸出設(shè)備5。處理器1、存儲(chǔ)器2、通信接口3、輸入設(shè)備4和輸出設(shè)備5通過總線相互連接。其中:
總線可包括一通路,在計(jì)算機(jī)系統(tǒng)各個(gè)掛件之間傳送信息。
處理器1可以是通用處理器,例如通用中央處理器(CPU)、網(wǎng)絡(luò)處理器(Network Processor,簡稱NP)、微處理器等,也可以是特定應(yīng)用集成電路(application-specific integrated circuit,ASIC),或一個(gè)或多個(gè)用于控制本發(fā)明方案程序執(zhí)行的集成電路。還可以是數(shù)字信號(hào)處理器(DSP)、專用集成電路(ASIC)、現(xiàn)成可編程門陣列(FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件。
處理器1可包括主處理器(CPU),還可包括顯卡中的圖形處理器(GPU)。
存儲(chǔ)器2中保存有執(zhí)行本發(fā)明技術(shù)方案的程序,還可以保存有操作系統(tǒng)和其他關(guān)鍵業(yè)務(wù)。具體地,程序可以包括程序代碼,程序代碼包括計(jì)算機(jī)操作指令。更具體的,存儲(chǔ)器2可以包括只讀存儲(chǔ)器(read-only memory,ROM)、可存儲(chǔ)靜態(tài)信息和指令的其他類型的靜態(tài)存儲(chǔ)設(shè)備、隨機(jī)存取存儲(chǔ)器(random access memory,RAM)、可存儲(chǔ)信息和指令的其他類型的動(dòng)態(tài)存儲(chǔ)設(shè)備、磁盤存儲(chǔ)器、flash等等。
輸入設(shè)備4可包括接收用戶輸入的數(shù)據(jù)和信息的裝置,例如鍵盤、鼠標(biāo)、攝像頭、掃描儀、光筆、語音輸入裝置、觸摸屏、計(jì)步器或重力感應(yīng)器等。
輸出設(shè)備5可包括允許輸出信息給用戶的裝置,例如顯示屏、打印機(jī)、揚(yáng)聲器等。
通信接口3可包括使用任何收發(fā)器一類的裝置,以便與其他設(shè)備或通信網(wǎng)絡(luò)通信,如以太網(wǎng),無線接入網(wǎng)(RAN),無線局域網(wǎng)(WLAN)等。
處理器1執(zhí)行存儲(chǔ)器2中所存放的程序,以及調(diào)用其他設(shè)備,可用于實(shí)現(xiàn)本發(fā)明實(shí)施例所提供的匹配實(shí)現(xiàn)方法中的各個(gè)步驟。
在一個(gè)示例中,可由CPU通過執(zhí)行存儲(chǔ)器2中所存放的程序,以及調(diào)用其他設(shè)備,可用于實(shí)現(xiàn)本發(fā)明實(shí)施例所提供的匹配實(shí)現(xiàn)方法中的各個(gè)步驟。
在另一個(gè)示例中,可由CPU與GPU協(xié)調(diào)工作,以及調(diào)用其他設(shè)備,來實(shí)現(xiàn)本發(fā)明實(shí)施例所提供的匹配實(shí)現(xiàn)方法中的各個(gè)步驟。
下面將基于上面的本發(fā)明涉及的共性方面,對(duì)本發(fā)明實(shí)施例進(jìn)一步詳細(xì)說明。
圖2示出了上述匹配實(shí)現(xiàn)方法的一種示例性流程。圖2所示的方法應(yīng)用上述提及的領(lǐng)域或應(yīng)用場景中,由圖1所示的終端中的CPU(或者CPU和GPU)與其他掛件交互完成。
上述示例性流程包括:
201部分:獲取虛擬掛件針對(duì)虛擬對(duì)象(也可稱為本體)的掛接修正信息。
可由圖1所示終端的處理器1(CPU)獲取上述掛接修正信息。
需要說明的是,虛擬掛件是獨(dú)立于虛擬對(duì)象的。
以游戲應(yīng)用場景為例,虛擬掛件可為玩家選擇的Avatar(紙娃娃)掛件,或玩家在游戲過程中獲得的Avatar掛件。
虛擬對(duì)象則可為游戲角色,當(dāng)然,在其他應(yīng)用場景中,虛擬對(duì)象也可為物體或人體部分,例如虛擬對(duì)象可為仿真場景下人的臉部。
按照掛接方式,上述虛擬掛件可為純掛點(diǎn)式Avatar掛件或參與骨骼蒙皮計(jì)算的Avatar掛件。
所謂掛點(diǎn)式是指虛擬掛件單純跟隨角色而移動(dòng)旋轉(zhuǎn)。虛擬掛件僅相對(duì)于虛擬對(duì)象發(fā)生位移(偏移)和旋轉(zhuǎn),并不會(huì)發(fā)生形變,也即其形態(tài)是不變的。
而參與骨骼蒙皮計(jì)算的Avatar掛件,會(huì)隨著角色的骨架的姿態(tài)不同,而呈現(xiàn)不同的形態(tài)。例如一件參與骨骼蒙皮計(jì)算的披風(fēng),其形態(tài)會(huì)隨角色由站立變蹲下而發(fā)生不同。
在制作純掛點(diǎn)式部件時(shí),可根據(jù)純掛點(diǎn)式要求對(duì)部件進(jìn)行建模。當(dāng)然,在制作參與骨骼蒙皮計(jì)算的部件時(shí),可根據(jù)骨骼蒙皮要求對(duì)部件進(jìn)行建模。
此外,在本發(fā)明其他實(shí)施例中,還可將諸如Havok Cloth之類的第三方中間件作為獨(dú)立的部件進(jìn)行掛接,這些第三方中間件一般是用于做一些輔助計(jì)算的。
或者,目標(biāo)部件也可集成第三方中間件。集成有第三方中間件的部件,也被作為獨(dú)立的物件制作。
202部分:確定虛擬對(duì)象的形態(tài);
可由圖1所示終端的處理器1(CPU或GPU)執(zhí)行202部分。
在一個(gè)示例中,虛擬對(duì)象的形態(tài)可包括相對(duì)于參照物的位移(或偏移)、旋轉(zhuǎn),乃及縮放。
203部分:根據(jù)虛擬對(duì)象的形態(tài)及上述掛接修正信息,調(diào)整虛擬掛件的形態(tài);
可由圖1所示終端的處理器1(中的CPU)執(zhí)行203部分?;蛘撸商幚砥?中的GPU與GPU協(xié)作執(zhí)行203部分。
在一個(gè)示例中,虛擬掛件的形態(tài)可包括縮放、相對(duì)于參照物(例如虛擬對(duì)象的骨架)的位移(或偏移)、旋轉(zhuǎn)等。
掛接修正信息用于適配虛擬掛件與虛擬對(duì)象。
需要說明的是,掛接修正信息不僅可支持純掛點(diǎn)式的avatar掛件與虛擬對(duì)象適配,也可支持需要參與角色骨骼蒙皮計(jì)算的avatar掛件與虛擬對(duì)象適配。
更具體的,掛接修正信息可包括偏移信息、旋轉(zhuǎn)信息和縮放信息。
舉例來講,一柄劍,其劍尖的初始朝向可為向上。
該柄劍相對(duì)于角色1的掛接修正信息可決定該柄劍掛在角色1的哪個(gè)位置(可通過偏移信息確定),劍尖朝上、朝下還是斜指(可通過旋轉(zhuǎn)信息確定),乃至劍的尺寸也可縮小,以適應(yīng)偏瘦小的角色,當(dāng)然,劍的尺寸也可放大,以適應(yīng)體型偏大的角色(可通過縮放信息確定)。
需要說明的是,對(duì)于同一虛擬掛件,不同的虛擬對(duì)象可對(duì)應(yīng)不同的掛接修正信息。
仍以劍這一掛件為例,其針對(duì)角色1的掛接修正信息可能決定其掛接在角色1的左肩的某一位置上,劍類朝下;而其針對(duì)角色2的掛接修正信息可決定其掛接在角色2的右肩的某一位置上,劍尖斜指。
204部分:將調(diào)整形態(tài)后的虛擬掛件,裝備在上述虛擬對(duì)象上。
可由圖1所示終端的處理器1(中的GPU)控制顯示器執(zhí)行204部分。
更具體的,可先顯示虛擬對(duì)象的形態(tài),再顯示調(diào)整形態(tài)后的虛擬掛件的形態(tài),其過程就類似于人穿上衣服,這樣可呈現(xiàn)虛擬掛件掛接在虛擬對(duì)象的視覺效果。
可見,在本發(fā)明實(shí)施例中,虛擬掛件與虛擬對(duì)象是相互獨(dú)立的,可分別進(jìn)行設(shè)計(jì)開發(fā)。針對(duì)虛擬對(duì)象的掛接修正信息,可令虛擬掛件與虛擬對(duì)象相適配。這樣,同一虛擬掛件可適配不同的虛擬對(duì)象。與掛件與人體或物體設(shè)計(jì)為一個(gè)整體的現(xiàn)有方式相比較,其適應(yīng)性大大提高了。
下面將以計(jì)算機(jī)動(dòng)畫中的骨骼動(dòng)畫場景為例,對(duì)本發(fā)明的技術(shù)方案進(jìn)行進(jìn)一步的介紹。
骨骼動(dòng)畫的實(shí)現(xiàn)至少需要虛擬骨架以及與虛擬骨架綁定的網(wǎng)格模型(Mesh)。
虛擬骨架中包括骨骼。以人體為例,虛擬骨架相當(dāng)于人體中的骨架,而與虛擬骨架綁定的網(wǎng)格模型,相當(dāng)于人體的皮膚。網(wǎng)格模型決定了人體或物體對(duì)外呈現(xiàn)的樣子??梢岳斫獾氖?,網(wǎng)格模型(皮膚)的形態(tài)受虛擬骨架姿勢(shì)的影響。
姿勢(shì)也可以理解為動(dòng)作,例如T形姿勢(shì)是雙臂伸平,兩腿并緊,是一個(gè)動(dòng)作。
圖3示出了應(yīng)用骨骼動(dòng)畫場景中的匹配實(shí)現(xiàn)方法的一種示例性流程,由圖1所示的終端中的CPU(或者CPU和GPU)與其他部件交互完成。
該示例性流程包括:
301部分:獲取虛擬掛件的模型數(shù)據(jù)。
可由圖1所示終端的處理器1(CPU)執(zhí)行301部分。模型數(shù)據(jù)可存放于任意可被處理器1訪問的存儲(chǔ)介質(zhì)上,例如內(nèi)存。
更具體的,虛擬掛件的模型數(shù)據(jù)至少可包括第一網(wǎng)格模型和第一虛擬骨架。
其中,第一虛擬骨架為上述虛擬掛件對(duì)應(yīng)的虛擬骨架,第一網(wǎng)格模型為上述虛擬掛件對(duì)應(yīng)的可變形網(wǎng)格模型,其形態(tài)受上述第一虛擬骨架姿勢(shì)的影響。
無論是純掛點(diǎn)式的avatar部件還是參與角色骨骼蒙皮計(jì)算的avatar部件,其模型數(shù)據(jù)均可包含第一網(wǎng)格模型和第一虛擬骨架。
需要說明的是,虛擬掛件的形態(tài)可包括第一網(wǎng)格模型的形態(tài),或者說,虛擬掛件的形態(tài)可由第一網(wǎng)格模型的形態(tài)來表征。因此,后續(xù)將會(huì)計(jì)算第一網(wǎng)格模型的形態(tài)。
對(duì)于游戲應(yīng)用場景,虛擬掛件可為頭盔、飄帶、披風(fēng)、刀劍配飾等avatar掛件。
302部分:獲取上述虛擬對(duì)象的模型數(shù)據(jù)。
可由圖1所示終端的處理器1(CPU)執(zhí)行302部分。模型數(shù)據(jù)可存放于任意可被處理器1訪問的存儲(chǔ)介質(zhì)上,例如內(nèi)存。
上述虛擬對(duì)象的模型數(shù)據(jù)可包括第二虛擬骨架、第二網(wǎng)格模型以及虛擬掛件針對(duì)虛擬對(duì)象的掛接修正信息。
其中,第二虛擬骨架為虛擬對(duì)象對(duì)應(yīng)的虛擬骨架。需要說明的是,第一虛擬骨架是第二虛擬骨架的一部分。舉例來講,假定虛擬對(duì)象是一個(gè)人,則虛擬對(duì)象的(第二)虛擬骨架是人的整副虛擬骨架。
假定披風(fēng)掛件對(duì)應(yīng)的(第一)虛擬骨架包括肩骨和后背上的骨骼,而肩骨和后背上的骨骼是屬于人整副骨架的一部分的。
第二網(wǎng)格模型為虛擬對(duì)象對(duì)應(yīng)的可變形網(wǎng)格模型,其形態(tài)受第二虛擬骨架的姿勢(shì)的影響。需要說明的是,虛擬對(duì)象的形態(tài)可包括第二網(wǎng)格模型的形態(tài),或者說,虛擬對(duì)象的形態(tài)可由第二網(wǎng)格模型的形態(tài)來表征。因此,后續(xù)將會(huì)計(jì)算第二網(wǎng)格模型的形態(tài)。
對(duì)于游戲應(yīng)用場景,虛擬對(duì)象可為不同的游戲角色。例如,身披重甲的武將,衣袂飄飄的布衣,奇裝異服的異族武士等。虛擬對(duì)象的模型數(shù)據(jù)可存儲(chǔ)在角色模型的3dsmax文件(角色制作文件)。
前述提及,虛擬掛件的掛接修正信息會(huì)根據(jù)虛擬對(duì)象的不同而不同,則虛擬掛件針對(duì)虛擬對(duì)象的掛接修正信息將在虛擬對(duì)象的模型中制作,屬于虛擬對(duì)象的模型數(shù)據(jù)的一部分。更具體的,掛接修正信息可以額外的節(jié)點(diǎn)的方式添加至某角色的3dsmax文件中。
上述額外的節(jié)點(diǎn)根據(jù)部件分類(比如披風(fēng)類,腰側(cè)武器類等等)可由不同的max腳本負(fù)責(zé)創(chuàng)建,美術(shù)設(shè)計(jì)人員可以根據(jù)需要?jiǎng)?chuàng)建這些節(jié)點(diǎn)的全部或部分(若創(chuàng)建了部分節(jié)點(diǎn),其他未創(chuàng)建的沿用默認(rèn)值),這些節(jié)點(diǎn)將決定虛擬掛件可根據(jù)不同角色掛接在不同的位置,有不同的旋轉(zhuǎn)角度及縮放比例。
同時(shí)對(duì)于第三方中間件,可能會(huì)根據(jù)角色存在不同的額外數(shù)據(jù),例如Havok Cloth的布料碰撞數(shù)據(jù),這些額外數(shù)據(jù)也作為額外的節(jié)點(diǎn)保存在角色制作文件中。
303部分:根據(jù)當(dāng)前時(shí)間下第二虛擬骨架的姿勢(shì),確定當(dāng)前時(shí)間下第二網(wǎng)格模型的形態(tài)。
更具體的,第二虛擬骨架的姿勢(shì)可由第二虛擬骨架所包含的骨骼的狀態(tài)所表征。則303部分可進(jìn)一步細(xì)化為:
根據(jù)當(dāng)前時(shí)間下第二虛擬骨架所包含的骨骼的狀態(tài),確定當(dāng)前時(shí)間下第二網(wǎng)格模型的形態(tài)。
如何根據(jù)第二虛擬骨架的骨骼的狀態(tài),確定第二網(wǎng)格模型的形態(tài),將會(huì)在后續(xù)介紹。
303部分為上述202部分的細(xì)化??捎蓤D1所示終端的處理器1(中的CPU)執(zhí)行303部分?;蛘撸商幚砥?中的GPU與GPU協(xié)作執(zhí)行303部分。
304部分:根據(jù)上述掛接修正信息及當(dāng)前時(shí)間下第一虛擬骨架的姿勢(shì),確定當(dāng)前時(shí)間下第一網(wǎng)格模型的形態(tài)。
需要說明的是,由于第一虛擬骨架是第二虛擬骨架的一部分,所以在第二虛擬骨架的姿勢(shì)確定的情況下,第一虛擬骨架的姿勢(shì)也隨之確定下來。
在確定出第一虛擬骨架的姿勢(shì)后,可根據(jù)上述掛接修正信息及當(dāng)前時(shí)間下第一虛擬骨架的姿勢(shì),確定當(dāng)前時(shí)間下第一網(wǎng)格模型的形態(tài)。
更具體的,第一虛擬骨架的姿勢(shì)可由第一虛擬骨架所包含的骨骼的狀態(tài)所表征。則304部分可進(jìn)一步細(xì)化為:根據(jù)上述掛接修正信息及當(dāng)前時(shí)間下上述第一虛擬骨架所包含的骨骼的狀態(tài),確定當(dāng)前時(shí)間下上述第一網(wǎng)格模型的形態(tài)。
需要說明的是,對(duì)于參與蒙皮計(jì)算的掛件,可根據(jù)掛接修正信息及當(dāng)前時(shí)間下第一虛擬骨架所包含的骨骼的狀態(tài),計(jì)算得到掛件的位置,朝向(旋轉(zhuǎn))甚至形狀變化;而對(duì)于純掛件式掛件,可根據(jù)掛接修正信息計(jì)算得到掛件相對(duì)于骨骼的偏移和旋轉(zhuǎn)。這些位置(偏移)、朝向(旋轉(zhuǎn))乃至形狀變化,均屬于掛件的形態(tài)。
如何根據(jù)第一虛擬骨架的骨骼的狀態(tài),確定第一網(wǎng)格模型的形態(tài),將會(huì)在后續(xù)介紹。
304部分為上述203部分的細(xì)化。可由圖1所示終端的處理器1(中的CPU)執(zhí)行304部分?;蛘?,由處理器1中的GPU與GPU協(xié)作執(zhí)行304部分。
305部分:依次顯示當(dāng)前時(shí)間下第二網(wǎng)格模型的形態(tài)和第一網(wǎng)格模型的形態(tài)。
305部分為上述204部分的細(xì)化??捎蓤D1所示終端的處理器1(中的GPU)執(zhí)行305部分。
在本實(shí)施例中,介紹了在骨骼動(dòng)畫中如何根據(jù)掛接修正信息來實(shí)現(xiàn)虛擬對(duì)象與虛擬掛件的適配。該方案在保證顯示效果的同時(shí)對(duì)原有數(shù)據(jù)的修改需求非常小,還能夠兼容諸如HavokCloth等第三方中間件的集成。
下面將進(jìn)行更詳細(xì)的介紹。
骨骼動(dòng)畫一般包括虛擬骨架(骨骼層次)、與虛擬骨架綁定的網(wǎng)格模型(Mesh)以及一系列關(guān)鍵幀。
一個(gè)關(guān)鍵幀對(duì)應(yīng)于骨架的一個(gè)新姿勢(shì),兩個(gè)關(guān)鍵幀之間的骨架姿勢(shì)可以通過插值得到。這是因?yàn)槿绻麊渭儾シ抨P(guān)鍵幀可能會(huì)出現(xiàn)動(dòng)作不平滑的問題,解決方法是幀間平滑插值。
在骨骼動(dòng)畫中,不是把Mesh直接放到世界坐標(biāo)系中,Mesh只是作為皮膚使用的,是依附于骨骼的,真正決定虛擬對(duì)象或虛擬掛件在世界坐標(biāo)系中的位置和朝向的是其虛擬骨骼。
網(wǎng)格模型的形態(tài)則由是由網(wǎng)格頂點(diǎn)的位置(坐標(biāo))所表征的。
請(qǐng)參見圖4a和圖4b,圖4a和圖4b簡單得示例性得示出了手臂的網(wǎng)格模型和骨骼模型。假定,網(wǎng)格模型上的某一頂點(diǎn)的位置為V,該頂點(diǎn)的位置受前臂骨骼的位置和朝向的影響。
圖4b示出了前臂骨骼旋轉(zhuǎn)了一個(gè)角度后,該頂點(diǎn)的位置由V變?yōu)榱薟。
虛擬骨架包括一系列離散的關(guān)節(jié),它們通過父子關(guān)系聯(lián)系在一起。
對(duì)于骨骼動(dòng)畫,以虛擬對(duì)象為例,我們?cè)O(shè)置虛擬對(duì)象的位置和朝向,實(shí)際是在設(shè)置其根骨骼的位置和朝向,然后根據(jù)骨骼層次結(jié)構(gòu)中父子骨骼之間的變換關(guān)系計(jì)算出各個(gè)骨骼的位置和朝向,再根據(jù)骨骼對(duì)Mesh中頂點(diǎn)的綁定計(jì)算出頂點(diǎn)在世界坐標(biāo)系中的坐標(biāo),從而對(duì)頂點(diǎn)進(jìn)行渲染。
為了方便建模,每個(gè)關(guān)節(jié)的方位信息(位置和朝向)是在它的父空間中定義的,每個(gè)關(guān)節(jié)自身也定義了一個(gè)子空間。
關(guān)節(jié)與關(guān)節(jié)間具有骨骼。一般一副虛擬骨架僅包括一個(gè)根骨骼。
以上臂骨骼、前臂骨骼和手指骨骼為例。鎖骨是一個(gè)關(guān)節(jié),它是上臂的原點(diǎn),同樣肘關(guān)節(jié)則是前臂的原點(diǎn),腕關(guān)節(jié)是手指骨骼的原點(diǎn)。關(guān)節(jié)既決定了骨骼空間的位置,又是骨骼空間的旋轉(zhuǎn)和縮放中心。
用一個(gè)4X4矩陣就可以表達(dá)一個(gè)骨骼,因?yàn)?X4矩陣中含有的平移分量決定了骨骼所連接的關(guān)節(jié)的位置(決定了骨骼的原點(diǎn)位置),旋轉(zhuǎn)和縮放分量決定了骨骼空間的旋轉(zhuǎn)和縮放。
以前臂骨骼為例,其原點(diǎn)位置是位于上臂骨骼空間坐標(biāo)的某個(gè)位置的,對(duì)于上臂骨骼來說,其坐標(biāo)空間某處(即肘關(guān)節(jié)所在的位置)有一個(gè)子空間,那就是前臂骨骼。
當(dāng)前臂繞肘關(guān)節(jié)旋轉(zhuǎn)時(shí),實(shí)際是前臂坐標(biāo)空間在旋轉(zhuǎn),從而其中包含的子空間(手指骨骼坐標(biāo)空間)也在繞肘關(guān)節(jié)旋轉(zhuǎn)。子空間會(huì)跟隨父空間運(yùn)動(dòng),就好比人跟著地球轉(zhuǎn)一樣。
和實(shí)際生物骨骼不同的是,我們這里的骨骼并不是實(shí)質(zhì)的骨頭,所以前臂骨骼旋轉(zhuǎn)時(shí),改變的只是坐標(biāo)空間的朝向。
我們知道物體在坐標(biāo)系中可以做平移變換,以及自身的旋轉(zhuǎn)和縮放變換。子骨骼在父骨骼的坐標(biāo)系中也可以做這些變換來改變自己在父骨骼坐標(biāo)系中的位置和朝向等。
那么如何表示呢?由于4X4矩陣可以同時(shí)表示上述三種變換(平衡、旋轉(zhuǎn)、縮放),所以一般描述子骨骼在其父骨骼坐標(biāo)系中的變換時(shí)會(huì)使用一個(gè)變化矩陣(TransformMatrix)。通過該變化矩陣確定了該骨骼在父骨骼坐標(biāo)系中的位置。
由于Transform Matrix(作用是將頂點(diǎn)從骨骼空間變換到上層空間)是基于其父骨骼空間的,只有根骨骼的Transform是基于世界空間的,所以要通過自下而上一層層的Transform變換,得到該骨骼在世界空間上的變換矩陣(也可稱全局矩陣)-Combined Transform Matrix(可用C來表示某骨骼在世界空間上的變換矩陣)。其實(shí)現(xiàn)方式是使用行向量右乘矩陣,也即,C=Mbone*Mfather*Mgrandpar*...*Mroot。
即通過骨骼在世界空間上的變換矩陣可從骨骼空間變換到世界空間。那么該矩陣的逆矩陣(偏移矩陣)就可以將世界空間中的坐標(biāo)變換到某塊骨骼的骨骼空間。
在3dsMax中建立網(wǎng)格模型時(shí),網(wǎng)格模型空間和世界空間重合,換句話說,此時(shí)實(shí)際是以世界空間作為Mesh空間了。
在添加骨骼的時(shí)候,也是將骨骼放入世界空間中,并調(diào)整骨骼的相對(duì)位置使得和mesh相吻合,得到骨架的初始姿勢(shì)(按慣例網(wǎng)格模型要做成兩臂側(cè)平舉直立的T姿勢(shì),骨骼也要適合這個(gè)姿態(tài))。
由于在制作時(shí),骨架與mesh相吻合,則上述偏移矩陣可將網(wǎng)格模型頂點(diǎn)在世界空間中的坐標(biāo)變換到某塊骨骼的骨骼空間。
在動(dòng)畫關(guān)鍵幀中,可指示每一骨骼在該關(guān)鍵幀中相對(duì)于父骨骼坐標(biāo)系的變換矩陣?;蛘?,動(dòng)畫關(guān)鍵幀可記錄各關(guān)節(jié)相對(duì)于綁定姿勢(shì)的旋轉(zhuǎn),平移,縮放。
基于上述介紹,本發(fā)明實(shí)施例將以游戲應(yīng)用場景為例,對(duì)匹配實(shí)現(xiàn)方法進(jìn)行介紹。游戲中可能有各種各樣不同風(fēng)格的角色。這些角色體型差異巨大,衣著裝飾也各不相同。這些區(qū)別對(duì)avatar掛件提出了一個(gè)問題:如何能夠讓這些角色在穿戴相同的avatar掛件時(shí)能夠表現(xiàn)的合理,不會(huì)出現(xiàn)無法接受的顯示問題。
為解決該問題,請(qǐng)參見圖5a或圖5b。圖5a或圖5b示出了匹配實(shí)現(xiàn)方法的又一種示例性流程,圖5a或圖5b所示的方法可應(yīng)用骨骼動(dòng)畫場景中,由圖1所示的終端中的CPU和GPU交互完成。
其可包括:
501部分:CPU加載avatar掛件的模型數(shù)據(jù)。
更具體的,avatar掛件的模型數(shù)據(jù)可包括第一網(wǎng)格模型的網(wǎng)絡(luò)數(shù)據(jù)(包括頂點(diǎn)數(shù)據(jù))、第一虛擬骨架的骨骼信息。
網(wǎng)格模型中的每一網(wǎng)格一般為三角形或其他多邊形。
網(wǎng)格數(shù)據(jù)由頂點(diǎn)數(shù)據(jù)(頂點(diǎn)表)及索引數(shù)據(jù)組成,頂點(diǎn)表中的每一頂點(diǎn)除了帶有位置、法向量、材質(zhì)、紋理等信息外,還會(huì)指出有哪些骨骼影響了該頂點(diǎn),影響權(quán)重是多少。而通過索引數(shù)據(jù),可以確定每個(gè)多邊形由哪些頂點(diǎn)組成。
骨骼信息包括第一虛擬架中全部骨骼的數(shù)量和每一骨骼的具體信息。
502部分與301部分相類似,相關(guān)細(xì)節(jié)請(qǐng)參見301部分的介紹。在此不作贅述。
502部分:CPU獲取角色(即虛擬對(duì)象)的模型數(shù)據(jù)。
上述角色的模型數(shù)據(jù)可包括第二虛擬骨架的骨骼信息、第二網(wǎng)格模型的頂點(diǎn)數(shù)據(jù)以及虛擬掛件針對(duì)虛擬對(duì)象的掛接修正信息。
骨骼信息和頂點(diǎn)數(shù)據(jù)請(qǐng)參見501部分的描述,在此不作贅述。
對(duì)于掛接修正信息,其可以額外節(jié)點(diǎn)(掛接點(diǎn))的形式存在。
實(shí)際中,一個(gè)角色可掛接多個(gè)avatar掛件,每個(gè)avatar掛件可對(duì)應(yīng)一組掛接點(diǎn),任一組掛接點(diǎn)包括至少一個(gè)掛接點(diǎn)。
當(dāng)然,上述掛接點(diǎn)是不會(huì)顯示給玩家的。
一個(gè)掛接點(diǎn)會(huì)對(duì)應(yīng)(影響)avatar掛件的網(wǎng)格模型中的一部分頂點(diǎn)。
每個(gè)掛接點(diǎn)會(huì)聲明對(duì)應(yīng)哪個(gè)avatar掛件,例如,掛接點(diǎn)的名稱的前綴可表示該掛接點(diǎn)用于掛接什么avatar掛件。
一個(gè)掛接點(diǎn)綁定一根或多根骨骼。掛接點(diǎn)與其相綁定的骨骼之間存在父子關(guān)系,掛接點(diǎn)為子節(jié)點(diǎn)。類似于骨骼間的父子關(guān)系。
在動(dòng)畫中,骨骼會(huì)運(yùn)動(dòng),不管骨頭怎么運(yùn)動(dòng),掛接點(diǎn)相對(duì)骨頭的偏移、旋轉(zhuǎn)和縮放是不變的。
例如,請(qǐng)參見圖6a和圖6b。假定,網(wǎng)格模型上的某一頂點(diǎn)的位置為V,該頂點(diǎn)對(duì)應(yīng)掛接點(diǎn)A。圖6b示出了骨骼i旋轉(zhuǎn)了一個(gè)角度后,該頂點(diǎn)的位置由V變?yōu)榱薟。則掛接點(diǎn)A的坐標(biāo)也相應(yīng)得發(fā)生了變化。
在本實(shí)施例中,掛接點(diǎn)(掛接修正信息)可包括偏移值、旋轉(zhuǎn)角度和縮放比例。通常以4x4矩陣或者4x3/3x4矩陣保存上述偏移值、旋轉(zhuǎn)角度和縮放比例。
實(shí)際上,上述偏移值是掛接點(diǎn)相對(duì)于某一或某些骨骼的偏移值。
而由于一個(gè)掛接點(diǎn)與第一網(wǎng)格模型上的部分網(wǎng)格頂點(diǎn)相綁定,則上述偏移值也可視為該部分網(wǎng)格頂點(diǎn)相對(duì)于第一虛擬骨架中的骨骼的偏移值。
舉例來講,掛接點(diǎn)A與網(wǎng)格頂點(diǎn)0-100相綁定,同時(shí),掛接點(diǎn)A與骨骼1相綁定。則上述偏移值可視為網(wǎng)格頂點(diǎn)0-100相對(duì)于骨骼1的偏移值。
同理,上述旋轉(zhuǎn)角度是掛接點(diǎn)相對(duì)于第一虛擬骨架中某一或某些骨骼的旋轉(zhuǎn)角度。也可視為第一網(wǎng)格模型的部分網(wǎng)格頂點(diǎn)相對(duì)于第一虛擬骨架中的某一或某些骨骼的旋轉(zhuǎn)角度。
上述第一網(wǎng)格模型的縮放比例是是掛接點(diǎn)相對(duì)于部件原始尺寸的縮放比例。也可視為第一網(wǎng)格模型的網(wǎng)格頂點(diǎn)相對(duì)于部件原始尺寸的縮放比例。
此外,上述掛接點(diǎn)(掛接修正信息)還可包括約束信息。
約束信息作為部件掛載的額外參數(shù),可根據(jù)實(shí)際應(yīng)用情況不同保存不同的信息。
比如應(yīng)用于游戲中角色裝備系統(tǒng)時(shí),約束信息可包括幅度約束信息,幅度約束信息可用于保存掛接點(diǎn)的可接受偏移范圍,這樣玩家在穿戴部件時(shí),可以小幅度調(diào)整(可上下左右調(diào)整)部件的偏移位置。
再比如對(duì)于一個(gè)彈性跟隨的掛接部件,約束信息可包括彈性約束信息,這些彈性約束信息將幫助計(jì)算部件的位置,而不會(huì)以剛性方式跟隨主體移動(dòng)。
503部分:CPU計(jì)算第二虛擬骨架在下一關(guān)鍵幀(或稱為當(dāng)前幀)對(duì)應(yīng)的變換矩陣集合。
前已述及,在動(dòng)畫關(guān)鍵幀中,可指示每一骨骼在該關(guān)鍵幀中相對(duì)于父骨骼坐標(biāo)系的變換矩陣。或者,動(dòng)畫關(guān)鍵幀可記錄各關(guān)節(jié)相對(duì)于綁定姿勢(shì)(前述提及的T姿勢(shì))下各關(guān)節(jié)狀態(tài)的旋轉(zhuǎn),平移,縮放。
則根據(jù)動(dòng)畫關(guān)鍵幀中的信息,可計(jì)算得到第二虛擬骨架中每一塊骨骼對(duì)應(yīng)的在世界空間上的變換矩陣,這些變換矩陣的集合即為上述的變換矩陣集合。
為方便起見,使用matrix[i]來表示當(dāng)前幀第二虛擬骨架中第i塊骨骼對(duì)應(yīng)的在世界空間上或原始模型空間的變換矩陣。第二虛擬骨架所包含的各骨骼的狀態(tài)可由所有骨骼的變換矩陣的集合(變換矩陣集合)來表征。
504部分:根據(jù)掛接修正信息(掛接點(diǎn))計(jì)算得到上述第一虛擬骨架在下一關(guān)鍵幀(當(dāng)前幀)對(duì)應(yīng)的修正變換矩陣集合。
更具體的,在本部分中,由于第一虛擬骨架是第二虛擬骨架的一部分,則可從第二虛擬骨架在下一關(guān)鍵幀對(duì)應(yīng)的變換矩陣集合中,提取出第一虛擬骨架在下一關(guān)鍵幀對(duì)應(yīng)的變換矩陣集合。
實(shí)際上,前已述及,掛接點(diǎn)與綁定的骨骼是父子關(guān)系。則掛接點(diǎn)可繼承父節(jié)點(diǎn)的在世界空間上的變換矩陣,然后再乘以包含掛接點(diǎn)的偏移值、旋轉(zhuǎn)角度和縮放比例的矩陣后,可得到掛接點(diǎn)對(duì)應(yīng)的變換矩陣(或稱為修正變換矩陣)。
同時(shí),由于一個(gè)掛接點(diǎn)與一個(gè)或多個(gè)虛擬掛件的網(wǎng)格頂點(diǎn)相綁定。一個(gè)虛擬掛件對(duì)應(yīng)一組掛接點(diǎn),則該組掛接點(diǎn)的修正變換矩陣的集合,就是第一虛擬骨架在下一關(guān)鍵幀(當(dāng)前幀)對(duì)應(yīng)的修正變換矩陣集合。
為方便起見,使用matrix[j]來表示當(dāng)前幀第一虛擬骨架的第j塊骨骼對(duì)應(yīng)的在世界空間上的變換矩陣。
則可使用matrix[j]′來表示當(dāng)前幀第一虛擬骨架的第j塊骨骼對(duì)應(yīng)的在世界空間上的修正變換矩陣。若matrix[j]relative表示當(dāng)前幀修正點(diǎn)相對(duì)第一虛擬骨架第j塊骨骼的變換矩陣,則matrix[j]′=matrix[j]relative*matrix[j]。
505部分:CPU將角色及avatar掛件的渲染相關(guān)數(shù)據(jù)傳給GPU。
更具體的,上述渲染相關(guān)數(shù)據(jù)可包括角色及avatar掛件的頂點(diǎn)數(shù)據(jù)、matrix[i]、matrix[j]′,第一網(wǎng)格模型的頂點(diǎn)紋理數(shù)據(jù)、第二網(wǎng)格模型的頂點(diǎn)紋理數(shù)據(jù)。
在實(shí)際運(yùn)行中,可分批次傳送上述數(shù)據(jù)。
例如,可先傳送角色的頂點(diǎn)數(shù)據(jù)、matrix[i]、第二網(wǎng)格模型的頂點(diǎn)紋理數(shù)據(jù),再傳送avatar掛件的頂點(diǎn)數(shù)據(jù)、matrix[j]′、第一網(wǎng)格模型的頂點(diǎn)紋理數(shù)據(jù)。
需要說明的是,每次在準(zhǔn)備數(shù)據(jù)并通知GPU渲染的過程稱為一次Draw Call。
一般情況下,渲染一次擁有一個(gè)網(wǎng)格并攜帶一種材質(zhì)的物體便會(huì)使用一次Draw Call。
506部分:根據(jù)第二虛擬骨架在上一關(guān)鍵幀和下一關(guān)鍵幀(當(dāng)前幀)中各自對(duì)應(yīng)的變換矩陣集合,插值得到當(dāng)前時(shí)間下第二虛擬骨架的變換矩陣集合。
如果單純播放關(guān)鍵幀可能會(huì)出現(xiàn)動(dòng)作不平滑的問題,解決方法是幀間平滑插值:
假設(shè)一個(gè)動(dòng)畫有10s,每個(gè)整數(shù)秒處都設(shè)有一個(gè)關(guān)鍵幀,那么整數(shù)秒之間的骨架狀態(tài)就通過幀間插值獲得。
插值的基本思想是:給定一個(gè)時(shí)間t,找出t處在哪兩個(gè)關(guān)鍵幀之間,假設(shè)為p和q,然后根據(jù)p,q記錄的關(guān)節(jié)狀態(tài)(或骨骼狀態(tài))和時(shí)間t,計(jì)算出骨骼在t時(shí)間的狀態(tài)。
插值方法有很多,如線性插值,hermite(埃爾米特)插值,還有球面插值。
可對(duì)平移選擇hermite插值,對(duì)旋轉(zhuǎn)采用四元數(shù)球面插值。
前述提及,matrix[i]表示當(dāng)前幀第i塊骨骼對(duì)應(yīng)的在世界空間上的變換矩陣,matrix[i]中包括平移、旋轉(zhuǎn)、縮放。
為稱呼方便,可使用matrix[i]t表示當(dāng)前時(shí)間t第i塊骨骼對(duì)應(yīng)的在世界空間上的變換矩陣。
507部分:根據(jù)第一虛擬骨架在上一關(guān)鍵幀和下一關(guān)鍵幀(當(dāng)前幀)中各自對(duì)應(yīng)的修正變換矩陣集合,插值得到當(dāng)前時(shí)間下上述第一虛擬骨架對(duì)應(yīng)的修正變換矩陣集合。
507部分與506部分相類似,在此不作贅述。
為稱呼方便,可使用matrix[j]′t表示當(dāng)前時(shí)間骨骼j對(duì)應(yīng)的在世界空間上的變換矩陣。
508部分:根據(jù)當(dāng)前時(shí)間下第二虛擬骨架的變換矩陣集合,計(jì)算第二網(wǎng)格模型中各網(wǎng)格頂點(diǎn)在當(dāng)前時(shí)間下的坐標(biāo)值。
對(duì)于第二網(wǎng)格模型中的某一網(wǎng)格頂點(diǎn)s,可通過如下方式計(jì)算其坐標(biāo)值:
首先,找到影響頂點(diǎn)s的所有骨骼,可使用bones表示影響頂點(diǎn)s的所有骨骼的個(gè)數(shù)。
然后計(jì)算頂點(diǎn)s在各骨骼獨(dú)立作用下的新位置。則共有bones個(gè)新位置。
最后,將所有新位置按照骨骼對(duì)頂點(diǎn)s的權(quán)重進(jìn)行加權(quán)求和。注意,所有權(quán)重的和應(yīng)為1。
可使用經(jīng)典骨骼動(dòng)畫計(jì)算公式計(jì)算頂點(diǎn)s的坐標(biāo)值。公式如下:
其中,v′表示頂點(diǎn)s在當(dāng)前時(shí)間t下的位置。vbindpose表示頂點(diǎn)s的初始位置;
weight(p)表示頂點(diǎn)s對(duì)于第p根骨骼的權(quán)重;
matrix[p]t表示當(dāng)前時(shí)間第p根骨骼對(duì)應(yīng)的在世界空間上的變換矩陣。
表示頂點(diǎn)s相對(duì)于第p根骨骼的空間的偏移矩陣,右乘目的是將頂點(diǎn)的變換信息矩陣映射至第p根骨骼的空間下。
509部分:根據(jù)上述修正變換矩陣集合,計(jì)算第一網(wǎng)格模型中各網(wǎng)格頂點(diǎn)在當(dāng)前時(shí)間下的坐標(biāo)值。
與508相類似,對(duì)于第一網(wǎng)格模型中的某一網(wǎng)格頂點(diǎn)R,可通過如下方式計(jì)算其坐標(biāo)值:
首先,找到影響頂點(diǎn)R的所有骨骼,可使用bones1表示影響頂點(diǎn)R的所有骨骼的個(gè)數(shù)。
然后計(jì)算頂點(diǎn)R在各骨骼獨(dú)立作用下的新位置。最后,將所有新位置按照骨骼對(duì)頂點(diǎn)R的權(quán)重進(jìn)行加權(quán)求和。注意,所有權(quán)重的和應(yīng)為1。
可使用經(jīng)典骨骼動(dòng)畫計(jì)算公式計(jì)算頂點(diǎn)R的坐標(biāo)值。公式如下:
其中,w′表示頂點(diǎn)R在當(dāng)前時(shí)間t下的位置。wbindpose表示頂點(diǎn)R的初始位置;
weight(q)表示頂點(diǎn)R對(duì)于第q根骨骼的權(quán)重;
matrix[q]′t表示當(dāng)前時(shí)間第q根骨骼對(duì)應(yīng)的在世界空間上的修正變換矩陣。
表示頂點(diǎn)R相對(duì)于第q根骨骼的空間的偏移矩陣,右乘目的是將頂點(diǎn)的變換信息矩陣映射至第q根骨骼的空間下。
510部分:根據(jù)第二網(wǎng)格模型中各網(wǎng)格頂點(diǎn)在當(dāng)前時(shí)間下的坐標(biāo)值及紋理數(shù)據(jù),對(duì)第二網(wǎng)格模型中各網(wǎng)格頂點(diǎn)進(jìn)行渲染。
511部分:根據(jù)第一網(wǎng)格模型中各網(wǎng)格頂點(diǎn)在當(dāng)前時(shí)間下的坐標(biāo)值及紋理數(shù)據(jù),對(duì)第一網(wǎng)格模型中各網(wǎng)格頂點(diǎn)進(jìn)行渲染。
此外需要指出的是,在現(xiàn)有方式中,Avatar掛件通常按照運(yùn)用方式大致分為2類:單純以掛點(diǎn)方式跟隨角色移動(dòng)旋轉(zhuǎn);跟隨角色骨骼進(jìn)行蒙皮計(jì)算的。
對(duì)于第一類avatar掛件,通常將其作為獨(dú)立物件,在運(yùn)行時(shí)掛接到人物角色特定骨骼下以父子關(guān)系進(jìn)行剛體計(jì)算。
由于純掛點(diǎn)方式的avatar掛件為獨(dú)立物件,不存在avatar掛件與角色體型的沖突(即胖矮、高瘦)。但由于只能掛接在同一位置,受到原始角色形象設(shè)計(jì)的約束,角色A可以接受的視覺效果,在角色B身上可能因?yàn)樵玖艨盏奈恢枚嗔艘恍╊~外的模型而不適用。
對(duì)于第二類avatar掛件,一般的做法是將角色劃分為多個(gè)部分,然后在運(yùn)行時(shí)根據(jù)游戲配置或者玩家選擇替換合并到原有角色的基礎(chǔ)網(wǎng)格模型上,組合成完整的一個(gè)模型參與骨骼蒙皮計(jì)算。
這一類的部件由于在運(yùn)行時(shí)需要與其他部件及基本網(wǎng)格模型進(jìn)行合并,在制作時(shí)部件模型的權(quán)重,空間位置都相對(duì)有一定要求,同時(shí)部件紋理也需要在制作時(shí)遵循一定規(guī)則以保證在運(yùn)行時(shí)紋理的合并可以快速正確的完成。
除此之外,和純掛點(diǎn)方式相同,參與角色骨骼進(jìn)行蒙皮計(jì)算的avatar部件也無法解決原始模型下額外模型數(shù)據(jù)對(duì)部件造成的遮擋影響。
而本發(fā)明實(shí)施例中,利用掛接信息,可以指定同樣的虛擬掛件根據(jù)角色的不同而掛在不同的位置,除了可以解決角色形象對(duì)部件的遮擋影響外,也可以達(dá)到將部件搭配到最適合該角色形象的這一目的。
圖7示出了現(xiàn)有骨骼蒙皮方式。
通過相比可知,采用本方案后,CPU端需要額外計(jì)算avatar掛件當(dāng)前幀的修正變換矩陣集合,再傳入GPU交由GPU計(jì)算應(yīng)用,但是相對(duì)的,對(duì)角色模型數(shù)據(jù)的預(yù)處理(模型合并/紋理合并)則不再需要。
對(duì)比可以發(fā)現(xiàn),本方案主要集中在CPU端,對(duì)GPU端的改動(dòng)基本沒有,同時(shí)在CPU端每幀也只需少量的額外計(jì)算即可。
本技術(shù)方案在保證了數(shù)據(jù)制作簡單方便的同時(shí),解決了avatar掛件在運(yùn)用于不同體型,原始形象差異化嚴(yán)重的各種角色上可能產(chǎn)生的視覺效果表現(xiàn)問題。除此之外還具有對(duì)Havok Cloth等第三方中間件良好的集成兼容性。對(duì)制作各種avatar部件具有極大幫助。讓玩家可以藉由該方案實(shí)現(xiàn)的功能隨意搭配各種風(fēng)格的角色形象,增加了游戲的趣味性。
圖8示出了匹配實(shí)現(xiàn)裝置的一種可能的結(jié)構(gòu)示意圖,包括:
獲取單元801,用于獲取虛擬掛件針對(duì)虛擬對(duì)象的掛接修正信息;
其中,虛擬掛件獨(dú)立于虛擬對(duì)象;掛接修正信息用于適配虛擬掛件與虛擬對(duì)象。
確定單元802,用于確定上述虛擬對(duì)象的形態(tài);
調(diào)整單元803,用于根據(jù)上述虛擬對(duì)象的形態(tài)及上述掛接修正信息,調(diào)整該虛擬掛件的形態(tài);
顯示單元804,用于將調(diào)整形態(tài)后的掛件,裝備在上述虛擬對(duì)象上。
其中,獲取單元801可用于執(zhí)行圖2所示實(shí)施例的201部分,圖3所示實(shí)施例的301-302部分,以及,圖5a和圖5b所示實(shí)施例的501-502部分。
確定單元802可用于執(zhí)行圖2所示實(shí)施例的202部分,圖3所示實(shí)施例的303部分,以及,圖5a和圖5b所示實(shí)施例的503、505部分(也可由調(diào)整單元803執(zhí)行505部分)、506部分、508部分。
調(diào)整單元803可用于執(zhí)行圖2所示實(shí)施例的203部分,圖3所示實(shí)施例的304部分,圖5a和圖5b所示實(shí)施例的504部分、507部分、509部分。
顯示單元804可用于執(zhí)行圖2所示實(shí)施例的204部分,圖3所示實(shí)施例的305部分,圖5a和圖5b所示實(shí)施例的510-511部分。
本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡單,之處參見方法部分說明即可。
專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、WD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。