Unreal Engine 4 UE4学習 9日目 猫でも分かる#5講座を見る

UE4

はじめに

  • なにか目的を持って作りたい為UE4を始める
  • UE4一ヶ月でどれくらいのレベルになるのか検証

前回に引き続き猫でも分かるシリーズを見ることに

明日12時頃に大きなアナウンスが!なんでしょうか?

今回はAnimation ブループリント(以降 Animation BPを記す) との事。全くわからないので嬉しいですね

今回の流れ

  • UE4のアニメーション機能について -基本編-
  • Animation BPについて
  • サードパーソンテンプレートで使われているAnimation BPを解説

UE4のアニメーション機能について -基本編-

  • アニメーションとは
    • ジャンプ
    • 歩く
    • 待機
    • 攻撃などの動きを指す

アニメーションに必要なもの(3点)

  • 3DCGモデル
    • SkeletalMesh 骨が組んであるモデル
  • ボーン
    • UE4ではボーンをSkeletonアセットで管理する
    • ボーンは複数の3DCGで共有したりアニメーションで共有したりといったことが可能
  • アニメーション (Animation)

AnimationSequenceについて

  • 歩く、待機、走る等の定義した動きを組み合わせたものを Animation Sequenceという
  • Animation Sequenceはアセットの一種
  • UE4のSequencerとAnimation Sequenceは直接関係はない

Animation BPについて

Animation BPがなぜ必要か?

  • AnimationをするBP用ノードは存在しており再生は可能
    • ノード: Play, Play Animation, Set Animation等
    • しかし状態を加味したい場合にAnimation BPを使ったほうが良い
      • 状態とはアクターが空中にいる、走ってる、待機している、歩いている等
      • BPのみでもできないことは無いがとても複雑になるとの事
  • 下記フローのような事をやるとBPのみだと複雑になる
    • フローはイメージです。参考程度に見てください。
    • Animation BPはアニメーションに特化している為、下記のような実装は楽な上により複雑なものもできる

Animation BPの役割

  • フローはイメージで、参考程度に見てください。

  • IK(Inverse kinematics)もサポートしているため、着地位置片足側に台があったりしてもそれを加味して足の着位置を調整できる
    • IK(Inverse kinematics) 子孫→先祖へのイベント伝播するボーンの設定
      • 対義語 FK(Foward kinematics) 先祖→子孫へのイベント伝播するボーンの設定
    • イメージ的にはIKはボトムアップ、FKはトップダウンでイベントを伝える

Animation BPの機能

  • ステートマシン
  • AnimGraph

Animation BP指定方法

  • ThirdPersonの例
    • アニメーションのAnim Class で指定する

Animation BPを開き方

ThirdPersonの例

  1. ThirdPerson_AnimBPをダブルクリックする

    • ペルソナというエディタが開く
    • ペルソナエディタはメッシュ、スケルトンについての情報も参照可能
    • 何を参照するかは上部のアイコンで切り替え
    • ペルソナエディタの概略は最後にも記載しておく

サードパーソンテンプレートで使われているAnimation BPを解説

最初のセクション

コメントの直訳: PawnOwnerが有効かどうかを見る(ペルソナにはいない)

  • カッコ内のコメントがよくわからない。Not ValidであればAnimation BPに処理は落ちてきていないという事か)

ここで行っていること: PawnOwner情報の取得

  • Try Get Pwan Owner ノード
    • Third Person キャラクターの情報を取得する
    • Animation BPはBPからの司令で動いているが、そのBP(親)の情報を取得するノード
    • 親情報を取得できない場合もある
    • 取得した情報は簡易情報。アクセス権があり詳細な情報は取れていない
    • アクセス権を広げるためには Cast ノードを使う必要がある
  • Is Valid
    • Try Get Panw Ownerが成功したかどうかを判断するノード
    • 浮いているかどうかをチェックする
    • もう一種類 Is Validノードはある。ここで使われているIs Validノードはブランチ(if)の機能を併せ持つが、もう片方はブーリアン値のみ返すノード

2番目のセクション

コメントの直訳: IsInAir の設定(ステートマシン内で使用する)

ここで行っている事:ThirdPersonCharacterが浮いているかどうかを取得し Ins in Air プロパティを更新する

  • Get Movement Component
    • ThirdPersonCharacterはCharacter Movement Componentを持っている
      • TryGetPwnOwnerではその情報の簡易バージョンでし取れない
      • 詳細情報を取得するためこのGet Movement Componentを使っている
  • Is Fallingは空中にいるかを判定する
  • 結果をプロパティにセットする

3番目のセクション

