UE4アニメーションシステム総おさらい【CEDEC 2018】

4.4K Views

August 23, 18

スライド概要

CEDEC2018の講演資料を公開します。

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

埋め込む »CMSなどでJSが使えない場合

各ページのテキスト
1.

アニメーションシステム総おさらい Epic Games Japan / Support Engineer Yutaro Sawada

2.

自己紹介 Epic Games Japan Support Engineer 澤田 祐太朗 2

3.

備考 検証バージョンはUE4.20です。 スライドは公開します。 3

4.

アニメーションシステム総おさらい 4

5.

そもそもアニメーションとは? 5

6.

ポリゴン 3つの頂点つないだ ポリゴン 6

7.

ポリゴンの移動 素直にやるとそれぞれの頂点に 移動量を加える 7

8.

複雑に 制御やデータ量が多い 8

9.

ボーンアニメーション B A ボーンB: 1.0 ボーンA: 1.0 ボーンA: 0.5 ボーンB: 0.5 9 頂点には、参照するボーンと どれだけ影響を受けるかWeight値

10.

ボーンアニメーション B A ボーンB: 1.0 ボーンA: 1.0 ボーンA: 0.5 ボーンB: 0.5 10 ボーンを動かすことで アニメーション

11.

ボーンアニメーション 11

12.

データ量が大きくなりがち ランタイムの処理負荷も高い 12

13.

しっかり理解して機能を使うために 総おさらい 13

14.

本日の内容 UE4で使用するアセットやシステムの紹介 アニメーション処理の流れ Tipsの紹介 14

15.

UE4で使用するアセットやシステムの紹介 15

16.

アニメーションアセットやシステム 1. 外部からインポートして利用するアセット 2. UE4内部で作成するアセットや機能 16

17.

外部からインポートして利用するアセット Skeletal Mesh Skeleton Animation Sequence Morph Target Alembic - Geometry Cache(Experimental) 17

18.

外部からインポートして利用するアセット FBX 18

19.

Skeletal Mesh(スケルタルメッシュ) アニメーションを行うための機能を持ったメッシュアセット ポイント • メッシュやボーンの情報を保持 19

20.

Skeleton(スケルトン) アニメーションを適用させるためのボーンの情報をもつアセット ポイント • メッシュ情報とは別に、 独立したアセットとして保存している 20

21.

Animation Sequence(アニメーションシーケンス) アニメーションのデータを持つアセット ポイント • Skeletonをアニメーションさせる情報 • Animation SequenceはSkeletonに紐づく 21

22.

ボーンアニメーションで使用するアセットまとめ Animation Sequence Skeletal Mesh Skeletonのアニメーション 動きを適用 22 アニメーション

23.

Morph Target 頂点ごとのアニメーションを行う ポイント ・ボーンアニメーションは影響を受け る骨の数が限定されているため、もっ と複雑な変形アニメーションを行いた い場合に利用する。 ※InfluencesBoneは4か8 23

24.

Alembic - Geometry Cache(Experimental) アニメーションする頂点位置をすべて保存したもの ポイント • SK_Manequin(Animation Stater Pack) 24フレームで約50MB • 処理速度やファイルサイズの問題で、 ランタイムで使用するのは現状難しい 24

25.

UE4内部で作成するアセットや機能 Animation Blueprint Sub Animation Blueprint Post Process Animation Blueprints Anim Composite Anim Montage Anim Notify Anim Notify State Anim modifier State Machine State Machine Blend Spaces Pose Assets Virtual Bones 25

26.

Animation Blueprint アニメーションのロジックを組むアセット ポイント • Skeleton毎に作成が必要 26

27.

Animation Blueprint アニメーションのロジックを組むためのBlueprint Animation Blueprint Event Graph Anim Graph 27

28.

Sub Animation Blueprint AnimationBlueprintを部品化し別のAnimation Blueprintから呼び出す仕組み ポイント • 同じSkeletonの指定が必要 • 複数人で同時に作業が可能 • 作成するアセットは通常のAnimBPと同じ • 入力としてSub-Graphを作成し繋げる 28

29.

Post Process Animation Blueprints Animation Blueprintの結果を調整するためのAnimation Blueprint ポイント • Mesh毎に設定が可能 • 同じSkeletonの指定が必要 • 作成するアセットは通常のAnimBPと同じ • 入力としてSub-Graphを作成し繋げる 29

30.

Animation Blueprintの運用について 30

31.

