【摘要】 本文通過對運動捕捉技術(shù)的研究,提出一種在Kinect和After Effects之間傳輸數(shù)據(jù)的方法,繼而開發(fā)出小型運動捕捉系統(tǒng)Kinect-After Effects Mocap Output System。該運動捕捉系統(tǒng)可以實現(xiàn)運動捕捉小型化和消費化。
【關(guān)鍵詞】 Kinect After Effects 運動捕捉
一、前言
目前市面上的運動捕捉系統(tǒng)大多昂貴,學(xué)習(xí)成本和使用費用過高,這限制了很多普通的視頻工作者。2010年微軟公司發(fā)布了體感設(shè)備Kinect,因其低廉的價格以及較為精確的深度傳感,更適合動畫制作中的運動捕捉。本文選擇了After Effects(下文簡稱為AE)這個廣泛使用且強(qiáng)大的特效制作軟件進(jìn)行研究。雖然國外的KinectToPin軟件可以通過Kinect進(jìn)行運動捕捉后導(dǎo)入AE驅(qū)動2D木偶,但由于采用OpenNI架構(gòu),該運動捕捉系統(tǒng)仍存在很多問題:一,OpenNI架構(gòu)對Kinect的全身追蹤缺乏頭、雙手、腳、鎖骨五個骨骼點,控制模型不夠精確。二,關(guān)節(jié)閉塞未被估算,骨骼的關(guān)節(jié)處不夠平滑。三,安裝繁瑣,需單獨安裝NITE。四,目前只支持單人動作捕捉。本文重點研究Kinect與AE的接口文件。
二、Kinect骨骼流及AE關(guān)鍵幀動畫
2.1 Kinect骨骼數(shù)據(jù)點輸出原理
該研究基于Kinect SDK,核心思想是NUI,即自然人機(jī)交互。NUI API用于處理彩色圖像流、深度圖像數(shù)據(jù)、骨骼跟蹤管理等,其中骨骼跟蹤是其中的重要部分,它采用了景深圖像處理技術(shù),使用如矩陣變換,機(jī)器學(xué)習(xí)等復(fù)雜的算法來確定人體各關(guān)節(jié)的坐標(biāo)。使用Kinect SDK可以識別出全身完整20個骨骼,依次是:左腳、腳踝、膝蓋、臀部,右腳、腳踝、膝蓋、臀部,左手、手腕、肘關(guān)節(jié)、肩,右手、手腕、肘關(guān)節(jié)、肩,頭部,肩部中央,脊柱中段,臀部中央。
2.2 AE中的關(guān)鍵幀動畫
在AE中,制作動畫主要使用關(guān)鍵幀技術(shù)配合動畫曲線編輯器或表達(dá)式完成。關(guān)鍵幀動畫就是通過調(diào)節(jié)關(guān)鍵幀參數(shù)制作出的動畫效果。在AE的關(guān)鍵幀動畫中,至少需要兩個關(guān)鍵幀才能產(chǎn)生作用,中間的動態(tài)則是由計算機(jī)插值計算得出的。木偶工具是AE推出的圖層扭曲新方法基于關(guān)鍵幀動畫,可以流暢地制作角色動畫。該研究使用木偶工具,在研究前需要導(dǎo)入木偶圖片,依照Kinect可識別的骨骼順序手動創(chuàng)造20個關(guān)鍵點,這些點將會與來自Kinect的數(shù)據(jù)進(jìn)行匹配。
三、After Effects關(guān)鍵幀文件結(jié)構(gòu)研究
運動捕捉系統(tǒng)中Kinect與AE進(jìn)行通訊依靠的是AE關(guān)鍵幀文件。這是一個txt格式的文檔,其形式并未被列入AE SDK中。我通過對AE內(nèi)置的Mocha插件進(jìn)行研究,分析出關(guān)鍵幀文件結(jié)構(gòu),包括文件頭、數(shù)據(jù)以及文件結(jié)尾聲明。其中文件頭和文件結(jié)尾聲明都是固定字符串,數(shù)據(jù)部分則包含每一個關(guān)鍵點的不同關(guān)鍵幀。
3.1數(shù)據(jù)結(jié)構(gòu)
這樣的結(jié)構(gòu)一共存在20組,分別代表木偶身上的20個骨骼點,用Pin #1、Pin #2……進(jìn)行表示。每組數(shù)據(jù)的第一行和第二行標(biāo)明了需要修改的參數(shù)值,依次按照第一、二行的順序進(jìn)行搜尋,即可尋找到修改的參數(shù)值。
Frame是幀數(shù),分別從第0幀開始,對骨骼點的X、Y坐標(biāo)進(jìn)行記錄。這里的X、Y坐標(biāo)是經(jīng)過原先三維坐標(biāo)運算得來的,包含三維信息。Kinect每隔1/30秒會記錄一次骨骼點坐標(biāo),即每30幀為1秒的畫面。
3.2骨骼點文件結(jié)構(gòu)轉(zhuǎn)換算法
用于通訊的txt文件中的關(guān)鍵信息分為20個單元,每個單元是一個骨骼點在多幀下點的坐標(biāo)集合。而實際Kinect記錄的數(shù)據(jù)是按每幀記錄,這導(dǎo)致文件數(shù)據(jù)是按時間排列,而非關(guān)鍵點。因此需要暫存文件作為中轉(zhuǎn)站,然后執(zhí)行格式轉(zhuǎn)換算法。暫存文件按照順序一次記錄每1/30秒的20個骨骼點各自的位置坐標(biāo),通過循環(huán)記錄坐標(biāo)數(shù)據(jù)。暫存完成后執(zhí)行以下算法:首先,逐行讀取暫存文件,將其保存到數(shù)組中。然后對數(shù)組中的每一行進(jìn)行重新排列,將每第n行、第(n+20)行、第(n+40)行……(n取值0到19)提取出來排列在一起。這樣就可以將暫存文件轉(zhuǎn)換到AE可識別文件格式。
四、結(jié)論
通過對Kinect和AE的傳輸文件研究,可以將Kinect捕捉到的骨骼點運用到影視制作中,目前我根據(jù)該研究成果制作了Kinect運動捕捉界面以及AE插件,可實現(xiàn)角色動畫的制作。程序在后期的改進(jìn)中,可以使用微軟于2014年底推出的新款Kinect提高運動捕捉的精度,使動作更加平滑。
參 考 文 獻(xiàn)
[1] 余濤.Kinect應(yīng)用開發(fā)實戰(zhàn)——用最自然的方式與機(jī)器對話[M].機(jī)械工業(yè)出版社, 2014.5.
[2] Rob Miles.Start Here. Learn the Kinect API[M].Microsoft Press,2012
[3] 王森. Kinect體感程序設(shè)計入門[M].科學(xué)出版社,2015.1.
[4] 吉家進(jìn),樊寧寧.After Effects CS6技術(shù)大全[M].人民郵電出版社,2014.9