MENU

    BlenderのNLAで組み合わせた複数アニメーションを一つに統合してGLBで使う方法

    こんにちは、アキヤマです。
    この記事では、複数の動きを組み合わせたアニメーション付きのモデルをGLB形式で書き出す際に、起こりうる問題とその対処法について説明しています。

    目次

    はじめに

    BlenderにはNLA、ノンリニアアニメーションという機能があり、キーフレームアニメーションをストリップ(=コンポーネント化)て、ループやブレンドが簡単にできるようになります。
    WebAR上で3DCGモデルとアニメーションを表示させたい場合、NLAを使ってアニメーションを用意し、GLB形式でモデルを書き出すことが一般的ではないでしょうか。

    しかし、NLAで複数のアニメーションを組み合わせた場合、GLB形式で書き出したモデルにそのアニメーションが反映されないケースがあります。この問題を解決するには、組み合わせた複数のアニメーションを1つにまとめることで上手くいきます。
    これによって、例えばWebAR環境で正確に読み込み・再生が可能になります。

    問題のケース

    まず先に、どのようなケースだとうまく書き出しができないのかを試していきましょう。

    この忍者のモデルには、予めキーフレー厶を打って作った4つのアニメーション(Idle, Run_Normal, RunToJump, JumpToLanding)があります。
    この4つのアニメーションを組み合わせて、「立っている状態から走り始めて、ジャンプして着地」という、複雑な動きをする1つのアニメーションを作りました。

    さて、この組み合わせたアニメーションをエクスポートしましょう。
    正しく出力されたかどうか、確認にはgltf-Viewerを使って見てみます。

    どうやら4つのアニメーションが別々のものとしてインポートされてしまったようです。

    これでは「立っている状態から走り始めて、ジャンプして着地」という一連のアニメーションが再生できません。

    「NLAトラックの名前を全部同じにしなきゃ駄目なのでは?」と考える方もいるかと思います。そこで例えば以下の画像のように“Run”で統一してみました。

    しかしこれも結論から言えば、効果はありません。

    ぱっと見はRunというアニメーション1つだけになったので、きちんと統合されているかのように見えます。しかし実際は、このアニメーションの最初であるIdle部分(立っている状態)のアニメーションしか再生されません。

    このように複数のアニメーション付きでGLBがうまく書き出せない場合があります。
    このような状況で、正しく一連のアニメーションを再生できるようにするには、アクションをベイクすることで解決することができます。

    なお、私が作業に使用している環境はBlender3.3を使用しています。3.4以降のバージョンを使っている人はそもそも上記の様にアニメーションすら反映されていないかもしれません。
    それについては記事の最後で説明しているので、一通り読んだあとにご確認ください。

    アクションのベイク

    まず操作を始める前に、アニメーション再生(スペースキーを一回押すと再生されます)で統合したいアニメーションの動きになっているかを確認してください。もし無関係な動きが混じっているようであれば、一時的にそのストリップを削除するなどしてください。

    上記を確認したら、ポーズモードの状態でアニメーションに用いているボーンを全選択してください。
    それからポーズ>アニメーション>アクションをベイクを選択してください。

    ウィンドウが開くので、まずアニメーションの最初と最後のフレームを設定します。
    それから選択ボーンのみ、ビジュアルキーイングにチェック。そしてデータをベイクの項目でポーズを選択してください。

    この状態でOKを押せば完了です。
    NLAウィンドウに戻ると、ArmatureにActionが追加されているのが確認できます。

    そしたらこのActionのアニメーションをストリップ化し、既存の複数のアニメーションは削除してしまえば、複数のアニメーションが1つにまとまった状態となります。

    なお、GLBにエクスポートする際は、以下の“全アクションをエクスポート”のチェックを外すことをおすすめします。このチェックがついていると、NLA関係なく全てのアニメーションを書き出してしまうので、例えば今回の場合でいうとNLAで組み合わせたActionというアニメーション1つに加えて、4つのアニメーション(Idle, Run_Normal, RunToJump, JumpToLanding)がそれぞれ書き出されます。

    逆にチェックを外すと、NLAトラックにあるアニメーションしかエクスポートされません。ですので、今回の場合はNLAトラックに設定されているActionだけがエクスポートされます。
    さらにこの仕組みを応用して例えば、Actionのアニメーションと、Actionのアニメーションを作るのに利用したIdleのアニメーションの2つをエクスポートしたい場合は、Idleもストリップ化してNLAトラックに加えておけば、GLBになっても2つのアニメーションを使うことができます。

    おわりに

    これを使えばいくつでもアニメーションを組み合わせて、1つにすることができます。また必要なアニメーションだけを取捨選択し、GLBに組み込んでエクスポートが可能になります。
    アニメーション付きのGLB形式のモデルを取り扱う際には役に立つ知識かと思いますので、もしこのようなケースが生じた場合には上記を試してみてはいかがでしょうか。

    余談 : バージョンによるGLBエクスポートの不具合について

    私の環境下限定かもしれませんが知識の共有です。
    Blender3.4以降のバージョンだとGLBでアニメーションを書き出しても、その.glbのデータにアニメーションが反映されません。(執筆現在はBlender3.5が最新ですが、同様に反映されません)
    解決法は素直にBlender3.3を使って、.glbをエクスポートすることです。仮に3.4や3.5で作ったデータであっても基本的には3.3でも同様に開くので、バックアップを欠かさずした上で3.3で開き、試してみてはいかがでしょうか。

    原因は特定できませんでしたが解決しました。

    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!
    目次