Anim Composite(コンポジット) 複数のAnimation Sequenceを繋げて 1つのシーケンスとして扱えるようにするアセット ポイント • ブレンド機能は無い • アニメーションブループリントでは、 Anim Sequenceと同様に扱われる 31

32.

Anim Montage(モンタージュ) 複数トラックでAnimation Sequenceを保持し、ブレンドなども行える ポイント • ブレンドを行う機能がある • GroupやSlotといった単位で、複数 のアニメーションを管理する Montage 映画用語で、視点の異なる複数のカットを 組み合わせて用いる技法のこと。(wikipediaより) 32

33.

Anim Notify Animation中に発生させるイベントの通知 ポイント • Animation SequenceやMontageで設 定することができる • 音やパーティクルを発生させるため の通知 33

34.

Anim Notify State 単純な通知だけではなく、開始や終了のイベントを作成することで、 Begin、Tick、EndといったBPの処理を行うことが出来るNotify ポイント • AnimNotifyStateBlueprintの作成が必要 • Anim Notifyと同様に通知として 呼び出す。 34

35.

Anim Modifier Animation SequenceにCurve情報やNotify情報を追加することができる機能 ポイント • 他のアセットに依存せず 独立して作成が可能 • Skeletonまたは、 Animation Sequence単体に適応可能 (Skeletonに適応を行った場合、そのSkeletonに紐づく すべてのAnimation Sequence適応されます。) 35

36.

State Machine(ステートマシン) 状態遷移を構築しAnimationの状態を決める機能 ポイント • Animation Blueprint内で作成する • 個別のAsset化などはできない 36

37.

Blend Spaces1D(ブレンドスペース) 1次元のグラフにアニメーションをプロットして、ブレンドを行う ポイント • 例:歩くスピードを軸に考える 0に通常状態 1を走る状態 間に歩く状態 37

38.

Blend Spaces2D(ブレンドスペース) 2次元のグラフにアニメーションをプロットして、ブレンドを行うアセット ポイント • 2軸でアニメーションのブレンド が可能 • ブレンドは処理が重いので 注意が必要 38

39.

PoseAssets アニメーション中ある1フレームのボーン状態を保存し利用できる ポイント ・AnimationSequenceから作成できる ・PoseAssetを組み合わせて新たな アニメーションを作ることも可能 39

40.

Virtual Bones SkinningしないボーンをUE4で作成できる機能 ポイント ・DCCツールに戻ることなく作成可能 ・既存のSkeletonの2つのボーン間で拘 束することが可能 ・LookAtなど制御用のターゲットとし て利用可能 40

41.

アニメーションシステムまとめ Skeletal Mesh Skeleton Animation Blueprint Animation Sequence Anim Composite Anim Montage Blend Space State Machine 41

42.

アニメーションシステムまとめ Skeletal Mesh Skeleton Animation Blueprint Animation Sequence Anim Composite Anim Montage Blend Space State Machine 42

43.

アニメーションシステムまとめ Skeletal Mesh Skeleton Animation Blueprint Animation Sequence Anim Composite Anim Montage Blend Space State Machine 43

44.

アニメーションの内部処理について 44

45.

CPUのスレッドについて Game Thread ゲームのメイン処理を行う Task Thread 非同期でGame Threadの補助的処理 Pool Thread UDP通信やシェーダーコンパイル等 Render Thread RHI Thread レンダリングに関わる処理 GPUへのコマンド転送 45

46.

CPUのスレッドについて Game Thread Task Thread Render Thread ゲームのメイン処理を行う 非同期でGame Threadの補助的処理 レンダリングに関わる処理 46

47.

スレッド処理のポイント Game Thread Function Function Task Thread Task Thread Task Thread 47 Function

48.

スレッド処理のポイント Task Thread Task Thread Task Thread DoTask DoTask DoTask Game Thread Function Function Function 48

49.

アニメーション処理の流れ Animation Update Skinning 49

50.

アニメーション処理の流れ Animation Update Skinning 50

51.

アップデート処理 Animation Update Event Update Graph Update 51 Graph Evaluate

52.

Animation Blueprintから見たときのUpdate Animation Blueprint Event Graph Anim Graph Event Update Graph Update 52 Graph Evaluate

53.

アップデート処理 Event Update Graph Update Graph Evaluate アニメーションの パラメーターなどを更新 AnimGraphの 更新 骨のMatrixを更新 53

54.

各ノードの処理について Updateの場合は、FAnimationUpdateContext Evaluationの場合は、FPoseContext 上記でソースコードを検索すると、実際の実装処理が探しやすい 54

55.

スレッド上での動き 55

56.

各処理のスレッド Event Update Game Thread Graph Update Task ThreadまたはGame Thread Graph Evaluate Task ThreadまたはGame Thread 56

57.

CPU処理のポイント Event Update Graph Update DoTask Task Thread DoTask Game Thread Event Update Graph Evaluate Graph Update Task Thread できるだけTaskThreadに逃がすべき 57 Graph Evaluate

58.

CPU処理のポイント Event Update Graph Update DoTask Task Thread DoTask Game Thread Event Update Graph Evaluate Graph Update Task Thread できるだけTaskThreadに逃がすべき 58 Graph Evaluate

59.

Root Motionが有効な場合 59

60.

Root Motion ルートボーンが動くようなアニメーション時、Actor自体の位置を動かす機能 Animation SequenceやAnim Montageで 設定が可能 60

61.

CPU処理のポイント Event Update Graph Update DoTask Graph Update DoTask Game Thread Event Update Graph Evaluate Task Thread Grap Evalu Task Thread できるだけTaskThreadに逃がすべき 61

62.

CPU処理のポイント Event Update Graph Update DoTask Graph Update DoTask Game Thread Event Update Graph Evaluate Task Thread Grap Evalu Task Thread できるだけTaskThreadに逃がすべき 62

63.

Animation Updateまとめ ・アニメーションにはUpdateとEvaluateの二段階がある ・Game Threadで、全て動いてしまうと重い処理となってしまう ・RootMotionを設定するとAnimGraphのUpdateが、 GameThreadで動いてしまう 63

64.

スキニングについて Animation Update Skinning 64

65.

スキニング処理の分岐 USkinnedMeshComponent:: CreateRenderStateConcurrent GPUスキニング CPUスキニング FSkeletalMeshGPUSkin FSkeletalMeshCPUSkin 65 スキニング無し FSkeletalMeshObjectSt atic

66.

スキニング処理の分岐 USkinnedMeshComponent:: CreateRenderStateConcurrent GPUスキニング CPUスキニング FSkeletalMeshGPUSkin FSkeletalMeshCPUSkin Render Thread スキニング無し FSkeletalMeshObjectSt atic CPU側の処理はRenderThreadで走る 66

67.

GPUスキニング 67

68.

アップデート処理 FSkeletalMesh GPUSkin Update Skin Cache Vertex Shader Compute Shader 68

69.

アップデート処理 FSkeletalMesh GPUSkin Update Skin Cache Vertex Shader Compute Shader 69

70.

Updateのみ行うGPUスキニング Pose情報 バッファにセット Render Thread FSkeletalMeshGPUSkin Update GPU Base Pass Base Pass Skinning Draw メッシュ描画(BasePass)の VertexShader内でスキニング 70

71.

Base Pass描画時の流れ GPU Base Pass Base Pass VertexShader PixelShader ベースのボーズ 71

72.

GPUスキニング BasePassのVertexShaderから実際の処理を確認できる(CalcBoneMatrixで検索) 内部的には4つのボーンの影響を受ける処理と、 8つまでのボーンの影響を受ける処理(EXTRA_INFLUENCES)で別れている オプションとして2ボーンまでしか影響を与えないモードがある .¥UE_4.20¥Engine¥Shaders¥Private¥BasePassVertexShader.usf .¥UE_4.20¥Engine¥Shaders¥Private¥GpuSkinVertexFactory.ush 72

73.

ボーン数を制限 ProjectSettingsからRenderingのOptimaization [Limit GPU Skinning to 2bones influence] 73

74.

アップデート処理 FSkeletalMesh GPUSkin Update Skin Cache Vertex Shader Compute Shader 74

75.

Skin Cacheとは Skin Cacheは、ComputeShaderで予めスキニングを行い、 スキニング済みのVetex情報を使い回す方法 75

76.

Skin CacheGPUスキニング SkinCache用 ComputeShaderの用意 Render Thread FSkeletalMeshGPUSkin Update ComputeShader SkinCacheUpdate GPU Base Pass Draw ConputeShaderでスキニングを行い、 BasePass時にはスキニング済み 76

77.

Base Pass描画時の流れ GPU Base Pass Base Pass VertexShader PixelShader スキニング済み ボーズ 77

78.

