Warning

このドキュメントは若干古くなっています。修正: FBX のみ言及 (glTF もサポートされているか確認)、HiFi ホストされたコンテンツが含まれる

アバターアニメーションのカスタマイズ

Vircadiaの標準的なアニメーションを上書きして、ダンス、ジャグリング、ウェーブなどの独自のアニメーションを設定することで、自分自身を表現することができます。設定したカスタムアニメーションは、所有しているアバターと装着しているアバターにそれぞれ適用されます。

Note

カスタムアニメーションのインポートプロセスは、より使いやすくするために頻繁に更新しています。カスタムアニメーションを開発する際には、カスタムアニメーションのサポートが向上し続けるため、将来的に修正する必要があるかもしれないことを心に留めておいてください。

前提知識

カスタムアニメーションの制作を進めていくと、聞きなれない専門用語が出てくることがあります。ここでは、そのような用語について説明します:

Term

説明

アバターアニメーション(Avatar animations)

アバターアニメーションは、アバターの動きを定義する FBX ファイルです。例えば、turn_left.fbx <h ttps://github.com/vircadia/vircadia/blob/master/interface/resources/avatar/animations/turn_left.f bx> はアバターが左回転する標準のアニメーション・ファイルです。

アニメーションの役割(Animation roles)

アニメーションロールは、アバターが実行できるアクションにマッピングするトリガーです。例えば、turnLeft はアバターがその場に立ったまま左折するアニメーションのロールです。このアニメーションロールは turn_left.fbx ファイルにマップされています。Desktop モードでは左矢印キーまたは A を、VR モードではハンドコントローラを使って、このアクションを見ることができます。

アバターアニメーションJSONまたはアニメーショングラフファイル(Avatar Animation JSON、Animation Graph File)

標準のアニメーションシステムは、JSONデータファイルを使って、FBXファイルから一連のアニメーションを合成し、レイヤー化する。このJSONファイルはアニメーショングラフファイルと呼ばれ、どのアニメーションをどのように合成して再生するかを正確に指定する。また、操作の順番も決められるので、インバースキネマティクスなどの操作は、体の他の部分が従来の方法でアニメートされた後に行われます。デフォルトでは、全てのアバターは同じ Animation Graph file <https://github.com/vircadia/vircadi a/blob/master/interface/resources/avatar/avatar-animation.json> を使用します。

カスタムアニメーションの準備

既存の標準アニメーションを置き換える前に、カスタムアニメーションファイルを準備する必要があります。私たちの Avatar Standards Guide を利用し、以下のガイドラインに留意してください。

  • アニメーションはVircadiaの標準的な関節名である必要があります。

  • アニメーションは、標準的な関節の向き(ボーン下部のy)である必要があります。

  • キーフレームは、毎秒30フレームの均一な間隔で、すべての関節に対してキーフレームを配置する必要があります。

  • ロコモーション(Locomotion )アニメーションのフェーズでは、最初のフレームで左足首が通過する位置にあります。もし、あなたのロコモーション・アニメーションをデフォルトの設定と調和させたいなら、この位相に合わせるようにしてください。

アニメーションを作成したら:

  1. お好みの外部ツールからアニメーションをFBXファイルとしてエクスポートします。

  2. アニメーションのFBXファイルをクラウドサーバーにアップロードし、URLをコピーしてください。

標準アニメーションの置き換え

デフォルトのアニメーションをオーバーライドすることで、アバターにカスタムアニメーションを使用させることができます。これには2つの異なる方法があります。

  • Override Using a Script : 標準のアニメーションをオーバーライドするスクリプトを書く。

  • Create a Custom Avatar Animation JSON file :このファイルを修正するか、新しいデータファイルを作成することができます。

スクリプトによるオーバーライド

`スクリプト<../../script/write-scripts.html>`_ を書き、 MyAvatar <https://apidocs.vircadia.dev/MyAvatar.html> 名前空間を使えば、既存のアニメーションやアニメーションロールをオーバーライドすることができます。

アバターに標準搭載されているアニメーションを差し替える方法を一覧でご紹介しています。

メソッド

説明

MyAvatar.overrideAnimation

このメソッドは、現在のアバターに任意のアニメーションを再生するために使用できます。現在のポーズからカスタムアニメーションの開始フレームまでスムーズに移動します。例えば、アバターが手を振っている場合、このスクリプトはアバターが手を振るのを止め、提供されたカスタムアニメーションを再生します。

AnimationCache.prefetch

このメソッドは、リソースをフェッチします。これを使用して、クラウドサーバーでホストしているカスタムアニメーションを取得することができます。アニメーションを再生する前にプリフェッチしない場合、アニメーションがダウンロードされるときに T-ポーズが短時間表示されることがあります。

MyAvatar.restoreAnimation

このメソッドは、オーバーライド関数がカスタムアニメーションを再生するのを防ぎます。アバターは標準のアニメーションの再生に戻ります。

Note

既存のアニメーションを置き換えるこの処理では、すべてのアバタージョイントを完全に制御します。HMDユーザーの手と頭のインバースキネマティクスは無効となります。

また、既存のアニメーションロールマッピングを上書きすることも可能です。

  1. 現在のアバターのロールのリストを見るには MyAvatar.getAnimationRoles <https://apidocs.vircadia.dev/MyAvatar.html#.getAnimationRoles> を使ってください。

  2. MyAvatar.overrideRoleAnimation <https://apidocs.vircadia.dev/MyAvatar.html#.overrideRoleAnimation> を使用すると、各ロールのアニメーションをカスタムアニメーション(FBXファイル)に置き換えることができます。

アニメーションの役割とその説明をリストアップしました。これらは頻繁に更新されますので、先に進む前に MyAvatar.getAnimationRoles を使って最新のアニメーションロールを取得することをお勧めします。これらのロールの標準アニメーション FBX ファイルは、Vircadia ソースコードレポジトリの GitHub <https://github.com/vircadia/vircadia/tree/master/interface/resources/avatar/animations> で見ることができます。

Animation Roles

説明

rightHandGraspOpen

ハンドコントローラーのトリガーを引いていない場合。

rightHandGraspClosed

ハンドコントローラーのトリガーが完全に引かれたとき。

rightIndexPointOpen

Point gesture.

rightIndexPointClosed

トリガーを絞った状態でのポイントジェスチャー。

rightThumbRaiseOpen

親指を立てる仕草。

右手親指の上げ下げ

引き金を引いて親指を立てる仕草。

rightIndexPointAndThumbRaiseOpen

親指を立てるジェスチャーと指をさすジェスチャーを同時に行う。

rightIndexPointAndThumbRaiseClosed

親指を立てて指差すジェスチャーを同時に行い、トリガーを絞る。

leftHandGraspOpen

ハンドコントローラーのトリガーを引いていない場合。

leftHandGraspClosed

ハンドコントローラーのトリガーが完全に引かれたとき。

leftIndexPointOpen

Point gesture.

leftIndexPointClosed

トリガーを絞った状態でのポイントジェスチャー。

leftThumbRaiseOpen

親指を立てる仕草。

leftThumbRaiseClosed

引き金を引いて親指を立てる仕草。

leftIndexPointAndThumbRaiseOpen

親指を立てるジェスチャーと指をさすジェスチャーを同時に行う。

leftIndexPointAndThumbRaiseClosed

親指を立てて指差すジェスチャーを同時に行い、トリガーを絞る。

idleStand

黙って立っている仕草。

idleTalk

静止しているが、アバターが話している。

walkFwdShort_c

0.5m/sで前方へ歩く。

walkFwdNormal_c, walkFwdFast_c

1.8m/sで前進している状態。2.3m/sで前進している。

walkFwdJog_c, walkFwdRun_c

3.2m/sで前進している状態。4.5m/sで前進している。

idleToWalkFwd, idleSettle

アイドル状態から前方歩行への短い移行。歩行からアイドル状態への移行。

walkBwdShort_c

0.6m/sで後ろ向きに歩く。

walkBwdFast_c, jogBwd_c, runBwd_c

1.6m/sで後方歩行。2.3 m/sで後方へジョギング。3.1m/s で後ろ向きにジョギングする。

turnLeft

その場での立ち回りアニメーション。

turnRight

その場での立ち回りアニメーション。

strafeLeftShortStep_c

0.1m/sでサイドステップを行う。

strafeLeftStep_c, strafeLeftWalk_c, strafeLeftWalkFast_c, strafeLeftJog_c

0.5m/sでサイドステップを行う。1.0m/sでサイドウォーク サイドウォーク 2.6 m/s。サイドジョグ 3.0m/s.

strafeRightShortStep_c, strafeRightStep_c

0.1m/sでサイドステップを行う。0.5m/sでサイドステップする。

strafeRightWalk_c, strafeRightFast_c, strafeRightJog_c, stepLeftShort_c, stepLeft_c, strafeLeftAnim_c, stepRightShort_c, stepRight_c, strafeRightAnim_c

