VRChat用モデルを標準アバター形式「VRM」へ変換する

概要
====
[VRChat Advent Calendar 2020](https://adventar.org/calendars/5102) 25日目の記事です。

[VRChat Advent Calendar 2019](https://adventar.org/calendars/4090) では2日目に [継続的なクロスプラットフォーム対応](https://gitlab.com/vrc-gitmuseum/wiki/-/wikis/%E3%80%90VRChat%E3%80%91%E7%B6%99%E7%B6%9A%E7%9A%84%E3%81%AA%E3%82%AF%E3%83%AD%E3%82%B9%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%AF%BE%E5%BF%9C)、[VRChat Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vrchat) では25日目に [【完全版】BlenderやFBXのモデルをVRChatで使おう！](https://qiita.com/100/items/39200bffaa0cca904bb4) という記事をを書きました。

VRMとは?
========
オープン標準 [VRM] は、人型3Dモデルのファイル形式で、標準化団体「VRMコンソーシアム」が策定作業を進めています。

次のようなデータを、1つのファイルにまとめて格納することができます。

- メッシュ・ボーン・シェイプキー
- テクスチャ
- マテリアル
- Humanoid (hipsやheadなど) とボーンの対応関係
- 視点の位置
- 表情とシェイプキーの対応関係
- 揺れモノ
- アバター名・作者・親作品・利用規約

VRMは、GLBというファイル形式の一種 (GLB拡張) です。GLB (glTF) は、3Dモデルのファイル形式で、国際標準として広く利用されています。

GLBは、Blenderが標準で対応していて、Windowsでもダブルクリックで開けば、モデルを見回すことが可能です。VRMはGLBの一種なので、拡張子を `.glb` に変えれば、Windowsでそのまま閲覧できます。

Unityエディタ上のVRChat用モデルをVRMへ変換することで、[多くのアプリケーション]でアバターとして使うことができるようになります。

[VRM]: https://vrm.dev/vrm_about/
[多くのアプリケーション]: https://vrm.dev/vrm_applications/

VRChat用アバターとVRM
=====================
FBXなどからセットアップする場合、VRChat向けにセットアップするのに比べ、[VRMはよりかんたんにセットアップできます。](https://vrm.dev/how_to_make_vrm/)

しかしながら、VRChat向けにセットアップ済みのアバターを手っ取り早くVRM化したいとか、UniVRMよくわからんというときは、この記事の手順を試してみてください。

細かく設定する場合、継続的にメンテナンスする場合は、FBXなどからセットアップすることをおすすめします。

こちらはアバターオンリーの展示会・見本市「アバターミュージアム」のツイートですが、2020年12月現在、VRM未対応のアバターがまだまだ多いのが現状かと思います。

<table><tbody><tr><td><blockquote class="twitter-tweet"><p lang="ja" dir="ltr">アバターだけの展示会「アバターミュージアム」をVRChatで開催中<br>シンプルなワールドでアバターだけをじっくり見られる展示会です<br><br>参加クリエーターは166人！<br>アバター総数は214体！<br><br>Worldタブから「AvatarMuseum」を検索！ <a href="https://t.co/ylPTeuq5Oy">pic.twitter.com/ylPTeuq5Oy</a></p>&mdash; AvatarMuseum公式アカウント (@AvatarMuseum) <a href="https://twitter.com/AvatarMuseum/status/1328772797628223488?ref_src=twsrc%5Etfw">November 17, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></td><td><blockquote class="twitter-tweet"><p lang="ja" dir="ltr">アバターミュージアムVRM展の開催はいよいよ明日！<br><br>90名のクリエイターの皆様に参加いただき<br>展示アバターは117体となりました<br><br>会場はVRChatもしくはclusterから<br>※cluster会場にはcluster対応アバターのみ展示されます<br><br>あなただけのアバターがきっと見つかる<a href="https://twitter.com/hashtag/%E3%82%A2%E3%83%90%E3%83%9F%E3%83%A5?src=hash&amp;ref_src=twsrc%5Etfw">#アバミュ</a> <a href="https://t.co/pNDJEI7MYl">pic.twitter.com/pNDJEI7MYl</a></p>&mdash; AvatarMuseum公式アカウント (@AvatarMuseum) <a href="https://twitter.com/AvatarMuseum/status/1331738581258305536?ref_src=twsrc%5Etfw">November 25, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></td></tr></tbody></table>

変換手順
========
VRM Converter for VRChatのリポジトリを追加
-----------------------------------------
1. VRChat Creator Companionの左メニューの下の「**Settings**」をクリックします。
1. 上の「**Packages**」タブをクリックします。
1. 右上の「**Add Repository**」ボタンを押します。
1. 出てきた「**Repository Listing URL**」欄へ、以下のURLをコピーして貼り付けます。
   `https://esperecyan.github.io/VRMConverterForVRChat/registry.json`
1. その右の「**Add**」ボタンをクリックします。
   ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30177/878545e3-5ee5-f588-d0fc-f63aa230f300.png)
1. 表示された警告を読んで、右下の「I Understand, Add Repository」ボタンをクリックします。
   > コミュニティリポジトリの免責事項
   > 警告: 自己責任でダウンロードしてください!
   > 第三者のサイトを通じて提供されるコミュニティパッケージには、マルウェアが含まれている可能性があります。
   > VRChatは、コミュニティパッケージに対するいかなる表明、保証も行わず、コミュニティ・パッケージに起因する、または関連するいかなる責任も負わないものとします。
   
   ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30177/fc216161-2e81-14f5-2446-cd330083b81a.png)

VRM Converter for VRChat の導入
------------------------------
1. 「Projects」画面の、導入先のプロジェクト名の右端の「Manage Project」ボタンをクリックします。
1. 「**VRM Converter for VRChat**」の行の右端の「**⊕**」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30177/59fde022-ab9b-8d7e-6bf6-69cbe7067e2c.png)
:::note alert
『VRM Converter for VRChat』などのパッケージには、**C#スクリプト (`.cs` ファイル)** が含まれています。C#スクリプトは、コードの書き方によってインストール、もしくはインポートした時点で実行されます。つまりWindowsでいうところの `.exe` ファイルなどをダウンロードし、Windowsのブロックを回避して強制実行するのと同じです。VRChat Creator Companionでインストールするパッケージはもちろんのこと、SDK3向けギミックを配布するときにもC#スクリプトの同梱がほぼ必須となりましたが、**信頼のおけるパッケージ (+ コミュニティリポジトリ) やアセット以外はインストール、インポートしないようにご注意ください。**
VRChat Creator Companionでインストールするパッケージについては、以下のようなRepository Listing URLから、パッケージのURLを捜してダウンロードし展開すれば、C#スクリプトの中身をチェックできます。
https://esperecyan.github.io/VRMConverterForVRChat/registry.json
unitypackageの場合は、[UnityPackageUnPacker] を利用すると、.unitypackageファイルを展開してC#スクリプトの中身をチェックできます。
:::
[UnityPackageUnPacker]: https://chiugame.booth.pm/items/1037772 "このツールはunitypackageを指定フォルダに展開できるツールです！"