Skin Cacheの効果 モーフィングなどで変形量が多く スキニングにコストがかかる場合に有効な可能性はある ComputeShaderの作成コスト、またメモリも使用することから 多くのケースでは、期待する効果がでない 78

79.

SkinCache(実装) ComputeShaderも内容としては通常のスキニング処理と同じ 79

80.

CPUスキニング 80

81.

CPUスキニング RenderThread内でスキニン グ Render Thread FSkeletalMeshCPUSkin Update Base Pass GPU Draw スキニング済みの頂点を描画 81

82.

Base Pass描画時の流れ GPU Base Pass Base Pass VertexShader PixelShader スキニング済み ボーズ 82

83.

CPUスキニングが走る条件 ・Chunk(Section)毎の最大ボーン数が、 FeatureLevelで指定された個数を超えた場合 ・ES3.1未満の環境でInfluencesBoneの 最大が4を超える場合 ChunkはMaterial単位なので、マテリアル単位で対象となる ボーン数が指定値を超えるとCPUスキニングになる 83

84.

CPUスキニング(実装) Render Thread で走る Section毎の最大InfuluenceBone数で処理を切っている VectorRegister、VectorMultiplyなどは 128bitのSIMD命令をラップしたもの 84

85.

スキニング無し FSkeletalMeshObjectStatic 85

86.

スキニング無し(FSkeletalMeshObjectStatic) Staticオプションが付いている場合は、スキニング処理がスキップ MeshのDetailsから設定できる 86

87.

スキニング処理まとめ GPUスキニング FSkeletalMeshGPUSkin CPUスキニング FSkeletalMeshCPUSkin スキニング無し FSkeletalMeshObjectStatic GPUでスキニング処理を行う。 SkinCacheが有効の場合ComputeShaderが走る。 GPUスキニングがデータの条件により実行できな い場合、CPUのスキニング処理となる Staticオプションが付いている場合、 スキニング処理の無いパスとなる 87

88.

アニメーションの内部処理 Animation Update Skinning 88

89.

Tips アニメーションアセット制作における注意点 89

90.

アニメーションアセット制作における注意点 ・データ量の肥大化 ・アニメーション処理の増大 90

91.

データ量の肥大化 → データ量の削減 ・アニメーション圧縮 ・Skeletonの共通化 91

92.

アニメーション圧縮 92

93.

アニメーションの圧縮 ランタイムメモリの削減や、パッケージサイズの削減に有効 表現したいアニメーションを崩さないように 適宜設定が必要 93

94.

アニメーションの圧縮設定はAnimation Sequenceから • DetailsのCompression [Edit Compression Settings] 94

95.

Anim Compress • • • • • • • Automatic Bitwise Compress Only Least Destructive Per Track Compression Remove Every Second Key Remove Linear Keys Remove Trivial Keys 95

96.

Anim Compress • • • • • • • Automatic Bitwise Compress Only Least Destructive Per Track Compression Remove Every Second Key Remove Linear Keys Remove Trivial Keys ビットレベルでの圧縮等 96

97.

Anim Compress • • • • • • • Automatic Bitwise Compress Only Least Destructive Per Track Compression Remove Every Second Key Remove Linear Keys Remove Trivial Keys 圧縮せずに 生のデータに近い状態 97

98.

Anim Compress • • • • • • • Automatic Bitwise Compress Only Least Destructive Per Track Compression Remove Every Second Key キーの削除 Remove Linear Keys Remove Trivial Keys 98

99.

Animation Compression Content Browerで圧縮率とサイズが確認できるす

100.

Animation Compression 圧縮率: 小 圧縮率: 大 例はThirdPersonTemplateで6個のAnimSequence 割合で言うと50%以上の差がある場合も 圧縮設定でメモリ消費量が大きく変わる可能性があるため要チェック

101.

圧縮フォーマットの設定 ProjectSettingsのAnimationから設定 101

102.

Animation Compression Libraryの紹介 ・圧縮率、メモリ使用量、精度で UE4標準のものよりも、かなり良い結果 ・現在ランタイムのDecompress時間が、 UE4と同等なので更に改善を行っているとのこと https://github.com/nfrechette/acl-ue4-plugin 現状プラグインとしての提供で公式サポートではない 102

103.

Skeletonの共有化 103

104.

Skeletonの共通化(利点と注意点) ・1つのアニメーションを複数のキャラクタに適用できる ・アニメーションデータやメモリの削減が可能 ・ロジックの使い回しが可能 104

105.

