歩行のブレンドスペースの構築
三人称視点のプレイヤーはいろんな方向に動いて、それぞれで足の動きが異なる
代表的な動きを作り、ブレンドスペースを使用して360度動けるようになる、代表的な動きは前後左右の4つだけど、斜め移動も入れて8個あるとかなり見栄えが良くなる
更に移動自体にもシークエンスがあって、スティックの傾きに応じて 歩き(警戒)、歩き(通常)、走り くらいに切り替わると楽しい
とりあえずこの8*3の24アニメーション用意出来たとして、どのようにブレンドしていくかを考える
ブレンド方法、ブレンドスペースを使う以外にも、AnimBPやStateMachineがあるけれど、こちらはどちらかというと一瞬の切り替えの補完で、例えば一連の歩行モーション ⇔ しゃがみ歩行モーション とかに使用すると良さそう
更に、入力がゲームパッドのスティックの時、InputScaleはX軸Y軸で [-1.0, 1.0] なので、かなり都合がよい
ここで問題は
・ゲームパッドの右上入力は(1.0, 1.0)ではなく、(0.7, 0.7)である(物理的にNormalizeされている)
・アニメーションの歩幅の変動が均一でない可能性
→例えば歩き(警戒)は24frameで50cm、歩き(通常)は1m、走りは2.8mになっている
・FLeft → BLeftへの補完の際、足の前後入れ替わりがある
→Left付近の補完で足がめり込むことになる
・キーボード入力はデジタルに0 or 1しか取れない
以下解決策
ゲームパッドの右上入力は(1.0, 1.0)ではなく、(0.7, 0.7)である(物理的にNormalizeされている)
・単に斜め移動のアニメーションをそのように作る
→例えば直進の移動距離が1mなら、Xに1m、Yに1m移動する足の動きを作ると良い
→→ゲーム内で実際に採用されるモーションの確認がしにくい、グリッチが出る可能性がある
アニメーションの歩幅の変動が均一でない可能性
ブレンドスペースにInputScaleの値を利用すると、InputScaleが1/3の時は歩き(警戒)、InputScaleが2/3の時は歩き、1の時は走りのモーションが再生される
この時キャラクターのスピードは、MaxWalkSpeed * InputScaleとなり、モーションの移動距離に緩急がある場合、床とモーションでズレが生じる
・Curveアセットを利用する
こんな風に、スピードとブレンドスペースの位置に応じたグラフを作成する、歩き(警戒)は50cm、歩き(通常)は1m、走りは2.8mの場合
前移動、横移動間で移動距離が異なる、走れる方向は前方のみも同様の方法で対応する、あんまり計算増えてもダメそうだけど
・ていうかルートモーション使う
多分同様の結果、どっちのほうが負荷少ないんでしょうか、知りません
FLeft → BLeftへの補完の際、足の前後入れ替わりがある
足の前後関係がアニメ間で同じでないと綺麗な補完が出来ないのだけれど、左上への移動と左後ろへの移動ではどうしても前後関係が入れ替わってしまう
左右への移動をやってみた時、右足が常に前のパターンと、左足が常に前のパターン2種類があることから想像できる
→我慢する(消極的解決)
→横移動をカニ歩きにする(消極的解決)
キーボード入力はデジタルに0 or 1しか取れない
→デフォのwasdを0.5にして、Shift押下時は1.0とかにする、低速が重要ならそちらもキーで切り替えるようにする
→最後に押されたキーがキーボードかパッドかはこんなノードで取得できる
UE4.13で追加されたPhysical Animationsについて
4.13で追加されたPhysical Animations
Unreal Engine 4.13 Released!
従来でも物理アニメーションはPhATを設定して、このボーン以下にどんくらい適応するみたいな事はできた
追加された機能の違いと使い方を確認する
現時点でまだドキュメントはなく、公式による解説動画がある
Physical Animations with Ian and Alex - Training Stream - YouTube
将来的にドキュメントが作成されているはずなので、そちらを参考にしてください
また、まだ実験機能ということで、仕様が変わる可能性があるので記事の日付をよく確認してください
足を傾斜に沿わせる
やりたい
・足が傾斜に応答するようにする
・IKとTransformを使用してジョイントをプロシージャルに移動させる
いつIKを使うべきか
・基本的に足のIKはめり込み回避に使われるべき
・アイドルモーションでは、軸足でない側
→軸足にIKを使用して膝を曲げてしまうと、バランス取れてない感じになる
→アイドルモーションでは、低い位置にある方が軸足となる
移動中は、空中に浮いている側、軸足 の関係が常に成立している
軸足の膝は曲がるべきでなく、浮いている側はめり込ませたくない
→浮いている側の足に対してIKを使用する
高低差のある斜面を歩くとき
・高い側の軸足、低い側の軸足が発生する
・高い側が軸足の時、軸足にもIKが働く、完全に膝は伸びきることはない
・低い側が軸足の時、高い側の足がめり込む、面より浮かせるようにしないといけない
やること
・歩きアニメで足の設置時に通知を取るようにする
→軸足の検知、IKのブレンドアルファを制御する
・カプセルより下には足は行かない
→軸足が地面に接するように体を下げる必要がある
→→1. カプセルを見た目より小さくとって、Zを上げる方法
→→2. Transformでルートジョイントを下げる方法
→→→崖とかでこれが働くとまずいので、程よい長さに制限する、崖際の見た目は諦める
・CharacterMovementのMovementModeは勝手に変わってしまうので、アニメ制御用のムーブメントステートを用意する
参考
IK / FABRIK blueprint tutorial for proper foot placement with capsule collision
SubstancePainterでネジ穴
Toolsにネジ穴あるけど、自分で用意出来たらハッピー
流れは、Designer側でネジのマップをまとめたsbsを作って、それをSPで使います
・ベイク用の板ポリとベイク元のメッシュ2つを用意しておく
・ベイク元はトポロジーどうでもよく、ハイポリがいい
・ネジ穴のバッファというかへこみみたいなものもベイクしちゃったほうがそれっぽくなる
・インポートした板ポリを右クリックでBake設定、必要そうなマップを追加していって(Height, Normal, AO)、ハイポリメッシュを指定する
・Cageは板ポリだと多分使えないので、MaxDistanceを適当にする、どっちも1.0で問題なさそうな感じがある
・ファイルフォーマットをpsdにしておくと、16bitでやってくれる
・デティールは貼り付けるモデルのテクセルに依存するので、こっち側のサイズはあんま関係なく、好きなサイズにしておく
好きな感じにノードをやっていく、SPで使用するチャンネルは
BaseColor
Metalic
Roughness
Normal
Height
Mask
なので、これをアウトプットするようにしておく
ネジ穴周囲のへこみは、向こう側のマテリアルなので、heightとnormalだけ乗るようにマスクをしている
SPで読み込む
Materialsのとこにsbsasを突っ込むとインポートされる、ToolsのScrewBoltを選択し、Materialを追加したものに変更すると自分だけのネジ穴が打てるようになる
いい感じの設定になったら、ブラシのサムネイルのとこを右クリックすると、ツールに登録できる
マテリアルとかテクスチャは、参照できるのが現在のプロジェクトからだけとかだけど(インポート時の設定)、ツールは登録した時点でプロジェクト全体から使えるようになる
sbsarファイルとかをMaterialタブに保存しておく必要はなくて、すべて.spprというファイルに書き出されている
このファイルは、マイドキュメントのSubstancePainter2\shelf\presets\toolsにあります
アニメについてのメモ
過去
ルートモーションについて
miyahuji111.hatenablog.com
09/08
歩きの種類について
歩きといっても、敵がいる状態での歩き、町中の歩き、いろいろコンテクストがある
09/11
AnimMontageについて
Unreal Engine | AnimMontage
Unreal Engine | 加算アニメーションを使用する
09/13
足のIKについて
miyahuji111.hatenablog.com
09/17
移動速度、距離について
CharacterMovementのMaxWalkSpeedは1秒間の移動距離なので、そこでいい感じの値を見つける
アニメ作るとき、この数値を1秒間で移動させる距離にする、24fpsなら24フレームでこの距離で動きを作る
Physical Animationsについて
miyahuji111.hatenablog.com
09/18
歩行のブレンドスペースの構築について
miyahuji111.hatenablog.com
UE4、SkeletalMesh周りのレギュレーション
UE4の機能を使うにあたって、やっておいたほうがいいことがままあり、とくにスケルタル
見つかり次第追記
Rootを移動用と回転用で分けるようにする、具体的には原点に移動専用のRootを作って、その下に回転専用のルートジョイントを作る
→ルートモーションをうまいこと機能させる
Unreal Engine | ルート モーション
ルートジョイントの名前は"RootNode"にする
→Apex Clothingを使うならこれでエラーがへる、使わないなら好きな名前で良いです
→→とやっていたけれど、MayaはなんかRootNodeという文字列を予約しているっぽくて、保存時に勝手に名前が変わってしまってアニメーションインポートが渋くなるみたいなことが起こるので、どうしましょう…
→→→現状"Root"で問題が出ていないので、そういうことにする
APEX Clothingでシミュレーションする布は1 Joint 1 Influenceにする
→複数Influenceあるとエラー出る、Apexやらないなら気にしなくていいです
UE側でIKやるつもりなら腕とか足は2boneにしておく
→膝の変形とか補助ボーンでがんばろう