VRChat 非公式日本語ドキュメント

Playable Layers

VRChatでアバター用のアニメーションを作成する際、VRChatの「Playable Layers」を利用します。これを使うと、走る、跳ぶ、サムズアップをする、笑う、尻尾を振るといった動作や、それらの組み合わせなど、アバターで行いたい様々な処理をアニメーションごとにきれいに分離できます。

Unityの知識が必要

このドキュメントは、Unity Animatorsについてある程度の知識があることを前提としています。

Avatars 3.0のAvatar Descriptorでは、すべてのヒューマノイドアバターに以下の5つのボタンがあります。

ジェネリックアバターには以下の3つのボタンのみがあります。

これらが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 にあります。ファイル名はレイヤー名と完全には一致していません。

VRChatを実行中にAvatar 3.0のアバターを着用(または閲覧)している際、これらすべてのPlayable Layersは結合されたAnimatorとしてまとめられます。このAnimatorがアバターのルートとなるメインのAnimatorであり、そのあらゆる部分を制御できます。つまり、アバターに追加のAnimatorを追加する理由はどこにもありません。

補足として、複数のPlayable Layersで同じコントローラーを使い回すことは絶対に避けてください。一部の設定では動作するかもしれませんが、これは非常に悪い習慣であり、アバターの機能を拡張していく過程で大きな問題を引き起こします。

Animation Controllerのみを使用すること

Playable Layerスロットで使用できるのはAnimation Controllerのみです。それ以外の種類のコントローラーは使用しないでください。エラーが発生したり、コンテンツをアップロードできなくなったりする可能性があります。

これらのPlayable Layersは何をするものなのでしょうか?概要は以下の通りです。

Base: 常に再生されるべきもの、あるいは移動(ロコモーション)やアバターの移動状態(走行、落下、しゃがみなど)に反応するもの。Transformアニメーションのみ。 Additive: Baseですでに使用されているものに対し、「追加」したいもの。例えば呼吸のアニメーションなど。Transformアニメーションのみ。 Gesture: 手の動き、またはExpressionメニューによってトリガーされるもの。尻尾を振る、羽ばたく、耳を動かすといった「アイドルアニメーション」にも使用できます。Transformアニメーションのみ。 Action: AV2のエモートと同様の、全体的な上書き(フルオーバーライド)。Transformアニメーションのみ。 FX: Gestureと同様ですが、Transformの位置、回転、スケール以外のアニメーションすべてに使用します。

ここまでは大まかな説明です。さらに詳細を見ていきましょう。

Base

Base レイヤーには、歩行、走行、横移動(strafing)のためのブレンドツリーを含む移動アニメーションが含まれます。また、ジャンプ、落下、急降下、しゃがみ、這いなどのアニメーション状態も含まれます。

ここに何かを追加する場合、移動アニメーションの状態を再定義する必要があることに注意してください。これは非常に複雑です!どれほど複雑になり得るかを確認するために、サンプルの Base Playable Layer を見てみてください。

Base 内のアニメーションはトランスフォーム(transforms)のみに影響を与えるべきであり、すべてのレイヤーで Avatar Mask を使用して、適切なトランスフォームのみに影響するようにしてください。

Additive

Additiveレイヤーは、Baseレイヤーでアニメーション化されたヒューマノイドボーンに対して、動きを「加算」するために使用します。呼吸アニメーションのように、Baseレイヤーの動きに「付け加える」ようなアニメーションに適しています。

尻尾や耳など、ヒューマノイド以外のボーンに待機(idle)アニメーションを追加したい場合は、代わりにGestureを使用してください! Additiveはヒューマノイドボーン専用のレイヤーです。

Additiveレイヤーは、ブレンド設定が_常に_ "Additive" に固定されているという特別な性質があります。要するに、移動中に動くトランスフォームがある場合、Additiveアニメーションはその動きの上にアニメーションを「加算」します。Additiveでボーンに対して過激な操作を行うと非常に不自然な挙動になる可能性があるため、可能な限り最小限に抑えるようにしてください。

Additiveの第1レイヤーのAvatar Maskは無視されます

最初のレイヤー(ベースレイヤー、0番目のレイヤーなど)のAvatar Maskは無視されます。これは内部的なマスキング処理のためです。他のレイヤーにマスクを適用することは可能ですが、最初のレイヤーに適用したマスクはすべて無視されます。

Additive内のアニメーションは、トランスフォームのみに影響するようにしてください。

Gesture

Gesture レイヤーは、身体の他の部分でベースとなるアニメーションを再生しつつ、特定の身体部位に対して個別のアクションを実行する必要があるアニメーションのためのものです。AV2の Gestures に似ていますが、身体のどの部位にも適用可能です。

Avatar Masking を活用して、アニメーションがアバターの意図した部位にのみ影響するようにしてください。例えば、ジェスチャーパラメータで左右の手の形だけを変更したい場合は、各レイヤーでそれ以外の部位をマスクする必要があります。

さらに、尻尾、翼、耳といった人型以外のボーンに対して「アイドル」アニメーションを設定したい場合も、この Gesture レイヤーを使用します。

Gesture 内のアニメーションは、トランスフォームにのみ影響するようにしてください。