Skeletal Meshをインポートする時の挙動 Skeletonを指定しない Import 新規Skeletonを作成 骨の構成が同じ場合は、 そのまま登録 既存のSkeletonを指定 骨の構成が違う場合は、 Skeletonの更新処理 105

106.

Skeletal Meshをインポートする時の挙動 Skeletonを指定しない Import 新規Skeletonを作成 骨の構成が同じ場合は、 そのまま登録 既存のSkeletonを指定 骨の構成が違う場合は、 Skeletonの更新処理 106

107.

骨構成が違う場合Skeletonの更新処理 Reimportが走らずマージ Skeleton共有ルールを 守っている状態 骨の構成が違う場合は、 Skeletonの更新処理 Skeleton共有ルールを 守っていない状態 Reimportが走ってしまう 107

108.

Skeleton共有ルール ・名前と階層構造で一致を行っている ・新しいボーンを間に挟むことはできない ・末尾に新規ボーンを追加可能 ・末尾のボーンが足りないケースも共有可能 マッピング情報で保持している情報が、 一次元の配列なため 108

109.

Skeleton共有の際に気をつけること 注意 更新した場合、そのSkeletonを参照している すべてのAnimation Sequenceが更新される 対応策 できるだけ必要なBoneは最初から含まれるように、 設計しておく 109

110.

アニメーション処理の増大 110

111.

アニメーション処理の増大 → 細かい最適化 ・アニメーションに関するLOD ・Animation Blueprintに関する注意点 111

112.

・アニメーションに関するLevel Of Detail ・Bone LOD ・Anim NotifyのLOD ・AnimGraphのLODThureshold ・Update Rate Optimization(URO) 112

113.

BoneのLOD LODによってBoneを指定して削除対象にしておくことで、 スキニングから除外することが可能 113

114.

Anim NotifyのLOD Animation Sequenceに設定しているAnim Notifyに MeshのLODの状態によって呼び出し可否を変える事が可能 114

115.

AnimGraphのLODThureshold AnimGraphで評価を行うか、各ノードでLODを設定 設定したLOD以下の状態の場合ノードが無効になる。 115

116.

Update Rate Optimization(URO) 116

117.

Update Rate Optimizations (URO) アニメーションの更新が過剰にならないようにを調整し、 最適化する機能。LODと組み合わせると、効果的 117

118.

UROは設定項目がUI化されていません UActorComponent USceneComponent FAnimUpdateRateManager UPrimitiveComponent UMeshComponent USkinnedMeshComponent USkeletalMeshComponent 118

119.

Animation Blueprintに関する注意点 119

120.

Animation Blueprintに関する注意点 AnimGraphでは、できるだけBlueprintの演算を呼ばないことが 高速化のために必要 120

121.

Fast Path(ファストパス) Anim Graph評価時にBlueprintの演算を実行しない場合に、 値を直接参照することでBPの呼び出しコストを削減する方法 Fast Pathが適応されているノードは、右上に⚡のマークが表示されます。 121

122.

Fast Path(ファストパス) 以下のノードは乗算をしようしているので、 ⚡のマークがなく、Fast Pathでは実行されません。 122

123.

Fast Path(ファストパス) Fast Pathが適応出来ない場合にWarningを出力するオプション 123

124.

スレッド上の動作(Fast Path) 124

125.

アップデート処理 Event Update Graph Update Evaluate アニメーションの パラメーターなどを更新 AnimGraphの 更新 骨のMatrixを更新 125

126.

Animation Updateの動き Event Update Graph Update DoTask Task Thread DoTask Game Thread Event Update Graph Evaluate Graph Update Task Thread Graph Evaluate Fast Pathが関わっていくるのはTask ThreadのUpdate 126

127.

Animation Updateの動き Event Update Graph Update DoTask Task Thread DoTask Game Thread Event Update Graph Evaluate Graph Update Task Thread Graph Evaluate もともと不必要な処理を整理して適応できるのであれば、非常に有効 127

128.

Fast Path適応のためにEventでパラメータを更新 Event Update アニメーションの パラメーターなどを更新 Graph Update AnimGraphの 更新 128 Evaluate 骨のMatrixを更新

129.

Animation Updateの動き Event Update Graph Update DoTask Task Thread DoTask Game Thread Event Update Graph Evaluate Graph Update Task Thread Graph Evaluate もともと不必要な処理を整理して適応できるのであれば、非常に有効 129

130.

