角色動畫是構建虛擬世界(游戲和虛擬社區)一個比較重要的內容。因為虛擬世界最關鍵的是人與虛擬角色(即“化身”,Avatar)之間的交互,會動的世界才有生機。角色動畫可分兩種:預定義動畫(predefined animation)和程序動畫(procedural animation)。預定義動畫是事先由美術師制作好的動畫序列,程序運行時只能播放,不能改變;程序動畫是在程序運行時實時生成。相比預定義動畫,程序動畫能實現更好的交互。
程序動畫可以用來實現物理動畫(physics animation),物理動畫可以讓角色根據物理規律對外界作出相應的反應動作。物理動畫現在已經開始應用到3D游戲里了。比如Crytek公司的CRYENGINE 2引擎就采用了這項技術,例如角色可以根據地形的坡度來自動調整站立的身姿,如下圖所示:
IK就是一種實現程序動畫的方法。骨絡動畫分為FK(正向運動學,Forward Kinematics)和IK(逆向運動學,InverseKinematics)兩種。FK這里就不細講了,是最常用的設置動畫的方法。這里主要講一下IK,IK和FK相反,它是給定末端作用器的位置或方向,來反求各節點的位置。如下圖所示:
IK主要用于程序動畫中,比如跑步時人的腿根據地形進行自適應,用手拿東西,用手握扶手開門等。如下圖所示:
IK計算有2種方法:解析法和迭代法。解析法速度快,但只適用于節點較少的情況;迭代法通用性強,但有時容易得到局部極小值。所以一般是這兩種方法混用。IK的解的個數有多種情況:
(a) 無解????????????????????????????????? (b) 唯一解????????????????????? (c) 兩個解???????????????????????????????(d) 許多解
若節點數大于2個,就會出現有許多解的情況,那么如何選擇最佳解呢,對人的手和腿來說,每個關鍵都有約束(轉動角度的范圍),那么就要考慮這些解有沒有滿足這些約束。但是可能滿足這些約束的解不止一個,這時就要選擇一個最佳的,比如視覺效果最好的。一種方法是選擇消耗能量最少的那個(比如手臂各關節抬得最低)。
FK可以實現比較自然的動畫效果;IK可以用在程序中實時生成骨絡的關鍵幀,這樣就可以使角色根據外界環境實時的作出動作的反應,更真實。因為FK和IK各有優缺點,所以往往FK和IK混用(FK/IK blend)。