UE4动画系统笔记
目錄
0、UE4動(dòng)畫基礎(chǔ)概念
1、模型 - 骨骼 - 動(dòng)畫 - 動(dòng)畫藍(lán)圖基礎(chǔ)
2、 動(dòng)畫/模型導(dǎo)入及骨架重定向
3 、動(dòng)畫類型&動(dòng)畫融合
UE中動(dòng)畫相關(guān)類型主要包括:
UE中動(dòng)畫融合主要有兩類方法:
混合動(dòng)畫的軸向設(shè)置(Axis Settings):
瞄準(zhǔn)偏移動(dòng)畫
蒙太奇動(dòng)畫:
4、蒙太奇動(dòng)畫專題
5 、動(dòng)畫藍(lán)圖中的重要節(jié)點(diǎn)
事件圖表特定事件和重要節(jié)點(diǎn):
動(dòng)畫圖表重要節(jié)點(diǎn):
6、裝備物品附加到角色
7、RootMotion
8、動(dòng)畫IK
9、動(dòng)畫通知
10、動(dòng)畫曲線
0、UE4動(dòng)畫基礎(chǔ)概念
-
骨架(Skeleton):Skeleton是整個(gè)動(dòng)畫系統(tǒng)的基礎(chǔ),其主要作用是記錄了骨架以下信息:
-
骨骼層級(jí)信息
-
參考姿勢信息
-
骨骼名稱
-
曲線(Curve)信息
-
動(dòng)畫通知(Animation Notify)信息
-
插槽數(shù)據(jù)(插槽名稱、所屬骨骼、Transform等)
-
虛擬骨骼信息
-
骨骼名稱Index映射表
-
其他骨骼設(shè)置信息:包括位移重定向(Translation Retarget)設(shè)置,LOD設(shè)置等信息
-
-
骨骼模型(Skeletal Mesh):顧名思義,骨骼模型是在骨骼基礎(chǔ)之上的模型,通俗來說就是綁定骨骼后的網(wǎng)格體,也就是我們?cè)谟螒蛑心軌蚩吹降慕巧摹叭馍怼薄F渲饕韵滦畔?#xff1a;
-
模型的頂、線、面信息
-
頂點(diǎn)的骨骼蒙皮權(quán)重
-
模型的材質(zhì)信息
-
模型LOD信息
-
所屬骨架
-
Morph Target信息
-
Physics Asset設(shè)置信息
-
布料系統(tǒng)相關(guān)設(shè)置
-
-
動(dòng)畫序列(Animation Sequence):動(dòng)畫序列是用來記錄骨骼運(yùn)動(dòng)狀態(tài)的資源,也是讓動(dòng)畫動(dòng)起來的關(guān)鍵之一,其主要包含了一下信息:
-
動(dòng)畫關(guān)鍵幀信息
-
包含運(yùn)動(dòng)的骨骼信息
-
每幀骨骼的Transform信息:包含了骨骼的旋轉(zhuǎn)、位移和縮放
-
動(dòng)畫通知信息:記錄了觸發(fā)通知的類型和時(shí)間
-
動(dòng)畫曲線信息:記錄了隨時(shí)間軸變化的曲線信息
-
其他基礎(chǔ)信息:包括了疊加動(dòng)畫設(shè)置、根骨骼位移設(shè)置等信息
-
-
混合空間(BlendSpace):其主要作用是根據(jù)輸入的float值從若干臨近的動(dòng)畫中采樣并輸出一個(gè)融合后的Pose。根據(jù)數(shù)據(jù)維度不同分為BlendSpace和BlendSpace1D兩種類型。
-
瞄準(zhǔn)偏移(AimOffset):是BlendSpace的一種特殊形式,區(qū)別在于其內(nèi)部的所有采樣點(diǎn)都是疊加動(dòng)畫。主要用在游戲過程中疊加角色瞄準(zhǔn)和看的方向。
-
蒙太奇動(dòng)畫(AnimationMontage):對(duì)Animation Sequence資源的擴(kuò)充,可以方便的使用藍(lán)圖、代碼控制動(dòng)畫資源的播放,并且可以方便的實(shí)現(xiàn)根骨骼動(dòng)畫和動(dòng)畫播放結(jié)束后的回調(diào)。要使用Montage就需要將相應(yīng)的動(dòng)畫拖入其中,在Montage編輯器中可以對(duì)動(dòng)畫進(jìn)行編輯、裁剪、拼接等操作。Montage編輯器中有一個(gè)Slot(插槽)的東西,通俗的解釋就是,插槽是對(duì)應(yīng)在動(dòng)畫藍(lán)圖中播放Montage的播放點(diǎn),同一個(gè)Montage可以有多個(gè)不同的Slot。
-
動(dòng)畫藍(lán)圖(Animation Blueprint),主要負(fù)責(zé)動(dòng)畫的混合驅(qū)動(dòng)邏輯以及后處理的相關(guān)工作。一般大部分動(dòng)畫程序的工作就是在這里完成。動(dòng)畫藍(lán)圖中可以搭建動(dòng)畫狀態(tài)機(jī)以及動(dòng)畫后處理邏輯,例如IK、疊加動(dòng)畫等。
-
骨骼動(dòng)畫系統(tǒng)大致可以分為兩步:
-
計(jì)算骨骼Pose:每一根骨骼可以看做一個(gè)點(diǎn),而我們的Pose就是所有骨骼Transform(位移+旋轉(zhuǎn)+縮放)的集合,注意,一般來說,這個(gè)Pose是基于骨架參考姿勢(Reference Pose)的變換矩陣。
-
蒙皮:骨骼計(jì)算好后我們還是無法看到一個(gè)角色的造型,這時(shí)需要將3D美術(shù)制作好的網(wǎng)格體的頂點(diǎn)按照骨骼Pose進(jìn)行變化。這里變換的依據(jù)是頂點(diǎn)的蒙皮權(quán)重和參考姿勢的信息(一個(gè)頂點(diǎn)可能受到多個(gè)骨骼的影響)。
-
動(dòng)畫系統(tǒng)更新過程:UE4里主要承擔(dān)上述兩步職責(zé)的是Skeletal Mesh Component。在SkeletalMeshComponent創(chuàng)建時(shí),會(huì)創(chuàng)建一個(gè)Animation Instance,這就是主要負(fù)責(zé)計(jì)算最終Pose的對(duì)象,而我們制作的AnimationBlueprint也是基于UAnimationInstance這個(gè)類的。在SkeletalMeshComponent進(jìn)行Tick時(shí),會(huì)調(diào)用TickAnimation方法,然后會(huì)調(diào)用Animation Instance的UpdateAnimation()方法,此方法會(huì)調(diào)用一遍所有動(dòng)畫藍(lán)圖中連接的節(jié)點(diǎn)的Update_AnyThread()方法,用來更新所有節(jié)點(diǎn)的狀態(tài)。然后后續(xù)根據(jù)設(shè)置的不同會(huì)從Tick函數(shù)或者Work線程中調(diào)用SkeletalMeshComponent的RefreshBoneTransforms()方法,此方法進(jìn)而會(huì)調(diào)用動(dòng)畫藍(lán)圖所有節(jié)點(diǎn)的Evaluate_AnyThread()方法。Evaluate的含義就是指根據(jù)特定的條件(從Update時(shí)獲得的參數(shù))計(jì)算出動(dòng)畫所有骨骼的Transform信息,最后輸出一個(gè)Pose給到渲染線程并存在本地Component上。
-
動(dòng)畫多線程:UE4的動(dòng)畫系統(tǒng)支持多線程的處理,一般來說Game線程會(huì)觸發(fā)一系列Game Play邏輯,最后調(diào)用到動(dòng)畫系統(tǒng)的Update內(nèi),然后這個(gè)方法里面把所有動(dòng)畫系統(tǒng)所需要的信息收集起來,存到一個(gè)Proxy里,然后計(jì)算具體Pose的工作就交給工作線程去完成,這時(shí)主線程可以繼續(xù)進(jìn)行后續(xù)的處理工作。需要注意的是,雖然此時(shí)Game線程未被Pose計(jì)算阻塞,但是渲染線程會(huì)等待RefreshBoneTransform結(jié)束后再開始工作,如果Evaluate Pose的時(shí)候有很多高消耗的操作,會(huì)發(fā)現(xiàn)渲染線程的時(shí)間會(huì)增長。
?
1、模型 - 骨骼 - 動(dòng)畫 - 動(dòng)畫藍(lán)圖基礎(chǔ)
-
無動(dòng)畫模型:靜態(tài)網(wǎng)格staticMesh, 能指定動(dòng)畫的模型:骨架網(wǎng)格sketonMesh
-
骨骼和動(dòng)畫一對(duì)多綁定,骨骼和模型也是一對(duì)多綁定(蒙皮),動(dòng)畫和模型(骨架網(wǎng)格體)沒有關(guān)系, 模型通過設(shè)置動(dòng)畫藍(lán)圖來使用動(dòng)畫,動(dòng)畫藍(lán)圖用于管理各種動(dòng)畫的觸發(fā)和狀態(tài)轉(zhuǎn)換
?
-
動(dòng)畫序列包括 普通動(dòng)畫 和 混合動(dòng)畫BlendSpace(疊加動(dòng)畫)
-
動(dòng)畫藍(lán)圖用于控制動(dòng)畫播放和切換的特殊藍(lán)圖,可以和綁定了骨骼網(wǎng)格體的藍(lán)圖類關(guān)聯(lián)
-
動(dòng)畫藍(lán)圖里通過動(dòng)畫圖表(動(dòng)畫藍(lán)圖特有的圖表,Pawn藍(lán)圖沒有)設(shè)置動(dòng)畫的狀態(tài)機(jī),管理動(dòng)畫切換;事件圖表設(shè)置動(dòng)畫狀態(tài)機(jī)所需要的參數(shù)如速度方向等;動(dòng)畫藍(lán)圖里的變量在事件圖表和動(dòng)畫圖表里共享
-
狀態(tài)機(jī)包括規(guī)則和狀態(tài),規(guī)則用于控制狀態(tài)的切換
-
動(dòng)畫序列直接拖入狀態(tài)機(jī)中會(huì)自動(dòng)產(chǎn)生一個(gè)狀態(tài);狀態(tài)機(jī)可以嵌套
-
pawn藍(lán)圖類中可以通過Mesh獲取動(dòng)畫實(shí)例get anim instance,然后通過類型轉(zhuǎn)換可以直接和動(dòng)畫藍(lán)圖的變量通信(讀寫動(dòng)畫藍(lán)圖類的變量),同理,動(dòng)畫藍(lán)圖中可以轉(zhuǎn)換為pawn藍(lán)圖來反向通信
?
-
Pawn、Charactor藍(lán)圖中通過輸入事件觸發(fā)動(dòng)畫藍(lán)圖中的狀態(tài)機(jī)切換,需要在項(xiàng)目中預(yù)先設(shè)置輸入按鍵映射,沒有需要新增:操作映射對(duì)應(yīng)瞬時(shí)輸入,軸映射為持續(xù)性輸入
?
?
2、 動(dòng)畫/模型導(dǎo)入及骨架重定向
-
動(dòng)畫導(dǎo)入常用格式fbx (obj為純模型文件),只導(dǎo)入模型和導(dǎo)入動(dòng)畫的方法一樣
fbx可能包括sketal、sketal Mesh、動(dòng)畫序列,可以導(dǎo)入以下幾種情況:
-
fbx不含動(dòng)畫序列,若指定已有兼容骨骼則只導(dǎo)入模型Mesh,不指定則同時(shí)導(dǎo)入骨骼
-
fbx包含動(dòng)畫序列,則可以導(dǎo)入骨骼和mesh的同時(shí)導(dǎo)入動(dòng)畫文件
-
可以導(dǎo)入的同時(shí)創(chuàng)建材質(zhì)和紋理(可以創(chuàng)建材質(zhì),不建議創(chuàng)建紋理)
-
-
動(dòng)畫導(dǎo)入需要前確認(rèn)幾點(diǎn)并預(yù)處理:
-
文件是否是原地動(dòng)畫(in place),不是需要maya中處理
-
文件的骨骼是否有根骨骼root(原點(diǎn)位置),沒有需要maya中處理
-
文件的骨骼和游戲中已有的骨骼是否兼容,如果是導(dǎo)入時(shí)可以不用導(dǎo)入骨骼;如果不兼容需要同時(shí)導(dǎo)入骨骼并做后續(xù)處理
-
不同的骨骼不能直接應(yīng)用動(dòng)畫,需要先進(jìn)行動(dòng)畫重定向,將不同骨骼的動(dòng)畫重定向到同一個(gè)骨骼,假設(shè)新導(dǎo)入的A骨架去匹配B:(另一種方法是在mixamo網(wǎng)站自動(dòng)綁定!)
-
角色 - 骨骼 - 所有層級(jí)
-
B骨架視圖 - 重定向管理器 - 選擇人形綁定
-
B骨架視圖 - 修改參考姿勢與A相同,修改完后,重定向管理器-修改姿勢-使用當(dāng)前姿勢
-
A骨架視圖 - 重定向管理器 - 選擇人形綁定 - 指定B骨架 - 自動(dòng)映射
-
兩邊打開骨骼命名,對(duì)應(yīng)調(diào)整骨骼映射,調(diào)整自動(dòng)未匹配和匹配錯(cuò)誤的后保存
-
選擇A骨架的動(dòng)畫右鍵- 重定向動(dòng)畫 - 復(fù)制動(dòng)畫并重定向 - change保存路徑
-
如果是是A套用B骨架及其動(dòng)畫,則右鍵B骨架的動(dòng)畫藍(lán)圖或動(dòng)畫序列進(jìn)行復(fù)制動(dòng)畫并重定向即可
-
-
動(dòng)畫包合集要確認(rèn)動(dòng)畫是否包含有骨骼,一般有一個(gè)帶有骨骼,其他的沒有,需要先導(dǎo)入有骨骼的動(dòng)畫(不指定骨骼),再批量導(dǎo)入其他動(dòng)畫(指定剛才導(dǎo)入的骨骼)
?
-
?
-
CharactorCreator導(dǎo)入U(xiǎn)E4使用插件可以直接指定UE4骨骼,自動(dòng)綁定和渲染設(shè)置,Animation需要勾選Use T0 pose,避免Pose問題(詳見踩坑記錄0)
?
3 、動(dòng)畫類型&動(dòng)畫融合
-
UE中動(dòng)畫相關(guān)類型
-
動(dòng)畫序列:導(dǎo)入的原始動(dòng)畫(一般為fbx格式)
-
混合空間(1D/2D):融合軸向的動(dòng)畫序列,UE完成動(dòng)畫切換過渡
-
瞄準(zhǔn)偏移:瞄準(zhǔn)朝向和身體其他動(dòng)作混合,UE操作類似混合空間
-
動(dòng)畫合成:對(duì)動(dòng)畫序列進(jìn)行簡單的組合
-
蒙太奇動(dòng)畫:用于復(fù)雜動(dòng)畫或指定骨骼混合的動(dòng)畫
-
利用時(shí)間軸+lerp實(shí)現(xiàn)簡單動(dòng)畫效果
-
逆向動(dòng)力學(xué)IK:Two Bone IK / Fabrik IK
-
-
UE中動(dòng)畫融合主要有兩類方法
-
混合空間動(dòng)畫 + 狀態(tài)機(jī)切換
-
蒙太奇動(dòng)畫 + 分層骨骼融合
-
-
混合動(dòng)畫的軸向設(shè)置(Axis Settings)
設(shè)置動(dòng)畫圖表所依賴的參數(shù),如水平設(shè)置一個(gè)Direction變量,垂直設(shè)置一個(gè)Speed變量,這兩個(gè)變量影響混合動(dòng)畫在多個(gè)動(dòng)畫切換時(shí)的過渡效果
-
最小/大軸值確定變量取值范圍
-
網(wǎng)格區(qū)分?jǐn)?shù)確定動(dòng)畫拆分?jǐn)?shù)
-
內(nèi)插時(shí)間影響動(dòng)畫過渡時(shí)間,值越大效果越明顯:如run切idle時(shí)不會(huì)立馬停下,會(huì)多跑幾步后慢慢停下; 對(duì)于參數(shù)跳動(dòng)導(dǎo)致的動(dòng)畫抖動(dòng)問題,一般也可以調(diào)整該值解決
-
BlendSamples設(shè)置單個(gè)動(dòng)畫的播放速率,能解決類似滑步問題
-
-
瞄準(zhǔn)偏移動(dòng)畫
-
RInterp to節(jié)點(diǎn):Rotation的一個(gè)插值的表述,該節(jié)點(diǎn)有四個(gè)參數(shù),Current和Target分別表示當(dāng)前角度和目的角度,DeltaTime為間隔時(shí)間,一般設(shè)置為我們計(jì)算機(jī)計(jì)算每幀的時(shí)間,Interp speed為調(diào)整的速度,越小速度越慢,一般調(diào)整為5左右效果比較好
-
獲取攝影機(jī)(控制器)和人物朝向的角度差:
-
get actor rotation
-
get controller rotation
-
delta / make rotator / break rotator
?
-
-
AimOffset不能添加動(dòng)畫解決辦法:
?
-
?
?
-
蒙太奇動(dòng)畫
-
蒙太奇為動(dòng)畫片段剪輯組合而成,比如攻擊過程PunchProcess = 攻擊準(zhǔn)備PunchBegin + 左拳PunchLeft * n + 右拳PunchRight * n + PunchEnd攻擊結(jié)束,這些動(dòng)作的組合都可以用一個(gè)蒙太奇片段組合實(shí)現(xiàn)
-
蒙太奇有以下場景:
-
不需要使用狀態(tài)機(jī)來定義的短暫動(dòng)作行為:比如,彎腰伸手拾取
-
復(fù)雜的動(dòng)作組合:比如,組合動(dòng)作攻擊
-
只需要骨骼部分呈現(xiàn)的動(dòng)作:比如,有一個(gè)伸手拾取的動(dòng)畫和walk_run狀態(tài),使用蒙太奇的分層骨骼混合可以實(shí)現(xiàn)邊走路/跑步,邊伸手拾取的動(dòng)作
?
?
-
-
?
4、蒙太奇動(dòng)畫專題
-
section用于分段和重組,基本操作技巧:
-
點(diǎn)擊綠線可以拖動(dòng),控制起始位置,重命名
-
銜接:點(diǎn)擊一個(gè)section后點(diǎn)擊另一個(gè)
-
循環(huán):點(diǎn)擊同一個(gè)兩次(變藍(lán), 常用于組合動(dòng)作idle循環(huán))
-
移動(dòng)幀條到指定時(shí)間,添加notifier
-
-
軌跡可以設(shè)置多條,用于跳轉(zhuǎn)控制
-
montage jump section,用于多條軌跡跳轉(zhuǎn)或循環(huán)狀態(tài)的跳出
-
設(shè)置動(dòng)畫序列的Root Motion啟動(dòng)根運(yùn)動(dòng),使用移動(dòng)動(dòng)畫,可以攻擊帶位移(前提是動(dòng)畫序列是帶位移的而不是inplace)
-
蒙太奇動(dòng)畫的制作步驟總結(jié)
-
制作蒙太奇動(dòng)畫,設(shè)置section,軌跡,自定義slot,notifiers
-
動(dòng)畫藍(lán)圖中使用slot進(jìn)行pose混合
事件圖表:
-
begin play(動(dòng)畫藍(lán)圖初始化)時(shí)獲取所屬pawn等相關(guān)的外部變量并保存:如Try get pawn owner,通過設(shè)置pawn中的變量控制普通藍(lán)圖中的蒙太奇調(diào)用
-
update animation(更新動(dòng)畫藍(lán)圖)時(shí)更新動(dòng)畫藍(lán)圖中的變量,用于姿勢blend的控制變量
動(dòng)畫圖表:
-
在指定pose后添加slot
-
分層骨骼節(jié)點(diǎn)設(shè)置,指定骨骼的所有子骨骼生效
-
根據(jù)布爾型 / 整型 / 枚舉型 / 分層骨骼 等方式進(jìn)行pose混合
-
-
普通藍(lán)圖中調(diào)用蒙太奇相關(guān)節(jié)點(diǎn):如Montage play (注意!使用動(dòng)畫里的蒙太奇播放,可以精準(zhǔn)控制section 和 position,不需要獲取動(dòng)畫實(shí)例 )
?
5 、動(dòng)畫藍(lán)圖中的重要節(jié)點(diǎn)
-
事件圖表特定事件和重要節(jié)點(diǎn)
-
Update Animation事件:每幀都會(huì)更新動(dòng)畫的事件
-
Try get pawn owner節(jié)點(diǎn)
-
get movement component節(jié)點(diǎn)
-
get velocity + get vector length:計(jì)算移動(dòng)速度(0 ~ max speed)
-
get actor rotation + get velocity + calculate direction:計(jì)算方向(-180~180)
-
-
動(dòng)畫圖表重要節(jié)點(diǎn)
-
save pose / use cached pose:保存姿勢 / 使用姿勢
-
動(dòng)畫融合:
-
blend posses by bool / int / enum:根據(jù)條件播放不同動(dòng)畫
-
apply additive融合
-
layered blend per bone:只對(duì)某些骨骼進(jìn)行混合,其他骨骼保持原姿勢,對(duì)哪些骨骼進(jìn)行混合以及混合的權(quán)重,都可以由我們自己決定。比較典型的用法是在奔跑的時(shí)候切換武器,就可以將上半身用 站立時(shí)切換武器的動(dòng)畫 進(jìn)行混合, 而下半身保持原奔跑姿勢不變
-
play aim montage:播放蒙太奇動(dòng)畫,常和分層骨骼融合結(jié)合使用
-
-
?
6、裝備物品附加到角色
-
骨架對(duì)應(yīng)位置添加slot
-
如手持物品在hand_r骨骼下添加slot
-
掛在背上的物品在spine_02骨骼下添加slot
-
-
attach / detach actor到組件
-
獲取插槽變換get slot transform
?
7、RootMotion
-
動(dòng)畫序列細(xì)節(jié)面板中啟用rootMotion
-
動(dòng)畫藍(lán)圖中設(shè)置 - animation preview editor - edit defaults - root motion
-
UE4 RootMotion要求RootMotion動(dòng)畫的根骨骼不能有旋轉(zhuǎn)移動(dòng)等信息,因此需要先maya中處理一下根骨骼,可以添加一個(gè)新的根骨骼用于root motion
-
AI MoveTo要替換自定義task
?
8、動(dòng)畫IK
-
雙骨骼IK
-
Fabric IK
?
9、動(dòng)畫通知
三種類型動(dòng)畫通知:
?
10、動(dòng)畫曲線
-
動(dòng)畫曲線是一種在動(dòng)畫播放時(shí)更改骨骼屬性,材質(zhì)屬性或變形目標(biāo)值的方法
-
指定要修改的資源(材質(zhì)或者變形目標(biāo)),相應(yīng)的命名曲線,然后在動(dòng)畫的持續(xù)時(shí)間內(nèi)調(diào)整關(guān)鍵幀值
-
-
動(dòng)畫曲線(Anim Curves) 面板顯示選定骨架的 變形目標(biāo)(Morph Target)、屬性(Attribute) 和 材質(zhì)(Material) 曲線的曲線值。 可以在此處刪除和重命名曲線,以及預(yù)覽曲線數(shù)據(jù)。
?
-
打開方式:
?
-
曲線取消選中了 自動(dòng)(Auto) 復(fù)選框,將不再從曲線中提取數(shù)據(jù),選擇性地關(guān)閉曲線的影響并預(yù)覽結(jié)果
-
Type默認(rèn)為屬性,點(diǎn)亮對(duì)應(yīng)Type切成材質(zhì)或變形目標(biāo)
-
添加新動(dòng)畫曲線:右鍵單擊任意曲線并從下拉菜單中選擇 添加(Add)
-
-
動(dòng)畫藍(lán)圖獲取曲線信息
-
在 動(dòng)畫藍(lán)圖 的AnimGraph里,調(diào)用一些藍(lán)圖節(jié)點(diǎn)來訪問曲線信息或獲取曲線名稱
?
-
?
-
參考鏈接:
-
動(dòng)畫曲線變形骨骼:https://blog.csdn.net/lei_7103/article/details/108207857
-
-
動(dòng)畫曲線修改材質(zhì):https://docs.unrealengine.com/zh-CN/Engine/Animation/Sequences/Curves/index.html
-
關(guān)聯(lián)知識(shí)-變形和換裝原理:https://www.chinaar.com/UE4/1817.html
-
官方變形文檔:https://docs.unrealengine.com/en-US/Engine/Content/Importing/FBX/MorphTargets/index.html
-
總結(jié)
- 上一篇: Mulitisim频率计设计
- 下一篇: Linux云计算【第一阶段】第四章:权限