杜平川
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065)
隨著角色動(dòng)畫技術(shù)的發(fā)展,基于動(dòng)作捕捉的角色動(dòng)畫被廣泛的應(yīng)用到游戲、電影、藝術(shù)數(shù)字化等多個(gè)領(lǐng)域。如在電影《指環(huán)王》中的“咕?!薄㈦娪啊缎汕蜥绕稹分械摹皠P撒”、游戲《戰(zhàn)神4》中的大量游戲場面等,都是先基于動(dòng)作捕捉設(shè)備捕捉真實(shí)演員的肢體及面部運(yùn)動(dòng)數(shù)據(jù),再通過動(dòng)畫技術(shù)來模擬肢體和面部數(shù)據(jù)等特征,從而使得角色動(dòng)畫更加栩栩如生。而在上述電影級(jí)別要求的動(dòng)畫制作中,所采用的軟件仿真系統(tǒng)很大程度上都比較復(fù)雜,相對(duì)開發(fā)的成本也比較高,因此在一些畫質(zhì)要求相對(duì)較低的動(dòng)畫系統(tǒng)中并不適用。本文針對(duì)上述工業(yè)級(jí)角色動(dòng)畫系統(tǒng)存在的缺點(diǎn),提出并實(shí)現(xiàn)了一種低成本的基于OptiTrack運(yùn)動(dòng)捕捉的像素化角色動(dòng)畫系統(tǒng)。
運(yùn)動(dòng)捕捉(Motion Capture)是指通過跟蹤和記錄真實(shí)的人體運(yùn)動(dòng)過程中,各個(gè)標(biāo)記點(diǎn)在世界空間坐標(biāo)系下的位置變換過程,以運(yùn)動(dòng)數(shù)據(jù)的形式保存下來,再基于得到的運(yùn)動(dòng)數(shù)據(jù)驅(qū)動(dòng)虛擬人運(yùn)動(dòng)[1]。目前存在并廣泛應(yīng)用的主流運(yùn)動(dòng)捕捉設(shè)備一般包括傳感器、信號(hào)捕捉設(shè)備、信號(hào)處理設(shè)備以及數(shù)據(jù)傳輸設(shè)備四個(gè)部分。根據(jù)其中傳感器和信號(hào)捕捉設(shè)備的原理不同,又可以被分為機(jī)械式、聲學(xué)式、電磁式和光學(xué)式。但通過對(duì)比捕捉數(shù)據(jù)的靈敏度及精確度,光學(xué)式運(yùn)動(dòng)捕捉設(shè)備要遠(yuǎn)優(yōu)于其他三種。因此在本文提出的系統(tǒng)中,采用了由美國OptiTrack公司所涉及研發(fā)的大空間光學(xué)追蹤系統(tǒng),整套設(shè)備主要由8個(gè)OptiTrack公司生產(chǎn)的Prime 13系列攝像頭(如圖1、表1)、穿戴式光學(xué)定位工具及部分配件組成。見圖1。
圖1 OptiTrack Prime13攝像機(jī)
表1 OptiTrack Prime13攝像機(jī)參數(shù)
本文搭建的動(dòng)作捕捉系統(tǒng)實(shí)驗(yàn)工作地點(diǎn)室內(nèi)場地如圖2所示。由于動(dòng)作捕捉系統(tǒng)設(shè)備環(huán)境要求將攝像頭安裝在300cm以上高度,實(shí)驗(yàn)采用圓形橫截面金屬材料桿搭建了攝像頭平臺(tái),考慮到不同實(shí)驗(yàn)場景下攝像頭的位置調(diào)整需求,攝像頭平臺(tái)安裝在了距離地面和屋頂分別約300cm及50cm的位置。然后將攝像機(jī)安裝在設(shè)備所配置的三維云臺(tái)底座上,再將云臺(tái)固定到攝像頭平臺(tái)的金屬材料桿上。根據(jù)光學(xué)式運(yùn)動(dòng)捕捉原理將云臺(tái)及攝像頭調(diào)整到合適的角度和朝向,并調(diào)節(jié)攝像頭的幀頻、曝光時(shí)間、LED光源亮度等參數(shù),使得攝像機(jī)捕獲區(qū)域內(nèi)不存在過高亮度的干擾點(diǎn)。見圖2(圖中光色光圈為攝像頭LED環(huán))。
圖2 OptiTrack搭建場景示意圖
通過均勻布置在場地四周的光學(xué)式攝像頭,記錄穿戴有光學(xué)標(biāo)記點(diǎn)的運(yùn)動(dòng)物體的運(yùn)動(dòng)軌跡,并將運(yùn)動(dòng)數(shù)據(jù)以圖像的形式記錄下來。然后使用計(jì)算機(jī)對(duì)該圖像數(shù)據(jù)進(jìn)行處理,即可以得到并輸出在每一幀圖像的時(shí)間點(diǎn)上每一個(gè)光學(xué)標(biāo)記點(diǎn)的空間三維坐標(biāo)(X,Y,Z)如表2所示,見表2。
表2 動(dòng)作捕捉光學(xué)點(diǎn)坐標(biāo)數(shù)據(jù)格式
同時(shí),當(dāng)捕捉的運(yùn)動(dòng)對(duì)象是人體時(shí),OptiTrack官方提供的Motive還可以輸出相應(yīng)的骨骼節(jié)點(diǎn)位置及旋轉(zhuǎn)等數(shù)據(jù)如表2所示,使得所捕獲的運(yùn)動(dòng)數(shù)據(jù)能正確地應(yīng)用在其他平臺(tái)上。見表2。
為了能使用基于運(yùn)動(dòng)捕捉系統(tǒng)得到的真實(shí)人體運(yùn)動(dòng)數(shù)據(jù)驅(qū)動(dòng)虛擬人角色運(yùn)動(dòng),需要通過動(dòng)畫重定向的方式將真實(shí)人體運(yùn)動(dòng)數(shù)據(jù)重新映射到虛擬人角色上。2009年,Poirier等人[2]提出了通過匹配給定的谷歌運(yùn)動(dòng)信息與虛擬角色Mesh之間的拓?fù)潢P(guān)系來使得谷歌適應(yīng)角色模型的方法,但是這種辦法要求輸入的人形模型保持特定的某種姿勢(shì),如T-pose或者A-pose。這種前提條件不滿足普適性。所以在此基礎(chǔ)上Pantuwong等人[3]在2012年提出了一種通過提取輸入3D模型的骨骼解剖學(xué)信息,自動(dòng)生成角色逆運(yùn)動(dòng)學(xué)骨架并與已有的骨骼模板對(duì)應(yīng)綁定的算法。解決了Poirier等人提出的方法中的輸入模型特定姿勢(shì)限制。此外,Abdul-Massih等人[4]在2017年提出一種將角色Mesh分成多個(gè)獨(dú)立的身體組(Group of bodies),再通過身體組映射實(shí)現(xiàn)動(dòng)畫重定向的方法。劃分出的身體組相對(duì)獨(dú)立,因此還需要添加約束并進(jìn)行更多的計(jì)算才能得到較好的重定向結(jié)果。這兩種方法相對(duì)來說效果更好,但與此同時(shí),相應(yīng)的成本開銷也就更大。為了達(dá)到以較小的代價(jià)實(shí)現(xiàn)動(dòng)畫重定向效果,本文提出的系統(tǒng)采用了Unity引擎中提供的特定動(dòng)畫重定向方案。該方案要求用于動(dòng)畫重定向的必須是人形(Humanoid)的骨骼系統(tǒng),它在內(nèi)部定義了一套骨骼模板,并要求所有的角色動(dòng)畫骨骼都必須映射到這套模板上才能由同一個(gè)運(yùn)動(dòng)數(shù)據(jù)來驅(qū)動(dòng)并產(chǎn)生動(dòng)畫。
表3 OptiTrack輸出骨骼節(jié)點(diǎn)數(shù)據(jù)格式
人形(Humanoid)骨骼的類似性,滿足了動(dòng)畫從一個(gè)類人骨架映射到另一個(gè)類人骨架的需求。在Unity引擎中,可以選擇Humanoid方式導(dǎo)入類人骨骼系統(tǒng),這種導(dǎo)入方式提供了自動(dòng)綁定功能,自適應(yīng)地將導(dǎo)入的人形骨骼通過關(guān)節(jié)點(diǎn)及關(guān)鍵骨骼數(shù)據(jù)一一對(duì)應(yīng)的方式與所需要復(fù)用到的類人骨骼模型文件相映射。從而達(dá)到運(yùn)動(dòng)數(shù)據(jù)復(fù)用的效果。
在數(shù)字圖形及角色動(dòng)畫表現(xiàn)方法中,像素表現(xiàn)方式是較為基本和常見的一種。如在游戲《我的世界》(Minecraft)中,整體的角色模型以及世界場景構(gòu)建都是由像素組成。本文提出的系統(tǒng)也參考了像素藝術(shù)及其表現(xiàn)手法,選擇了基于動(dòng)作捕捉的運(yùn)動(dòng)數(shù)據(jù)構(gòu)建像素角色動(dòng)畫。相比于傳統(tǒng)如游戲《我的世界》中的像素動(dòng)畫,由動(dòng)作捕捉數(shù)據(jù)驅(qū)動(dòng)的運(yùn)動(dòng)模型更具有真實(shí)性,保留了像素藝術(shù)這一表現(xiàn)手法的基礎(chǔ)上同時(shí)提高了動(dòng)畫質(zhì)量。在本文提出的系統(tǒng)中,主要通過體素化的方式,將普通的Mesh文件進(jìn)行實(shí)體體素化后,再通過骨骼動(dòng)畫的形式由骨骼驅(qū)動(dòng)體素化粒子運(yùn)動(dòng)從而得到像素化的角色動(dòng)畫。
體素化是將物體的幾何形式表示轉(zhuǎn)換成最接近該物體的體素表示形式,輸出包含體素位置的體素?cái)?shù)據(jù)集合。體素化的主要過程為:首先計(jì)算模型包圍盒,根據(jù)包圍盒決定劃分的網(wǎng)格數(shù)量。然后遍歷每一個(gè)網(wǎng)格,通過遍歷三角形計(jì)算三角形到提速網(wǎng)格中間的距離,再與設(shè)定好的閾值對(duì)比來確定是否被占用。從而得到模型體素化后的數(shù)據(jù)。主要實(shí)現(xiàn)如下:
骨骼動(dòng)畫,也被稱為骨骼蒙皮動(dòng)畫,主要是指由骨骼運(yùn)動(dòng)數(shù)據(jù)驅(qū)動(dòng)的角色動(dòng)畫技術(shù)。Thalmann等人[5]早在1987年就提出了一種針對(duì)局部皮膚運(yùn)動(dòng)進(jìn)行插值計(jì)算的皮膚變形算法(Skeleton Driven Deformation,SDD)。Lander J等人[6]于1998年提出了線性混合蒙皮算法,通過求解每一個(gè)頂點(diǎn)在每一塊骨骼影響下的位置變換,并對(duì)所有的位置變換加權(quán)求平均得到最終結(jié)果。但這種算法其缺陷在于,對(duì)于旋轉(zhuǎn)角度較大的關(guān)節(jié)處,混合后的新頂點(diǎn)丟失了向量長度信息,因此會(huì)產(chǎn)生失真如皮膚塌陷、“糖紙效應(yīng)”等現(xiàn)象。此后為了改善線性混合蒙皮算法的缺陷,Weber等人[7]提出通過在關(guān)節(jié)處增加輔助骨骼來抵消過大的旋轉(zhuǎn)角度的方法。上述方法也是目前工業(yè)界常用的骨骼蒙皮動(dòng)畫技術(shù)。在本文提出的系統(tǒng)中,主要是基于Lander J等人提出的線性混合蒙皮方法,并且由于采用了像素化的表現(xiàn)形式,較好地避免了如皮膚塌陷等現(xiàn)象。主要實(shí)現(xiàn)方式是先采用Dijkstra最短路徑算法將模型的表面體素與經(jīng)過動(dòng)畫重定向后的模型骨骼綁定。再通過IK((Inverse Kinematics)反向動(dòng)力學(xué),基于模型骨骼的運(yùn)動(dòng)數(shù)據(jù)計(jì)算表面體素的每一幀所在位置。
由于涉及到了大量位置的計(jì)算,所以在實(shí)際的系統(tǒng)開發(fā)過程中,本文將體素位置計(jì)算的過程放在Computer Shader中,通過GPU并行的方式進(jìn)行計(jì)算加速。計(jì)算主要過程如下述代碼:
完成運(yùn)動(dòng)數(shù)據(jù)捕捉并解決了運(yùn)動(dòng)數(shù)據(jù)復(fù)用的情況下,本文基于Unity引擎開發(fā)了三維角色動(dòng)畫系統(tǒng)。本系統(tǒng)主要分為四個(gè)模塊:動(dòng)作捕捉模塊、動(dòng)畫重定向模塊、體素化模塊、骨骼動(dòng)畫模塊。通過動(dòng)作捕捉模塊捕獲真實(shí)人體運(yùn)動(dòng)數(shù)據(jù),再基于Unity引擎的動(dòng)畫重定向方案將人體運(yùn)動(dòng)數(shù)據(jù)與虛擬角色綁定,最后基于體素化及骨骼蒙皮動(dòng)畫繪制出了像素化的角色動(dòng)畫。所得到的虛擬像素化角色運(yùn)動(dòng)效果如圖3所示。
圖3 基于OptiTrack動(dòng)作捕捉的像素化角色動(dòng)畫系統(tǒng)效果
本文給出了基于動(dòng)作捕捉的像素化角色動(dòng)畫系統(tǒng)中主要算法如體素化、骨骼動(dòng)畫的實(shí)現(xiàn),并基于Opti-Track動(dòng)作捕捉系統(tǒng)設(shè)備搭建和實(shí)現(xiàn)了像素化角色動(dòng)畫系統(tǒng),本系統(tǒng)相對(duì)于普通的像素動(dòng)畫來說能更加方便快捷地實(shí)現(xiàn)更加真實(shí)的像素角色動(dòng)畫,并可以達(dá)到動(dòng)畫自定義的效果,具有一定的實(shí)際意義。