Animation Updateの動き Event Update Graph Update Task Thread DoTask DoTask Game Thread Event Update Graph Evaluate Graph Update Task Thread Game Threadで動いているEventUpdateが重くなってしまう 130 Graph Evaluate

131.

Fast Pathまとめ • もともと過剰な処理を整理して適応できるのであれば、非常に有効 • すべてを適応させるためにEvent Graphに処理を持っていくのは危険 131

132.

アニメーションブレンドの注意点 132

133.

アニメーションブレンドの注意点 ・2つのアニメーションをブレンドする時に起きること アニメーションA アニメーションB それぞれアニメーションの評価処理が行われ、 その結果がブレンドされる。 LOREM 133

134.

アニメーションブレンド極端な例 LOREM 134

135.

アニメーションブレンドの極端な例 ・常に2回評価されてしまっている アニメーションA アニメーションB LOREM 135

136.

Animation Sequence Node LOREM 136

137.

アニメーションの評価処理 137

138.

アニメーションに関するCPUの処理 Event Update Graph Update DoTask Task Thread DoTask Game Thread Event Update Graph Evaluate Graph Update Task Thread Graph Evaluateで評価されている 138 Graph Evaluate

139.

アニメーションの評価 指定の時間でのポーズを作る UAnimationSequence GetBonePose LOREM 139

140.

アニメーションの評価 Skeletal Meshのボーン Skeletonのボーン Animation Sequence ボーンの移動データ LOREM 140

141.

アニメーションの評価 Skeletal Meshのボーン Skeletonのボーン Animation Sequenceのデータは、 Skeletonがベース Animation Sequence ボーンの移動データ LOREM 141

142.

アップデート処理 トラック:ボーン毎の移動、回転、スケール毎にある 動かすボーンが Meshにあるかチェック 各トラックで 補完処理 アニメーションデータはSkeletonベースなので、 実際にメッシュのボーンに存在するもののみ評価を行う 指定された秒数(タイミング)の 周りのキーを探して補完 142

143.

Animation Sequence Node LOREM 143

144.

アニメーションブレンド極端な例 LOREM 144

145.

アニメーションブレンドを減らす アニメーションA アニメーションB アニメーションA アニメーションB 設計として、できるだけオーバーラップする時間を減らす LOREM 145

146.

慣性ブレンド ・ アニメーションA アニメーションB 加速度をベースとした補完を行い、 アニメーションの評価は片方のみ LOREM 146

147.

慣性ブレンド 慣性ベースドなアニメーションブレンド(実装編) http://hogetatu.hatenablog.com/entry/2018/06/10/232856 慣性ベースドなアニメーションブレンド(解説編) http://hogetatu.hatenablog.com/entry/2018/06/02/185613 147

148.

アニメーションブレンドまとめ アニメーションブレンドは、できれば少ない方が望ましい 148

149.

〆まとめ 149

150.

まとめ ・アニメーションシステムの紹介 ・内部処理について ・その他Tips アニメーションは負荷が高くなりがちなので、 負荷になるポイントに注意しつつ制作することが重要 150

151.

Characterについての詳しい解説 151

155.

付録 155

156.

RootMotionの取得方法CharacterMoveComponent Actorを動かす挙動は、CharacterMoveComponentに 実装されているため、Skeletal Meshなどを配置した状態だと動作しない。 独自実装をする場合は、 1. SkeletalMeshComponentのConsumeRootMotion()で FRootMotionMovementParamsを取得 2. FRootMotionMovementParamsから GetRootMotionTransformで移動値を取得できる 156

157.

Animation Sequenceの評価を行うGetBonePose UAnimationSequence GetBonePose 指定の時間でのポーズ(FCompactPose)を作る GetBonePoseからEvaluateCurveDataを呼び出す カーブをCurrentTimeで評価を行い配列で取得 GetBonePose内処理 トラックで定義されているScale,Translate, Rotation毎に、 SkeletonとMeshのBoneとのマッピングPairを作る GetBonePoseから呼び出し OutPose.PopulateFromAnimationからAnimationFormat_GetAnimationPose 作成した各種のトラックとマッピングPair情報から、 情報として持っていた圧縮情報をもとに展開してTransformを取り出す 157

158.

最終的なアニメーション評価処理(実装) 各種圧縮や補完方法で定義されているGetBoneAtomTranslation(...)で取得 基本的な動作としては、 取得したい時間の前後のキーフレームを探索し、 その2つのキーフレームのTransform情報を 補完して求める 158