Playable Layers
VRChatのアバター用アニメーションを作成する際は、VRChatの「Playable Layers」を利用します。これらを使用することで、走る、跳ぶ、サムズアップをする、笑う、しっぽを振る、あるいはそれらを組み合わせるなど、アバターで行いたい動作を個々のアニメーションとして整理し、分離することができます。
本書は、Unity Animatorについてある程度の知識があることを前提としています。
Avatars 3.0のAvatar Descriptorでは、すべてのヒューマノイドアバターに以下の5つのボタンがあります:
BaseAdditiveGestureActionFX
ジェネリックアバターには、以下の3つのボタンのみがあります:
BaseActionFX
これらが Playable Layers です。それぞれがUnityのAnimatorを受け取り、それらが重なり合って動作します。つまり、5つのルートAnimatorを自由に使うことができ、そのそれぞれに複数の Animator Layers を設定できるということです。
これらのレイヤーは順番に適用されます。つまり、Base、Additive、Gesture、Action、FXの順で適用されます。例えば、Additive内の何かがボーンをアニメーション化し(ウェイト1.0)、その後Action内の何かが同じボーンをアニメーション化(ウェイト1.0)した場合、Actionのアニメーションが優先されます。
SDKにはサンプルとなるPlayable Layersが用意されています。学習や試行錯誤の方法に応じて、これらのデフォルトレイヤーを使用して編集する方が、仕組みを理解しやすいかもしれません。
これらは Packages/com.vrchat.avatars/Samples/AV3 Demo Assets/Animation/Controllers にあります。ファイル名はレイヤー名と完全には一致していません:
- Base:
vrc_AvatarV3LocomotionLayer - Additive:
vrc_AvatarV3IdleLayer - FX:
vrc_AvatarV3FaceLayer - Action:
vrc_AvatarV3ActionLayer - Gesture:
vrc_AvatarV3HandsLayer
VRChatを実行中にAvatar 3.0のアバターを着用(または表示)すると、これらのPlayable Layersはすべて統合されて1つのAnimatorになります。このAnimatorがアバターのルートとなるメインのAnimatorであり、そのあらゆる部分を制御できます。つまり、アバターに追加のAnimatorを追加する理由は一切ありません。
余談ですが、同じコントローラーを複数のPlayable Layerで使用してはいけません。一部の構成では動作することもありますが、これは非常に悪い慣習であり、アバターの機能を拡張する際に大きな問題を引き起こす原因となります。
Playable LayerのスロットにはAnimation Controllerのみを使用してください。他の種類のコントローラーを使用すると、エラーが発生したり、コンテンツをアップロードできなくなったりします。
これらのPlayable Layerは何をするものなのでしょうか?簡単に説明します。
Base: 常に再生されるものや、移動(ロコモーション)への反応、アバターの移動状態(走行、落下、しゃがみなど)に関連するものです。トランスフォームアニメーションのみを使用します。 Additive: Baseで使用されているものに「追加」したい動き(呼吸アニメーションなど)です。トランスフォームアニメーションのみを使用します。 Gesture: 手の動き、またはExpressionメニューによってトリガーされるものです。しっぽを振る、翼を羽ばたかせる、耳を動かすといった「待機アニメーション」にも使用できます。トランスフォームアニメーションのみを使用します。 Action: AV2のEmote(エモート)のように、すべてを上書きするものです。トランスフォームアニメーションのみを使用します。 FX: Gestureと同じものですが、トランスフォームの座標、回転、スケール以外のすべてのアニメーションに使用します。
素晴らしいですね。それでは、さらに詳しく見ていきましょう。
Base
Baseレイヤーには、歩行、走行、ストレイフ(横移動)のためのブレンドツリーを含む、ロコモーションアニメーションが含まれます。また、ジャンプ、落下、急降下、しゃがみ、匍匐(ほふく)などのアニメーション状態もここに含まれます。
ここに何かを入れると、移動用アニメーションステートを再定義する必要がある点に注意してください。これはかなり複雑です!どの程度複雑になるかを確認するために、サンプルの「Base」プレイアブルレイヤーを参照してください。
「Base」内のアニメーションはトランスフォーム(Transform)のみに影響を与えるべきであり、適切なトランスフォームにのみ影響するように、すべてのレイヤーでAvatar Maskを使用する必要があります。
Additive
Additiveレイヤーは、「Base」でアニメーション化されているヒューマノイドボーンの上位で、トランスフォームの加算的な動きをさせるためのものです。呼吸アニメーションのように、「Base」レイヤーに「上乗せ」できるような動きに使用します。
しっぽや耳などの非ヒューマノイドボーンに待機アニメーションを追加したい場合は、Gestureを使用してください! Additiveはヒューマノイドボーン専用です。
Additiveレイヤーが特殊なのは、ブレンディング設定が常に「Additive」になっているためです。簡単に言えば、移動中に動くトランスフォームがある場合、Additiveアニメーションはそのアニメーションを「加算」します。Additiveでボーンに対して極端な操作を行うと非常に不自然な挙動になる可能性があるため、最小限に留めるようにしてください。
最初のレイヤー(ベースレイヤー、0番目のレイヤーなど)のAvatar Maskは無視されます。これは内部的なマスキング処理のための仕様です。他のレイヤーにマスクを適用することは可能ですが、最初のレイヤーに適用したマスクはすべて無視されます。
Additive内のアニメーションは、トランスフォームのみに影響を与えるようにしてください。
Gesture
Gestureレイヤーは、体の他の部分で基本となるアニメーションを再生しつつ、特定の部位に対してのみ動作させる必要があるアニメーションのためのものです。AV2のジェスチャーに近いものですが、体のあらゆる部位に適用可能です。
Avatar Maskingを活用して、アニメーションがアバターの意図した部位にのみ影響するようにしてください。例えば、ジェスチャーパラメータで左右の手の形だけを変更したい場合は、各レイヤーで手以外の部位をマスクするようにしてください。
さらに、尻尾や翼、耳といった非人型(non-humanoid)ボーン用に「アイドル」アニメーションを設定したい場合も、Gestureレイヤーに入れるのが適しています。
Gesture内のアニメーションは、トランスフォームのみに影響を与えるようにしてください。
Action
Actionレイヤーは、キャラクターの制御を完全に乗っ取る必要がある場合に、他のすべてのレイヤーを上書きするボーンアニメーションのためのものです。基本的には、AV2の「Emotes(エモート)」を想定してください。
このレイヤーはデフォルトで0にブレンドされています。アクションレイヤーで何らかの処理を行う前に、Playable Layer Control State Behaviorを使用してこのレイヤーのブレンド値を上げてから、実行する実際のアクションに遷移させる必要があります!終了したら、忘れずに0に戻すようにしてください。
Action内のアニメーションは、トランスフォームにのみ影響を与えるようにしてください。
FX
FXは特別なレイヤーです。他のすべてのレイヤーでは、マテリアルアニメーション、シェーダープロパティアニメーション、またはブレンドシェイプアニメーションを使用しないでください。これらはミラークローンにコピーされないためです。コピーされるのはトランスフォームのみです。
しかし、FXレイヤーではすべてがコピーされます!言い換えれば、ヒューマノイドのトランスフォームやマッスルアニメーション以外のすべては、FXレイヤーに入れるべきです。これには、GameObjectやコンポーネントの有効化/無効化、マテリアル交換、シェーダーアニメーション、パーティクルシステムのアニメーションなどが含まれます(ただし、これらに限定されません)。
最初のFXレイヤーのマスクは、デフォルトでは空になっています。アバターの初期化時に、すべてのヒューマノイドマッスルを無効化し、すべてのGameObjectアニメーションを有効化するデフォルトのマスクが作成されます。そのため、ヒエラルキー内のどのアニメーションも機能するはずですが、ここでのトランスフォームのアニメーション化は依然として推奨されません。
ジェスチャー(Gesture)にマッスル以外のアニメーションが含まれている場合(例:ジェスチャー用のマスクの下部でトランスフォームがチェックされている場合)、FXマスクでも同じトランスフォームを「無効」にする必要があります。これにより、ジェスチャーのアニメーションがFXレイヤー越しに反映(show through)されるようになります。
以下のような設定のアバターを例にします:
- アバターにしっぽ(ヒューマノイドヒエラルキーに含まれないボーンの連なり)がある場合。
- しっぽ用のGesture(ジェスチャー)アニメーターレイヤーには、そのボーンの連なりだけを有効にした特別なマスクを設定します。
- 「すべてのパーツを網羅したマスク」を持つ別のGesture(ジェスチャー)アニメーターレイヤーでも、それらのボーン(およびコントローラーの他の箇所でアニメーション化される体の部位)にチェックが入っています。
この場合、最初のFXレイヤーにカスタムマスクを作成する必要があります。このマスクですべての筋肉(ヒューマン図がすべて赤色)と、しっぽのすべてのボーンをOFF(マスク)にします。また、FXでアニメーションさせるコンポーネントを持つすべてのトランスフォームのチェックボックスが、このマスクでONになっていることを確認してください。例として、ブレンドシェイプやマテリアルをアニメーションさせるためのボディのスキンメッシュなどが挙げられます。
ヒエラルキー内のゲームオブジェクトで、アニメーションされるトランスフォーム(Gesture内)と、アニメーションされるエフェクトコンポーネント(FX内)の両方がある場合、マスクの要件を満たせず動作しない点に注意してください。これは、ヒエラルキーに埋め込まれたシンプルな静的メッシュをGestureでアニメーションさせつつ、FXでマテリアル変更を適用している場合に起こり得ます。別の例としては、前述のしっぽのボーンに直接パーティクルエフェクトコンポーネントを配置する場合が挙げられます。簡単な回避策は、子ゲームオブジェクトを作成し、そこに静的メッシュやエフェクトを配置することです。その際、親のみをアニメーションさせ、子のトランスフォームはアニメーションさせないようにします。これらの手順に従えば、FXレイヤーにトランスフォームアニメーションを入れる必要はなくなるはずです。
追加のポーズ
Avatars 3.0のアバターでは、追加のポーズがいくつか利用可能です。これらのボタンはPlayable Layersの下にあります。
T-Pose
独自のT-Poseを指定できるようになりました!
T-Poseは、アバターのさまざまな計測値、特に視点(view-ball)の位置を決定するために使用されます。視点は、提供するT-Poseアニメーション内でview-ballがどこにあるかによって完全に決まります。

