VRMの何がいいの？という話

## 概要
2018年4月。バーチャルキャストのローンチと共に**「<a href="https://dwango.github.io/vrm/" target="blank">VRM</a>」という新しい3Dのフォーマット**が出てきました。
しかし（VRMという単語は聞くけど何が嬉しいの？）（fbxで良くない？）と思う方も居ると思うので、VRMの入り込んだ説明しようと思います。

## Vtuberとしての利点
**VRMのデータさえあれば、モーションキャプチャーのシステムは内製する必要はほぼありません。**
※独自の演出が必要な場合や、汎用システムで対応できない特殊な仕様を必要とする場合は除く※

まず、１人だけ動けばいいのであれば <a href="https://sh-akira.github.io/VirtualMotionCapture/" target="blank">バーチャルモーションキャプチャー</a> を使用すればOKです。
エンジニア不要で、個人でも3DのVtuberをはじめられます。
複数人のコラボであれば <a href="https://virtualcast.jp/" target="blank">バーチャルキャスト</a> を使用すればOKです。
また、VR機器不要でペンタブがあれば描いてる様子を表現できる <a href="https://ogulabo.booth.pm/items/939389" target="blank">VDRAW</a> があり、カメラによるフェイストラッキングは <a href="https://3tene.com/" target="blank">3tene</a> を使えば可能です。
これらは**VRMのファイル１つさえあれば**全て利用可能です。

※他にも様々なソフトがあります。

## 何故１つのファイルでいいのか？

これまでキャラクターの3Dモデルは**「利用に特化した共通フォーマット」**はありませんでした。
「fbx」とは言っても、書き出したソフトによって座標系やスケールが異なったり、キャラクターの表情にどのモーフを使うかはモデラーさんによったり、はたまたテクスチャの差し替えで表情を表現する場合もあったり…**3Dモデルは様々な要因で仕様がバラついており、共通のプログラムで制御する**のはほぼ困難でした。

一方、制御するプログラムを変更しなくても3Dモデルを追加できるゲームのMODなどは「**そのゲームのみに対応した仕様で3Dデータを制作する必要**」があり、完成したデータは共通フォーマットとは言えません。

つまり、これまでは**「3Dデータの数だけ制御するプログラムが必要」** だし **「制御するプログラムを統一するならMOD用データのように固有の仕様で作るしかない」**というのがキャラクターの3Dモデルにおける常識でした。
**※プログラムとモデルの仕様が相互に依存している関係にあった。**

