VRChat向けアバターをVRM 0.xに変換する Type.0A – 簡易変換

この記事では「おおまかにVRM形式に変換し、clusterなどに持っていけるようにする」ための記事です。

※特段記載のない限り、当記事内では「VRM」「VRM形式」としていた場合はすべて「VRM 0.x」を指します。

VRM変換の記事は下記のとおりです。
※打消し線のものは現在執筆中です、今しばらくお待ちくださいませ。

  • VRM 0.x系
    • Type.0A – 簡易変換(この記事です)
    • Type.0B – SpringBone(揺れもの)の設定やSurprisedの追加
    • Type.0C – メッシュの削除やポリゴン削減などの軽量化
  • VRM 1.0系
    • Type.1A – 簡易変換
    • Type.1B – SpringBone、Constraintの設定

なお、VRM 1.0系解説ではVRM 1.0での変更・追加箇所などを中心に記載しております。

必要なソフトの確認

まず、作業を始める前に必要なソフトウェアなどを確認します。

当記事では「VRChat向けにセットアップされているアバターをcluster向けにVRMに変換する」ことが目的となります。
当記事で使用するものは

  • Unity Hub(必須ではないがプロジェクト管理が容易になるため推奨)
  • Unity
    • Unity 2022.3.22f1 ※VRChatの推奨バージョン
  • UniVRM
    • UniVRM v0.61.1 ※cluster向けに変換する場合の推奨バージョン

で、「Unity Hub」以外は必須となります。
UniVRMについては、v0.61.1以降のバージョンでも動作することを確認しております。

Unityのバージョンについては、当サイトがVRChat向けの記事をメインとしているためVRChat推奨バージョンとしておりますが、

  • clusterのワールド製作推奨バージョンである「2021.3.4f1」
  • UniVRM v0.61.1の推奨バージョンである「Unity-2019.4 LTS」

のいずれかでも構いません。

ここではUnity HubおよびUnity本体のインストール手順は省略いたします。
Unity Hubのインストール方法はこちらの記事を、Unity本体のインストール方法はこちらの記事を参考に進めてください。

下準備・バックアップ等

基本的に、VRChatで使用する「VRCSDK」とVRM変換で使用する「UniVRM」は競合しないため、すでにVRChatで使用しているプロジェクトがあればそのまま使用しても構いません。

当記事では「変換したいアバターがインポートされているプロジェクトをコピーしたもの」で作業することをお勧めします。

ただし、「VRChat向けに改変を頻繁に行っているからそのまま使用したい」などの理由がある場合は、一度コピーしたプロジェクトで手順をテストし、手順に問題がないことを確認してから元プロジェクトで変換作業を行うと良いでしょう。

UniVRMのダウンロード

推奨バージョンのv0.61.1は下記URLからダウンロードできます。
https://github.com/vrm-c/UniVRM/releases/tag/v0.61.1

最下部の「Assets」にある「UniVRM-0.x.x_x.unitypackage」をダウンロードします。
「0.」以降の数字については各UniVRMのバージョンのものとなります。

最新バージョンや推奨バージョンよりも新しいUniVRMを使用する場合

cluster側では非推奨となっていますが、v61.1よりも新しいバージョンのUniVRMでも動作します。

その場合は「Installation」の「VRM 0.x Imprt/Export」にあるUnitypackageをダウンロードします。

別記事で「VRM 1.0」への変換も行っていますが、当記事では「VRM 0.x」への変換となりますため「VRM 0.x」用のUnitypackageをダウンロードしてください。

VRChat向けのパッケージについて

当記事では基本となる「VRChat SDK – Avatars」が入っている状態で解説いたします。
「Modular Avatar」などのアドオン系パッケージが入っていても問題ありません。
「Modular Avatar」や「Avatar Optimizer」などを利用した軽量化については別記事をご参照ください。

使用するアバターについて

てっさくちゃん

作者かんばし
価格¥ 0
ポリゴン数△ 3,994
シェーダーlilToon

当記事では、軽量かつ無料で利用できる「てっさくちゃん」を使用します。

作業開始

おさらいです、この記事/プロジェクトは

  • Unity 2022.3.22f1
    • VRCSDK3 (VCC経由の最新版、v3.7.5)
    • lilToon(VCC経由の最新版、v1.8.5)
    • UniVRM v0.61.1
    • てっさくちゃん

の環境で作業を開始いたします。
※一部手順で「VRM 1.0」向けの機能が増えた「UniVRM 0.80.0以降のUniVRM」をインストールした際の表示を併記していますが、行っている動作は同じです。

VRM出力するおおまかな手順

使用できる状態のVRMとして書き出すまでの手順としては、おおむね

  1. シェーダーをVRMでサポートしているものへ変更する
  2. アバターをTポーズで仮出力する(正規化)
    • 正規化時、PhysBoneなどの非対応コンポーネントは自動で削除される
  3. 仮出力したVRMに設定を追加する
  4. 完成形としてVRM出力する

となります。

ポリゴン数の多いVRChat向けアバターをそのままVRM化してclusterへ持ち込むと、いわゆる「ポリ割れ」が発生してしまいます。
簡易的な軽量化については「Type.0C – メッシュの削除やポリゴン削減などの軽量化」の記事で解説していますのでそちらをご確認ください。

それでは、次から実際にVRM化を進めて行きます。

VRM対応シェーダーに変更する

まず下準備として、アバターのシェーダーをVRM(UniVRM)でサポートされているものへ変更します。
基本的には、VRM 0.xでは「MToon」、VRM 1.0では「MToon10」に変更していきます。

Hierarchy上でアバターのメッシュを選択すると、Inspectorの下にマテリアルの詳細が表示されます。

確認するのは傍線部分で、ここにシェーダー名が記載されています。

今回のプロジェクトファイルにはVRChat向けシェーダーの「lilToon」がインポートされていないため「Hidden/lilToonOutline」と表示されています。
仮にlilToonがインポート済みのプロジェクトであれば「Hidden/」の表示がないだけで、内容は一緒となります。

このシェーダーを「MToon」に変更します。

プルダウンをクリックすると検索ボックスにカーソルが合っている状態になるため「mt」と入力することで「MToon」が検索できます。

検索で表示された「MToon (VRM)」をクリックすると、シェーダーがMToonに変わります。

変更前のシェーダーから引き継げる情報(テクスチャやメインカラーなど)は引き継がれます。

シェーダー変更後は手動で見た目を修正していく

ここから先は、アバターの見た目を自身の感覚で修正していきます(明確な答えはありません)。

当記事ではなるべく簡素な見た目(=Toon表現)に寄せて変換を進めていきます。

また、MToonに変更すると、殆どの場合で「Shade Color」という影の表現色がピンク色になっています。
これは肌(Skin)メッシュ向けの初期値であり、殆どの場合は白あるいは明るい灰色に修正します。

さらにその下の「Emission」「Rim」も修正が必要な場合があります。

「Emission」は暗いところで光らせる設定です。多くの場合は蛍光パーツか瞳が該当します。

てっさくちゃんの場合、瞳とリボンの一部にEmissionが適用されており、このまま進めます。

「Rim」は影の光沢で、アバターの影になる部分を光らせる設定です。

今回この設定は不要のため、「HDR」と薄い字で書かれている灰色の部分を選択して「黒色(=Rimの設定をしない)」状態にします。

カラーピッカーの中央四角で一番下に持っていくと、真っ黒になります。
下の「R」「G」「B」の数値がすべて「0」になっていれば大丈夫です。

最終的に上記画像のような色設定/パラメータ設定になっていれば大丈夫です。
※変換に慣れている方は、この辺りのアバター表現はお好みで変更して問題ありません。

てっさくちゃんの場合、マテリアルは「Body」で使用されている1つのみでした。
他のアバターでは殆どの場合で「肌(Skin)」「服(ClothやSkirt)」「顔(Face)」などのパーツが分かれているため、Hierarchy上に表示されるパーツごとにマテリアルの確認を行ってください。


VRM仮出力をする

Hierarchy上でアバターを選択します。

このときアバターに「VRC Avatar Descriptor」などのVRCSDKコンポーネントが付いていても問題ありません。仮出力(正規化)の際にVRMとして対応していないコンポーネントは自動で削除されます。

UniVRM 0.61.1では「UniVRM-0.61.1 > Export humanoid」を選択
VRM 1.0が追加された「UniVRM 0.80.0」以降では「Export VRM 0.x…」を選択

何も設定していない場合は「Title」「Version」「Author」が空欄のため、この3か所を最低限埋める必要があります。

  • Title:アバター名
  • Version:バージョン情報(厳密になにかを設定する必要は無いため「0」や「1.0」など任意の文字列を入れてください)
  • Author:作者(アバターの作者情報を任意に入力できます、自身の名前でも大丈夫です)

3か所の入力が終わったら「Export」を押します。

オススメの出力箇所としては、プロジェクトファイルの「Assets」内に「TempVRM」というフォルダを作成し、そこに保存することです。

仮出力したVRMはそのままそのプロジェクトファイルにインポートする必要があるため、プロジェクトファイル内に保存すると保存完了後にそのファイルを自動でインポートしてくれます。

保存後のファイルに「prefab」が生成されていますので、こちらをHierarchy上に持っていきます。
※その横にVRMファイルも出力されていますが、仮出力段階ではこのVRMは使用しません。

仮出力したアバターのprefabをHierarchy上に持っていきましたが、それまで作業していた出力前のデータと被ってしまい作業の邪魔になってしまうので、古いデータをHierarchyで選択して、画面右上のInspectorのチェックボックスを外して非表示にしましょう。
※Unityでの作業に慣れている方はこの作業は必須ではありません。

また、仮出力したアバターは名前が一緒なので、末尾に「_VRM」などを付けてVRM変換用のアバターデータとして分かりやすくすると良いでしょう。

古い作業データが非表示になり、新しい仮出力したアバターだけが表示されていれば大丈夫です。


VRM向け設定(揺れもの・表情)を追加していく

仮変換データの準備が出来たら、仕上げをしていきます。

揺れもの(VRM Spring Bone)の設定

VRMに変換したデータは一律で「secondary」というGameObjectが生成されており、基本的にはここに「VRM Spring Bone(画像右側)」の設定を追加していきます。

揺れものの設定は大まかに「髪(Hair)」「服や装飾(Skirt、Cloth、Lace、Ribbonなど)」「ケモ耳(Ear、FarEarなど)」「尻尾(Tale)」「羽(Wing)」などのパーツ(ボーン)へ設定します。

Hierarchyで揺れものを追加したいボーンを探し、VRM Spring Boneの「Root Bones」にドラッグアンドドロップして設定をする作業が基本となります。

※VRChat向けアバターの場合はPhysBoneがセットアップされている場合が多いため、その設定から揺れものを追加したいボーンを探すのもオススメです。

今回の「てっさくちゃん」の場合は「リボン(Back_Ribbon、Ribbon.L、Ribbon.R)」および「髪の毛(Hair_Root)」が該当しますので、これらをVRM Spring BoneのRoot Bonesに追加します。

VRM Spring Boneのコンポーネントは、揺れ方の設定「ごと」に分かれている必要があるため、
「てっさくちゃん」の場合は

  • Ribbon系は共通、髪の毛は別
    • この場合はVRM Spring Boneのコンポーネントを2つ
  • Back_Ribbon、Ribbon.L、Ribbon.R、Hair_Rootで別々に設定
    • この場合はVRM Spring Boneのコンポーネントを4つ

のように、場合によって設定のゴールが異なるため注意が必要です。

今回は前者(Ribbon系は共通、髪の毛は別)の設定を行っていきます。


小ネタ:作業効率化(Inspectorの表示ロック、Inspectorの二重窓)

この時、Inspectorの表示ロックを行うと効率よく進められます。

Inspector右上に南京錠のマークがあり、これを押すと、Hierarchyで別のGameObjectを選択してもロック中のGameObjectのInspectorが表示され続けます。

また、画面の横幅に余裕がある方は、Inspectorを右クリックして「Add Tab > Inspector」をクリックするとInspectorのウィンドウを追加できます。

こうすると、ロック中のInspectorと現在選択しているGameObjectのInspectorの両方を表示することも可能です。


まずは、リボンのボーン(Back_Ribbon、Ribbon.L、Ribbon.R)をHierarchy上で選択し、VRM Spring Boneの「Root Bones」にドラッグアンドドロップします。

コントロールキー(Ctrl)を押しながらHierarchy上のBone(GameObject)をクリックすると、複数選択できます。
※PC操作に不慣れな方は、1個づつ行っても問題ありません。

上記画像のように「Root Bones」に該当のボーンが追加されていればOKです。

もう1つの「VRM Spring Bone」を追加するため、Inspector最下部の「Add Compornent」をクリックし、検索窓に「spring」と入力すると「VRM Spring Bone (VRM)」が出てきますので、これをクリックして追加します。

追加したVRM Spring Boneに髪の毛の「Hair_Root」をドラッグアンドドロップし、これで揺らしたいボーンの関連付けが完了しました。

