Unityのアバターマスクとレイヤーについてのメモ。アニメーションの合成についてなど

Unity アバターマスク レイヤー Unity
※記事内に広告が含まれています。

バーチャル3Dクリエイター神部まゆみです(*^_^*)

この記事はUnityのアバターマスクとレイヤーについての記事です。

●PRスペース●
■PR■

現在、約200個の人気Unityアセットが25ドルで買える Unity 25ドルアセットセールがやってるみたいです。

Unity 25ドルアセットセール

欲しいアセットはこの機会に買っておくと良いかも。

〇まゆみマート|BOOTH

BOOTHでVRoidテクスチャやVRChat向けオブジェクトなどを販売しています。いいねしてくれると励みになります(*^-^*)

アバターマスクを使うとアニメーションで動かす部分と動かさない部分を指定できるっぽい

これVeryAnimationのレイヤー機能を使おうと思ったら出てきたので調べてみようと思った。

作成 ⇒ アニメーション ⇒ アバターマスク で作成できて、緑のところをクリックして赤くすると動かなくなる感じ?くらいの認識でよくわかってなかった(^_^;)

Unity アバターマスク
Unity アバターマスク

確か以前VRChatのしっぽ動かすところでもいじったっけな…。

アバターマスクについてはこれまであまり調べてこなかったので、VeryAnimationのレイヤー機能を使う前に知っておこうと思った。

使いどころによっては便利に使えるかもしれない。

ChatGPT氏に聞いてみる

とりあえず彼に聞けば何でも教えてくれるに違いない…。

現時点で分かっていること、分かっていないことをダーッと書いた方が、ここは合ってるよ、ここは違うよと言ってくれるから良いような気がする。

Unity アバターマスク
神部まゆみ
神部まゆみ

unityのアバターマスクについて分かりやすく教えてください。
赤くした部分が動かなくなる感じなんでしょうか。アニメーター画面のレイヤーのところにアバターマスクを指定する部分がありますが、そこにアバターマスクを指定すればアニメーションクリップの左腕だけ動かさないとかができるんでしょうか。
あとアバターマスクにモデルのスケルトンを指定してインポートできますが、ここで動かしたくない部分を細かく指定できる感じなんでしょうか。

ChatGPT
ChatGPT

すごく良いところ突いてますね。かなり理解が合ってます。
整理するとこんな感じです👇

🧩 アバターマスクとは

アニメーションで「どの部分を動かすか/動かさないか」を制御するマスクです。
マスクをかけた部分だけ、Animatorのレイヤーで再生されるアニメーションが影響します。


🟥 緑と赤の意味

スクリーンショットのように表示される赤と緑は、

  • 緑:動く(アニメーションが適用される)
  • 赤:動かない(アニメーションが無視される)

つまりあなたの言う通り、赤い部分は動かなくなるイメージでOKです。


⚙️ Animatorのレイヤーで指定する理由

アニメーターのレイヤーでアバターマスクを設定すると、
そのレイヤーのアニメーションがマスクに基づいて適用されます。

たとえば:

  • 下のレイヤーで全身アニメ(歩き)
  • 上のレイヤーで「手を振る」アニメ+アバターマスク(上半身だけ有効)

→ 結果、「歩きながら手を振る」動きができます。
下半身は歩きレイヤーが担当、上半身は別レイヤーが担当、という分担です。


🧱 モデルのスケルトンを指定してインポートする部分

ここで「どのボーンを動かすか」を細かく指定できます。
たとえば:

  • Spine(胴体)とその子階層(腕など)だけONにして、
  • Legs(脚)はOFFにする

…という設定を保存しておくと、そのマスクを使うレイヤーでは脚が動かなくなります。


ざっくりまとめると:

「アバターマスク=アニメーションの影響範囲を切り分けるスイッチ」

と言えます。

ちょこっと動かしたいだけならアニメーションクリップ編集したほうが早い

ゲームみたいに「リアルタイムでいろんな動きを合成する」必要があるならレイヤー+マスクが強いんですが、
動画やカット用の動きなら、アニメーションクリップを直接編集した方がずっとシンプルです。

理由を挙げると:

  • レイヤーを使うと仕組みが増えて、管理がちょっと面倒(マスクの確認、レイヤーのブレンド、ウェイト設定など)。
  • 一方で、動画制作なら動きを最終的に「固定」して出力するから、
     アニメーション自体を直接直した方が結果が見やすいしトラブルも少ない

たとえば「歩きながら手を振らないようにしたい」なら、
該当アニメーションクリップをAnimationウィンドウで編集して腕のキーを削除 or ポーズ固定
これで十分です。

ああ、だいたい理解があってたかな?

しかしこんなものほとんど使ったことがないため、この機会に使ってみます。

実際にアバターマスクを設定してみる

実際に設定してみます。

アニメーションクリップを用意する

MixamoでダウンロードしたこのWalkアニメーションを使います。

Mixamoについてはこちら。

アバターマスクを作成する

