首先需要準備數據每一個關節都保存著一個綁定姿勢逆矩陣,以下簡稱IBP,該矩陣可以將物體從模型空間轉換到當前關節空間。IBP是在3D模型從DCC輸出後,利用T-Pose計算出來的。一次計算,無限次使用。
動畫引擎Update之後,每一個關節都會得到一個最新的局部姿勢。這個時候可以進行一些額外的插值計算、程序式動畫、IK等後處理過程。因為局部姿勢一般保存為SQT格式,所以需要在這時轉換成矩陣。
然後我們開始計算每個關節的全局姿勢矩陣,計算方法是依次連接關節本身及其所有父節點的局部姿勢矩陣。最後IBP乘上全局姿勢矩陣,就得到了蒙皮矩陣。頂點乘上蒙皮矩陣後會對頂點產生什麼樣的影響呢?
頂點原本位於模型為T-Pose時的模型空間中,乘上了IBP之後進入到關節空間中;再乘上全局姿勢矩陣,這時模型擺出了由動畫引擎驅動的姿勢,在這個姿勢下從關節空間回到模型空間。所以最終呈現的效果是,頂點被關節帶到了特定位置。計算出所有關節的蒙皮矩陣之後,我們就得到了矩陣調色板。
每個頂點都會從矩陣調色板中取得需要綁定的關節的蒙皮矩陣,然後更具動畫師設定好的權重對這些矩陣進行混合。頂點乘上混合後的矩陣,這時蒙皮就完成了。
動畫引擎Update時,可以通過多種方式計算出局部姿勢。可以對單個動畫片段進行一維線性插值實現時間性混合來得到常規的動畫效果。可以對兩個動畫片段進行淡入/淡出計算獲得圓滑過渡、凍結過渡等過渡效果。更進一步推廣,可以對多個動畫片段進行N維線性插值實現自定義的混合。