揺れ方のパラメータはお好みで(沼)

揺れ物の揺れ方に正解はありません。
「もっとゆったり揺れた方が良い」「重力に逆らう設定がいい」のように、答えが無い設定項目のため、慣れてきた方は試行錯誤を繰り返して自分好みの設定を見つけましょう。

基本的には、下記のパラメータをいじっていきます。
各パラメータを変更した時の動作の違いについてはバーチャルキャストの記事にある動画が分かりやすいのでこちらを参考にしてみてください。

  • Stifness Force:剛性。元に戻る強さを表します。
  • Gravity Power:重力。Gravity Dirで設定した方向に対する強さを表します。
  • Gravity Dir:重力方向。デフォルトでは下(Y:-1)。
  • Drag Force:引っ張り抵抗。そのボーンが引っ張られた際に対する抵抗を表します。
  • Center:ボーンの中心(≒根本)。揺れの中心を設定します。

clusterなどのプラットフォーム上でアバターを動かした場合、殆どの場合は「思ったよりも激しく動く」ことが多いです。
そのため、Unity上のプレビューでは良い感じでも、実際にそのVRSNSで動かしてみると「Unity上で見た揺れ方と違う」ので注意しましょう。

※特にスカート(Skirt, Cloth)などは難しく、VRM Spring Boneは設定項目がかなり少ないため、貫通防止策を講ずるよりも、そもそも揺れない設定にしてしまった方が良い場合もあります。


表情設定(Blendshape)の設定

Hierarchy上でアバターを選択し、Inspectorをスクロールすると「VRM Blend Shape Proxy (Script)」というコンポーネントがありますので、「Blend Shape Avatar」の項目にある「Blendshape (Blend Shape Avatar)」をクリックすると、Projectファイル内にその設定されたファイルがある箇所をハイライトしてくれます。

当記事の場合は「Assets > TempVRM > (変換したアバター名).BlendShapes」のフォルダにあります。

この「BlendShape.assets」をクリックして選択状態にすると、InspectorにBlendShapeの編集画面が表示されます。

この画面で、表情設定を行っていきます。

初期状態では「Select BlendShapeClip」で「Neutral(ニュートラル)」が選択されています。

cluster向けに設定するのは以下の項目です

  • A(「あ」のリップシンク)
  • I(「い」のリップシンク)
  • U(「う」のリップシンク)
  • E(「え」のリップシンク)
  • O(「お」のリップシンク)
  • Blink(まばたき)
  • Joy(嬉しい)
  • Angry(怒り)
  • Sorrow(悲しい)
  • Fun(楽しい)
  • Surprised(驚き)※自身で追加する必要アリ

Surprised以外は既にBlendShapeClipがありますので、該当のボタンを押してパラメータを調節していきます。

「A」(「あ」のリップシンク)の設定例です。
てっさくちゃんの場合は「A」のBlendShapeが用意されていますので、このパラメータを「100」に変更することで口が「あ」の形になっていることが下のプレビューで分かります。

数値はそのBlendShapeの適用率で、「100」はそのBlendShapeを「100%適用する」を意味します。
そのため、作者が用意したパラメータを好きに組み合わせてオリジナルの表情・リップシンクを作ることが可能です(「A」を50にして、「あ」発声時の口の大きさを半分にする、など)。

このBlendShapeのパラメータ名については、アバターによって異なります。
例)「aa」「VRC.a」「VRC.ah」「VRM.AA」「あ」など

「Surprised」の追加(cluster向け)

clusterではVRM標準の表情種に加えて追加で「Surprised」がサポートされています。

「Add BlendShapeClip」を押して、エクスプローラーが表示されたらファイル名に「Surprsed」と入力して保存します。

「Select BlendShapeClip」に「Surprised」が追加されていればOKです。
他のBlendShapeClipと同じようにパラメータを設定しましょう。


VRM First Person(視点位置)の設定

最後に視点位置(VRM First Person)の設定を行います。

初期状態では「Headの中心(Offset が X:0, Y:0, Z:0)」となっています。

これはアバターの一人称視点の位置となりますので、オススメは「目と目の中心」「肌から出ないぎりぎりの位置」です。

頭の中に埋まりすぎていると、下を向いたときにアバターが貫通して見えてしまいますので注意しましょう。

この辺のパラメータも、アバターの形状によって最適解が異なりますので、出力後に自分好みに調整すると良いでしょう。