Action

Action レイヤーは、キャラクターを完全に制御する必要がある場合に、他のすべてのレイヤーを上書きするボーンアニメーションのためのレイヤーです。基本的には、AV2の「Emotes(エモート)」を想像してください。

このレイヤーはデフォルトでブレンド値がゼロに設定されています。 Action レイヤーで何かを行う前に、Playable Layer Control State Behavior を使用してこのレイヤーのブレンド値を上げてから、実行したい実際のアクションへ遷移させる必要があります!アクションが終了したら、必ずブレンド値をゼロに戻すようにしてください。

Action 内のアニメーションは、トランスフォーム(Transform)のみに影響を与えるようにしてください。

FX

FXは特別なレイヤーです。他のすべてのレイヤーでは、マテリアルアニメーション、シェーダープロパティのアニメーション、ブレンドシェイプのアニメーションを使用すべきではありません。なぜなら、それらはミラークローンにコピーされないためです。コピーされるのはTransform(トランスフォーム)のみです。

しかし、FXレイヤーではすべてがコピーされます!言い換えれば、HumanoidのTransformやMuscleのアニメーション以外のすべては、FXレイヤーに入れる必要があります。 これには、GameObjectやコンポーネントの有効化/無効化、マテリアル交換、シェーダーアニメーション、パーティクルシステムのアニメーションなどが含まれます(これらに限定されません)。

最初のFXレイヤーにあるマスクは、デフォルトでは空になっています。これは(アバターの初期化時に)すべてのHumanoid Muscleを無効にし、すべてのGameObjectアニメーションを有効にするデフォルトのマスクを作成します。つまり、ヒエラルキー内のどのアニメーションも動作するはずですが、ここでのTransformのアニメーションは推奨されません。

GestureにMuscle以外のアニメーションが含まれている場合(例:Gesture mask の下部で何らかのTransformにチェックが入っている場合)、それらのTransformはFXマスクで無効(DISABLED)にする必要があります。これにより、GestureのアニメーションがFXレイヤーを「透過して」表示されるようになります。

アバターの設定が以下のようになっているとします。

  • アバターに尻尾がある(Humanoidヒエラルキーの一部ではないボーンの連なり)。
  • 尻尾用のGesture Animatorレイヤーには、そのボーンの連なりのみが有効化された特別なマスクがある。
  • 「全パーツマスク」を使用した別のGesture Animatorレイヤーにも、それらのボーン(およびコントローラーの残りの部分でアニメーション化される他の身体部位)にチェックが入っている。

この場合、最初のFXレイヤーでもカスタムマスクを作成する必要があります。これにより、すべてのMuscleをマスクOFFにし(人型図がすべて赤色)、尻尾のすべてのボーンをマスクOFFにします。 また、FXでアニメーション化するコンポーネントを持つTransformに対して、このマスクのチェックボックスがONになっていることも確認してください。例えば、ブレンドシェイプやマテリアルをアニメーション化するためのボディのSkinned Meshなどです。

ヒエラルキー内に、アニメーション化されたTransform(Gesture内)と、アニメーション化されたエフェクトコンポーネント(FX内)の両方を持つGameObjectがある場合、マスクの要件と矛盾するため正常に動作しない点に注意してください。これは、ヒエラルキーに埋め込まれた単純なスタティックメッシュをGestureでアニメーション化し、同時にFXでマテリアル変更を適用している場合に発生する可能性があります。別の例としては、前述の尻尾のボーンに直接パーティクルエフェクトコンポーネントを配置するケースが挙げられます。簡単な回避策は、子GameObjectを作成し、その子にスタティックメッシュやエフェクトを配置することです。子GameObjectのTransformはアニメーション化せず、親のみをアニメーション化します。これらの手順に従えば、FXレイヤーにTransformアニメーションを入れる必要はなくなるはずです。

追加ポーズ

Avatars 3.0のアバターには、いくつかの追加ポーズが用意されています。これらのボタンは Playable Layers の下にあります。

T-Pose

独自の T-Pose を設定できるようになりました!

T-Pose は、アバターの様々な計測値、特に視点(Viewpoint または view-ball)の位置を決定するために使用されます。視点は、提供されたこの T-Pose アニメーション内の view-ball の位置に完全に依存します。

Standard T-Pose - Mixamo

次に、手首の調整と回転において重要です。手のひらを下にした状態に対して手首がどのように並んでいるかは、コントローラーを空間内でひねったときに、手首や腕がどのように回転するかに影響します。

最後に、T-Pose はウィングスパン(T-Pose 時の腕の全長の長さ)を決定します。これはアバターの瞳孔間距離(IPD)、つまりアバターの目の間の距離も決定します。腕が長すぎると IPD が広くなり、すべてのものが小さく見えてしまいます。腕が短すぎると IPD が狭くなり、すべてのものが大きく見えてしまいます。

さらに、T-Pose において(顕著な)関節の曲がりがあるのは望ましくありません。例えば、T-Pose で肘が曲がっていると、プロポーションに基づいて動作するアバターの様々な機能に影響を与える可能性があります。

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)を設けると、座っている時のアバターの見栄えを調整するのに役立つでしょう。

最終更新: