Table of Contents
前書き
射出!!
どうも、Najikoです。
Twitterで、書いて欲しいアバターギミックの記事あったら書きますよ、とそれとなく呟いたものの、具体的なリクエストは1つも来なかったのでもう順番に書いていきたいと思います。スン……
今回行うのは以下の1点です。
1.boothで販売されているアバターをVRCSDK3で導入
それだけかよと思ったそこのあなた、正解です。実は本当は小物の導入とアニメーションによる出し入れまでは書こうと思ったのですが、Write defaults関連の設定(後述します)が普通に大変なのでそこまで書けませんでした。許して。
準備するもの
では見ていきましょう。
まず、Unityをインストールしてください。バージョンは2018.4.20f1です。
※この記事を書いた段階では2018.4.20f1でした。2021年10月現在では2019.4.31f1となっています。記事内の画像は2018.4.20f1のものですが、見た目以外の操作は変わりません。
次に、今回はboothで購入したアバターの導入を前提にしているのでとりあえずboothで実際に販売しているmidoriさん製作のアバター、ロポリこんを例に挙げて説明していきます。他のアバターでも概ね同じ手順で行うことが出来ると思います。
https://booth.pm/ja/items/1415037
次にVRCへのアバターのアップロードに必要なVRCSDKというものをダウンロードしていきます。
https://vrchat.com/home/download
右下の”Download SDK3-Avatars”からダウンロードします。
さらに今回もう一つツールを使用します。Avatars3toolsです。
https://booth.pm/ja/items/2207020
これはVRCSDK2用に設定されたアバターをVRCSDK3用に設定し直すツールです。実は現状最新版のVRCSDK3(2020.11.30)だと最初に大変だと書いたちょっとした不具合が出ますが、後で直します。
2021年1月6日追記:Avatars3toolsの更新により自動で行ってくれるようになったため6~9の手順は現在は手で行う必要はありません。仕組みが知りたい方は読んでください。
また、「Avatars3.0に対応」と謳ったアバターを購入した場合はこのツールは不要です。アバターに同梱された導入方法に従って導入してください。
Unityの使用
では早速インストールしたUnity を開いていきましょう。
Unityを開いたら右上のNewのところをクリックして新しいプロジェクトを作成します。プロジェクト名をつけて右下のCreate projectを押せば……
はい。親の顔より見たUnityのSceneが表示されます(なお、わたくしの親は今卵を床に落としてキレ散らかしています)。
アセットのインポート
Sceneというのは①に示した、アバターなどが表示される領域です。ではここにアバターをインポート……する前に、
Sceneの2つ右隣にAsset Storeというものがあります。これはUnityで使うAsset(ゲーム開発に使用するプラグイン)を販売しているページで、ここでAssetを購入及びインポートすることが出来ます。ここでは詳細は省きますが、Dynamic BoneというAssetを購入している場合、インポートすることで自分のアバターの揺れもの(尻尾や耳がなめらかにゆらゆらするなど)の処理を行うことが出来るようになります。販売されているアバターの多くはこれの設定がデフォルトで入っており、Dynamic Boneをインポートしていない状態でアバターをインポートすると当該の設定項目がエラーになるので、できれば購入しておいた方がスムーズです(有料です。通常は20$します。一度購入すれば何度でもインポートが可能です)。今回はとりあえずインポートしておきます。ない場合の手順も申し訳程度ですが紹介します。
画像で示されているimportのところをクリックして、これをインポートしますよーというwindowが出たら右下のimportボタンを押せばインポート完了です。
左下をご覧ください。Assetsの下にDynamic Boneフォルダが出来ていますね。ここに関連ファイルが入っています。開いていじることはありません。
ちなみにこれ以降のインポートはここに書いた手順通りに行ってください。順番が前後するとエラーが起きる可能性があります。
次にVRCSDK3のインポートです。
左上のAssetsから画像の順にタブを開きます。
ダウンロードしたこれを選ぶと……
このように表示されるので右下のimportボタンを押します。
これは拡張子がunitypackageとなっているパッケージされたファイルに共通のインポート手順となります。
次はAvatars3toolsのインポートです。手順は先ほどと同様で、ダウンロードして解凍したフォルダ内のUnitypackageをインポートしてください。
これです。
ここまで行えていれば
このような感じで上の項目が増えているはずです。VRChat SDKはアバターをアップロードする時に使用、VRCAvatar3TooslsはVRCSDK2用のprefabを変換する際に使用します。
prefab?なんでしょうか、それは……その謎を解き明かすためにいよいよアバターをインポートしていきます。手順は先ほどと同じです。解凍したアバター本体のUnity packageをインポートします。
はい。ここで大変なことに気が付きました。右下にピンクの塊みたいなのがありますね。あそこには本来正しい姿のロポリこんが表示されているはずなのですが、シェーダーをインポートし忘れてこうなっています。シェーダーとはざっくり説明すると、3Dモデルに色やテクスチャなどをどのように描写するかを決めるプログラムです。アバターによってはシェーダーを同梱している場合もありますが、ロポリこんについては規約の中の導入手順に「あらかじめユニティちゃんトゥーンシェーダー2をインポートしておくこと」とあります。規約をよく読んでおけば気づけたということですね(今回は素で忘れました)
忘れずにダウンロードしてインポートしておきましょう。
UTS2 http://unity-chan.com/download/releaseNote.php?id=UTS2_0
UTS2はこのようにパッケージをまとめてドラッグして、一番上の画像の③にあたるprojectのところにドラッグアンドドロップすると一挙にインポートできます。
そうしたらいよいよAvatars3toolsを使用していきます。画像のタブからコンバーターを起動します。なお、シェーダーを後からインポートしたせいで下のアイコンがピンクのままですがシェーダーに関しては後でインポートした場合でも(多分大体)正常に機能するのでこのまま進めていきます。
アバターのコンバート
ウィンドウの2.0 Avatar Prefabのところにprefabをドラッグアンドドロップします。
ロポリこんの場合、右から3番目のやつがPC用アバターのprefabです。prefabとはセーブデータのようなもので、今回の場合最初から「この設定でそのままアップロードできますよー」というセーブデータが同梱している、という状態になっています。ただし、このprefabはVRCSDK2向けなので3向けに変換しなければなりません。現在販売しているモデルの多くは、特に記載がなければVRCSDK2向けになっています。
ではConvert Avatar To 3.0を押していきます。
ついにアバターが表示されました。シェーダーを後からインポートしてもScene上ではしっかり表示されているのが分かります。ではまず、画像右側にある警告マークがついているScriptのところで右クリックして……
Remove Componentで削除します。こうするだけでもうVRCSDK3でアバターをアップロードすることはできます。
なお、Dynamic Boneを導入していない場合は下のDynamic Bone(Script)も同じように削除していっても結構です。
表情の不具合対策・手順1
さてここからちょっと大変です。
アバター右側のコンポーネント欄をスクロールしていくと、下の方にFXという項目があります。転がして儲けるやつではなく、アバターのアニメーションをコントロールしている項目です。これをダブルクリックします。
するとこのような画面が出ます。Layersタブの下には始めはAll PartsとLeft、Right Handの3つのレイヤーがありますが、右上の+ボタンを押して、New Layerを一つ追加するとこのようになります。
New Layerの右側のギアマークをクリックして、Weightを1にします。新しいレイヤーを作った時はこれをやっておかないと設定したアニメーションが動きません。
ここまでできたらNew Layerを引っ張ってAll Partsの下に持ってきます。そうしたらレイヤーの事は一旦忘れて、左側のHierarchyタブの下にあるLowPoly_konをクリックした後、右側のInspectorの隣のAnimationタブをクリックします。すると、このような画面になります。
右側にCreateボタンが見えますね。見えない場合はAnimationのタブで開いてる部分を左側に引っ張って拡大してください。するとこうして見えます。
Createボタンを押すと現在選択しているフォルダ内にアニメーションファイルとアニメーションコントローラーを作成します。今回は「Blend shape0」という名前にして保存を選んでいます。アニメーションがごちゃごちゃしているフォルダに入れると訳が分からなくなるので今回はAssetsフォルダを選択した状態で作成しました。画像で選択されている2つのファイルが作成されたファイルです。左の再生ボタンがついているものがアニメーションファイルで、今回設定して使用するものです。右側のアニメーションコントローラーはアニメーションを設定する時に使用するファイルですが、アニメーションの設定が終わったらあとで削除します。
Sceneに戻ってHierarchy上のロポリこんのところをクリックします。すると、Animationタブ右上の再生ボタンを押せるようになります。これを覚えておいてください。その上で……
ロポリこんのprefab下の階層にあるLowpoly_konをクリックし、Skined Mesh rendererの下にあるBlend shapeを展開するとこのようになります。これは何なのかと言うと、prefabの階層の中に在るLowPoly_konはメッシュ(3Dモデルのガワのこと)です。Blend shapeとはこのメッシュの一部に変形する余地をあらかじめ設定してあるところの事で、この値をいじると当該箇所のメッシュが数値に合わせて歪みます。わかりづらく書いてますが要するに主な利用方法は表情の変更です。ロポリこんは全身のメッシュが1つになっていますが、他のアバターでは複数メッシュがあるうちの顔のメッシュにこのBlend Shapeがついていることが多いです。で、これを何するかと言うと……
全部1にします。これはあとで0に戻すのですが、「全部0にするアニメ―ション」を作るために一度値を入れておきます。
先ほど上の方で、HierarchyのロポリこんをクリックしてからAnimationタブを開くと録画ボタンがクリックできるようになっていたのを思い出してください。押します。そして……
先ほど見たメッシュのBlend Shapeの画面を開きます。そして、全て1になっている値に0を入力していくと、画像のように入力したところが赤くなります。これを全部やります。
それが終わったらAnimationタブに戻って再度再生ボタンを押すと、このようになります。こうすることで「全部のBlend Shapeを0に戻すアニメーション」が完成しました。めでたしめでたし。
補足(まばたきとリップシンク)
……と、言いたいところだったのですが少し追記です。こちらをご覧ください。
これはロポリこんのリップシンクの設定です。リップシンクとは、簡単に言うとブレンドシェイプを利用してVRCでしゃべった時に口を動かすための設定です。このvrc.v_sil以下のブレンドシェイプはそれぞれの発音をした時にそのような口の形になるように設定されたブレンドシェイプなのです。先ほど「全部0に」と書きましたが、リップシンク用のブレンドシェイプまで0してしまうとリップシンクが機能しなくなってしまいます。面倒ですが、このリップシンク用のブレンドシェイプは、ブレンドシェイプを0にするアニメーションを作成する時は対象から除いて下さい。
それともう一つ。まばたきに設定されているブレンドシェイプも同様に0にしないようにしてください。具体的にはロポリこんの場合は「Blink_L」及び「Blink_R」という名前のブレンドシェイプです。ロポリこんはデフォルトではまばたきは設定されていない(はずです)のでこの場合影響はありませんが、まばたきを設定しているアバターの場合はこれも0にするアニメーションを入れてしまうと機能しなくなります。
表情の不具合対策・手順2(Write defaultsについて)
さて、話を戻しましょう。こうして先ほど作成したファイルのうち、アニメーションコントローラーの方を削除します。すると、再度Createボタンでアニメーションファイルが作れるようになります。そうして先ほどと同様にアニメーションファイルを作成したところがこちらになります。今度は「non」という名前にしています。このアニメーションファイルはこれ以上いじらず「何もしない空のアニメーション」として使います。よって、作ったらすぐアニメーションコントローラーの方のファイルは削除してOKです。
その後、再度Blend Shapeを見に行くと先ほど0にした値が全て1に戻っていると思います。先ほど0にしたのは「0にするアニメーションを作る」ために入力しただけなので、アニメーションの編集と関係ないところで再度0に戻しておく必要があります。この段階で忘れずに全て0に戻します。
次に、再度Hierarchy上のLowpoly_konのprefab(メッシュではなく青い箱の方)をクリックしてInspector欄をスクロールし、下にあるFXのところをダブルクリックして、レイヤー画面を開きます。
New Layerを選択したら先ほど作成した「Blend Shape0」のアニメーションをNewLayerウィンドウの中にドラッグアンドドロップして入れます。すると、Entryのとことから勝手に矢印が引かれてこのようになります。次に、オレンジ色のBlend Shape0をクリックして右側のInspector内のWrite Defaultsにチェックが入っているか確認してください。入っていたら外してください。
次に、Left Handのレイヤーを開きます。オレンジ色のIdleのところをクリックし、Inspectorタブの上にあるMotion欄にBlend Shape0のアニメーションファイルを入れます。そして、その下にあるWrite Defaultsのチェックはこちらもついていたら外します。
その後、枝が伸びた先の灰色のボックスを選択し、全てにこれまで同様にWrite Defaultsのチェックを外していきます。
続いてRight Handです。IdleのMotionには今度は「non」のアニメーションファイルを入れます。そして、ここでもWrite Defaultsのチェックはこの画像のように入っている場合は外しましょう。
Write defaultsの仕掛け
一応概要というか余談になりますが、この左手、右手はコントローラーの入力状況によって表情が変わる部分を制御しているレイヤーです。何も入力していなければIdleのアニメーションが適用されます。そして、灰色のボックスは各入力状況に応じたファイルが入っています。で、Write Defaultsはなんなのかというと、当該のアニメーションを再生する際にアニメーション値が設定されていない項目はデフォルト値を使用する、というものです。今回の場合、メッシュのBlend Shapeを全部0にしてあるので、アニメーションファイルの中でいじられていない部分は0を使用する……ということになるはずなのですが、直前のアニメーションの状況でデフォルト値として参照される先が変わることがあり、VRChatではこれが様々なバグを引き起こしていました。そこで、このバグ発生以降VRCSDK3ではWrite Defaultsは基本的にオフでレイヤーが作成されるよう変更されたのですが、表情のレイヤーについては元々Write Defaultsありきの構造のままチェックだけ外してアップロードすると「コントローラーから手を離しても表情が戻らない」といったことになります。これは困ります。そこで、この方法で何もしない時全部のBlend Shapeを0に戻すアニメーションが再生され、手がIdleの時は空のアニメーションの再生を挟むという、元々はWrite Defaultsで行っていたことを行うレイヤーの構造を作る必要があるわけです。そんなわけで今VRCはWrite Defaultsの使用を推奨していない(Unityの仕様上カバーしきれんから使ってバグ起きても知らんからね、ということ)ので、表情以外のところでも「アニメーションをオフにする時は「0の状態を再生する」方に遷移する仕組みを省かない」「何もしない(Idle)のレイヤーは空にせず”何もしないアニメーション”を入れる」という基本的な考え方を覚えておくと役に立ちます。
VRCへのアップロード
いよいよアップロードに移ります。VRChat SDKからShow Control Panelをクリックしてコントロールパネルを開きます。最初にVRCにログインするよう要求されるので、ログインします。
右のBuilderのタブをクリックするとこのような画面になります。右下のBuild&Publish for Windowsをクリックするとアップロードの準備が始まります。
この画面が出たらひとまず大丈夫です。Avatar Nameに好きな名前を入力して、Uploadボタンの上のチェックボックスにチェックを入れ、Uploadボタンを押す……前に、その上のSharingの項目でPrivateにチェックが入っていることを必ず確認してください。販売されているアバターはほとんどの場合パブリック(誰でも使えるようにすること)でのアップロードが規約で禁止されています。ここは毎回必ず指さし確認して……Uploadボタンを押します。
お疲れさまでした。これであとはVRCに入ればアップロードしたアバターが使えるようになっているはずです。次回はこのアバターにアクセサリや道具を仕込むなどの改変の仕方について書けたらいいな……と思います(願望)
なお、アバターがアップロードできるのはNew UserからなのでVisitorの方はVRCを遊んでNew Userになるまで頑張って下さい。では、わたくしはアイドル集会に行ってきます。さようなら。