楊 勇
(北京工業(yè)大學 信息學部,北京 100124)
動畫作為一門綜合藝術,是集繪畫、電影、數(shù)字媒體、音樂等眾多藝術門類于一身的藝術表現(xiàn)形式。傳統(tǒng)動畫通常是用畫筆畫出一張張靜止的畫稿,再用攝影機連續(xù)拍成一系列畫面,從而給視覺帶來連續(xù)變化的效果。畫面制作方式除最常見的手繪在紙張或賽璐珞片上外,其它方式還包括黏土、木偶、沙畫以及皮影等。為進一步提高動畫制作效率,上世紀90年代,中國科學院陸汝鈐院士[1]提出計算機全過程輔助動畫自動生成技術,該技術實現(xiàn)了從文本到動畫的自動生成。隨著智能手機以及3G通信技術的普及,中國科學院的張松懋研究員于2008年提出將動畫自動生成技術應用于手機短信上,設計并實現(xiàn)了面向手機短信的3D動畫自動生成系統(tǒng)。該系統(tǒng)可依據(jù)短信內容,自動生成相應的3D動畫并呈現(xiàn)給接收方。
對于角色動畫而言,根據(jù)動作行為的復雜程度,一般可分為兩大類:單人運動與交互運動,這兩類運動對于角色動畫都是必不可少的[2]。交互類運動規(guī)劃相較于單人運動規(guī)劃處理更為困難,主要原因在于其除需表達動作內容及確定交互雙方身體姿態(tài)外,還需要動態(tài)規(guī)劃人物之間的時空關系[3],包括相對距離與絕對位置、身體接觸面范圍、運動路徑、交互物傳遞等。
對于表達動作內容以及確定交互雙方身體姿態(tài),一般采用動作數(shù)據(jù)捕捉技術。動作數(shù)據(jù)捕捉技術是一種通過記錄物體信息以供分析、回放及傳遞的技術[4]。通常動作捕捉的取樣信息來源于人類,通過記錄人體運動軀干的空間位置信息、角度、速度及沖量,進而得到準確的動作數(shù)據(jù)信息并將其應用于三維軟件里具有相同軀體信息的骨骼模型中,使骨骼模型完成相應動作內容。常見格式有BVH與TRC,但這種原始數(shù)據(jù)格式并不便于程序讀取,而且本系統(tǒng)采用的底層動畫軟件Maya并不支持上述數(shù)據(jù)格式。因此,王妍[5]、邱真真[6]利用一種將BVH運動數(shù)據(jù)轉換為動畫制作軟件Maya中可用數(shù)據(jù)的算法,通過建立關系數(shù)據(jù)庫存儲主要關節(jié)數(shù)據(jù),以存儲和讀取動作數(shù)據(jù)。然而,在實際應用中,轉換后數(shù)據(jù)與人物的映射效果并不理想,容易造成部分動作扭曲變形。對于人物之間的時空關系規(guī)劃,需要根據(jù)交互雙方之間的動作內容及距離確定位置與生成路徑,其中涉及到骨骼數(shù)據(jù)計算。Wilhelms等[7]提出一種矩陣方法,不需要用單純的方程表達骨骼關節(jié)自由度以減少其約束,但該方程在求解加速度時計算量很大;Armstrong等[8]提出用圖形仿真骨骼方法規(guī)避矩陣建立過程,該方法復雜度低且較為準確。
考慮到交互動畫中的角色不僅需要進行位置規(guī)劃,還需要對單個人物的動作細節(jié)進行研究,因此本文在定量計算階段提出基于Kinesiology的骨骼數(shù)據(jù)計算方法對交互雙方進行運動規(guī)劃,動作數(shù)據(jù)提取格式為FBX(由BVH經動作制作軟件MotionBuilder轉換而成)[9]的單人動作作為交互動作的單個原子動作(可以構成交互行為的單人動作),通過建立感興趣點與感興趣區(qū)域(該虛擬人物執(zhí)行交互動作時雙方的身體接觸面范圍,包括人體手部骨骼、肩部骨骼、根骨骼等18塊主要接觸骨骼)對人物位置、路徑以及交互物綁定進行規(guī)劃計算,從而在系統(tǒng)中自動生成虛擬人物交互運動規(guī)劃,使生成的三維動畫在表現(xiàn)動畫主題、敘述動畫劇情以及增強動畫表現(xiàn)力方面更為突出。
手機3D動畫自動生成系統(tǒng)由多個子系統(tǒng)組成,包括情節(jié)規(guī)劃子系統(tǒng)、變形規(guī)劃子系統(tǒng)、攝像機規(guī)劃子系統(tǒng)等。系統(tǒng)使用機器學習的思想對開放的短信文本進行信息抽取,通過抽取語句中已標記實體對之間的語義關系、主客觀分析、否定詞提取等,獲得短信文本所有表達主題及關鍵信息,將抽取的信息作為各系統(tǒng)輸入,并且各子系統(tǒng)之間都具有一定聯(lián)系。通常子系統(tǒng)均由定性規(guī)劃與定量計算兩部分組成,定性規(guī)劃依據(jù)信息抽取結果對模型、燈光、攝像機以及人物進行初步規(guī)劃并生成定性描述語言;定量計算根據(jù)定性規(guī)劃結果將其轉換為具體數(shù)值,依據(jù)場景內的實際情況對場景與模型進行添加修改,自動規(guī)劃計算模型、運動、燈光、攝像機、特效以及布局等數(shù)據(jù)信息,調用Maya API生成相應動畫,最后經過服務器渲染生成可播放的3D動畫視頻。圖1為系統(tǒng)整體流程。
圖1 系統(tǒng)整體流程
其中本文提出的基于Kinesiology的骨骼數(shù)據(jù)計算處于交互運動規(guī)劃的定量計算階段,根據(jù)計算得到的骨骼數(shù)據(jù)確定人體感興趣點位置,進而對人物進行初始位置確定、運動路徑規(guī)劃以及交互物綁定規(guī)劃計算。
在交互運動規(guī)劃中,主要是基于興趣識別人物位置以及確定交互人物之間的身體接觸范圍。由于感興趣點分布于人體主要骨骼表面,因此需要進行骨骼數(shù)據(jù)計算。骨骼數(shù)據(jù)計算包括骨骼數(shù)據(jù)正向推導計算(根據(jù)父骨骼信息求其各子骨骼信息)與骨骼數(shù)據(jù)逆向推導計算(根據(jù)子骨骼信息求骨骼鏈上各父骨骼信息),其中骨骼運動基于三維動畫軟件Maya中的人物設計系統(tǒng)——FBIK(Full Body IK,即骨骼之間存在約束控制,牽動身體每一部分都對全身動作有影響)。
在動畫制作過程中,人物運動設計對于整個動畫是至關重要的,其擔負著表現(xiàn)動畫主題及敘述動畫劇情的重要任務。在三維軟件Maya中有一套完整的人物設計系統(tǒng)——FBIK,該系統(tǒng)將整個人作為一個整體進行控制,身體每一部分動作都會影響全身[10]。以一個使用FBIK的二足骨骼角色撿東西為例,如圖2所示,當骨骼角色的手伸向地面目標時,腰與膝蓋也隨之自然彎曲。
圖2 FBIK控制動作實例
在Maya的FBIK系統(tǒng)中,存在兩套對于骨骼運動的描述,一種是基于正向運動學(Forward Kinematics)的骨骼描述,簡稱FK;一種是基于反向運動學(Inverse Kinematics)的骨骼描述,簡稱IK[11]。FK是一種通過“目標驅動”實現(xiàn)的運動方式,通過設定人體各關節(jié)的旋轉角獲得人體在特定時刻的位置與轉角,并且可以由父骨骼方位與子骨骼的相對變換得到子骨骼方位[12]。但在求解過程與確定所有運動關節(jié)節(jié)點運動位置時,需要一一求解關節(jié)鏈上的關節(jié)點,工作量較大。
IK(反向運動)與FK(正向運動)的求解思想恰好相反,其基本原理是操作者可以根據(jù)末端骨骼位置,使用反向運動學求解算法求解出關節(jié)鏈中每個關節(jié)節(jié)點的位置與方向,也即通過定位骨骼鏈中較低的骨骼,使較高的骨骼旋轉,從而設置關節(jié)姿勢,通常應用于將骨骼鏈末端“固定”在某個相對該骨骼鏈移動的對象上[13]。IK的出現(xiàn)一定程度上減少了FK中的求解繁瑣問題,大大減輕了用戶工作量,因此在人體動畫的交互式設計與自動生成算法中得到了廣泛應用。
由人體骨骼特性可知,諸如手臂等骨骼鏈是由一些關節(jié)(Joint)構成的,關節(jié)一般只有一個自由度(平移或旋轉),而末端效應器骨骼有6個自由度,因此根據(jù)父骨骼求下末端的子骨骼問題則可解釋為通過每個關節(jié)自由度求出末端效應器的角速度與線速度。
對于旋轉關節(jié)(revolute joints)的求解一般涉及角度變化,而對于平移關節(jié)(prismatic joints)的求解一般涉及距離變化。本文將角度以及距離全部記為q,同時將目標狀態(tài)(指末端效應器的角速度與線速度)記為向量組,即由于x中每一項都是由q進行求解,因此記為x=f(q),得到公式(1)。
(1)
對公式(1)進行擴展,對x中的每一項進行全微分,同時對等式右邊的所有q求偏導,得到公式(2)。
…
(2)
將上述等式轉換為矩陣后,可以得出矩陣的行等于X中的項數(shù)m,即為末端執(zhí)行器的自由度個數(shù),矩陣的列等于Q的項目數(shù),即為關節(jié)個數(shù),該矩陣即為Jacobian Matrix(雅克比矩陣),記為J。J主要用來求解末端效應器的角速度與線速度,可以簡寫為公式(3)。
ΔXm*1=Jm*n(q)·ΔQn*1
(3)
因此,在手機3D動畫系統(tǒng)中,需要通過正向推導得到骨骼數(shù)據(jù)的交互運動規(guī)劃,并依據(jù)骨骼鏈上各關節(jié)的骨骼長度及骨骼旋轉角度,求解其線速度與角速度,進而得到骨骼的相對位置坐標,最終經過轉化得到目標骨骼的世界坐標。
采用反向動力學(IK),根據(jù)末端骨骼求解其骨骼鏈上父骨骼的計算方法很多,但大多只適用于脫機計算,在交互式環(huán)境下應用較多的方法為循環(huán)坐標下降法(CCD)與雅克比轉置法。本文主要采用雅克比轉置法,這是因為在計算節(jié)點坐標位置時關注的是整條反向運動骨骼關節(jié)鏈,而不僅是觀察計算某一個后繼鏈接[14]。
因此,對于正向動力學(FK)求解末端效應器的方法而言,如果此時一個骨骼鏈上的關節(jié)節(jié)點變量組成的向量為p=(M0,M1,…,Mn-1Mn),在FK中計算末端效應器的坐標與旋轉向量x(x=(T,R))是一個簡單的矩陣乘法問題,其中T是指從父關節(jié)節(jié)點到當前節(jié)點的位移矩陣,R是指圍繞關節(jié)節(jié)點i旋轉軸旋轉θi的旋轉矩陣,可以表示為公式(4)。
x=f(p)
(4)
如果將末端效應器放在固定位置并朝向x,根據(jù)其計算合適的節(jié)點變換向量p,即:
p=f-1(x)
(5)
由于函數(shù)f是非線性的,因此在公式(4)中從p到x存在唯一解,而公式(5)中從一個特殊的x到p可能有多個解。解決多解問題需要將其進行線性化,這里通過關節(jié)速率與末梢速率之間關系達到該目的,可表示為公式(6)。
(6)
其中的關系是由雅克比矩陣[15]所給定的,其體現(xiàn)的是一個可微方程與給出點的最優(yōu)線性逼近,即:
(7)
由公式(6)進一步可得以下公式, 其中J-1即為雅克比矩陣的轉置。
(8)
結合手機3D動畫生成系統(tǒng)對于骨骼位置求解的需求,將骨骼逆向計算方法總結為以下幾個步驟:①根據(jù)定性文檔中的交互規(guī)劃動作內容,確定交互人物雙方的感興趣點位置,若該規(guī)劃方法是根據(jù)處于末端骨骼的感興趣點求解父骨骼位置,則界定并記錄感興趣點與目標父骨骼的最小距離向量值。該值用來檢測反向運動學過程,推導計算是否成功;②若感興趣點與目標父骨骼的距離在步驟①中定義的最小值允許范圍內(最小允許值的范圍值是由交互規(guī)劃類型確定的,以一個握手動作為例,此時需要雙方手部骨骼相接觸,因此最小允許范圍值為雙方手部骨骼相對位置差值的絕對值小于4個網格單位),記錄此時的父骨骼數(shù)據(jù),退出循環(huán);③計算雅克比矩陣與其旋轉軸,根據(jù)結果求解雅克比矩陣的轉置矩陣;④對骨骼關節(jié)速率進行積分,得到關節(jié)旋轉值并更新記錄;⑤重新判斷感興趣點與目標父骨骼的距離是否在步驟①定義的最小值允許范圍內,若在此范圍內,則記錄父骨骼數(shù)據(jù),退出循環(huán)。
本文中的原始動作數(shù)據(jù)來源包括兩部分:①從原始2 455個BVH動作文件中選取合適數(shù)據(jù);②使用動作拼接技術對原始BVH動作進行拼接修改。由于實驗方面使用動畫制作軟件Maya作為底層動畫制作與生成平臺,但Maya并不支持BVH動作格式,因此要想利用Maya完成角色動畫,BVH數(shù)據(jù)需要經過人物關節(jié)坐標及角度標準化后,使用動作制作軟件MotionBuilder轉換成Maya可識別導入的FBX動作數(shù)據(jù),并將其存儲到交互動作數(shù)據(jù)庫中。針對交互運動實驗,采用1*1個單位的網格作為基本長度單位,其中人物模型高度為32個單位,軀干寬為4個單位,臂長為10個單位。添加動作后,人物最大運動姿態(tài)MAX為24個單位,最小運動姿態(tài)MIN為6個單位,旋轉姿態(tài)為14個單位。程序運行在DELL酷睿雙核圖形工作站上,由Maya生成的動畫原始文件通過10臺曙光標配刀片服務器進行渲染合成。
對于短信內容“謝謝你將這本書借給我”,其交互運動定性規(guī)劃xml信息如下:
該定性信息表示添加的2個虛擬人物為M_boy與M_girl,交互雙方分別執(zhí)行3個動作并進行組合。M_girl在動作準備階段執(zhí)行表示等待行為的動作,M_boy綁定交互物圖書,并經過骨骼數(shù)據(jù)計算規(guī)劃運動路徑后走到合適位置,將書本遞給M_girl完成交互行為,交互行為完成后,M_girl執(zhí)行表示感謝行為的動作,M_boy執(zhí)行表示謙虛狀態(tài)的動作。其動畫生成效果如圖3所示。
圖3 動畫生成效果
本文研究的主要內容是在手機3D動畫自動生成系統(tǒng)中,采用基于Kinesiology的骨骼數(shù)據(jù)計算方法規(guī)劃計算人物交互運動。首先根據(jù)主題及場景信息添加交互動作,運用擴展的FK及IK動態(tài)計算人物骨骼數(shù)據(jù)以及運動狀態(tài),進而動態(tài)規(guī)劃虛擬人物運動路徑與交互物路徑,從而完成虛擬人物動作之間的交互響應,最終實現(xiàn)虛擬人與虛擬人之間、虛擬人與交互物之間的交互運動。但由于當前FBX動作庫中含有的動作數(shù)量與種類較少,生成動畫的多樣性與豐富性受到限制,而且當前的骨骼計算準確度受限于動作數(shù)據(jù)的精細程度,因此接下來的研究重點是進一步擴充動作數(shù)據(jù)庫,以及提高動作數(shù)據(jù)的精細度。