概要

AirisはVRChat SDK2用にセットアップされたアバターですが、移行作業をすることでSDK3で利用可能となります。 このページでは、Airisの移行手順を解説します。

解説

VRChat SDK2、SDK3の2つのプロジェクトを作成し、アバターの設定項目を確認しながら移行していきます。 移行が完全に終わればSDK2版プロジェクトは消してもらっても構いません。

VRChat SDK2版プロジェクト

Airisは通常モデルと素体と別unitypackageなので、両方ともインポートし、セットアップすることにします。 Airis_ver1.02.unitypackageAiris_basebody.unitypackageです。 SDK2を使用したアバターのアップロードの通りにセットアップします。

使用しているシェーダーも同包されているため、特筆する点もありません。

VRChat SDK3版プロジェクト

1. セットアップ

Airisは通常モデルと素体と別unitypackageなので、両方ともインポートし、セットアップすることにします。 Airis_ver1.02.unitypackageAiris_basebody.unitypackageです。 SDK3を使用したアバターのアップロード5. アップロード準備まで終わらせます。

2. 説明

そのままアップロードしようとしても、

A VRCSceneDescriptor or VRCAvatarDescriptor is required to build VRChat SDK Content

と怒られてしまいます。 原因としてはVRChat SDK2とSDK3のVRCAvatarDescriptorは別のスクリプトで、そのまま融通することができずMissing Scriptとなってしまい、SDKに認識されていないためです。

3. Unpack Prefabとスクリプトの入れ替え

3.1 Prefabの解除

まず、Prefabを解除します。 unpack_prefab.png

3.2 不要なコンポーネントの削除

Missingが発生している(Script)Pipeline Manager (Script)のコンポーネントを削除します。 remove_component.png

3.3 SDK3のAvatar Descriptorを追加

代わりに、SDK3のVRC Avatar Descriptorを追加します。 Pipeline Manager (Script)は自動的に追加されるので、特に何もする必要性はありません。 add_avatar_descriptor.png

4. VRC Avatar Descriptorの設定

VRC Avatar Descriptor (SDK3)のページに書いてある通りにすれば良いです。

4.1 View

View項目の直下にView Positionという項目があり、視点の位置を設定できます。 今回はSDK2版の設定値を持ってきます。 sdk2_view_position.png X,Y,Zそれぞれをそのまま渡してやると良いでしょう。 sdk3_view_position.png

4.2 LipSync

リップシンクというマイクの入力に合わせて口を動かすことができる設定項目です。 sdk2_lipsync.png 赤、緑、水色それぞれの項目をSDK3のぞれぞれに設定してください。 sdk3_lipsync.png

Airisの場合、Viseme: xxの項目はVRC規定のシェイプキーを使用しているようですので、特に変更する必要はなさそうです。

4.3 Eye Look

SDK2にはない項目/機能なので必要ないならば飛ばしてもらっても構いません。

Generalは飛ばします。

4.3.1 Eyes

Enableボタンを押して設定項目を開きます。 SDK2にはアイボーンの設定項目がありませんが、SDK3には設定項目があるので、設定することにします。

アイボーンらしきものが、Eye_L,Eye_RLeftEye,RightEyeの2つありますが、今回はLeftEye,RightEyeを使用することにします。

sdk3_eyelook.png Transformsに左右のアイボーンをそれぞれ指定し、Rotation Statesで

  • Looking Straight (正面見ている時)
  • Looking Up (上を見ている時)
  • Looking Down (下を見ている時)
  • Looking Left (左を見ている時)
  • Looking Right (右を見ている時) のアイボーンの向きを指定できます。 画像は一例ですので良い値を探してください。
4.3.2 Eyelids

まぶたの動きを設定できます。

sdk3_eyelids.png Airisにはまぶたのボーンはないので、Blendshapesを指定します。 Eyelids MeshにはBodyを指定します。 Blendshape Statesでは、まばたき,上を向いてる時,下を向いている時のシェイプキーを設定することができます。 但し、Eyesの項目でアイボーンを指定しているため、上を向いてる時,下を向いている時の設定はしないほうが良いでしょう。(ボーンとシェイプキーの両方が動いてしまうためです。) Blinkにはまばたきを、Looking Up,Looking Downは-none-を指定しました。

4.4 Playable Layers

sdk3_playable_layer_default.png ハンドサインによる表情変化や、移動モーションなどなどいろいろな設定ができるアニメーションコントローラを指定できる項目です。 Customizeボタンを押し、設定項目を開きます。

Base,Specialの2つのグループがありますが、Baseのみ変更し、Specialは今回は変更しません。

BaseグループのルートアニメーションコントローラはBase,Additive,Gesture,Action,FXの5つあります。 今回は移動モーションなどを司るBase,ハンドサインによる表情変化を司るFXを変更することにします。 変更しなかったコントローラらはVRChat標準のものが使用されます。

4.4.1 作業フォルダーの作成

まず、適当な場所に作業フォルダーを作成します。 /Asetts/Airisの下に作成してもよいのですが、将来のアップデートなどで衝突するのも嫌なので、私は/Asetts/Workspace/com.jo3qma.airis/のようなフォルダー構成にし、サブフォルダでまた色々分けるようにします。

4.4.2 アニメーションコントローラの複製 (移動モーション|表情)

その次に、SDK3のデフォルトのアニメーションコントローラを複製します。 デフォルトのアニメーションコントローラは/Asetts/VRCSDK/Examples3/Animation/Controllersに存在します。 copy_anim_controllers.png vrc_AvatarV3HandsLayer, vrc_AvatarV3LocomotionLayerを複製(Ctrl + D)し、作業フォルダーに移動させます。

名前もわかりやすいように、それぞれAiris_FX, Airis_Locomotionに変更しました。 rename_anim_controllers.png

4.4.3 ブレンドツリーの複製 (移動モーション1)

自前でブレンドツリーを作成してもよいのですが、今回はVRChat SDK3に付属しているサンプルを使用することにします。 /Asetts/VRCSDK/Examples3/Animation/BlendTreesvrc_StandingLocomotionを複製(Ctrl + D)し、作業フォルダーに移動させます。 copy_anim_blendtree.png また、名前もわかりやすいように、Airis_StandingLocomotionに変更しました。 rename_anim_blendtree.png

4.4.4 移動モーションの設定 (移動モーション2)

先に、4.4.3で複製したブレンドツリーを編集します。

ブレンドツリーを開くと、Inspectorのタブに内容が表示されます。 blendtree_inspector.png 今回編集するのはリストのMotionと一番右端の人形のMirror Animaitonの部分です。 MotionはX,Yの値が指定の値を取った場合に再生するアニメーションを指定します。 Mirror Animationは指定したアニメーションを左右反転させて再生するかを設定できますが、今回は対応したアニメーションがちゃんとあるので使いません。

MotionPos XPos YChanges Animation SpeedMirror Animation
frontmove05.961
frontmove03.41
frontmove01.561
proxy_stand_still000.166
backmove0-1.561
backmove0-2.11
leftmove-302
leftmove-1.5601
rightmove1.5601
rightmove302
None (Motion)-1.1-1.11
None (Motion)1.1-1.11
None (Motion)-1.11.11
None (Motion)1.11.11
None (Motion)-2.442.441
None (Motion)2.42.441
None (Motion)-1.5-1.51
None (Motion)1.5-1.51
この表のように設定してください。
  • frontmove,bockmove,leftmove,rightmove/Asetts/Airis/Animationの中にあります。
  • proxy_stand_stillは最初から設定されています。
  • None (Motion)はアニメーションを指定していない状態です。
  • Mirror Animationはすべてチェックボックスが外れている状態にしてください。
4.4.5 Locomotionコントローラの編集 (移動モーション3)

4.4.2で複製したアニメーションコントローラの1つ、Locomotionを開きます。 Animatorタブに内容が表示されます。 animator_locomotion.png タブ内右のStandingステートを選択すると、Inspectorに詳細が表示されます。 その、Motionをvrc_StandingLocomotionから先ほど編集したAiris_StandingLocomotionに変更します。 inspector_locomotion.png

4.4.6 アニメーションの修正 (表情)

AirisはもともとSDK2向けのアバターで、アニメーションファイルもSDK3用に修正しなければならない点があります。 Transformアニメーションの削除です。

4.4.6.1 アニメーションファイルの複製

ハンドサインに対応したアニメーションファイルを複製します。 copy_anim_handsign.png /Assets/Workspace/com.jo3qma.airis/anim_handsign/に複製しました。

4.4.6.2 Transformアニメーションの削除

SDK2では、アニメーションオーバーライドに使用していたコントローラが1つだけだったので1つのアニメーションにハンドサインと表情をあわせて使用していました。 SDK3からは、GestureとFXとで分離され、GestureではTransformaアニメーション以外を、FXではTransformアニメーションを使用してはならないようになりました。 なので、アニメーションファイルからTransformアニメーションを削除します。

各アニメーションを開きます。Animationタブで編集できます。 anim_before.png

Animator.xxxx.xxxx.xxxx Stretchedとなっている部分を削除します。 anim_transform_delete.png これを複製したアニメーション全てに行います。

ぐー(fist)はアニメーションファイルが空になります。

4.4.7 HandsLayerコントローラの編集 (表情)

4.4.2で複製したアニメーションコントローラの1つ、HandsLayer(以下、FX)を開きます。 Animatorタブに内容が表示されます。 animator_fx.png FXには3つのアニメーションレイヤ―が存在し、一番上のAllParts以外に、Left Hand,Right Handの2つがあり、それぞれ左右の手の状態に対応したアニメーションが設定できます。

自分は右手で表情操作するのが好きなので、Right Handレイヤーを編集することにします。 初期の設定可能項目は8つあります。 fx_right_hand.png それぞれの色が、SDK2のアニメーションオーバーライドと呼ばれる物と対応しています。 custom_override.png

変更したいステートを選択し、InspectorのMotionの項目を任意のアニメーションに設定することでアニメーションを入れ替えることができます。 ここでは、4.4.6.2で編集したアニメーションを入れていきます。 ただし、IdleアニメーションはNone (Animation Clip)となっていて存在しないので、proxy_hands_idleのママにします。 anim_state.png 次に、Idleを含む8つのステート全てのWrite Defaultsオプションを有効にします。 理由は、Idle, Fistのアニメーションはシェイプキーが指定されておらず、無効のままだと偏移前の状態を引き継いでしまうので、他のステートから偏移した際にデフォルト値を参照するようにするためです。

4.4.8 Playable Layersの項目に設定

4.4.1-4.4.7まで編集したアニメーションコントローラをアバターに設定します。 sdk3_playable_layers_after.png BaseにLocomotionを、FXにFX(Hands Layer)を設定します。

これにより、移動モーションとハンドサインによる表情変化を設定することができました。

4.5 Lower Body

sdk3_lower_body.png 2つの設定項目があります。

  • Use Auto-Footsteps for 3 and 4 point tracking
  • Force Locomotion animations for 6 point tracking

上は3,4点トラッキング時(かつ接地時?)にコントローラによって移動していない(VR装着者が実際に部屋を移動している)ときに自動的に歩行アニメーションを再生するか否かの設定です。 Airisは移動モーションを入れ替えているため、チェックボックスを外し無効化します。

下は6点トラッキング時に移動した際に歩行アニメーションを再生するか否かという設定です。 これは人それぞれなので好みのものを設定してください。

4.6 Expressions

sdk3_expressions.png SDK3の目玉機能の1つのExpressions MenuやExpression Parametersを設定できます。 今回はSDK2のアバターをできる限りそのまま移行するのを目的としているので、パスします。

5 Prefab化

再利用性を上げるため、Prefab化します。 create_prefab.png HierarchyからProjectにアバターのルートオブジェクトをドラッグ・アンド・ドロップするだけです。 私はわかりやすいようにサフィックスとしてsdk3という文字列を付けましたが、これもどっちでもいいです。

6 BaseBody

Airisの素体のみ版、BaseBodyもSDK3対応するならば、1-5まで同じことを繰り返せばよいです。 しかし、素体のみは移動モーションを変更していないので、Playable Layersの欄でLocomotionを設定しなくて良いことに気をつけてください。

終わり。

お疲れさまです。これでSDK3対応は終わりました。

unitypackage

私がセットアップしたSDK3対応Airisのunitypackageです。 このファイルにはAiris本体、Dynamic Bone、VRC SDK3、GamingEffectShaderは含まれていません。 また、それぞれに依存しているため、それぞれをインポートした後にインポートしてください。 Download - airis_ver1.02_unofficial_sdk3.unitypackage 通常版と素材版の両方のPrefabが入っています。 /Asetts/Workspace/com.jo3qma.airis/にPrefabがあります。