作成 ⇒ アニメーション ⇒ アバターマスク で作成できます。

Unity アバターマスク

クリックすると赤くなってマスクできるけど、とりあえず足だけマスクしてみます。

Unity アバターマスク

アニメーター画面のレイヤーにアバターマスクを設定する

アニメーターウィンドウで、Base Layerのところにアバターマスクを設定してみます。

後述するけどBase Layerにはあまり設定しない方がいいみたいなので警告が出てます(^_^;)一応動くけど。

Unity アバターマスク

ブレンドでオーバーライド(上書き)かAdditive(加算)かを選択できますが、今回はオーバーライドでやります。

Unity アバターマスク

動かして確認する

おお、本当に足だけ動かなくなったΣ(゚Д゚)

でもデフォルトレイヤーにはアバターマスクを設定しない方が良いっぽい

なんか向きがおかしくなる可能性があるらしいです。

Unity アバターマスク

デフォルトレイヤーにアバターマスクがある場合、ヒューマノイドの動きに対してキャラクターの向きが誤っている可能性があります。デフォルトのレイヤーにマスクを使用しないことを検討してください。

アニメーションクリップはレイヤーごとに設定できるため、どのレイヤーにどのアニメーションを設定するか考えた方が良さそう。

でもあんまりレイヤー増やしてアニメーションさせると頭が混乱しそうだなぁ(^_^;)

VeryAnimationだと結局一つのアニメーションクリップにベイクする感じなので、そうやってシンプルに使うくらいにしたほうが良さそう。

たぶんスクリプトでこのあたりも操作できるはずなので、表情ブレンドシェイプとか小物の出し入れとか、あまりアニメーションに関係ない部分をいじるのが良いかなあ。

まぁ仕組みがだいたいわかったので良かったです。

表情のレイヤーを追加してみる

せっかくなのでレイヤーを追加してアニメーションを合成してみます。

最初に一つだけAngryブレンドシェイプのキーを打ったFaceアニメーションクリップを作成する。

Unity アバターマスク レイヤー

Faceって名前のレイヤーを追加して、↑で作ったアニメーションクリップをD&D、ウェイトを1にする。一応アバターマスクも設定しておく。

Unity アバターマスク レイヤー

これで再生すれば怒った表情で歩きます!

ウェイトを0にするとデフォルトの表情に戻ります。

アバターマスクを設定した部分は動かない

アバターマスクの動作テストもしてみます。

アバターマスクを編集して、右手以外は赤くする。

Unity アバターマスク レイヤー

Faceアニメーションを編集して両腕上げておく。

Unity アバターマスク レイヤー

これで動かすと右腕だけ上がります!

あーなるほど、本当に特定の部位を動かなくする感じなんだ。

ちょっと動かしたいだけならアニメーションクリップ単体を編集すればいいけど、ゲーム制作で複雑なたくさんの種類の動きをさせたい時はこっちで制御すると便利なのかもしれない。

スクリプトで制御できるし。

アニメーションクリップごとにアバターマスクは設定できないっぽい

ChatGPT氏に聞いてみたけど、アニメーターごとに複数のレイヤーがあって、レイヤーにアバターマスクを設定する感じ。

アニメーションクリップ単体にアバターマスクを設定したいならそのアニメーションクリップ専用のレイヤーを作らないといけないっぽい。

🎛️ Animator Controllerの構造

  • 1つのアニメーターコントローラーの中に、
    複数の**レイヤー(Layer)**がある。
  • 各レイヤーの中には、複数のステート(State)があり、
    それぞれにアニメーションクリップ
    が割り当てられている。

🧩 アバターマスクが効く範囲

アバターマスクは「レイヤー単位」で設定します。
だからこういう感じ:

レイヤーマスク設定内容
Base Layerなし全身の基本モーション(歩く・走るなど)
UpperBody Layer上半身マスク上半身だけのアニメ(手を振る・撃つなど)

→ 各レイヤーの中のすべてのアニメーションクリップが、そのマスク設定に従います。


🎬 個別のアニメーションクリップで制御したい場合

アニメーションクリップ単位で制限をかけたい場合は、
ちょっと工夫が必要で:

  • そのアニメ専用の別レイヤーを作る
  • そのレイヤーにアバターマスクを設定
  • 必要な時だけそのレイヤーの**ウェイト(Blending Weight)**を変える

という形になります。


つまりまとめると:

「アバターマスクはレイヤーごと。
クリップ単位で使いたいなら、専用レイヤーを作る。」

らしいです。

でもここまでやるならアニメーションクリップ単体で編集したほうが良いかな(^_^;)

おわりに

アバターマスクとレイヤーについて勉強できて良かった。

私はちょこっと動かしたりしたいだけだからあまり使わないかな(^_^;)

VeryAnimationのレイヤー機能を使ううえで知っておいた方が良いと思ったから勉強してみたんだけども。

ゲーム制作で使うならスクリプトでウェイトを制御すれば合成できるから結構使えそうです。

また何かあれば追記します(*^_^*)

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