VRMへの変換
----------
1. VRChat用のアバターをクリックして選択された状態にします。
1. そのまま、ウィンドウ上部のメニューから、「VRM」→「Export VRM file from VRChat avatar」を選択します。  
   ※ダイアログ (ウィンドウ) の初期サイズが小さい場合があります。ダイアログ右下をドラッグするとサイズを変えることができます。
1. Expressions で、「Happy」(嬉)「Angry」(怒)「Sad」(哀)「Relaxed」(楽)「Surprised」(驚) に対応するアニメーションクリップを、プルダウンメニューから選択します。  
   ※不足していてもエクスポートは可能です。
1. 必要であれば以下の項目も入力します。(参考: [モデル情報 | UniVRMマニュアル](https://vrm.dev/docs/univrm/meta/univrm_meta/))
	- Title (アバター名)
	- Version (アバターのバージョン)
	- Author (作者)
	- Contact Information (自分の連絡先)
	- Reference (親作品)
	- アバターの人格に関する許諾範囲 / 再配布・改変に関する許諾範囲  
	  ※デフォルトではもっとも厳しい条件になっているので、条件をゆるめたい場合でなければ、基本的にはそのままでも大丈夫です。  
	  ※アバターに人格を与えることの許諾範囲とは、一般的に、アバターを操作できる人を表すものです。  
	  ここで「Everyone」を選択すると、VRChatのpublicアバターと似たような意味になります。  
	  (参考: [アバターの人格に関する許諾範囲 | UniVRMマニュアル](https://vrm.dev/docs/univrm/meta/univrm_meta/#%E3%82%A2%E3%83%90%E3%82%BF%E3%83%BC%E3%81%AE%E4%BA%BA%E6%A0%BC%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E8%A8%B1%E8%AB%BE%E7%AF%84%E5%9B%B2personation--characterization-permission))
1. ダイアログ右下の「Export VRM file」をクリックします。
1. ファイルピッカーが開くので、VRMファイルの保存先を決めます。  
   ※Unityプロジェクト内へエクスポートすると、UniVRMによってVRMの自動インポートが始まるのでご注意ください。

フィードバックサイトへ投票のお願い
==============================
VRChat SDKが対応しているUnity 2019.4は、すでにUnity Technologiesのサポートが終了しており、同バージョンはUniVRMでサポートされていません。
VRChatはCannyというサービスを利用してフィードバックサイトを開設しており、Unity 2021.3へのアップグレード要望が投稿されています。

https://twitter.com/esperecyan/status/1596684695026421760

また、VRM対応の要望も投稿されています。

https://twitter.com/butadiene121/status/1033392342806364160

ぜひ各投稿へ vote (投票) をお願いいたします。

投票の仕方
--------
1. 上のツイート内のCannyへのリンクを開きます。
1. **LOG IN TO VRCHAT** ボタンを押します。  
   ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30177/3153537c-6e84-e0a5-bebd-100d6abdf155.png)
1. VRChatのログインページが出てきたらログインします。
1. 「Canny Would Like to Connect to Your VRChat Account」という、Cannyからの連携を許可するか確認するページが表示されるので、**Yes!** ボタンを押して連携を許可します。  
   ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30177/6357f7b9-fc9e-e9b4-2c0b-677963d2c878.png)
1. 数字が書かれたボタンを押してvote (投票) します。数字の上の △ が青色になればvote完了です。  
   ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30177/838429fc-0018-3cb2-aa39-cdafd7a1f3f8.png)