作業ログ:モンタージュ再生 on GASP-ALS

※本サイトはアフィリエイト広告を利用しています。

ALSの仕組みで上半身だけにリロードなどの特別な動作のアニメーションモンタージュ再生をしたい

よっしー
よっしー

近日図入りでやり方解説予定ですが、とりあえず共有。

が、GASP-ALSが採用しているLinked Anim Graphでは別の子ABP内でSlot再生をしようとしていて、これはおそらく仕様上できないことをやろうとしている。多分その部分全くテストされてない。

↑のような構成にした理由はGASPの進化時にALSの仕組みを再反映させる手間の削減とのこと。

それをあきらめて、ABP_SandboxCharacter自体に実装すれば解決はできそう。

ChatGPTに相談したらLinkedAnimLayerならできるよっていうから試しにAnim Layer Interface作って親子ともにそれを実装してってやってみた。

が、結局できないじゃん!って問い詰めたらできないと意見を変えてくる。。。

ということでお引越し大作戦。

よっしー
よっしー

↑誰もが一度は見てそっと閉じるALSのコア部分。同じことの繰り返しなので、実はそれほど難しくなかった。最後の部分のカーブの扱いだけまだ理解してないけどそこが重要そうなコメントが書いてあるので悩ましい。

これの実装位置をABP_SandboxCharacter自身にお引越しします。

マクロがコピペできないようで、上の図そのものじゃなくて、カーブを変数に変換する上図の前処理のほうの移植が面倒。ちまちま手作業。

やってみた結果、カーブの値をモンタージュで上書きするのが難しいようで、オーバーレイのポーズと違う設定にしたい場合はこの仕組みを使って再生するのは向いてなさそう。

(Idle状態ではそれっぽいが、走っていると右手がくちゃくちゃになる(加算の設定の違い))

この仕組みを使うべきなのは、エイム状態からの発砲など加算のアニメーションと思われる。 リロードは加算って感じじゃないので別途上半身強制上書きで再生するUpperBody Slotを用意したほうがよさげ。AnimGraphでDefault Slotの手前にLayered Blend Per Boneで追加。

Layered Blend Per BoneにSpine_02でMesh空間で回転にチェック。

走っていてもリロードっぽい動作にできた。

が、カバー時(キャラの向きに対してメッシュが180度回転)に上半身だけ前向くねじれが。 → Mesh空間で回転のチェックを外したら自然になったのでこっちのほうがよいか。

TODO: トラバーサル中もリロードできちゃったり、リロード中にも弾撃てちゃうのはDoingTraversalActionフラグとかでキャンセルできるはず。

また、Hand-IKのカーブが上書きできないのでHandIKでしっかり左手添えたエイム状態からリロードすると手を縛ったような状態になる。

これは別な名前のカーブIgnoreHandIKを用意して、もとのカーブから引き算して打ち消す計算を行う仕様に変更することでどうにか回避した。

TODO: スローで見ると新しいマガジンと左手がずれまくっている

HideBoneでマガジンをスケルタルメッシュから消して、別途物理シミュレーションのスタティックメッシュをスポーンさせて落下させ、腰に手を当てたタイミングで新しいマガジンをスポーン ってのを通知使ってやるのが比較的シンプルでリアルかな。

別案は、Lyraのpistol側のリロードのマガジンの動きにHand-IKの目標を動かし補正。

せっかく移植した仕組みも試そうとFireのアニメーションを準備してたらUEクラッシュしたので今日はおしまい。。。

翌朝、試してみたところ、FireはLyraのFireアニメーションをArm_L、Arm_Rに加算するといい感じになったので、移植する価値はちゃんと得られた。

(もとのアニメーションシーケンスの加算設定を見直し、自身の1フレーム目に変更し差分を減らさないと変な動きになるのはUE5.4のときの補修で説明済の件)

コメント

タイトルとURLをコピーしました