專利名稱:一種基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種虛擬角色的驅(qū)動方法,特別地,涉及一種基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法。
背景技術(shù):
虛擬角色動畫的生成是一個熱點(diǎn)問題,它廣泛應(yīng)用于虛擬現(xiàn)實(shí)和游戲等領(lǐng)域中。三維虛擬角色動畫的生成方法通常有兩種一種是頂點(diǎn)動畫,一種是骨骼動畫。頂點(diǎn)動畫方法直接在虛擬角色模型的基礎(chǔ)上做變形,即直接改變虛擬角色皮膚頂點(diǎn)在每一幀中的位置來達(dá)到動畫的效果。這種方法直觀簡單,但如果要對物體進(jìn)行某種整體變形或者模型中需移動的頂點(diǎn)非常多時,該方法就顯得相當(dāng)費(fèi)時和繁瑣。
與頂點(diǎn)動畫相比,近年來,骨骼動畫更為流行,骨骼動畫又稱為關(guān)節(jié)動畫。這種動畫生成方法分別定義了骨架和皮膚,骨架由一系列骨骼按照特定的拓?fù)潢P(guān)系聯(lián)結(jié)而成,而包裹這些骨骼的“皮膚”則是一個頂點(diǎn)網(wǎng),每個頂點(diǎn)的位置受到一個或多個骨骼運(yùn)動的影響而變化。因此,骨骼動畫生成方法首先通過驅(qū)動骨架而運(yùn)動,被定義為皮膚的頂點(diǎn)的運(yùn)動則以數(shù)學(xué)公式的方式生成,最后通過逐幀渲染形成動畫。為了下面說明的方便,首先對骨骼系統(tǒng)進(jìn)行描述。骨骼系統(tǒng)的拓?fù)浣Y(jié)構(gòu)可以看成是由一系列鏈桿通過關(guān)節(jié)順次相連的開式運(yùn)動鏈,在骨骼系統(tǒng)中,定義了虛擬角色的骨骼數(shù)目、每個骨骼的長度、骨骼與骨骼之間的相互關(guān)系等。結(jié)合圖1,對骨骼系統(tǒng)的基本組成進(jìn)行說明。在一個虛擬角色的骨骼系統(tǒng)中,對骨骼系統(tǒng)做如下定義。
1)在每一個骨骼上定義一個與之固連的坐標(biāo)系Fi,該坐標(biāo)系稱為該骨骼的局部坐標(biāo)系。兩個骨骼連接時自動形成關(guān)節(jié),骨骼間的連接關(guān)系不能構(gòu)成環(huán)。
2)存在且僅存在一個關(guān)節(jié)稱為根節(jié)點(diǎn)1,對于和關(guān)節(jié)2相連的兩個骨骼3和4,離根節(jié)點(diǎn)近的骨骼3稱為關(guān)節(jié)2的父骨骼,另一個骨骼4稱為關(guān)節(jié)2的子骨骼。對于和骨骼5相連的兩個關(guān)節(jié)6和7,離根節(jié)點(diǎn)近的關(guān)節(jié)6稱為骨骼5的父關(guān)節(jié),離根節(jié)點(diǎn)遠(yuǎn)的關(guān)節(jié)7稱為骨骼5的子關(guān)節(jié)。在骨骼5的局部坐標(biāo)系下,子關(guān)節(jié)7到父關(guān)節(jié)6的平移記為{Xi,Yi,Zi}。
3)任何一個關(guān)節(jié)(骨骼)最多有一個父關(guān)節(jié)(父骨骼),任何一個關(guān)節(jié)(骨骼)可以有多個或沒有子關(guān)節(jié)(子骨骼)。
4)根節(jié)點(diǎn)除了定義其相對于世界坐標(biāo)系的旋轉(zhuǎn)外,還定義了其相對于世界坐標(biāo)系的平移。
由于關(guān)節(jié)是兩個骨骼連接時自動形成的,因此,只要保存了骨骼的信息和骨骼間的連接關(guān)系,就蘊(yùn)含了對關(guān)節(jié)的定義。在實(shí)際應(yīng)用中,為了表示上的統(tǒng)一,需要定義一個虛骨骼,稱為“根骨骼”。這個骨骼沒有長度,可視為一個點(diǎn),其功能和意義與根節(jié)點(diǎn)相同。
在利用基于骨骼的動畫生成方法,實(shí)現(xiàn)虛擬人動畫生成時,人們通常定義一個標(biāo)準(zhǔn)的虛擬人骨架模板,虛擬人骨架模板是一個固定的虛擬人骨骼系統(tǒng)。
在現(xiàn)有技術(shù)中,虛擬角色的骨骼系統(tǒng)是固定的,即一個虛擬角色在不同的應(yīng)用場合有固定的骨骼系統(tǒng),利用固定的骨骼系統(tǒng)實(shí)現(xiàn)動畫生成的方式雖然簡化了虛擬角色的驅(qū)動過程,但卻有很大的局限性。
首先,在不同的情況下,對虛擬人骨骼系統(tǒng)的要求可能是不同的。以虛擬人手掌部位的骨骼為例,從較遠(yuǎn)的地方觀察虛擬人手掌時,只需要用一根骨骼便可代替整個手掌;而如果需要表現(xiàn)“拿取”東西這一動作時,則需要19根骨骼。因此,對一個虛擬角色,如果只用一個固定的骨骼系統(tǒng)并不能滿足所有情況。
其次,在固定模版方法中,由于骨骼系統(tǒng)中各個骨骼間的拓?fù)潢P(guān)系是固定的,因此固定模板法也不能驅(qū)動其它類型的虛擬角色,如動物等。
另外,在固定模板方法中,一個虛擬角色通常保存了自己的骨骼系統(tǒng)和皮膚信息,這樣每個角色可有獨(dú)立的模型。然而,在大規(guī)模虛擬環(huán)境中,如部隊(duì)的演練,骨骼系統(tǒng)或皮膚紋理信息通常是相同的,這樣就會導(dǎo)致信息的冗余,消耗大量的內(nèi)存空間。
最后,虛擬角色在磁盤中的存儲缺乏統(tǒng)一、完善的格式。當(dāng)前的一些存儲格式不能滿足對任意拓?fù)浣Y(jié)構(gòu)的骨骼系統(tǒng)、多虛擬角色共存的存儲要求。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,實(shí)現(xiàn)對虛擬角色的驅(qū)動。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,包括1)獲取虛擬角色的相關(guān)信息,所述的虛擬角色的相關(guān)信息分為骨骼系統(tǒng)信息、皮膚紋理信息和運(yùn)動數(shù)據(jù);2)定義虛擬角色相關(guān)信息的磁盤存儲格式,磁盤文件對相同的骨骼系統(tǒng)、皮膚紋理信息、運(yùn)動數(shù)據(jù)只保存一次,骨骼系統(tǒng)、皮膚紋理信息和運(yùn)動數(shù)據(jù)適用于任意拓?fù)浣Y(jié)構(gòu)的虛擬角色以及任意數(shù)目的虛擬角色;3)根據(jù)實(shí)際需求,確定具體的虛擬角色;4)根據(jù)角色,裝載相應(yīng)的骨骼系統(tǒng);5)根據(jù)角色,裝載皮膚紋理信息,裝載時,根據(jù)皮膚紋理中各個模塊的名稱建立到骨骼系統(tǒng)中骨骼的映射關(guān)系;6)裝載運(yùn)動數(shù)據(jù),在運(yùn)動數(shù)據(jù)裝載前,判斷運(yùn)動數(shù)據(jù)中自由度的維數(shù)與骨骼系統(tǒng)中的維數(shù)是否相同,如果不同則運(yùn)動數(shù)據(jù)無法驅(qū)動骨骼系統(tǒng),需要重新選定運(yùn)動數(shù)據(jù)進(jìn)行裝載或退出虛擬角色驅(qū)動的過程;7)從運(yùn)動數(shù)據(jù)中提取某一時刻的姿態(tài),若在運(yùn)動數(shù)據(jù)中無法找到指定時刻的姿態(tài),則通過對相鄰時刻的姿態(tài)做插值得到指定時刻的姿態(tài);8)正向運(yùn)動學(xué)計(jì)算,計(jì)算每個骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣;9)利用步驟8)得到的骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣,重新計(jì)算皮膚頂點(diǎn)坐標(biāo);10)渲染,根據(jù)步驟9)得到的重新計(jì)算的皮膚頂點(diǎn)坐標(biāo)和三角面片列表繪制虛擬角色。
上述技術(shù)方案中,在所述的步驟2)中,一個磁盤存儲文件由文件頭、骨骼系統(tǒng)、皮膚紋理信息單元、虛擬角色信息單元組成;在一個骨骼系統(tǒng)中,骨骼系統(tǒng)由骨骼系統(tǒng)名稱和骨骼列表組成,在骨骼列表中包含有骨骼系統(tǒng)的各個骨骼的信息,一個骨骼需要保存的信息有骨骼名稱、骨骼索引號、父關(guān)節(jié)的索引號、靜態(tài)變換矩陣、骨骼質(zhì)量、質(zhì)心坐標(biāo)及關(guān)節(jié)活動范圍;一個皮膚紋理信息單元由頂點(diǎn)列表、三角面片列表、紋理坐標(biāo)列表、法向量列表、部位信息列表組成,其中的部位信息列表中有多個部位信息單元,一個部位信息單元包括名稱、頂點(diǎn)索引列表、影響權(quán)重列表;一個虛擬角色單元由虛擬角色基本信息、骨骼系統(tǒng)索引、皮膚紋理索引和運(yùn)動數(shù)據(jù)組成;運(yùn)動數(shù)據(jù)中的每一幀姿態(tài)由該幀的時刻、根節(jié)點(diǎn)的位移以及各個骨骼局部坐標(biāo)系相對于其父骨骼局部坐標(biāo)系的旋轉(zhuǎn)組成。
上述技術(shù)方案中,所述的虛擬角色的骨骼系統(tǒng)、皮膚紋理信息和運(yùn)動數(shù)據(jù)在內(nèi)存組織上采用共用的方式,一種骨骼系統(tǒng)或皮膚紋理信息可以為不同的虛擬角色所用,而一個虛擬角色在不同的場合也可以采用不同的骨骼系統(tǒng)或皮膚紋理信息。
上述技術(shù)方案中,在所述的步驟4)中,裝載骨骼系統(tǒng)的具體實(shí)現(xiàn)包括4-1、所裝載的骨骼系統(tǒng)的拓?fù)浣Y(jié)構(gòu)是一個多叉樹,對多叉樹做深度優(yōu)先遍歷,重新排列骨骼間的順序;4-2、計(jì)算初始姿態(tài)下骨骼局部坐標(biāo)系相對于全局坐標(biāo)系的變換矩陣。
上述技術(shù)方案中,在所述的步驟8)中,正向運(yùn)動學(xué)計(jì)算包括8-1、將某一時刻的姿態(tài)下各個骨骼局部坐標(biāo)系相對于父骨骼局部坐標(biāo)系的旋轉(zhuǎn)轉(zhuǎn)換為變換矩陣;8-2、根據(jù)步驟8-1所得到的變換矩陣和磁盤存儲文件中所包含的靜態(tài)變換矩陣,計(jì)算骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣。
上述技術(shù)方案中,在所述的步驟9)中,所述的皮膚頂點(diǎn)坐標(biāo)的計(jì)算公式為p′=TjW·(TjW0)-1·p,]]>其中,p為骨骼皮膚上的一個頂點(diǎn)的坐標(biāo),p′為皮膚頂點(diǎn)在骨骼運(yùn)動情況下的新坐標(biāo),0TjW為步驟4-2所得到的初始姿態(tài)下骨骼局部坐標(biāo)系相對于全局坐標(biāo)系的變換矩陣,TjW為步驟8-2所得到的骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣。
在步驟4-1中,所述的骨骼順序?yàn)楦趋琅旁谧钋懊?,任意一個骨骼都排在其所有的子骨骼之前。
本發(fā)明的優(yōu)點(diǎn)在于1、本發(fā)明方法對虛擬角色按照骨骼系統(tǒng)、皮膚紋理信息和運(yùn)動數(shù)據(jù)做邏輯劃分,分別存儲,實(shí)現(xiàn)了對任意拓?fù)浣Y(jié)構(gòu)、任意數(shù)目虛擬角色的驅(qū)動。
2、本發(fā)明方法采用共用數(shù)據(jù)結(jié)構(gòu)的機(jī)制,減少在磁盤和內(nèi)存中的空間占用。
3、本發(fā)明方法采用四元數(shù)表示旋轉(zhuǎn)矩陣,提高了計(jì)算效率,節(jié)省了存儲空間。
4、本發(fā)明方法采用非遞歸的方式來計(jì)算正向運(yùn)動學(xué),提高驅(qū)動時的計(jì)算效率。
5、本發(fā)明方法采用四元數(shù)插值可以獲取運(yùn)動片段中任意時刻的姿態(tài),從而實(shí)現(xiàn)任意速度的驅(qū)動。
圖1為一個簡單的骨骼系統(tǒng)的示意圖;圖2為在本發(fā)明方法中對虛擬角色的邏輯劃分;圖3為本發(fā)明方法中磁盤文件的組織格式;圖4為本發(fā)明方法中虛擬角色在內(nèi)存中的組織方式;圖5為本發(fā)明方法的流程圖。
圖面說明1 根節(jié)點(diǎn) 2 關(guān)節(jié) 3 骨骼 4 骨骼 5 骨骼6 關(guān)節(jié)7 關(guān)節(jié)具體實(shí)施方式
下面參照附圖和具體實(shí)施方式
對本發(fā)明做詳細(xì)說明。
本發(fā)明的基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法包括以下步驟步驟10、獲取虛擬角色的相關(guān)信息。虛擬角色從邏輯上可以劃分為三個部分,如圖2所示,分別為骨骼系統(tǒng)、皮膚紋理信息和運(yùn)動數(shù)據(jù)。骨骼系統(tǒng)是一種靜態(tài)信息,它決定了虛擬角色的形狀、大小等基本特點(diǎn),對骨骼系統(tǒng)賦予不同的運(yùn)動數(shù)據(jù)可驅(qū)動骨骼實(shí)現(xiàn)不同的運(yùn)動姿態(tài),而骨骼的運(yùn)動會改變皮膚紋理信息,將骨骼系統(tǒng)、皮膚紋理信息、運(yùn)動數(shù)據(jù)相結(jié)合可實(shí)現(xiàn)對虛擬角色的驅(qū)動。要實(shí)現(xiàn)虛擬角色的驅(qū)動,首先就要有上述的虛擬角色的相關(guān)信息。這些信息可通過對相關(guān)文件做格式轉(zhuǎn)換得到。
步驟20、定義虛擬角色相關(guān)信息的磁盤存儲格式?;诂F(xiàn)有技術(shù)中對虛擬角色相關(guān)信息采取了獨(dú)立存儲的方式,不同虛擬角色中的相同信息反復(fù)存儲,浪費(fèi)存儲空間的缺點(diǎn),本發(fā)明方法中對虛擬角色相關(guān)信息在磁盤上的存儲格式做了新的定義,即將虛擬角色劃分為骨骼系統(tǒng)、皮膚紋理信息和運(yùn)動數(shù)據(jù)。對相同的骨骼系統(tǒng)、皮膚紋理信息、運(yùn)動數(shù)據(jù)只保存一次,一個骨骼系統(tǒng)或皮膚信息適用于任意拓?fù)浣Y(jié)構(gòu)的虛擬角色以及任意數(shù)目的虛擬角色。如圖3所示,為保存在磁盤上的文件的組織格式,一個文件由一個文件頭、多個骨骼系統(tǒng)、多個皮膚紋理信息單元、多個虛擬角色信息單元組成。此處所述的多個的具體數(shù)值根據(jù)實(shí)際應(yīng)用的情況而設(shè)定。在一個骨骼系統(tǒng)中,骨骼系統(tǒng)由骨骼系統(tǒng)名稱和骨骼列表組成,在骨骼列表中包含有骨骼系統(tǒng)的各個骨骼的信息。一個骨骼需要保存的信息有骨骼名稱、骨骼索引號、父關(guān)節(jié)的索引號、靜態(tài)變換矩陣、骨骼質(zhì)量、質(zhì)心坐標(biāo)及關(guān)節(jié)活動范圍。一個皮膚紋理信息單元由頂點(diǎn)列表、三角面片列表、紋理坐標(biāo)列表、法向量列表、部位信息列表組成,其中的部位信息列表中有多個部位信息單元,一個部位信息單元由名稱、頂點(diǎn)索引列表、影響權(quán)重列表組成。一個虛擬角色單元由虛擬角色基本信息、骨骼系統(tǒng)索引、皮膚紋理索引和運(yùn)動數(shù)據(jù)組成;運(yùn)動數(shù)據(jù)中的每一幀姿態(tài)由該幀的時刻、根節(jié)點(diǎn)的位移以及各個骨骼局部坐標(biāo)系相對于其父骨骼局部坐標(biāo)系的旋轉(zhuǎn)組成。在運(yùn)動數(shù)據(jù)中,旋轉(zhuǎn)用單位四元數(shù)表示。
步驟30、確定具體的虛擬角色。在虛擬角色相關(guān)信息的存儲文件中,存儲有多種的骨骼系統(tǒng)、皮膚紋理信息和運(yùn)動數(shù)據(jù),對于一個具體的應(yīng)用場合,只需要選用其中的骨骼系統(tǒng)、部分皮膚紋理信息和部分運(yùn)動數(shù)據(jù),因此在對虛擬角色做驅(qū)動前,要根據(jù)虛擬角色的應(yīng)用場合確定具體的虛擬角色,以方便在后續(xù)操作中確定骨骼系統(tǒng)、皮膚紋理信息、運(yùn)動數(shù)據(jù)的選取。在本發(fā)明中,虛擬角色的骨骼系統(tǒng)、皮膚紋理信息和運(yùn)動數(shù)據(jù)在內(nèi)存組織上采用共用的方式,即一種骨骼系統(tǒng)可以為不同的虛擬角色所用,而一個虛擬角色在不同的場合也可以采用不同的骨骼系統(tǒng)。對于皮膚紋理信息和運(yùn)動數(shù)據(jù)也同樣如此。這種內(nèi)存組織方式有效地節(jié)省了內(nèi)存空間的開支,適合大規(guī)模虛擬環(huán)境中多虛擬角色驅(qū)動的需要。如圖4所示,為虛擬角色在內(nèi)存中的組織方式,一個虛擬角色通過指針指向其骨骼系統(tǒng)、皮膚紋理和運(yùn)動數(shù)據(jù)。一個骨骼系統(tǒng)或皮膚紋理信息可以同時被多個虛擬角色共用。例如,虛擬角色2通過指針指向骨骼系統(tǒng)1、皮膚系統(tǒng)1和運(yùn)動片段2,將上述骨骼系統(tǒng)、皮膚系統(tǒng)和運(yùn)動片段組合可實(shí)現(xiàn)對虛擬角色2的驅(qū)動。而骨骼系統(tǒng)1可同時被虛擬角色1和虛擬角色2共用。從圖4中還可以看到,虛擬角色還可以只包括骨骼系統(tǒng)與運(yùn)動數(shù)據(jù),不含有皮膚紋理信息。此時,對虛擬角色的驅(qū)動就只是對骨骼系統(tǒng)的驅(qū)動。
步驟40、裝載骨骼系統(tǒng)。根據(jù)步驟30所確定的虛擬角色從磁盤文件中選取骨骼系統(tǒng),裝載該骨骼系統(tǒng),所選取的骨骼系統(tǒng)的拓?fù)浣Y(jié)構(gòu)是一個多叉樹,對該多叉樹做如下處理。
步驟41、對多叉樹做深度優(yōu)先遍歷,重新排列骨骼間的順序,骨骼重新排序后,設(shè)排序后的骨骼順序?yàn)長1,L2,L3,...Ln,則排序后的骨骼滿足如下兩個條件(1)L1為根骨骼;(2)若Li(1<i≤n)的父骨骼為Lj,則j<i
步驟42、計(jì)算初始姿態(tài)下骨骼局部坐標(biāo)系相對于全局坐標(biāo)系的變換矩陣0TjW(左上角坐標(biāo)表示初始狀態(tài)),如果一骨骼沒有父骨骼,則TjW0=TjP·Mj,]]>其中TjP是骨骼的局部坐標(biāo)系相對父骨骼局部坐標(biāo)系的靜態(tài)變換矩陣,該靜態(tài)變換矩陣可從磁盤文件中直接得到;如果一骨骼有父骨骼,則TjW0=TjP·Mj·TiW0,]]>其中,i為骨骼j的父關(guān)節(jié)的序號。由于步驟41中通過對多叉樹做深度優(yōu)先遍歷,重新排列了骨髂順序,因此計(jì)算0TjW之前,其父骨骼的齊次矩陣0TiW已經(jīng)更新過,只需按順序逐一對每一個骨骼計(jì)算即可。在初始姿態(tài)下,Mj均為單位矩陣。
步驟50、裝載皮膚紋理信息。根據(jù)步驟30所確定的虛擬角色從磁盤文件中按需求選取皮膚紋理信息并裝載,在裝載過程中,根據(jù)皮膚紋理中各個模塊的名稱建立到骨骼系統(tǒng)中骨骼的映射關(guān)系。
步驟60、裝載運(yùn)動數(shù)據(jù)。從磁盤文件中按需要選取運(yùn)動數(shù)據(jù)并裝載,在裝載運(yùn)動數(shù)據(jù)時,判斷運(yùn)動數(shù)據(jù)中自由度的維數(shù)與骨骼系統(tǒng)中的維數(shù)是否相同,如果不同則無法驅(qū)動該骨骼系統(tǒng),即運(yùn)動數(shù)據(jù)裝載失敗,需要重新選定運(yùn)動數(shù)據(jù)進(jìn)行裝載或退出虛擬角色驅(qū)動的過程。
步驟70、從運(yùn)動數(shù)據(jù)中獲取給定時刻t的姿態(tài)。姿態(tài)是某一時刻用來刻畫關(guān)節(jié)角度的一組矢量,用{p,q1,q2,...,qn}表示。其中,p表示根骨骼在世界坐標(biāo)系中的平移,qi表示對骨骼Li的局部坐標(biāo)系相對于其父骨骼Lj局部坐標(biāo)系的旋轉(zhuǎn),用四元數(shù)表示。在某些情況下,運(yùn)動數(shù)據(jù)中可能沒有指定時刻t的姿態(tài),此時按下列步驟求取指定時刻的姿態(tài)信息。
步驟71、找到與指定時刻t最接近的時間的兩幀姿態(tài)pose1、pose2,其對應(yīng)時刻分別為t1,t2。pose1、pose2具體表示如下pose1={p1,q11,q21,···qk1},pose2={p2,q12,q22,···qk2}]]>步驟72、按公式對pose1、pose2進(jìn)行插值得到t時刻對應(yīng)的姿態(tài),插值公式如下pose={p,q1,q2,…qk}p=(1-t)·p1+t·p2qj=Slerp(qj1,qj2,t)]]>
其中Slerp(q1,q2,t)=q1sin((1-t)Ω)+q2sin(tΩ)sin(Ω),cos(Ω)=q1·q2]]>步驟80、正向運(yùn)動學(xué)計(jì)算。計(jì)算每個骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣TjW。變換矩陣TjW的求取步驟如下。
步驟81、將當(dāng)前姿態(tài)下各個骨骼局部坐標(biāo)系相對于父骨骼局部坐標(biāo)系的旋轉(zhuǎn)qj轉(zhuǎn)換為變換矩陣Mj,qj是一個單位四元數(shù)。該轉(zhuǎn)換過程是成熟的現(xiàn)有技術(shù),普通技術(shù)人員查閱相關(guān)資料可實(shí)現(xiàn)該轉(zhuǎn)換。
步驟82、判斷一骨骼是否有父骨骼,如果該骨骼沒有父骨骼,則TjW=TjP·Mj.]]>步驟83、如果一骨骼有父骨骼,則TjW=TjP·Mj·TiW,]]>其中i為骨骼j的父關(guān)節(jié)的序號。
由于步驟41中通過對多叉樹做深度優(yōu)先遍歷,重新排列了骨骼順序,因此計(jì)算TjW之前,其父骨骼的齊次矩陣TiW已經(jīng)更新過,因此只需按順序逐一對每一個骨骼計(jì)算即可。
步驟90、重新計(jì)算皮膚頂點(diǎn)坐標(biāo)。骨骼系統(tǒng)在運(yùn)動數(shù)據(jù)驅(qū)動下,依附于骨骼的皮膚頂點(diǎn)坐標(biāo)會產(chǎn)生相應(yīng)的變化,本步驟就是要實(shí)現(xiàn)對時刻t時,虛擬角色的所有皮膚頂點(diǎn)坐標(biāo)的計(jì)算。以索引號為j的骨骼為例,設(shè)p為該骨骼皮膚上的一個頂點(diǎn)的坐標(biāo),則該點(diǎn)在新的姿態(tài)下的旋轉(zhuǎn)坐標(biāo)由下式給出p′=TjW·(TjW0)-1·p.]]>將皮膚頂點(diǎn)在初始姿態(tài)下全局坐標(biāo)系中的坐標(biāo)與初始姿態(tài)下骨骼局部坐標(biāo)系相對于全局坐標(biāo)系的變換矩陣的逆矩陣做點(diǎn)積,得到皮膚頂點(diǎn)在骨骼局部坐標(biāo)系中的坐標(biāo),然后將該坐標(biāo)與骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣做點(diǎn)積,得到皮膚頂點(diǎn)在新姿態(tài)下的全局坐標(biāo)。
步驟100、渲染。根據(jù)重新計(jì)算的皮膚頂點(diǎn)坐標(biāo)和磁盤文件中所保存的三角面片列表繪制虛擬角色。
權(quán)利要求
1.一種基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,包括1)獲取虛擬角色的相關(guān)信息,所述的虛擬角色的相關(guān)信息分為骨骼系統(tǒng)信息、皮膚紋理信息和運(yùn)動數(shù)據(jù);2)定義虛擬角色相關(guān)信息的磁盤存儲格式,磁盤文件對相同的骨骼系統(tǒng)、皮膚紋理信息、運(yùn)動數(shù)據(jù)只保存一次,骨骼系統(tǒng)、皮膚紋理信息和運(yùn)動數(shù)據(jù)適用于任意拓?fù)浣Y(jié)構(gòu)的虛擬角色以及任意數(shù)目的虛擬角色;3)根據(jù)實(shí)際需求,確定具體的虛擬角色;4)根據(jù)角色,裝載相應(yīng)的骨骼系統(tǒng);5)根據(jù)角色,裝載皮膚紋理信息,裝載時,根據(jù)皮膚紋理中各個模塊的名稱建立到骨骼系統(tǒng)中骨骼的映射關(guān)系;6)裝載運(yùn)動數(shù)據(jù),在運(yùn)動數(shù)據(jù)裝載前,判斷運(yùn)動數(shù)據(jù)中自由度的維數(shù)與骨骼系統(tǒng)中的維數(shù)是否相同,如果不同則運(yùn)動數(shù)據(jù)無法驅(qū)動骨骼系統(tǒng),需要重新選定運(yùn)動數(shù)據(jù)進(jìn)行裝載或退出虛擬角色驅(qū)動的過程;7)從運(yùn)動數(shù)據(jù)中提取某一時刻的姿態(tài),若在運(yùn)動數(shù)據(jù)中無法找到指定時刻的姿態(tài),則通過對相鄰時刻的姿態(tài)做插值得到指定時刻的姿態(tài);8)正向運(yùn)動學(xué)計(jì)算,計(jì)算每個骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣;9)利用步驟8)得到的骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣,重新計(jì)算皮膚頂點(diǎn)坐標(biāo);10)渲染,根據(jù)步驟9)得到的重新計(jì)算的皮膚頂點(diǎn)坐標(biāo)和三角面片列表繪制虛擬角色,所述的三角面片列表包含在步驟5)所裝載的皮膚紋理信息中。
2.根據(jù)權(quán)利要求1所述的基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,其特征在于,在所述的步驟2)中,一個磁盤存儲文件由文件頭、骨骼系統(tǒng)、皮膚紋理信息單元、虛擬角色信息單元組成;在一個骨骼系統(tǒng)中,骨骼系統(tǒng)由骨骼系統(tǒng)名稱和骨骼列表組成,在骨骼列表中包含有骨骼系統(tǒng)的各個骨骼的信息,一個骨骼需要保存的信息有骨骼名稱、骨骼索引號、父關(guān)節(jié)的索引號、靜態(tài)變換矩陣、骨骼質(zhì)量、質(zhì)心坐標(biāo)及關(guān)節(jié)活動范圍;一個皮膚紋理信息單元由頂點(diǎn)列表、三角面片列表、紋理坐標(biāo)列表、法向量列表、部位信息列表組成,其中的部位信息列表中有多個部位信息單元,一個部位信息單元包括名稱、頂點(diǎn)索引列表、影響權(quán)重列表;一個虛擬角色單元由虛擬角色基本信息、骨骼系統(tǒng)索引、皮膚紋理索引和運(yùn)動數(shù)據(jù)組成;運(yùn)動數(shù)據(jù)中的每一幀姿態(tài)由該幀的時刻、根節(jié)點(diǎn)的位移以及各個骨骼局部坐標(biāo)系相對于其父骨骼局部坐標(biāo)系的旋轉(zhuǎn)組成,其中所述的旋轉(zhuǎn)用四元數(shù)表示。
3.根據(jù)權(quán)利要求1所述的基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,其特征在于,所述的虛擬角色的骨骼系統(tǒng)、皮膚紋理信息和運(yùn)動數(shù)據(jù)在內(nèi)存組織上采用共用的方式,一種骨骼系統(tǒng)或皮膚紋理信息可以為不同的虛擬角色所用,而一個虛擬角色在不同的場合也可以采用不同的骨骼系統(tǒng)或皮膚紋理信息。
4.根據(jù)權(quán)利要求1所述的基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,其特征在于,在所述的步驟4)中,裝載骨骼系統(tǒng)的具體實(shí)現(xiàn)包括4-1、所裝載的骨骼系統(tǒng)的拓?fù)浣Y(jié)構(gòu)是一個多叉樹,對多叉樹做深度優(yōu)先遍歷,重新排列骨骼間的順序;4-2、計(jì)算初始姿態(tài)下骨骼局部坐標(biāo)系相對于全局坐標(biāo)系的變換矩陣。
5.根據(jù)權(quán)利要求1所述的基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,其特征在于,在步驟7)中,所述的插值方法采用四元數(shù)的球面線形插值法。
6.根據(jù)權(quán)利要求1所述的基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,其特征在于,在所述的步驟8)中,正向運(yùn)動學(xué)計(jì)算包括8-1、將某一時刻的姿態(tài)下各個骨骼局部坐標(biāo)系相對于父骨骼局部坐標(biāo)系的旋轉(zhuǎn)轉(zhuǎn)換為變換矩陣;8-2、根據(jù)步驟8-1所得到的變換矩陣和磁盤存儲文件中所包含的靜態(tài)變換矩陣,計(jì)算骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣。
7.根據(jù)權(quán)利要求1所述的基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,其特征在于,在所述的步驟9)中,所述的皮膚頂點(diǎn)坐標(biāo)的計(jì)算公式為p′=TjW·(TjW0)-1·p,]]>其中,p為骨骼皮膚上的一個頂點(diǎn)的坐標(biāo),p′為皮膚頂點(diǎn)在骨骼運(yùn)動情況下的新坐標(biāo),0Tjw為步驟4-2所得到的初始姿態(tài)下骨骼局部坐標(biāo)系相對于全局坐標(biāo)系的變換矩陣,Tjw為步驟8-2所得到的骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣。
8.根據(jù)權(quán)利要求4所述的基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,其特征在于,在步驟4-1中,所述的骨骼順序?yàn)楦趋琅旁谧钋懊妫我庖粋€骨骼都排在其所有的子骨骼之前。
全文摘要
本發(fā)明公開了一種基于骨骼的任意拓?fù)浣Y(jié)構(gòu)虛擬角色的驅(qū)動方法,包括1)將虛擬角色相關(guān)信息分為三類;2)定義虛擬角色相關(guān)信息的磁盤存儲格式;3)根據(jù)實(shí)際需求,確定具體的虛擬角色;4)裝載骨骼系統(tǒng);5)裝載皮膚紋理信息,裝載時,根據(jù)皮膚紋理中各個模塊的名稱建立到骨骼系統(tǒng)中骨骼的映射關(guān)系;6)裝載運(yùn)動數(shù)據(jù),判斷運(yùn)動數(shù)據(jù)中自由度的維數(shù)與骨骼系統(tǒng)中的維數(shù)是否相同;7)從運(yùn)動數(shù)據(jù)中提取某一時刻的姿態(tài);8)正向運(yùn)動學(xué)計(jì)算,計(jì)算每個骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣;9)利用步驟8)得到的骨骼局部坐標(biāo)系相對于全局坐標(biāo)系下的變換矩陣,重新計(jì)算皮膚頂點(diǎn)坐標(biāo);10)渲染。
文檔編號G06T15/00GK1885348SQ20051007728
公開日2006年12月27日 申請日期2005年6月21日 優(yōu)先權(quán)日2005年6月21日
發(fā)明者王兆其, 李淳芃, 朱登明, 夏時洪 申請人:中國科學(xué)院計(jì)算技術(shù)研究所