遊戲動畫技術簡介

動畫系統是遊戲中對表現力影響最大的系統之一,經過一段時間的調研,最後通過這篇文章總結下遊戲動畫系統。

精靈動畫系統

精靈動畫系統在早年間電腦性能還比較差的時候被廣泛運用,一般作為遊戲的背景而存在,比如
極品飛車系列的路邊觀眾
NBA2K系列的觀眾
這些人物都是一個四邊形,遊戲引擎會給四邊形連續貼上紋理貼圖來產生動感。通常為了不暴露這是個扁的四邊形,會使這些四邊形一直面向攝像機。比如
DOOM
這類動畫系統在早期遊戲中盛行,因為當時的電腦性能不夠,而該系統對電腦資源的消耗非常低。現在部分手游依然會保留這類動畫系統,因為手機性能有限。

剛性層階式動畫

剛性層階式動畫驅動的人物都由一堆獨立的剛性物體組合而成。剛性物體指的是不會發生形變(包括縮放)的物體。然後動畫系統會驅動每一個剛性物體,從而實現動畫效果。最經典的例子就是1997年在PS上發售的FF7。
97版FF7
這個系統驅動的是3D模型,而不再是四邊形貼圖,同時還能保持高效的性能和較低的記憶體使用量。缺點是不允許網格發生形變,整個人物會顯得非常生硬。而且人物的關節位置會產生明顯的「裂縫」。

每頂點動畫

每頂點動畫需要動畫師為每個頂點去k動畫。工作量非常巨大,產生的數據量也非常巨大,但是可以獲得非常精細的動畫效果,網格的三角形產生形變。通常用於製作CG中人物的表情,一般通過硬體設備來捕捉人臉資訊,再轉換成頂點數據。

變形目標動畫(morphing animation)

由於每頂點動畫需要保存大量的動畫數據,不方便存儲和使用。於是提出了變形目標動畫,動畫師只需要通過調整網格上所有頂點的資訊製作出一些靜態姿勢(morph target)。這些靜態姿勢都是一些「極端」的姿勢,例如生氣、開心等。在遊戲引擎中通過對這些靜態姿勢按時間進行線性插值即可得到動畫。

蒙皮動畫(skinened animation)

有時也被稱為骨骼動畫、蒙皮骨骼動畫,是一種FK

為了可以得到較生動的動畫效果,允許網格的三角形產生形變。同時兼顧較高的性能、較低的存儲空間。蒙皮動畫便出現了,現在市場上幾乎所有的遊戲都採用蒙皮動畫作為動畫解決方案。

概念

在蒙皮動畫中有幾個重要的概念。首先是骨骼(skeleton),骨骼由關節通過一棵樹的形態組織起來。如果是一個人物模型,一般以髖部為根節點,以肢體末端為葉節點,比如手指、腳指、眼睛等。skeleton本身不需要被渲染引擎渲染出來,僅由動畫系統驅動。

然後是皮膚(skin),皮膚由多邊形網格組成。而網格又由頂點構成,這些頂點將會被動畫師通過設置權重綁定(bind)到若干關節上。一般每個頂點最多綁定4個關節。但不是所有的關節都會被頂點綁定,這些沒有被綁定的關節又稱為定位器(locator),作為其它模型的掛接點存在。
DX中skeleton的組織方式
蒙皮動畫中存在幾個重要的姿勢(pose),這些姿勢可以矩陣或者SQT格式來保存。首先是綁定姿勢,又稱為T-pose,顧名思義,是動畫師在給模型頂點做綁定時用的姿勢。該姿勢從DCC中輸出之後就固定好了,在遊戲運行時不會被改變。
20221029180400
20221029180408
然後是局部姿勢,它保存了當前關節在其父關節空間中的姿勢。因為動畫引擎直接驅動的是局部姿勢,我們經常需要對局部姿勢進行各種插值,所以一般不會存儲為矩陣形式,而是存儲為SQT形式。我們的動畫片段就是由一連串的局部姿勢組合起來,也就是說動畫片段是一個因變數為局部姿勢,自變數為時間的函數。

最後是全局姿勢,它保存了關節在其模型空間或世界空間中的姿勢,具體保存形式不同的引擎有不同的做法。它是在遊戲運行過程中通過聯合具有父子關係的局部姿勢實時生成的,算是被動畫引擎間接驅動。

蒙皮(skinning)

首先需要準備數據,每一個關節都保存著一個綁定姿勢逆矩陣,以下簡稱IBP,該矩陣可以將物體從模型空間轉換到當前關節空間。IBP是在3D模型從DCC輸出後,利用T-Pose計算出來的。一次計算,無限次使用。

動畫引擎Update之後,每一個關節都會得到一個最新的局部姿勢。這個時候可以進行一些額外的插值計算、程式式動畫、IK等後處理過程。因為局部姿勢一般保存為SQT格式,所以需要在這時轉換成矩陣。

然後我們開始計算每個關節的全局姿勢矩陣,計算方法是依次連接關節本身及其所有父節點的局部姿勢矩陣。

最後IBP乘上全局姿勢矩陣,就得到了蒙皮矩陣。頂點乘上蒙皮矩陣後會對頂點產生什麼樣的影響呢?可以這麼想像:頂點原本位於模型為T-Pose時的模型空間中,乘上了IBP之後進入到關節空間中;再乘上全局姿勢矩陣,這時模型擺出了由動畫引擎驅動的姿勢,在這個姿勢下從關節空間回到模型空間。

所以最終呈現的效果是,頂點被關節帶到了特定位置。計算出所有關節的蒙皮矩陣之後,我們就得到了矩陣調色

然後開始正式蒙皮。每個頂點都會從矩陣調色板中取得需要綁定的關節的蒙皮矩陣,然後更具動畫師設定好的權重對這些矩陣進行混合。頂點乘上混合後的矩陣,這時蒙皮就完成了。

ps:動畫引擎Update時,可以通過多種方式計算出局部姿勢。可以對單個動畫片段進行一維線性插值實現時間性混合來得到常規的動畫效果。可以對兩個動畫片段進行淡入/淡出計算獲得圓滑過渡、凍結過渡等過渡效果。更進一步推廣,可以對多個動畫片段進行N維線性插值實現自定義的混合。為了充分利用資源,可以對動畫片段進行分部混合或加法混合,例如人物在Idle狀態時,通過加法混合給人物加入一些小動作,使得人物更真實。例如…
v2-14d7181792c45287b55129c0856b82ff_720w
由於還要搬磚,沒有辦法一一回復私信把學習資料發給大家。我直接整理出來放在下面,覺得有幫助的話可以下載下來用於學習
鏈接://pan.baidu.com/s/1C-9TE9ES9xrySqW7PfpjyQ 提取碼:cqmd

感謝各位人才的點贊收藏關注

微信搜「三年遊戲人」收穫一枚有情懷的遊戲人,第一時間閱讀最新內容,獲取優質工作內推