日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

UE4动画系统笔记

發布時間:2024/3/12 windows 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UE4动画系统笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

0、UE4動畫基礎概念

1、模型 - 骨骼 - 動畫 - 動畫藍圖基礎

2、 動畫/模型導入及骨架重定向

3 、動畫類型&動畫融合

UE中動畫相關類型主要包括:

UE中動畫融合主要有兩類方法:

混合動畫的軸向設置(Axis Settings):

瞄準偏移動畫

蒙太奇動畫:

4、蒙太奇動畫專題

5 、動畫藍圖中的重要節點

事件圖表特定事件和重要節點:

動畫圖表重要節點:

6、裝備物品附加到角色

7、RootMotion

8、動畫IK

9、動畫通知

10、動畫曲線


0、UE4動畫基礎概念

  • 骨架(Skeleton):Skeleton是整個動畫系統的基礎,其主要作用是記錄了骨架以下信息:

    • 骨骼層級信息

    • 參考姿勢信息

    • 骨骼名稱

    • 曲線(Curve)信息

    • 動畫通知(Animation Notify)信息

    • 插槽數據(插槽名稱、所屬骨骼、Transform等)

    • 虛擬骨骼信息

    • 骨骼名稱Index映射表

    • 其他骨骼設置信息:包括位移重定向(Translation Retarget)設置,LOD設置等信息

  • 骨骼模型(Skeletal Mesh):顧名思義,骨骼模型是在骨骼基礎之上的模型,通俗來說就是綁定骨骼后的網格體,也就是我們在游戲中能夠看到的角色的“肉身”。其主要包含以下信息:

    • 模型的頂、線、面信息

    • 頂點的骨骼蒙皮權重

    • 模型的材質信息

    • 模型LOD信息

    • 所屬骨架

    • Morph Target信息

    • Physics Asset設置信息

    • 布料系統相關設置

  • 動畫序列(Animation Sequence):動畫序列是用來記錄骨骼運動狀態的資源,也是讓動畫動起來的關鍵之一,其主要包含了一下信息:

    • 動畫關鍵幀信息

    • 包含運動的骨骼信息

    • 每幀骨骼的Transform信息:包含了骨骼的旋轉、位移和縮放

    • 動畫通知信息:記錄了觸發通知的類型和時間

    • 動畫曲線信息:記錄了隨時間軸變化的曲線信息

    • 其他基礎信息:包括了疊加動畫設置、根骨骼位移設置等信息

  • 混合空間(BlendSpace):其主要作用是根據輸入的float值從若干臨近的動畫中采樣并輸出一個融合后的Pose。根據數據維度不同分為BlendSpace和BlendSpace1D兩種類型。

  • 瞄準偏移(AimOffset):是BlendSpace的一種特殊形式,區別在于其內部的所有采樣點都是疊加動畫。主要用在游戲過程中疊加角色瞄準和看的方向。

  • 蒙太奇動畫(AnimationMontage):對Animation Sequence資源的擴充,可以方便的使用藍圖、代碼控制動畫資源的播放,并且可以方便的實現根骨骼動畫和動畫播放結束后的回調。要使用Montage就需要將相應的動畫拖入其中,在Montage編輯器中可以對動畫進行編輯、裁剪、拼接等操作。Montage編輯器中有一個Slot(插槽)的東西,通俗的解釋就是,插槽是對應在動畫藍圖中播放Montage的播放點,同一個Montage可以有多個不同的Slot。

  • 動畫藍圖(Animation Blueprint),主要負責動畫的混合驅動邏輯以及后處理的相關工作。一般大部分動畫程序的工作就是在這里完成。動畫藍圖中可以搭建動畫狀態機以及動畫后處理邏輯,例如IK、疊加動畫等。

  • 骨骼動畫系統大致可以分為兩步:

  • 計算骨骼Pose:每一根骨骼可以看做一個點,而我們的Pose就是所有骨骼Transform(位移+旋轉+縮放)的集合,注意,一般來說,這個Pose是基于骨架參考姿勢(Reference Pose)的變換矩陣。

  • 蒙皮:骨骼計算好后我們還是無法看到一個角色的造型,這時需要將3D美術制作好的網格體的頂點按照骨骼Pose進行變化。這里變換的依據是頂點的蒙皮權重和參考姿勢的信息(一個頂點可能受到多個骨骼的影響)。

  • 動畫系統更新過程:UE4里主要承擔上述兩步職責的是Skeletal Mesh Component。在SkeletalMeshComponent創建時,會創建一個Animation Instance,這就是主要負責計算最終Pose的對象,而我們制作的AnimationBlueprint也是基于UAnimationInstance這個類的。在SkeletalMeshComponent進行Tick時,會調用TickAnimation方法,然后會調用Animation Instance的UpdateAnimation()方法,此方法會調用一遍所有動畫藍圖中連接的節點的Update_AnyThread()方法,用來更新所有節點的狀態。然后后續根據設置的不同會從Tick函數或者Work線程中調用SkeletalMeshComponent的RefreshBoneTransforms()方法,此方法進而會調用動畫藍圖所有節點的Evaluate_AnyThread()方法。Evaluate的含義就是指根據特定的條件(從Update時獲得的參數)計算出動畫所有骨骼的Transform信息,最后輸出一個Pose給到渲染線程并存在本地Component上。

  • 動畫多線程:UE4的動畫系統支持多線程的處理,一般來說Game線程會觸發一系列Game Play邏輯,最后調用到動畫系統的Update內,然后這個方法里面把所有動畫系統所需要的信息收集起來,存到一個Proxy里,然后計算具體Pose的工作就交給工作線程去完成,這時主線程可以繼續進行后續的處理工作。需要注意的是,雖然此時Game線程未被Pose計算阻塞,但是渲染線程會等待RefreshBoneTransform結束后再開始工作,如果Evaluate Pose的時候有很多高消耗的操作,會發現渲染線程的時間會增長。

    ?

