VRChat Avatars3.0 公式ドキュメント 非公式翻訳 その3 (Expression Menu / Expression Controls)
以下はVRChatのAvatars3.0に関する公式ドキュメント(https://docs.vrchat.com/docs/avatars-30)よりの非公式翻訳です。情報の正確性には留意しましたが、読みやすさを優先して逐語訳よりは意訳・超訳に近いものになっています。自己責任でご参照下さい。元のドキュメントは2021-4-24の状態のものとなっています。
Expression Menu and Controls
Expression Menu の作り方
-
Unityのプロジェクトウインドウ上で右クリックして Create/VRC Scriptable Objects/Expression Menu を選択して作成。
-
プロジェクトウィンドウ上に Expression Menu オブジェクトが作成される
また、ExpressionParametersオブジェクトも作成する必要がある。デフォルトのリストにある以外の自分で任意に作るパラメータはここで定義する。パラメータの名前と型を指定することができる。以下のようにExpressionParametersはExpression Menuの時と同じように右クリックから作成できる。
-
プロジェクトウインドウ上で右クリックして Create/VRC Scriptable Objects/Expression Parameters を選択して作成
-
作成された Expression Parameters を選択して
-
自分で任意に作るパラメータの名前と型を指定していく。Int型は0~255の範囲の整数が、Float型は-1.0~1.0の範囲の浮動小数点値がとれる。
その後に、もう一度 Expression Menu の方に戻って
-
Inspector 上で「Add Control」をクリックして、最大8個までメニュー用のコントロールを追加する
-
またここでは各コントロールの名前やアイコンの設定、コントロールの順序(VRChat内でのメニューを開いた時の表示位置)の設定ができる。
-
設定が完了したら Expression Menu オブジェクトを Avatar Descriptor の「Expression Menu」の欄にドラッグ&ドロップで登録する。
-
同様に Expression Parameters オブジェクトも Avatar Descriptor の「Expression Parameters」の欄にドラッグ&ドロップで登録する。
参考:デフォルトで使えるアイコンを何種類か VRCSDK/Assets3/Expression Menu Icons/ に置いてあるよ
コントロールの種類
- Button (ボタン) – クリックした時にパラメータを設定した値に変更、1秒程度で勝手に元に戻る。押しっぱなしは出来ない (訳注:こう書いてあるが記事作成時点では押しっぱなしに出来る)
- Toggle(トグル) – トグルをONにするとパラメータを設定した値に変更し、OFFにすると元の値にリセットされる。
- Sub-Menu (サブメニュー) – 別の Expression Menu (サブメニュー)を呼び出す。また、サブメニューを開いた時に特定のパラメータの値を変えることも出来る(この場合、サブメニューを閉じるとパラメータの値は元に戻る)。
大事なお知らせ:サブメニューにさらにサブメニューを設定することで階層的なメニューを作れるよ!
- Two Axis Puppet (2軸のパペット) – 2つのパラメータを同時にジョイスティックでコントロールできるパペットメニューを呼び出す。2つのパラメータは垂直・水平方向にそれぞれ割り当てられ、float 型の値として -1.0 ~ 1.0の範囲をとる。
- Four Axis Puppet (4軸のパペット) – 4つのパラメータを同時にジョイスティックでコントロールできるパペットメニューを呼び出す。この場合各パラメータは上、右、下、左に順に割り当てられ、0.0~1.0のfloat型の値をとる。
- Radial Puppet (円形のパペット) – 1個のパラメータをコントロールする、プログレスバー的な円形のパペットメニューを呼び出す。
Puppet Menu Fast Sync
パペット系のコントロールは同期が速い。素早い入力に対して出来るだけ正確な同期を得たい時はパペット系を使うとよいです。
ボタンやトグルは秒単位の比較的遅い同期を行います。なので、高度に正確な同期は必要としない「スイッチオン」のような使い方にむいています。
パペットは数分の一秒単位の解像度での同期を行います。なので、タイミングが重要な操作に適しています。
パペットメニューを呼び出す時に、パペットで操作するパラメータを特定の値にセットするというようなこともできます。
ジョイスティックを押してパペットを抜けるとパラメータの値はその瞬間のものが維持され、もう一度同じコントロールで値を変える、あるいはどこか別のところで値の指定を行うまではそのままです。
VRChat Avatars3.0 公式ドキュメント 非公式翻訳 その2 (State Behaviors)
以下はVRChatのAvatars3.0に関する公式ドキュメント(https://docs.vrchat.com/docs/avatars-30)よりの非公式翻訳です。情報の正確性には留意しましたが、読みやすさを優先して逐語訳よりは意訳・超訳に近いものになっています。自己責任でご参照下さい。元のドキュメントは2021-4-24の状態のものとなっています。画像はVRCSDK3-AVATAR-2021.03.22.18.27_Publicでのものになっています。
State Behaviors
アニメータービューで特定のステートを選んで State Behavior というものを付与することが出来ます。State Behavior はステートにつけられるコンポーネントのようなもので色々な機能を持つものがあります。色々試してみると使い方が分かりますよ!
Animator Layer Controller
「Animator Layer Controller」を使うと任意のタイミングでPlayable Layer (= animator controller)内の特定のレイヤーのweight を変えることが出来ます。
変更した weight は、他のステートで再度「Animator Layer Controller」を使って戻すまでは同じ値のまま維持されます。
プロパティの名前 |
目的 |
Playable | どの Playable Layer に影響を与えるかを指定。 |
Layer | 上記の中のどのレイヤーに影響を与えるかを番号で指定(base レイヤー = 0番から数える。Baseレイヤー自体の weight は常に1.0 で変更出来ない。 |
Goal Weight | Weight の値を指定 |
Blend Duration | Weight の値を変えるのにどの位の移行時間(秒)をもうけるかを指定。0にすると即座に切り替わる。 |
Debug String | この State Behavior が動作している時にログに書き込まれる文字列を指定できる。デバッグに便利。 |
Animator Locomotion Control
あるステートになった時にコントローラー入力での移動を無効にできる。
他のステートで再度 Animator Locomotion Control を使って戻すまで無効になったままになる。
プロパティの名前 | 目的 |
Disable Locomotion | チェックを入れて True にするとコントローラー入力での移動が無効になる。ルームスケールを使った移動はできる。False にするとコントローラーでの移動が有効化される。(訳注:現在では画像のようにUIの見た目が変わり Disable (無効) か Enable(有効)を選ぶ形式になっているよう) |
Debug String | この State Behavior が動作している時にログに書き込まれる文字列を指定できる。デバッグに便利。 |
Animator Temporary Pose Space
あるステートのアニメーションで指定された head の位置にプレイヤーのビューポイントを移動させる。
他のステートで再度 Animator Temporary Pose Space を使って戻すまでそのままになる。
Animator Temporary Pose Spaceはアニメーションでアバターを座らせたり地面に横たわらせたりした時の「姿勢」の変化に対応してビューポイントを調整する目的のみで使うべきで、アバターの「大きさ」を変えるためは使えないし、そういう使い方をするとぶっ壊れる。
プロパティの名前 | 目的 |
Pose Space | Enter または Exit を選択。 Enter でビューポイント調整オン、 Exit でデフォルトに戻す。 |
Fixed Delay | 下の Delay Time の指定を秒で指定するか、ステートの長さに対するパーセンテージで指定するかの選択 |
Delay Time | ここで指定した値の分だけビューポイントの変更のスタートに遅延を入れられる。アニメーションの切り替えに移行時間を設定している時に使うと便利。 |
Debug String | この State Behavior が動作している時にログに書き込まれる文字列を指定できる。デバッグに便利。 |
Animator Tracking Control
Animator Tracking Control を使うとアバターの身体の様々な部分ごとに 「IKによる動きの有効化/無効化」を切り替えることが出来ます。”Tracking” のオプションを選ぶとIKによる動きとなり、”Animation” のオプションを選ぶとアバターの動きはアニメーター(アニメーション)で指定された動きに従うようになります。”No Change”オプションを選んだ場合は現在選ばれているオプションがそのまま継続されます。
全てのIKトラッキングのポイントで “Animation” のオプションを選んだ場合あなたのアバターの動きはネットワークIKを介して伝達されるのではなく、他のプレイヤーのPC上で単純なアニメーションとして再生されます。IKトラッキングのポイントは以下のようになっています。
シミュレーション計算で動いている目(Eye)とまぶた(Eyelid)、viseme によって動きが指定されている口(Mouth)と顎(Jaw)、以外の箇所は全てIK制御されています。
例えばAnimator Tracking Control を使って、右手(Right Hand)と左手(Left Hand)のオプションを”Animation”に切り替えた場合、IKトラッキングに基づく手の位置は無視され、代わりに(現在のステートの)アニメーションで指定された通りに手の位置が動くようになります。”Tracking” オプションに再度切り替えることでIKによる操作に戻すことが出来ます。
Eye と Eyelid のオプションを “Animation” にすると自動でのまばたきや他のプレイヤーを視線で追従する動きが無効化されます。”Tracking” オプションに再度切り替えることでこれらの動きが再度有効化されます。
Mouth と Jaw のオプションを”Animation” にするとリップシンクによる動きが無効化されます(viseme パラメータ自体は送信されています)。”Tracking” オプションに再度切り替えることでリップシンクが再度有効化されます。
上記の設定は他のステートで再度 Animator Tracking Control を使って戻すまでそのままになります。
Avatar Parameter Driver
Avatar Parameter Driver を使うとこれをつけたステートが属する Playable Layer (= animator controller)に登録されている任意のパラメータの値を好きに変更することが出来ます。このパラメータとしては Expression parameters として登録しているものを主な対象としています。
一応、Avatar Parameter Driver を使って Expression parameters として登録していないパラメータの値を変更することは出来ますが、それはローカルオンリーで同期しません。また、他の自分で定義したのではないパラメータについては変更できません。
プロパティの名前 | 目的 |
Add Parameter (ボタン) | この Avatar Parameter Driver で操作するパラメータの追加 |
Name | 値を操作するパラメータの名前を指定 |
Value | 上記のパラメータの値をここで指定したものに変える(このAvatar Parameter Driver をつけたステートが再生された時に値が変わる) |
*訳注:現在 Avatar Parameter Driver には上記のようなパラメータを特定の値に変える機能(Set)だけでなく、パラメータに特定の値を足したり引いたりする(Add)、あるいはパラメータの値としてランダムな値を生成する(Random)という機能が加わっている。Change Type のプルダウンから Set、Add、 あるいは Random を選択することでそれぞれの機能が使える。Set や Add では変えたい/足したり引いたりしたい数値を Value の欄に入力し、Random の場合にはランダムに出したい値の上限、下限をそれぞれ Min Value、 Max Value の欄で指定する。
Playable Layer Control
任意の Playable Layer(= animator controller)のweight を操作できる。Animator Layer Controller とよく似ているが、個別のレイヤーではなく Playable Layer 丸ごとが対象となるのが違う。
「Action」Playable Layer では通常時の weightは0で、エモートアニメーションを再生している間だけ weight を1にしてまた戻すということをしなければならないので、この Playable Layer Control を頻用することになる。
プロパティの名前 | 目的 |
Layer | どの Playable Layer に影響を与えるかを指定 |
Goal Weight | 最終的に上記のPlayable Layer にとらせたい weightの値 |
Blend Duration | 上記の weight の値になるまでにかかる時間。0に設置すると即座に切り替わる。 |
Debug String | この State Behavior が動作している時にログに書き込まれる文字列を指定できる。デバッグに便利。 |
VRChat Avatars3.0 公式ドキュメント 非公式翻訳 その1 (Animator Parameters)
以下はVRChatのAvatars3.0に関する公式ドキュメント(https://docs.vrchat.com/docs/avatars-30)よりの非公式翻訳です。情報の正確性には留意しましたが、読みやすさを優先して逐語訳よりは意訳・超訳に近いものになっています。自己責任でご参照下さい。元のドキュメントは2021-4-24の状態のものとなっています。
Animator Parameters
以下はどのPlayable Layer (すなわち animator controller) にも追加することが出来るパラメータ(Parameters)のリストです。これらのパラメータはその値が変化した時、そのパラメータが登録されているPlayable Layers 全てに影響を与えます。各パラメータの名前は大文字・小文字を区別します (訳注: 例えば Param1 と param1 は別々のパラメータとして扱われる) 。
リスト内のパラメータを使うためには Playable Layer の animator に登録する必要があります。パラメータの名前は大文字・小文字を区別します!
Parameters (パラメータのリスト)
名前 | 説明 | 型 | 同期の種類 |
IsLocal | アバターを着ているプレイヤー自身の環境(ローカル)では True、それ以外では false (訳注: 他者視点では false になるのでこのパラメータを使って自分視点だけで再生されるアニメーションが作れる) | Bool | しない |
Viseme | Oculus viseme index (0-14)準拠 リップシンクでJawbone/Jawflap を指定している時は声のボリュームに応じた0-100 の範囲の値になる。 |
Int | Speech |
GestureLeft | 左手で出しているハンドサイン (0-7) | Int | IK |
GestureRight | 右手で出しているハンドサイン (0-7) | Int | IK |
GestureLeftWeight | 左のトリガーの値 (0.0-1.0)† | Float | IK |
GestureRightWeight | 右のトリガーの値 (0.0-1.0)† | Float | IK |
AngularY | Y軸周りの回転速度(角速度) | Float | IK |
VelocityX | 左右方向の移動速度(m/s単位) | Float | IK |
VelocityY | 上下方向の移動速度(m/s単位) | Float | IK |
VelocityZ | 前後方向の移動速度(m/s単位) | Float | IK |
Upright | アバターがどの位直立しているか(0 がうつ伏せの状態, 1 が直立の状態を表す) | Float | IK |
Grounded | アバターが地面に接していればTrue の値をとる | Bool | IK |
Seated | アバターがイスに座っていればTrue の値をとる | Bool | IK |
AFK | AFK状態かどうか | Bool | IK |
Expression1 - Expression16 | ユーザーが独自に定義したパラメータ。Int 型(0-255)、 Float 型(-1.0-1.0)、Bool型(True, False) が使える | Int / Float / Bool | IK or Playable |
TrackingType | 以下の説明を参照 | Int | Playable |
VRMode | ユーザーがVRモードなら1 、そうでない時は0 の値をとる | Int | IK |
MuteSelf | 自分自身をミュートしてる時は True 、そうでない時はFalse の値をとる | Bool | Playable |
InStation | アバターがイスに座っていればTrue の値をとりそうでなければ False の値をとる | Bool | IK |
デバッグ画面では”Supine” や “GroundProximity” というパラメータも表示されていますが、これらはまだ実装されておらず現状では何にも影響しません。
† GestureLeftWeight と GestureRightWeight は様々なハンドサインでトリガーの押し込み具合に応じて 0.0から1.0の間の値をとります。例えば、ハンドサインは fist にしてトリガーは押さないでおいた場合には GestureLeft は 1の値をとる一方でGestureLeftWeight は 0.0 の値のままになります。ここでトリガーの押し込みを始めると GestureLeftWeight の値は 0.0 から 1.0に向かって徐々に上昇していきます。これはアナログ的なアニメーション操作に利用することが出来ます。
Parameter Types (様々なパラメータの型の紹介)
自分独自のパラメータを作成・登録する時に、そのパラメータを以下の3種類のうちどのタイプ(型)にするかを選べます。
合計で128bits分までの数のパラメータが使えます (訳注: 使えるMPの最大値が128。使う呪文の種類=パラメータの型によって消費MPが下の表のように異なるようなイメージ)
パラメータの型 | 値の範囲 | どの位bitを使うか | 注釈 |
int | 0~255 | 8 bits | プラスマイナスの符号なしの整数 |
Float | -1.0 ~ 1.0 | 8 bits | プラスマイナスの符号ありの浮動小数点値 |
bool | True または False | 1 bit | 真(True)か偽(False)の値をとるブール値 |
GestureLeft と GestureRight の値とハンドサインの対応表
数値 | ハンドサイン |
0 | Neutral |
1 | Fist |
2 | HandOpen |
3 | fingerpoint |
4 | Victory |
5 | RockNRoll |
6 | HandGun |
7 | ThumbsUp |
Viseme パラメータの値と対応する Viseme の表
Viseme パラメータの値 | Viseme |
0 | sil |
1 | pp |
2 | ff |
3 | th |
4 | dd |
5 | `kk |
6 | ch |
7 | ss |
8 | nn |
9 | rr |
10 | aa |
11 | e |
12 | i |
13 | o |
14 | u |
同期の種類
- Speech – visemeだけに使われる。喋った言葉に応じて生成される Occlus Lipsync parameters による。音声が基になっているので直接同期はせずローカルで処理される。(訳注:要は自分の発した言葉が音声信号のままで他のプレイヤーのPCまで送信され、相手側のPC上で音声から viseme パラメータへと変換されるものと思われる)
- Playable – 長めに再生されるアニメーション(ステート)用の遅めの同期方法。0.2秒から1秒に1回値が更新され、素早い同期が必要な場合は使えない。
- IK – もっと素早く同期する方式(ネットワークIK と同じ頻度で更新される)。パラメータの種類によっては、(変数がネットワークを介して伝達されるのではなく)他のプレイヤーのPC側で計算されたIKの状態を基に計算される場合もある。
パペットメニュー (Puppet menu) でパラメータを操作している時には同期方式が自動的にPlayableからIKに変わるのでより素早い同期がなされる。
パラメータ値の State Behavior を用いた変更
各パラメータの値は、アニメーター内のステートにつけた「Avatar Parameter Driver」 というState Behavior を通じて変更することも出来る。
AFK状態
AFK状態は以下の条件でオンになる。
- プレイヤーがHMDを外している時(センサーで感知)
- システムメニューを開いている時。ただしプラットフォーム依存で Oculus Dash を開いていてもAFKとはみなされないが、SteamVRのメニューを開いているとAFKとみなされる。これは偶発的なもので開発側が特に意図してそうしているわけではない。
- キーボードで End キーを押した場合
トラッキングの種類を示すパラメータ
TrackingType というパラメータは下の表のように現在プレイヤーがどういう状態のトラッキングをしているかを数値で表す。
値 | 意味 |
0 | 未初期化状態。 通常、プレイヤーがアバターを変更している途中のためIKの信号が送られていない時に出る。 |
1 | Generic アバターを使用している時にVR/デスクトップ関係なくこの値になる。同時にVRModeパラメータの値が0 であるなら多分デスクトップユーザーかもしれない。 |
2 | Avatar2でのみ起きる。指のリギングがきちんとされていなくて手のみのトラッキング(指無効)になっている時。 |
3 | 頭と手のトラッキング。同時にもしVRModeパラメータの値が1 なら3点トラッキングのVRユーザーであり、VRModeパラメータが0なら humanoid アバターを使用しているデスクトップユーザーである。 |
4 | 4点トラッキング(腰トラ)のVRユーザー |
6 | フルトラのVRユーザー |