![zu.png](https://qiita-image-store.s3.amazonaws.com/0/149449/107eafc0-a488-de1e-2926-765266bce23b.png)
**モデルの仕様＝プログラムの仕様**

しかし、VRMは元の3DデータをVRMというテンプレートに割り当てます。
モデルはどういう作り方をしても最終的にVRM化できればOK
ソフトはモデルの仕様を気にしなくてもVRMに対応しておけばOK
VRM化した段階で、元のデータがどういう構造だったとしても、VRMを動かせるプログラムならVRM化したモデルを動かせます。
　→　だから**「VRMを１つだけ持ってればいい」**というわけです。
プログラム的には「抽象化」とか「中間層」という考え方だったりします。

![zu.png](https://qiita-image-store.s3.amazonaws.com/0/149449/70598b49-be38-3631-1a69-16fd5a1aa097.png)

## 抽象化の利点

**「多くの方法で利用できる」という事は＝「多くの付加価値をつける事ができる」**という事です

ソフトウェアの開発者様からしてみれば「私のソフトを使うためには、このような仕様でデータを作ってください！」というスタンスだと、奇跡的な流行と時代の運がない限り「作らなければデータがない＝ソフトが使えない」という事になり、開発するリスクが非常に高いです。
しかし、VRM対応のソフトウェアを開発すれば、既に存在するVRMがそのままリソースとして使用可能なので、少なくとも**データがない事によってユーザーが増えない**という状況にはなりえません。

また、VRMであれば動的にデータを追加するのも容易で、例えるなら画像や音楽を読み込むようにデータを取り込めます。
モデルの追加の度にいちいちビルドする必要とか、ユーザーがAssetBundleを完全に理解する必要もありません。

モデラー様からしてみれば、多種多様な需要が発生するので3Dデータの持つ価値があがります。
例えば、一昔前は個人が3Dモデルを作成しても「デジタルフィギュアとしてデータROMを販売、その後モデルの画像をとって遊ぶ～」という具合に活用方法が少なければそのぶん需要が少ないという状況だったそうです。
また、**価格も相当抑えないと手にとってもらえなかった**そうです。
ソース：<a href="https://twitter.com/hashtag/3D%E3%82%AF%E3%83%AA%E3%82%A8%E3%82%A4%E3%82%BF%E3%83%BC%E5%BA%A7%E8%AB%87%E4%BC%9A?src=hash" target="blank">#3Dクリエイター座談会</a>

しかし、今であればバーチャルキャストやVRchatの存在のおかげで「3Dアバターとして活用する需要」があり、実際にBoothで販売されてるオリジナルモデルも沢山増えています。
※VRChatのモデルは構造的にVRM化が可能。バーチャルキャストで使用してるユーザー多数
（VRM化していいかどうか？はモデルの利用規約に基づく）

**共通のフォーマットができる→様々な利用方法が生まれる＝様々な需要が生まれる→データを作れる人の価値があがる**

「振り込めない詐欺」から、ちゃんと3Dモデラー様へ還元できる環境が整う事によって、クリエーター様のモチベーションや環境改善にもつながり、新しい作品が出る好循環につながります。
素晴らしい作品を作る3Dモデラー様は作品で稼いだお金でいいグラボとかPC買って欲しいよね！

## VRMの様々な機能

**ライセンスの表示機能がある**
![image.jpg](https://qiita-image-store.s3.amazonaws.com/0/149449/f469715a-789d-e514-c92b-2cc326de3b9e.jpeg)
引用：<a href="https://twitter.com/m2wasabi/status/1053126238816980992" target="blank">VRMLoaderUI (MIT LICENSE)</a>

VRMは3Dのデータと3Dに付随する情報が一体となっています。
**（１つのファイルに3Dデータとライセンスの情報が入ってる）**

なので**「readmeを開かないユーザー」**に対しても「**ソフトの機能で強制的に表示**」させる実装が可能です。
これはVRMという共通フォーマットにライセンスの情報が付随されてるからできる実装であり、ほかの形式だとこのような実装は難しいです。
※「プログラムがreadmeを検索してtextデータをそのまま表示させる」ぐらいの実装が限界。

これはあくまで「表示するだけの機能」であって、根本的解決とまでいきませんが
少なくとも、ライセンス情報へのアクセスが容易になる事で、利用方法が判断がしやすくなったりモデラーさんの管理コストを下げたり、（ライセンスが複雑そうだな）と判断できる内容であれば使用を控える…など、**ユーザーの行動指針**になるのは間違いないです。
大まかな要素についてはピクトグラム化もできるので、**言語が違う事により伝わらない問題**も多少は緩和されます。

**「伝わらない」から「伝えられる」が大事**だと思います。
今後のVRソーシャルではVRMが標準仕様になる事を願います。

**ボーンの正規化**

正規化とは「データを扱いやすいように基準を揃える事」です。
ここでいうボーンの正規化とは「ボーンの座標系を統一する」という事です。
というのも、同じfbx形式のファイルであっても、書き出したソフトによってXYZの座標系が違ったり、スケールが違ったりします。
ここらへんソフトがうまく差分を吸収してくれる事もありますが、同じモーションを流しても微妙に異なった挙動をするリスクなどはデータに依存します。
なので、**「ボーンが正規化されているとモーションデータの動作が保証される」**といったメリットがあったり、モデルによっては(極端に)変な挙動をするという事もなくなります。

**共通の物理設定がある**

共通して使えるスプリングボーンが存在するので、例えばVRCのようにアセットストアでダイナミックボーンを購入して～といった事もありません。
Vカツのようなソフトであれば、スプリングボーンをわざわざ決めなくとも、ソフトが設定してくれるのでユーザーは気にする必要がありません。

**表情・リップシンクの共通化**

特にリップシンクはVRChatのようにSDKを設定することなく、VRMなら自動で対応可能です。
また、アニメーションオーバーライドなんて覚えなくても、VRMなら設定した表情を呼び出せます。

## VRMの欠点

ここまでVRMのいいとこばかりを挙げてきましたが、もちろん欠点というか…仕様上仕方のないデメリットも発生します。

VRMは例えるなら「jpeg」のようなもので…
イラストをTwitterに投稿する時、編集中は psd とか clip などのレイヤー情報が入ったデータが扱いやすいけど、投稿(利用)する場合は jpeg の方がいいです。
psd は編集が容易な代わりにデータが重くて公開(利用)には向いてません。
jpeg は直接再編集するのは大変ですが、データが軽くて公開(利用)するには最適です。

VRMも同様に、利用するのであれば最適であるが編集するとなると大変です。
これは「利用しやすい状態」と「編集しやすい状態」は相反する事なので、仕様上仕方ない事でもあります。

おそらく「編集したい！」という願望がある時点でVRMにするべきではなく、VRMにする前の段階で納得するまで編集できるようにするのが本来的な姿だと思います。

## その他参考

<a href="https://youtu.be/xZAzatjIsLU" target="blank">【モデル形式変換】VRMのアバターを作って、色んな場所(アプリ)に遊びに行こう！〜バーチャルへの旅のすゝめ伍〜</a>
Youtube。VRMにする手順が解説されています。

<a target="blank" href="https://youtu.be/toS2SiUxPtA">バーチャルキャストで使えるVRM作成講座！</a>
Youtube。長尺ですが細かいところまで丁寧にVRM化の手順が分かります。

<a href="https://www.nicovideo.jp/watch/sm34190356" target="blank">【バーチャルキャスト】MToonシェーダーの使い方	</a>
VRM標準シェーダーであるMToonのセットアップ方法。