1、模型 - 骨骼 - 動畫 - 動畫藍圖基礎

  • 無動畫模型:靜態網格staticMesh, 能指定動畫的模型:骨架網格sketonMesh

  • 骨骼和動畫一對多綁定,骨骼和模型也是一對多綁定(蒙皮),動畫和模型(骨架網格體)沒有關系, 模型通過設置動畫藍圖來使用動畫,動畫藍圖用于管理各種動畫的觸發和狀態轉換

    ?

  • 動畫序列包括 普通動畫 和 混合動畫BlendSpace(疊加動畫)

  • 動畫藍圖用于控制動畫播放和切換的特殊藍圖,可以和綁定了骨骼網格體的藍圖類關聯

  • 動畫藍圖里通過動畫圖表(動畫藍圖特有的圖表,Pawn藍圖沒有)設置動畫的狀態機,管理動畫切換;事件圖表設置動畫狀態機所需要的參數如速度方向等;動畫藍圖里的變量在事件圖表和動畫圖表里共享

  • 狀態機包括規則和狀態,規則用于控制狀態的切換

  • 動畫序列直接拖入狀態機中會自動產生一個狀態;狀態機可以嵌套

  • pawn藍圖類中可以通過Mesh獲取動畫實例get anim instance,然后通過類型轉換可以直接和動畫藍圖的變量通信(讀寫動畫藍圖類的變量),同理,動畫藍圖中可以轉換為pawn藍圖來反向通信

    ?

  • Pawn、Charactor藍圖中通過輸入事件觸發動畫藍圖中的狀態機切換,需要在項目中預先設置輸入按鍵映射,沒有需要新增:操作映射對應瞬時輸入,軸映射為持續性輸入

    ?

?

2、 動畫/模型導入及骨架重定向

  • 動畫導入常用格式fbx (obj為純模型文件),只導入模型和導入動畫的方法一樣

    fbx可能包括sketal、sketal Mesh、動畫序列,可以導入以下幾種情況:

    • fbx不含動畫序列,若指定已有兼容骨骼則只導入模型Mesh,不指定則同時導入骨骼

    • fbx包含動畫序列,則可以導入骨骼和mesh的同時導入動畫文件

    • 可以導入的同時創建材質和紋理(可以創建材質,不建議創建紋理)

  • 動畫導入需要前確認幾點并預處理:

    • 文件是否是原地動畫(in place),不是需要maya中處理

    • 文件的骨骼是否有根骨骼root(原點位置),沒有需要maya中處理

    • 文件的骨骼和游戲中已有的骨骼是否兼容,如果是導入時可以不用導入骨骼;如果不兼容需要同時導入骨骼并做后續處理

    • 不同的骨骼不能直接應用動畫,需要先進行動畫重定向,將不同骨骼的動畫重定向到同一個骨骼,假設新導入的A骨架去匹配B:(另一種方法是在mixamo網站自動綁定!)

      • 角色 - 骨骼 - 所有層級

      • B骨架視圖 - 重定向管理器 - 選擇人形綁定

      • B骨架視圖 - 修改參考姿勢與A相同,修改完后,重定向管理器-修改姿勢-使用當前姿勢

      • A骨架視圖 - 重定向管理器 - 選擇人形綁定 - 指定B骨架 - 自動映射

      • 兩邊打開骨骼命名,對應調整骨骼映射,調整自動未匹配和匹配錯誤的后保存

      • 選擇A骨架的動畫右鍵- 重定向動畫 - 復制動畫并重定向 - change保存路徑

      • 如果是是A套用B骨架及其動畫,則右鍵B骨架的動畫藍圖或動畫序列進行復制動畫并重定向即可

    • 動畫包合集要確認動畫是否包含有骨骼,一般有一個帶有骨骼,其他的沒有,需要先導入有骨骼的動畫(不指定骨骼),再批量導入其他動畫(指定剛才導入的骨骼)

      ?