コメントの直訳: Speedの設定(1Dブレンドスペースで使用する)

  • XYZの何れかの一次元情報を取得する??みたいおそらくここでは長さを取得して長さから速さを測定する目的があるため、1Dで問題がないという事か。
  • Get Velocity
    • Velocityを取得
      - VectorLength
    • Vectorの長さを取得する事で速度が取得できる
  • 結果をプロパティにセットする

最後に

ステートマシン図についても実践しながら覚えられそう。UE4を触ることでUML等の図にも詳しく慣れそうなので嬉しい限りですね。

  • AnimationBPのイベントグラフではキャラクターの情報を親であるBPからもらってプロパティを設定する。
    • ここで言うプロパティは空中か?速度は?等の状態
  • AnimGraphではポーズを出力する
    • AnimGraphのステートマシンはイベントグラフで更新されたプロパティやアニメーションの進捗度合いなどから次の状態したりAnimationSequenceを再生したりする

自分用メモ

  • PUMLのアクティビティ図で使ったソース
@startuml
:start;
if (今空中?) then (yes)
:空中用処理;
else (no)
if (移動中?) then (yes)
:速度取得;
:走りor歩きモーション切り替え;
else (no)
:待機モーション;
endif
endif
stop
@enduml
  • PUMLのシーケンス図で使ったソース
@startuml
User -> ThirdPersonCharacter: ジャンプボタンを押す
ThirdPersonCharacter -> AnimationBP: 空中にいるので空中にいるモーションを再生
@enduml

メモ

  • Skeltal Meshは骨を持つメッシュ
  • UE4ではボーンをSkeltonアセットで管理する
  • ThirdPerson Animation
    • ThirdPersonIdle 待機
    • ThirdPersonWalk 歩き
    • THirdPersonRun 走り
  • Skeltonが中心。スケルタルメッシュとAnimation Sequenceは直接関係がない
  • Animation BPメモ
    • 初期状態だとボーンのみと関連している
    • Animationと紐付ける事も可能
  • Maps/Animation レベルを開くとアニメーションサンプルを見ることができる
  • 公式ドキュメントスケルタルメッシュのアニメーションシステムに色々アニメーションが載っている
  • アニメーションの参考となる無料のアセットがある
    • Epicコンテンツ アニメーションスターターパック
    • Mixamoアニメーションパック
    • Action RPG
  • アニメーションモンタージュ
    • 今回扱っていないが状態などを無視してアニメーションを割り込ませる時などに利用する機能の模様
  • コントロールリグ
    • UE4エディター上でアニメーション上で作る機能がある

アウトプットログ ウィンドウ

  • エラー情報の確認

ペルソナエディター概略

  • animation BPの修正などを行う

スケルトン


– スケルトンを見たり編集できる
– 骨を見る

メッシュ

モフターゲットと言うパラメータをいじることができる

  • ThirdPersonCharacterにはないが表情を変えたり、角を出したりといったことができる

アニメーション

  • アニメーションのプレビューに使うモデルは差し替え可能

  • ケルトンに紐付いているモデルであれば選択可能
  • スケルタルメッシュをデフォルトのキャラ以外インポートしていない為、この画像にはマネキン以外の選択肢は表示されていない

アニメーションブループリント

  • 基本的にはイベントグラフとAnimGraphを編集する事になる
イベントグラフ

  • イベントグラフでは状態のプロパティを設定/参照したりする
  • 通常のBPはTickというイベントにより毎フレームのイベントを処理するが、Animation BPはUpdate Animationで行う

    • 毎フレーム評価するかどうかは設定次第
      • キャラが隠れていたら実行しない
      • カクついてもいいからnフレームごとに使用等の設定ができる
    • Delta Time X ピンからは前回呼ばれたときから経過した時間が取得できる
AnimGraph

  • 出力ポーズを最終的に出力するのが目的
  • 状態のプロパティに基づいてどのようなアニメーションを再生するかを決定する
  • 現在はステートマシンで色々処理した結果で出力ポーズが定められている

    • 直接出力アセットを接続する事も可能。
    • 待機を接続しているためキャラクターは棒立ち状態に固定される
  • 公式ドキュメント

docs.unrealengine.com

新規ステートマシンの作り方

ステートマシン

  • AnimGraphのステートマシンと書かれたノードをダブルクリックで開ける
  • 現在 Idle/Runがハイライトされているがそれが現在の状態
  • その他にもJumpStart(飛び始め)、JumpLoop(ジャンプ中)、JumpEnd(着地)が見える
  • 矢印も時計回りに見える 待機/走る → 飛び始め → ジャンプ中 → 着地 → 待機/走るの順に状態は変わる
  • 状態遷移の方法は矢印に定義されている

    • ダブルクリックで開ける
    • またはカーソルを矢印の上にすると概要が見れる

      • Idle/Run状態から飛び始めに移行する条件は IsInAir? プロパティがTrueであれば移行する事が記されている
  • ある状態からある状態へ遷移する時間の設定 ブレンド設定 継続時間

    • その下のモードではカーブも変えられる。
      • EaseInOut等の設定が可能
        • エレベーター等のように動き始めゆっくりで徐々に遷移するような場合、線形ではなく曲線を使う