サイドウォーク 1m/s サイドウォーク 2.6m/s サイドジョグ 3m/s。HMDステップ左 0m/s。HMDステップ左(0.5m/s). HMD 左方向 2.5m/s HMDステップ右(0m/s HMDステップ右、速度0.5m/s HMD 右旋回 (2.5m/s).

fly

Flying idle.

takeoffStand

スタンディングジャンプのテイクオフ。

TAKEOFFRUN

ランニングジャンプの離陸。

inAirStandPreApex

ジャンプの頂点に向かって上昇する途中、空中でスタンディングジャンプをする。

inAirStandApex

ジャンプの頂点で空中に立つスタンディングジャンプ。

inAirStandPostApex

ジャンプの下降弧の空中でスタンディングジャンプをする。

inAirRunPreApex

ジャンプの頂点に向かって上昇する途中の空中で、ランニングジャンプをする。

inAirRunApex

ジャンプの頂点で空中を走るランニングジャンプ。

inAirRunPostApex

ジャンプの下降弧で空中を走るランニングジャンプ。

landStandImpact

立地条件。

landStand

立地条件。

LANDRUN

土地を走る。

カスタムアバターアニメーションのJSONファイルを作成する

スクリプトを使うのが面倒な場合は、既存のアバター・アニメーションJSONファイルを編集するか置き換えることで、標準のアニメーションを上書きすることができます。

Note

アバターのアニメーション用にカスタムJSONファイルを作成した場合、標準アニメーションのJSONファイルに行われた更新は引き継がれません。いつでも最新版へのテキスト・マージを行うことができます。

JSONファイルは、どのアニメーションのロールがどのアニメーションFBXファイルにマッピングされているかを示しています。標準のアニメーションFBXファイルを、カスタムアニメーションのFBXファイルで置き換えることができます。または、各アニメーションの役割のための新しいマッピングを持つ新しいJSONファイルを書くことができます。

標準的なアニメーションを置き換えるため。

  1. カスタムJSONファイルをクラウドサーバーにアップロードし、URLをコピーしてください。

  2. インターフェースで、HUDまたはタブレットを立ち上げ、**Avatar**に進みます。

  3. 右上の「設定」アイコンをクリックします。

  4. 'Avatar Animation JSON'の下に、JSONファイルのURLを貼り付けます。

OR

  1. アバターのFSTファイルをテキストエディターで開きます。

  2. Animation Graph ファイルの URL を追加します。

Note

アバターのファイルを Avatar Packager <package-avatar.html#host-your-avatar> に通して、FST ファイルに変更を含める必要があります。

animGraphUrl = "URL"

Examples

  • 以下は現在のデフォルトの avatar-animation.json <https://github.com/vircadia/vircadia/blob/master/interface/resources/avatar/avatar-animation.json> ファイルです。

  • この scoot-animation.json <https://s3.amazonaws.com/hifi-public/tony/scoot-animation.json> ファイルは、アイドルとウォークのアニメーションを、座っているポーズに置き換えたものです。この例では、アバターのデフォルトアニメーションをどのように置き換えることができるかを示しています。

Advanced Topic: AnimNode System

アバターアニメーションJSONファイルには、AnimNodeシステムと呼ばれるノードの階層的なツリーが含まれています。AnimNodeシステムは、アバターがどのように動くかを定義し、Animation Graph JSONファイルに記述されます。

アバターの動きは、プロシージャルアニメーション、録画されたアニメーションクリップ、インバースキネマティクスを複雑に組み合わせて決定されます。この組み合わせは、アバターの体が物理演算とコントローラの入力にできるだけ速く追従するように、フレームごとに計算されます。デスクトップユーザー、HMDユーザー、そしてHTC Viveのトラッカー一式を装着したユーザーのアニメーションを処理しなければなりません。センサーがシステムに追加されたり削除されたりしても、即座に設定されなければなりません。また、ユニークなアニメーションやアバターの構成が可能なように、拡張にオープンである必要があります。これらの機能は、AnimNodeシステムによって処理されます。

その特徴を挙げてみました。

  • AnimNodeシステムは、ノードのグラフです。

  • 録画済みのアニメーションクリップなど、出力のみのノードもあります。

  • 他のノードは、グラフ内のその下のノードを処理し、その結果を組み合わせて出力を生成します。

  • ノード階層を操作することで、特定のアニメーションアクションを他のアニメーションアクションの前や後に発生させることができます。

  • ノードのパラメータは、実行時に動的に変更することができます。このような柔軟性は、良好なビジュアル結果を得るために必要です。

  • このシステムは、デフォルトのAnimation Graph JSONファイルにあり、アバターの初期化時に読み込まれます。

重要な概念

The AnimNode system operates like an expression parse tree. For example the following expression: 4 + 3 * 7 - (5 / (3 + 4)) + 6, can be represented by the following parse tree.

../../_images/animnode.png

このパースツリーを実行時に評価することで、実際の値を計算することができる。このツリーでは、リーフノードが値で、内部ノードが2つ以上のサブツリーを結合して新しい値を生成する操作です。この木は1つの値が残るまで評価され、それが式全体の結果である 30.2957142 となります。

式の場合、各ノードの出力値は浮動小数点数であり、演算は各サブツリーを評価し、加算や乗算などの算術演算と組み合わせるだけで実装ができます。

AnimNode システムも同じようなコンセプトで動いています。ただし、各ノードの値にはアバターのすべての関節の移動および回転が含まれます。リーフノードには、Tポーズなどのアバターの静的なポーズや、アニメーションクリップの1フレームを指定することができます。内部ノードでは、2 つ以上のサブツリー間の合成や 1 つのアニメーションの上半身と別のアニメーションの下半身の合成などの処理を行うことができます。

関連項目