?

  • CharactorCreator導入UE4使用插件可以直接指定UE4骨骼,自動綁定和渲染設置,Animation需要勾選Use T0 pose,避免Pose問題(詳見踩坑記錄0)

?

3 、動畫類型&動畫融合

  • UE中動畫相關類型

    • 動畫序列:導入的原始動畫(一般為fbx格式)

    • 混合空間(1D/2D):融合軸向的動畫序列,UE完成動畫切換過渡

    • 瞄準偏移:瞄準朝向和身體其他動作混合,UE操作類似混合空間

    • 動畫合成:對動畫序列進行簡單的組合

    • 蒙太奇動畫:用于復雜動畫或指定骨骼混合的動畫

    • 利用時間軸+lerp實現簡單動畫效果

    • 逆向動力學IK:Two Bone IK / Fabrik IK

  • UE中動畫融合主要有兩類方法

    • 混合空間動畫 + 狀態機切換

    • 蒙太奇動畫 + 分層骨骼融合

  • 混合動畫的軸向設置(Axis Settings)

    設置動畫圖表所依賴的參數,如水平設置一個Direction變量,垂直設置一個Speed變量,這兩個變量影響混合動畫在多個動畫切換時的過渡效果

    • 最小/大軸值確定變量取值范圍

    • 網格區分數確定動畫拆分數

    • 內插時間影響動畫過渡時間,值越大效果越明顯:如run切idle時不會立馬停下,會多跑幾步后慢慢停下; 對于參數跳動導致的動畫抖動問題,一般也可以調整該值解決

    • BlendSamples設置單個動畫的播放速率,能解決類似滑步問題

  • 瞄準偏移動畫

    • RInterp to節點:Rotation的一個插值的表述,該節點有四個參數,Current和Target分別表示當前角度和目的角度,DeltaTime為間隔時間,一般設置為我們計算機計算每幀的時間,Interp speed為調整的速度,越小速度越慢,一般調整為5左右效果比較好

    • 獲取攝影機(控制器)和人物朝向的角度差:

      • get actor rotation

      • get controller rotation

      • delta / make rotator / break rotator

        ?

    • AimOffset不能添加動畫解決辦法:

      ?

?

?

  • 蒙太奇動畫

    • 蒙太奇為動畫片段剪輯組合而成,比如攻擊過程PunchProcess = 攻擊準備PunchBegin + 左拳PunchLeft * n + 右拳PunchRight * n + PunchEnd攻擊結束,這些動作的組合都可以用一個蒙太奇片段組合實現

    • 蒙太奇有以下場景:

      • 不需要使用狀態機來定義的短暫動作行為:比如,彎腰伸手拾取

      • 復雜的動作組合:比如,組合動作攻擊

      • 只需要骨骼部分呈現的動作:比如,有一個伸手拾取的動畫和walk_run狀態,使用蒙太奇的分層骨骼混合可以實現邊走路/跑步,邊伸手拾取的動作

        ?

        ?

?

4、蒙太奇動畫專題

  • section用于分段和重組,基本操作技巧:

    • 點擊綠線可以拖動,控制起始位置,重命名

    • 銜接:點擊一個section后點擊另一個

    • 循環:點擊同一個兩次(變藍, 常用于組合動作idle循環)

    • 移動幀條到指定時間,添加notifier

  • 軌跡可以設置多條,用于跳轉控制

  • montage jump section,用于多條軌跡跳轉或循環狀態的跳出

  • 設置動畫序列的Root Motion啟動根運動,使用移動動畫,可以攻擊帶位移(前提是動畫序列是帶位移的而不是inplace)

  • 蒙太奇動畫的制作步驟總結

  • 制作蒙太奇動畫,設置section,軌跡,自定義slot,notifiers

  • 動畫藍圖中使用slot進行pose混合

    事件圖表:

    • begin play(動畫藍圖初始化)時獲取所屬pawn等相關的外部變量并保存:如Try get pawn owner,通過設置pawn中的變量控制普通藍圖中的蒙太奇調用

    • update animation(更新動畫藍圖)時更新動畫藍圖中的變量,用于姿勢blend的控制變量

    動畫圖表:

    • 在指定pose后添加slot

    • 分層骨骼節點設置,指定骨骼的所有子骨骼生效

    • 根據布爾型 / 整型 / 枚舉型 / 分層骨骼 等方式進行pose混合

  • 普通藍圖中調用蒙太奇相關節點:如Montage play (注意!使用動畫里的蒙太奇播放,可以精準控制section 和 position,不需要獲取動畫實例 )

  • ?