次に、手首の調整とねじれにとって重要です。手のひらを下にした位置に対して手首がどのように並んでいるかによって、空間内でのコントローラーの回転が、アバターの手首や腕の回転にどのように影響するかが決まります。
最後に、T-Poseはウィングスパン(T-Pose時の腕の全長)を決定します。これはアバターの瞳孔間距離(IPD)、つまり両目の間の距離も決定します。腕が長すぎるとIPDが広くなり、すべてが小さく見えてしまいます。逆に腕が短すぎるとIPDが狭くなり、すべてが大きく見えてしまいます。
さらに、Tポーズで関節が(大きく)曲がっているのは好ましくありません。例えば、Tポーズで肘が曲がっていると、プロポーションに基づいて動作するアバターの様々な要素に影響が出る可能性があります。
IK Pose
IK Poseは、主要な関節の曲がり具合を決定するために使用されます。IK Poseでは、関節は本来曲がるべき方向にわずかに曲がっている必要があります。
例えば、VRChatはIK Poseの肘の曲がり具合を見て、どの方向にどれくらいの角度で曲がっているかを判断します。その曲がりが、肘がどのように曲がるかを決定します。
IK Poseにおける足の回転は、膝がどのように曲がるかを決定します。これはまず、膝がアバターに対して真っ直ぐ前に曲がると仮定し、その方向をIK Poseでの足の回転に対して保存することで設定されます。例えば、IK Poseでつま先を外側に向けている場合、足の内側の端がより前方を向いていることになり、そのため膝は足の内側の端に向かって曲がることになります。逆に、IK Poseで足先をより内側に向けた場合、足の外側の端がより前方を向く(アバターに対して真っ直ぐ前を向く)ため、その場合は膝が足の外側の端に向かって曲がりやすくなります。
要するに、膝をより内側に曲げたい場合はIK Poseで足を外側に回転させ、膝をより外側に曲げたい場合はIK Poseで足を内側に回転させてください。
Sitting Pose
このスロットで使用されるコントローラーは、アニメーションとポーズの両方に使用されます。座ったとき、アバターの視点がキャリブレーションに使用されます。アニメーションが再生されることで、「座り込む」アニメーションと「座っている」待機アニメーションの両方を作成できます。
自分で作成したい場合は注意が必要です。うまく調整するにはかなりの手間がかかることを覚悟しておいてください。座る・立つといった動作に遷移ステート(transition states)を挟むことで、座っている間のアバターの見た目を少し改善できるかもしれません。
最終更新: