自駄楽さんの備忘録

バーチャルの世界で生きていくために覚えたこと・やってみたこと+趣味のお話をまとめます。

VRChatへのアバターアップロード

正しいやり方かわからないけど、こうやったらVRChatにアバターアップロードできました!」という記事です。

※注意点※
ド素人がとりあえずカタチにできたよ!という報告ですので、最適解ではない可能性が非常に高いです。
その点はご留意の上、ご活用いただければ幸いです。
裏返すとド素人でもできました。できるか不安に思っている方も是非ともチャレンジしてください♪

現時点ではリップシンクや表情の実装については触れていません。
少しずつ追記していきます。
→2019/4/30 追記しました。
 次は揺れモノの実装を目指し、追記していきたいです。

1.VRChatでアカウントを作成

https://www.vrchat.net/home/register/にアクセスします。
必要事項を入力して、[Create Account]でアカウントが作成できます。
f:id:Jidaraku_U:20190409221056p:plain

※アカウント作成時点ではトラストランクが[Visitor]です
※トラストランクが[New User]になるまで、アバター・ワールドのアップロードはできません。
※トラストランクの昇格条件は明らかにされていませんが、僕の場合は以下で[New User]になりました。
 2/17(日) VRChatインストール。しばしデスクトップモードで散策(1h程度)。
 VIVEをセッティングしてVRモードで聞いたことあるワールドを一人で散歩。
 +バーチャル忍道や坪倉さん家でフレンドと遊ぶ。フレンド合計2人。
 2/18(月) アバターワールドやゲームのできるワールドに連れて回って貰う。フレンド合計8人。
 2/19(火) 14:35 New Userに。トータルプレイ時間5h程度でした。
※あくまで僕の予想ですが、「トラストランクの高いユーザーにフレンドになっていただけた」、「様々なギミックのあるワールドで遊んだ」がプラスだったのかな…と思っています。連れ回わしてくださったフレンドさんたちに改めて感謝です。

2.Unityのダウンロード

執筆時点(2019年4月)では、[Unity 2017.4.15f1]を使用することになっています。
https://unity3d.com/unity/qa/lts-releasesより[2017.4.15f1]を探して、ダウンロードしておきます。

3.VRChat SDKのダウンロード

https://www.vrchat.net/home/login/にアクセスし、ログインします。

f:id:Jidaraku_U:20190406200318p:plain

[Download]内の[Download VRchat SDK]をクリック
f:id:Jidaraku_U:20190406201018p:plain

執筆時点(2019年4月)では、[VRCSDK-2019.04.01.10.09_Public.unitypackage]がダウンロードされました。
SDK不定期に(?)更新されます。
※初めてアバターをアップロードした2019年2月の時点では[VRCSDK-2019.02.07.17.08_Public.unitypackage]でした。
※2019/4/15時点では「VRCSDK-2019.04.14.12.31_Public.unitypackage」です。(気づいたら更新していきます)

4.Unityでの新規プロジェクト作成

[Unity 2017.4.15f1]を起動し、右上の[New]をクリック
f:id:Jidaraku_U:20190406201354p:plain

任意の[Projiect name]を入力し、
必要があれば[Location]より[Project]の保存先を設定します。
f:id:Jidaraku_U:20190406201523p:plain
[Template]は3D、[Organization]はそのままで大丈夫だと思います。(僕もよくわかってません)
[Create project]をクリックします。

起動時に「もっと新しいバージョンが使えるよ」的なポップアップが表示されます。
VRChatへのアップロードの場合、バージョンが指定されているので[Skip new version]か右上の[×]で閉じます。
[Check for Updates]のチェックを外せば、たぶん表示されなくなります。(未確認)
f:id:Jidaraku_U:20190406201940p:plain

5.VRChat SDKのインポート

画面下部の[Assets]という領域に、先ほどダウンロードした[VRchat SDK]をドラッグ&ドロップします。
f:id:Jidaraku_U:20190409221545p:plain

以下のウィンドウがポップアップしますので、[Import]をクリックして、しばし待ちます。
数分かかるかもしれません。
f:id:Jidaraku_U:20190406202401p:plain

インポートが完了すると↓のようなウィンドウがポップアップしますが、閉じて大丈夫です。
f:id:Jidaraku_U:20190406202629p:plain

6.モデルのインポート

今回は2019/4/6に投稿したシロの日記念シロ組さんverの僕のバーチャルボディをアップロードしていきます。
www.youtube.com
この記事でアップロードしているモデル+自作のワールドでVRChat内で撮影しています。
ワールドのアップロードについては別の記事で書きます。

※[Assets]内にフォルダ分けをすることも可能ですが、今回は気にせず[Assets]直下に放り込んでいきます。

まず、アップロードしたいモデルのデータを[Assets]内にドラッグ&ドロップします。
f:id:Jidaraku_U:20190406202837p:plain

Metasequoiaを使ってfbx形式で出力している僕の環境の場合、テクスチャのないマテリアルは大丈夫ですが、テクスチャのついたマテリアルはうまく表示できていません。
f:id:Jidaraku_U:20190406202957p:plain

7.マテリアルの新規作成と割り当て

真っ黒では困るので、Unity上で新規にマテリアルを作成し、割り当てを変更していきます。
[Assets]ウィンドウ内を右クリック-[Create]-[Material]
f:id:Jidaraku_U:20190406203101p:plain

マテリアルに任意の名称をつけておきます。
あとで選ぶときにわかりやすいものが望ましいです。(同じ名前が複数あると流石に不便です)
f:id:Jidaraku_U:20190406203209p:plain

使用するテクスチャを[Assets]内にドラッグ&ドロップします。
f:id:Jidaraku_U:20190406203313p:plain

作成したマテリアルを選択して、[Inspector]タブを表示します。
f:id:Jidaraku_U:20190406203420p:plain

[Shader]-[Unlit]-[Texture]を選択
f:id:Jidaraku_U:20190406203534p:plain

[select]をクリックします。
f:id:Jidaraku_U:20190406203614p:plain

使いたいテクスチャを選択します。
f:id:Jidaraku_U:20190406203656p:plain

モデルのデータをクリックして、[Inspector]-[Materials]タブより
[On Demand Remap]から使用するマテリアルを選択、[Apply]で適用します。
f:id:Jidaraku_U:20190406204531p:plain

以上がテクスチャを表示する簡単な方法です。
シェーダーを変えることで見栄えをいろいろ調整できます。
僕はこの辺まだよくわかってないですが、アウトライン(輪郭)が欲しいなどというときにはシェーダーを変える必要があります。
このモデルの場合、輪郭がないとお豆腐フェイスと服の境などがわからなかったりしますね。

[Unlit/Texture](アウトラインなし)
f:id:Jidaraku_U:20190409222650p:plain

[UnityChanToonShader/Toon_DoubleShadeWithFeather](Outline_Width=5)
f:id:Jidaraku_U:20190409222902p:plain
画像ではわかりやすいように[Outline_Width](輪郭の太さ)のパラメーターを"5"としていますが、実際は"0.5"や”1”で使用しています。
※この記事の最後の方で[ユニティちゃんトゥーンシェーダー2.0]でのアウトラインの出し方を記載しています。

このタイミングでなぜか、テクスチャの内マテリアルが消えてしまいました。(Unityワカラン)
先ほどと同様の手順でマテリアルを追加します。
今回のマテリアルは以下のパラメーターで作成しました。

金属っぽい翼や歯車のマテリアル(gold)
f:id:Jidaraku_U:20190406205534p:plain

半透明の羽のマテリアル(fether)
f:id:Jidaraku_U:20190406205549p:plain

マテリアルの準備ができたので、先ほどと同様に[Inspector]-[Materials]タブより、[On Demand Remap]から使用するマテリアルを選択し、[Apply]しておきます。
f:id:Jidaraku_U:20190406205756p:plain

8.リギングの確認

次に[Rig]タブで[Animation Type:Humanoid]を選択し一度[Apply]した後に、[Configure]をクリックします。
f:id:Jidaraku_U:20190406204911p:plain

ボーンが意図したとおりに認識されているか確認します。
f:id:Jidaraku_U:20190406210003p:plain

[Mixamo]で入れたボーンをそのまま使っている場合、ボーンの構成がこのままだと上手く使えません。
以下の二点を変更し、[Apply]をクリックします。
・[Upper Chest] ⇒ "none"
・[Chest] ⇒ "Spine2"
f:id:Jidaraku_U:20190406210036p:plain

この段階で[Muscles & Settings]タブで、スライダーを弄って、ボーンやウェイトの設定が意図したものになっているか確認してみてください。
確認が済んだら、[Done]で終了できます。
f:id:Jidaraku_U:20190406210137p:plain

ついてきてないパーツがあったり、意図しない箇所に追従するパーツがあったりする等、ボーンやウェイトがうまくいってない場合、モデリングソフトに戻って修正しましょう。
修正した際、Unityではなくファイルエクスプローラーで[Assets]フォルダを開き、同名の.fbxファイルを上書きすることで、ここまで設定した内容を引き継いで作業できます。
※変更内容によっては最初からやり直しかもしれません。マテリアルは使いまわせるはずです。

9.Hierarchyへのモデル追加とVRC_Avatar Descriptorコンポーネントの追加

僕の画面構成の場合ですと、左上の[Hierarchy]というウィンドウに[Assets]の中からモデルをドラッグ&ドロップします
f:id:Jidaraku_U:20190409231506p:plain

[Scene]というウィンドウにモデルが表示されたらOKだと思います。
[Hierarchy]に配置したモデルを選択し、[Inspector]-[Add Component]をクリックし、[VRC_Avatar Descriptor]を選択します。
検索ウィンドウにVRCと入れておくと探しやすいです。
f:id:Jidaraku_U:20190406210907p:plain

10.スケールの調整

モデルの大きさが意図した大きさでない場合、モデリングソフト側でサイズを調整して出力しなおす以外にもUnity上でスケールを調整する方法があります。
後述の視点の位置と比較してサイズを確認すると良いと思います。

[Assets]内のモデルデータを選択して[Inspector]-[Model]タブの[Scale Factor]を調整することで拡大・縮小できます。
f:id:Jidaraku_U:20190409231632p:plain
初期値の1が100%ですので、1.1にして1.1倍に拡大、0.9にして0.9倍に縮小という感じですね。
拡大・縮小の良し悪しはわかりませんが、個駄天使的には、「なんか気持ち悪い」のでモデリングソフト側で調整してます。

また[Hierarchy]のモデルを選択、[Inspector]タブの[Transform]の項目でも[Scale]が変えられます。
こちらだとXYZ軸それぞれに値が入るので、Yだけ上げて細長くしたり、Xだけ上げて太ましくしたりできそうです。
f:id:Jidaraku_U:20190406211951p:plain
数値が1じゃないと「なんかムズムズする」ので、僕は使ってません。
実際パフォーマンスなどに影響があるのかは見当もつきません……。

11.視点(View Position)の調整

次に視点(View Position)を設定します。

[Scene]を見ると、グレーの球体があります。これがアバターの視点の位置になります。
モデルの大きさ等によっては見つけるのが難しいかもしれませんが、どこかにあるのでY軸やZ軸を弄りながら探して下さい。
初期値がY(高さ)が1.6m、Z(奥行)が0.2mの位置にあるようです。
f:id:Jidaraku_U:20190409224520p:plain

眉間にめり込む位置くらいに調整するといい感じらしいです。
今回はシロ組さんの被り物をしているのでわかりにくいですが……。
f:id:Jidaraku_U:20190406211504p:plain

12.[Default Animation Set]の選択

[Default Animation Set]の値を任意のモノに変更すればとりあえずアップロード可能です。
f:id:Jidaraku_U:20190406212230p:plain
ちなみに、バーチャル駄天使の僕は無性別なので雌雄はありませんが、気分で[Female]を選んでいます。
具体的なアニメーションの差などは確認してません……。

13.いざ、アップロード!

表情や口パクの設定をまだしていませんが、一度アップロードしてみます。
※初回の場合は[VRChat SDK]-[Setting]から[Sign in]しましょう。
f:id:Jidaraku_U:20190409213911p:plain

[VRChat SDK]-[Show BUild Contorol Panel]をクリックします。
f:id:Jidaraku_U:20190406212712p:plain

オブジェクトまとめてない部分があったりして、パフォーマンスランクはミディアムと出ています。
f:id:Jidaraku_U:20190406212954p:plain
とりあえず、今は気にせず[Build & Publish]です。

[Scene]の保存を行っていないと保存画面が立ち上がりますので、任意のファイル名で保存しましょう。
f:id:Jidaraku_U:20190406213131p:plain

二つのウィンドウがポップアップしますが、閉じてOKです。
f:id:Jidaraku_U:20190406213221p:plain

[Avator Name]に任意の名称を入力します。
[Description]は書かなくてもOKですが、アバターの説明を書きます。
[Sharing]は"Private"でしか上げたことないですが、"Public"だとほかの方にも着てもらえる……のかな?
「The above information is accurate and I have the rights to upload this content to VRChat.」にチェックを入れて[Upload]です。
権利的に問題のないアバターしかアップロードしてはいけません。当然ですね。
f:id:Jidaraku_U:20190406213426p:plain

設定等まずっていなければアップロードが始まります。
所要時間は、僕のモデル・環境で、2,3分といったところでしょうか。

正常にアップロードが完了すればこちらがポップアップします。
f:id:Jidaraku_U:20190406214209p:plain

VRChatにログインして、確認してみましょう!
素敵なバーチャルライフを!!

14.追加設定(アニメーションやシェーダー・揺れモノの設定)

ここまででほとんど触れていませんが、以下の追加設定が可能です。
・シェーダーでの見栄えの変更
リップシンクや表情アニメーションの設定
・Dynamic Boneなどの揺れモノの設定

実践できた範囲で追記していきたいと思います。

【追記①】アウトラインを表示する

細かい使い方は理解していませんが、とりあえずアウトラインを出すことはできたのでそちらの解説を追記します。
[ユニティちゃんトゥーンシェーダー2.0]を使用させていただきます。
本当は影やハイライトなどをコントロールできる素晴らしいシェーダーなのですが、僕にはまだ使いこなせていないので1枚のテクスチャで色を表示+アウトラインを表示するという方針で進めます。
※いろいろ使いこなせるようになったら追記します。

オフィシャルサイトダウンロード - UNITY-CHAN!より[ユニティちゃんトゥーンシェーダー2.0]をダウンロードします。
執筆時点(2019年4月)でのバージョンは[2.0.7.1]。

ダウンロードしたzipファイルを解凍し、[UTS2_ShaderOnly_v2.0.7_Release.unitypackage]を[Assets]にドラッグ&ドロップします。
※バージョンによってファイル名やパラメーターが異なる可能性があります。
[Import]をクリックして、しばし待ちます。
f:id:Jidaraku_U:20190406204215p:plain

対象のマテリアルを選択し、[Inspector]タブの[Shader]から[UnityChanToonShader]-[Toon_DoubleShadeWithFeather]を選択します。
f:id:Jidaraku_U:20190409225743p:plain

VRChat用の場合、とりあえず[VRChat Recommendation]をクリックしておくと良いらしいです。
※マニュアルに書いてありました。
f:id:Jidaraku_U:20190409230309p:plain

[BaseMap]の横の小さな⦿をクリックし、使用するテクスチャを選択します。
f:id:Jidaraku_U:20190409230739p:plain

[BaseMap]の右の[NoSharing]をクリックし、[With 1st ShadeMap]に変更します。
f:id:Jidaraku_U:20190409230843p:plain

[Outline Width]でアウトラインの太さ、[Outline Color]でアウトラインの色を調整します。
f:id:Jidaraku_U:20190409231006p:plain

以上でテクスチャとアウトラインを表示できました。
f:id:Jidaraku_U:20190409231139p:plain

【追記②】リップシンクを設定する

2019/4/30追記
[VRC_Avatar Descriptor(Script)]の[Lip Sync]から[Viseme Blen Shape]を選択します。
f:id:Jidaraku_U:20190430213051p:plain

[Face Mesh]の右端の〇をクリックして、口パクのモーフを含むオブジェクトを選択します。
f:id:Jidaraku_U:20190430213342p:plain
f:id:Jidaraku_U:20190430213315p:plain

僕の場合、真顔+「あいうえお」の口しかないので以下のように割り当てています。
f:id:Jidaraku_U:20190430214141p:plain

【追記③】表情を設定する

2019/4/30追記
[Hierarchy]のモデルを右クリックして、[Copy]します。
f:id:Jidaraku_U:20190430214317p:plain

[Hierarchy]に[Paste]します。
f:id:Jidaraku_U:20190430214412p:plain

複製したモデルを右クリックして、[Rename]をクリックし、わかりやすい名前に変更しておきます。
f:id:Jidaraku_U:20190430214535p:plain

複製したモデルの中からモーフが含まれるオブジェクトを選択し、[Inspector]タブの[Skinned Mesh Renderer]-[BlendShapes]をクリックし展開します。
f:id:Jidaraku_U:20190430214713p:plain

実装する表情にパラメーターを弄っておきます。
f:id:Jidaraku_U:20190430214910p:plain

[Assets]内を右クリックして、[Create]-[Animation]をクリックします。
f:id:Jidaraku_U:20190430215041p:plain

任意の名前をつけておきます。
f:id:Jidaraku_U:20190430215125p:plain

[Window]-[Animation]をクリックします。
f:id:Jidaraku_U:20190430215450p:plain

作成したアニメーションファイルを複製したモデルにドラッグ&ドロップします。
f:id:Jidaraku_U:20190430215643p:plain

[Hierarchy]の表情設定用のモデルを選択して、[Animation]ウィンドウの[Add Property]をクリックします。
その中からモーフが含まれれるオブジェクトを選択し、[Skinned Mesh Renderer]をクリックします。
f:id:Jidaraku_U:20190430220201p:plain

今回使用したいモーフを見つけて、右側の+ボタンを押します。
(横方向にスクロールしないと見えないところにあります。)
f:id:Jidaraku_U:20190430220320p:plain

ここの数字がモーフの%に相当します。
f:id:Jidaraku_U:20190430220430p:plain

1:00にある◆をドラッグして、0.01の位置に持ってきます。
f:id:Jidaraku_U:20190430224616p:plain
f:id:Jidaraku_U:20190430224652p:plain

[Assets]-[VRCSDK]-{Examples]-[Sample Assets]-[Animation]内の[CustomOverrideEmpty]を[Assets]にドラッグ&ドロップします。
f:id:Jidaraku_U:20190430222225p:plain

[Assets]の[CustomOverrideEmpty]を選択します。
f:id:Jidaraku_U:20190430222415p:plain

割り当てたい箇所に作成したアニメーションを割り当てます。
今回はFIST(グー)に先ほど作ったアニメーションを割り当てました。
f:id:Jidaraku_U:20190430222524p:plain

以上で表情の設定ができましたが、これでは例えばFISTしたさいに[smile]の表情にはなるもののグーに手がならなくなります。
グーの手をするようにアニメーションを設定する必要があります。
手動でやるには骨のある作業ですが、有志によって作成されたツールで楽ができます。
今回はがとーしょこら様の[VRCDeveloperTool]をお借りします。
gatosyocora.booth.pm

ダウンロードされたzipファイルを解凍し、中のUnityPackageを[Assets]にドラッグ&ドロップします。
以下のウィンドウがポップアップしますので、[Import]をクリックします。
f:id:Jidaraku_U:20190430223149p:plain

手のアニメーションを加えたいアニメーションファイルを選択して、[Inspector]タブで右クリックをします。
今回はFISTのアニメーションを追加したいので、[Add Hand Pose 'FIST]を選択します。
f:id:Jidaraku_U:20190430223307p:plain

以上で表情と手のアニメーションを両立が可能です。

最後に作成したアニメーションオーバーライドをモデルに割り当てていきます。
[Hierarychy]の元のモデルを選択して、[Inspector]タブを開きます。
f:id:Jidaraku_U:20190430225855p:plain

[Assets]の[CustomOverrideEmpty]を{VRC_Avatar Descriptor(Script)]のCustom Standing Anims]にドラッグ&ドロップします。
f:id:Jidaraku_U:20190430230012p:plain
f:id:Jidaraku_U:20190430230035p:plain

こちらのアバターをアップロードする際はアニメーション用に作成したモデルがあるとエラーが発生してしまいます。
こちらのチェックを外します。複数追加した場合、元のモデル以外チェックを外していきます。
f:id:Jidaraku_U:20190430223605p:plain

[Deactivate Children]をクリックします。
f:id:Jidaraku_U:20190430223646p:plain

アップロードが可能になりました。
f:id:Jidaraku_U:20190430223824p:plain