5 、動畫藍圖中的重要節點

  • 事件圖表特定事件和重要節點

    • Update Animation事件:每幀都會更新動畫的事件

    • Try get pawn owner節點

    • get movement component節點

    • get velocity + get vector length:計算移動速度(0 ~ max speed)

    • get actor rotation + get velocity + calculate direction:計算方向(-180~180)

  • 動畫圖表重要節點

    • save pose / use cached pose:保存姿勢 / 使用姿勢

    • 動畫融合:

      • blend posses by bool / int / enum:根據條件播放不同動畫

      • apply additive融合

      • layered blend per bone:只對某些骨骼進行混合,其他骨骼保持原姿勢,對哪些骨骼進行混合以及混合的權重,都可以由我們自己決定。比較典型的用法是在奔跑的時候切換武器,就可以將上半身用 站立時切換武器的動畫 進行混合, 而下半身保持原奔跑姿勢不變

      • play aim montage:播放蒙太奇動畫,常和分層骨骼融合結合使用

?

6、裝備物品附加到角色

  • 骨架對應位置添加slot

    • 如手持物品在hand_r骨骼下添加slot

    • 掛在背上的物品在spine_02骨骼下添加slot

  • attach / detach actor到組件

  • 獲取插槽變換get slot transform

?

7、RootMotion

  • 動畫序列細節面板中啟用rootMotion

  • 動畫藍圖中設置 - animation preview editor - edit defaults - root motion

  • UE4 RootMotion要求RootMotion動畫的根骨骼不能有旋轉移動等信息,因此需要先maya中處理一下根骨骼,可以添加一個新的根骨骼用于root motion

  • AI MoveTo要替換自定義task

?

8、動畫IK

  • 雙骨骼IK

  • Fabric IK

?

9、動畫通知

三種類型動畫通知:

  • montage或sequencer中直接add notify, 動畫藍圖中實現通知事件
  • 新建繼承AniNotify類,montage或sequencer中添加(單幀通知),重寫received notify
  • 新建繼承AniNotifyState類,montage或sequencer中添加并控制長度(狀態通知),重寫received notify begin/end/tick
  • ?

    10、動畫曲線

    • 動畫曲線是一種在動畫播放時更改骨骼屬性,材質屬性或變形目標值的方法

      • 指定要修改的資源(材質或者變形目標),相應的命名曲線,然后在動畫的持續時間內調整關鍵幀值

    • 動畫曲線(Anim Curves) 面板顯示選定骨架的 變形目標(Morph Target)屬性(Attribute)材質(Material) 曲線的曲線值。 可以在此處刪除和重命名曲線,以及預覽曲線數據。

      ?

      • 打開方式:

        ?

      • 曲線取消選中了 自動(Auto) 復選框,將不再從曲線中提取數據,選擇性地關閉曲線的影響并預覽結果

      • Type默認為屬性,點亮對應Type切成材質或變形目標

      • 添加新動畫曲線:右鍵單擊任意曲線并從下拉菜單中選擇 添加(Add)

    • 動畫藍圖獲取曲線信息

      • 動畫藍圖 的AnimGraph里,調用一些藍圖節點來訪問曲線信息或獲取曲線名稱

        ?

    ?

    • 參考鏈接:

      • 動畫曲線變形骨骼:https://blog.csdn.net/lei_7103/article/details/108207857

    • 動畫曲線修改材質:https://docs.unrealengine.com/zh-CN/Engine/Animation/Sequences/Curves/index.html

      • 關聯知識-變形和換裝原理:https://www.chinaar.com/UE4/1817.html

      • 官方變形文檔:https://docs.unrealengine.com/en-US/Engine/Content/Importing/FBX/MorphTargets/index.html

    總結

    以上是生活随笔為你收集整理的UE4动画系统笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。