JumpStart

  • AnimationSequenceのThirdPersonJump_Loopが指定され再生されている
  • アニメーションは開始 0 → 1 で終了するように正規化されている
  • JumpLoopに移る条件

    • アニメーション開始してから 0.1 よりも多きくなったら JumpLoopへ移る
JumpEnd
  • JumpLoopからJumpEndに移る条件

    • IsInAir? でなければ JumpEndに移る
  • JumpEndからIdle/Run状態に移る条件
Idle/Run

  • ブレンドスペースというものを使用している
    • ThirdPerson_IdleRun_2Dをダブルクリックすると定義が見える
    • Speed 0 = 待機、Speed 93.75 = 歩く、 Speed 375 = 走る
    • 待機・歩く・走るの3つがブレンドされている
プレビューシーンタブ
  • ライトを切ったり光の強さを変えたりできる
  • その他 背景/地面の表示非表示、背景の変更など
  • アニメーションプレビューからは状態を変更する事ができ即座に結果を確認することができる

    • Idle/Run 状態 = 空中?にチェックを入れた図
      • アニメーションをどのように変えていくかを設定する際、このプロパティを変更する事が基本的に多い
      • プレビューには「プレビューを編集」と「デフォルトを編集がある」

        • 「プレビューを編集」で編集してコンパイルしても挙動は変更されない。あくまでプレビューのみ変更
        • 「デフォルトを編集」から編集するとデフォルト値が変更される
  • ウィンドウが表示されていない時は左側のペインから開ける

    • 赤い部分をダブルクリック

ブレンドノード作成手順

  1. スケルタルメッシュアセットまたはスケルトンアセットを選択する
  2. 右クリック作成する→ブレンドスペース1D

    • ブレンドスペースは2種類
    • 上は2次元のブレンド
      • 二つのプロパティで遷移させる場合
    • 下は1次元のブレンド
      • 一つのプロパティのみで遷移させる場合
  3. 作成されたものをダブルクリックで開く
  4. ここでは Idle,Walk,Runを例として使うため3つをドラッグ

    • 薄い縦線付近にドラッグするとスナップする模様
    • Idleを左端の縦線に、Walkを左から2番めの縦線に、Runを右端にドラッグした
    • 緑の丸はSpeedで動かしてテストできる模様
    • 値域の設定はデフォルトだと0~100。こちらは水平線から設定可能

アニメーションからスケルトンを検索

アニメーションモンタージュ

Action RPGというタイトルのGameを見てみる

ポーズスナップショットでラグドールという動画

上半身と下半身のアクションを別々にする

  1. AnimGraphでボーン毎のレイヤードブレンドを配置する
  2. 上半身のアニメーションの例としてThirdPersonJump_Loopを配置し接続
  3. ボーン毎のレイヤードブレンドをクリックし詳細設定

    • Spine_02と入力しているのは Spine_02より上にJump_Loopのアニメを適用するため
    • ボーン名はスケルトンより確認可能
      • 画面ではキャラクタ → ボーン → ボーン名にチェック
      • キャラクタ → ボーン → ボーンの階層 → すべてにチェック
      • 上記設定によりボーンと名前を表示させている

アニメーションに効果や音を追加する

  1. 追加したいアセットをアセットブラウザより選択
  2. タイムライン?(ウィンドウ名不明)上で右クリックし通知を追加、今回はSoundを追加して見るためPlay Soundをクリック
  3. 追加した Play Soundをクリックして詳細のSoundより鳴らしたい音を選択

    • 効果であればどこに効果を表示するか等も設定できる模様

顔だけ別の方向に向ける

  1. AnimGraphで注視点ノードを追加し接続
  2. 「ローカルからコンポーネントへ」と「コンポーネントからローカルへ」ノードは接続時に自動で付与される
  3. 注視点ノードを設定

    • Bone to Modify はどのボーンを向けるか
    • Look at Locationにチェックを入れてノード上に変数を公開する
  4. Look At Locationをドラッグして変数に昇華

    • 名前を LookAtとした
    • コンパイルすると詳細パネル上から変数の内容が変更可能となる
  5. 適当な値を入れる

    • マネキンが右方向を向いている事がわかる
タイトルとURLをコピーしました