Unityを使ってVRoid製アバターに3Dアクセサリーを導入していい感じに揺らそう

始めに

あいさつ

 こんにちは。鈴響雪冬(すずひびき ゆき)です。普段は小説を書いたり写真を撮ったり同人誌を作ったりしています。VRoidとの関わりは、趣味の一環でVRoidでアバターを作り、VRChatやclusterで使っている、一般VRoidユーザーです。

 さて、この記事はきんととさん主催の「VRoidアドベントカレンダー(オールジャンル) Advent Calendar 2025」の1日目の記事です。
 初日からVRM×Unityという、VRoidとはほとんど関係ない話ですが、お付き合いいただければ幸いです。

VRoidに3Dアクセ? 揺らす?

 とりあえずこの動画を見て見てください。


HIMEHINA『バブリン』256MB(HIMEHINAの創作ガイドラインに基づき使用

 VRMデーターを踊らせることができる「VRM Live Viewer」と、HIMEHINAさんが配布しているモーションデーターを使って動かしてみました。
 どうです? アクセサリーをつけてみたくなりませんか? 揺れものって素晴らしいと思いませんか?

 では早速やってみましょう!

この記事の概要

前提条件

 VRMファイルをUnityで加工します。Unityのインストールや、UnityでVRMを読み込めるようにするための方法は、有志がたくさん書いてくださっているので探してみてください。ざっくり探してみたところでは、次の記事が比較的新しめの情報で丁寧な記事でした。

 【Unity】VRMファイルのインポート・エクスポートする方法

ソフト バージョン 備考
Unity 2021.3.4f1
VRMインポーター UniVRM v0.99.4 別に使用しているツール上このバージョンを使用していますが、
基本的にはUnity 2022.3.22f1とそれに対応しているバージョンの最新版(執筆現在ではv0.130.1)でいいと思います。
VRM 0.x系 特に注記がない限り、この記事で言うVRMはVRM0.x系を指します。
同様にMToonの場合もVRM0.x系で使われているMToonを指します。

 なお、VRM Spring Boneの当たり判定は厳密な判定ではなく、ぶつかっていると分かったら押し返す、ぐらいの緩い判定のようで、勢いよく動いているとコライダーの中にボーンがめり込むことが多々ありますし、Drag Force(空気抵抗)を大きくすると、コライダーがボーンを押上げようとする力より空気抵抗の方が強くてめり込むといったことが往々にしてよく発生するので、そういった特性を理解した上で各種設定の値を調整してみてください。「ま、こんなもんか」ぐらいの、根を詰めないぐらいでちょうどいいと思います。

 免責事項というほどのものではありませんが、私は雰囲気でUnityを使っているので各種名称の使い分けや機能への理解が曖昧かもしれませんが、その点はご了承ください。

編集に使用するアバター紹介

使用しているテクスチャー等
部位 ショップ名 商品名
しらとりこはね【とりんご】 TORINGOヘアテクスチャ
シュシュ CSGraphicArt BOOTH shop ツーブロックポニーテールヘア
アイライン nonolily(現在非公開) NONO(現在非公開)
しらとりこはね【とりんご】 瞳アイライン眉まつげセットMia1.0
ハイライト nonolily(現在非公開) NONO(現在非公開)
リップ AQUANGE - 羽澄愛 リップコレクション全6カラーセット
トップス リッチさんの森 夏のお嬢様ワンピ
もねこ屋。 セーラー服セット
しらとりこはね【とりんご】 VRoidっぽくないお肌2 垢抜
ネイル あくむ病院 きらきら宇宙ネイル3色セット(現在非公開)
ファンデーション 1kcnvmf7 レースランジェリー
ランジェリー YUZUNOKO WORK SHOP ベビードール_ランジェリー
ヨリドリガレージ 指・肘・膝アウトライン調整マスクテクスチャ

 VRoid Hubはこちら(少し時点が古いので使用しているアセットが一部異なります)

 BOOTH等で衣装やアクセサリーを販売、提供しているすべてのクリエイターに感謝。

初級編(VRM向けアクセサリーを導入する)

始めに

概要

使用するアセット

アバターへの導入

 アクセサリーをプロジェクトにインポートしたら、販売元が指示する方法でアバターに導入を行ってください。
 VRoid向けのアクセサリーであれば、prefabをアバターのボーンにドラッグ&ドロップ、という方法が多いと思いますので、その前提で進めます。(一度ヒエラルキーの何もないところにドラッグ&ドロップして、その後ボーンに入れる、という流れを案内している商品もありますので、その場合はその方法で行ってください。)

 ボーンにドラッグ&ドロップというのは、ざっくり説明すると、アバターはボーン(骨)に従って動いているので、その骨にアクセサリーを関連付ける、という意味合いになります。

 しかし、ここで気をつけないといけないのは、入れたボーンの動きに合わせて動くという所です。なので、ネックレスであれば首…と言いたいところですが、首に入れてしまうと首が回ると同時にネックレスも回ってしまうので、上半身に入れる必要があります
 ということで、ネックレスなら上半身(UpperChest、UpperChestを取り除いている場合はChest)、イヤリングや帽子は頭(Head)、指輪は指(人差し指ならIndex、薬指ならRing)、キャット・ガーターなら太もも(UpperLeg)といった具合になります。

位置調整

 アクセサリーをボーンにドラッグ&ドロップしたら、つけたい位置に移動します。イヤリングですので耳たぶの位置に来るように移動します。

Points 揺れ方を変更する

 揺れ方は好みがあると思うので、プレイモードに入ってからアクセサリーを動かして、揺れ方を確認して、好みに応じて揺れ方を変更してもいいでしょう。私がまずやるのはGravity Power(重力の強さ)を0より大きくすることです。イヤリングの重力が0の場合、頭を傾けたときに、頭と同じ方向にイヤリングが動きますが、重力が0より大きい場合は、重力方向を指します。

複製して両耳にセットする

 左右の耳に同じイヤリングをつける場合は、片方のイヤリングの設定ができた段階でCtrl+Dでイヤリングを複製して、X座標をプラスマイナス反転するだけで反対側の耳に移動します。

 なお、取り付けの際に回転を行った場合は、回転角もプラスマイナス反転する必要があります。

 ここまでできたらイヤリングの設定は終了です。VRoid向けアクセサリーは導入するボーンと位置さえ決まれば簡単に導入できるのでお勧めです。

中級編(VRChat向けアクセサリーを導入する)

始めに

概要

使用するアセット

シェーダーのインポート

 VRChatでは多彩なシェーダーを使うことができるため、大半の場合はMToonシェーダー以外のシェーダーが使われています。最終的にMToonに変換するので、アクセサリーのインポートのためにシェーダーを追加必要性はないのですが、変換するために元の姿を見ておく必要があるので入れておいた方がいいです。なお、lilToonシェーダーを使っている製品の場合はlilToonをインポートしておきましょう。lilToonにはMToonへの変換機能があるからです。

アクセサリーのインポート、ボーンへの導入、位置の調整

 アクセサリーをインポートして、ボーンへ入れ子にして、位置を調整します。ここまでの作業は初級編と同じですので詳細な手順は省略します。

カラーバリエーションの変更

 このアクセサリーはマテリアル(ざっくり言えば、カラバリ)が複数あるので、マテリアルを変更します。あらかじめマテリアルを設定済みのprefabがある場合もあるので、 そのあたりは各商品の説明書で確認してください。

MToonへの変更

 VRMでサポートされているシェーダーはMToon、Standard、UniGLTF/UniUnlitの3種類です。ですがVRMを使うアプリがこれらの3種類に対応しているとは限りません。
 例えば、代表的なVRM対応アプリとも言えるclusterはこの3種類に対応していると言いつつも、StandardはUniGLTF/UniUnlitに変換されます。しかし、この自動変換はちょっといまいちなところがあるので、実質的には、MToonとUniGLTF/UniUnlitのふたつに対応していると言えるでしょう。
 シェーダーの変更は慣れが必要な部分が多いですが、元のシェーダーがlilToonの場合はシェーダー側にMToonへの変換機能があるのでそれを使って変換することができます

Points マテリアル? シェーダー?

 簡単に言うと、マテリアルは質感を表現するためのデーターのことで、その表現のための演算を行うのがシェーダーです。マテリアルはシェーダーの各種設定をまとめたもの、と理解するといいかもしれません。

Points シェーダー変換の限界

 変換元のシェーダーにある機能でMToonにない機能は変換することができません
 例えばlilToonには一部だけマットキャップを設定する機能(マットキャップのマスク機能)がありますが、MToonにはこのような機能がありません(MToon10にはあったと思います)。このようなマテリアルのシェーダーをMToonに置き換える場合、すべてを金属っぽい質感にするか、あるいは金属っぽい質感を使わないかのどちらかにする必要があります(Blenderを使ってUVから変えてしまえば可能)。
 マテリアルの構造(設定状態)については商品購入前に知ることができないことが多く、変換してみないと分からない部分なので、VRMでの使用を前提にVRChat用アイテムを購入する際は注意が必要です。
 商品についての事前の問い合わせを受け付けているショップであれば事前に聞いてみてもいいでしょう。

 保存したマテリアルをMaterialsスロットにドラッグ&ドロップして設定します。

揺れものに関するコンポーネントを変更する(PhysBones(VRChat向け)からVRM Spring Bone(VRM向け)へ)

 ものを動かす(揺らす)ためにはボーンを動かす必要があります。そしてその動きを制御する仕組みはVRChatとVRMで大きく異なっています。
 VRChatではPhysBonesが用いられ、VRMではVRM Spring Boneが用いられています。これらには互換性がないため、VRChat SDKを導入してないプロジェクトにVRChat向けアクセサリーをインポートすると、PhysBonesに関するコンポーネントが欠如(missing)と表示されます。
 PhysBonesがついていても仕方がないのでこれを削除してVRM向けのVRM Spring Boneを設定します。

 PhyesBonesが削除できたら、VRM Spring Boneを設定します。

 コンポーネントを設定しただけでは揺れませんので、揺れの起点となるルートボーンを設定する必要があります。

 この段階で揺れ方を設定しても問題ありません。今回は大きく揺らしたかったのでStiffness Force(剛性、元に戻る強さ)を小さめの0.1、Gravity Power(重力の強さ)はやや大きめの0.3としました。これで少し重みのあるアクセサリーがブンブン揺れるイメージになります。

当たり判定の設定

 最初に取り付けたイヤリングと違って、揺れる範囲が長いので、先端部分が顔に埋もれてしまいます。これを防ぐためにはコライダー、いわゆる当たり判定(衝突判定)の設定が必要になります。

 当たり判定はお互いにぶつかったときの判定ですから、ぶつかり合うもの同士のそれぞれに設定が必要になります。詳細は省き、結論だけ伝えると、アクセサリーのボーンには「VRM Spring Bone」、それを受け止める側には「VRM Spring Bone Collider Group」が必要です
 今回はアクセサリーと顔の当たり判定を設定しますが、VRoid Studioから出力したVRMは、体の各部に「VRM Spring Bone Collider Group」が設定済みですので、今回はアクセサリー側に設定する「VRM Spring Bone」のパラメーターを変更するだけで当たり判定を設定できます。

 まずは先ほど設定したVRM Spring Boneの設定を変更して、当たり判定が見た目上、それっぽい大きさになるようにします。

 これでアクセサリー側の準備が整ったように見えますが、このままでは当たり判定は生じません。なぜなら、どのコライダーと当たり判定を行うかの設定ができていないからです。逆に言えば、当たり判定は登録制なので、顔には反応してほしいけど、腕には反応してほしくない、といったことができます。この辺は現実と違いますね。

 VRoid Studioから出力したVRMの体にはすでにコライダー(VRM Spring Bone Collider Group)が設定してあるので、これを登録してあげます。今回は顔との接触判定を行いたいので、顔のコライダーを登録します。具体的にはVRM Spring Bone Collider Groupが登録されている顔のボーン(J_Bip_C_Head)を、アクセサリーに追加したVRM Spring BoneのCollider Groupsに登録します。
 さらに当たり判定の大きさを最適化する必要があります。

 これで髪飾りの設定は完了です。お疲れ様でした。

上級編(VRChat向けアクセサリーを導入する、その2)

始めに

概要

使用するアセット

下準備

 シェーダーのインポート、アクセサリーのインポート、シェーダーの変更、ボーンへの導入、位置の調整、揺れものコンポーネントの変更などは初級、中級と重複しますので、アクセサリーの導入が終わったところからスタートします。

Points Unlit/WF→MToon

 今回はlilToonではなくUnlit/WFの宝石向け設定からMToonに変更したので手動で設定を行っています。

なにか動きがおかしいネックレス

 ネックレスが体に埋もれないようにするためには、上半身(J_Bip_C_UpperChest)のコライダーをネックレスのCollider Groupsに登録します。しかし、VRoidからエクスポートしたVRMでは上半身のコライダーの位置、形状がネックレスのようなアクセサリーと相性がよくありません。

 まず最初に、これまでの手順通り、上半身のコライダーを登録して、当たり判定の大きさを調整するところから見てみましょう。

 設定が終わりましたので動かしてみます。するとどうでしょう、ちょっと動きが変なことが分かります。

コライダーを自分で設定する

 動きがおかしい原因は、上半身のコライダーの形状が良くない事ということが分かりました。
 ではどうすればいいでしょうか。
 自分でコライダーを作ってしまえばいいのです。

 コライダーを設定するときは、体のボーンに追加するか、ネックレスに追加するかのどちらかです。お互いがどのような位置関係にあるかを元に見極める必要がありますが、今回はネックレスの位置関係と衝突する部分(上半身)の位置関係が大きく変わりませんので、ネックレスの中にコライダーを作ります。
 例えばこれが、ショルダーバッグだった場合、体と太ももあたりに当たり判定が欲しいので、上半身と太もものボーンにコライダーを設定するほうがいいでしょう。

 それでは早速ネックレスにコライダーを追加します。

 VRM Spring Bone Collider Groupを設定すると、最初からコライダーが1個作られた状態になります。環境によってはUIが重なってしまって操作しづらいので、「+」をクリックして、コライダーをふたつにしておきましょう。

 早速コライダーの設定を変更します。画像での説明が難しいので動画でご覧ください。

 うまく設定できましたか?
 これであなたもコライダーマスターです!
 お疲れ様でした。

応用編

 コライダーの設定はいろいろ応用ができます。例えば、体を動かしたときに前髪が頭にめり込んでしまう症状への対応です。
 端的に言えば、髪の毛のHitRadiusを頭にめり込まない大きさに設定することができれば、どんなに動いても頭にめり込まなくなります。

 具体的な手順は以下の通りです。
 VRMはSecondaryに揺れものの設定が集約されていますが、ここから前髪に関するVRM Spring Boneコンポーネントを見つけて色を変更しておきます。プレイモードに入った後、HitRadiusの設定値を変更して頭の中にめり込まないような大きさを探します。その値を覚えておき、プレイモードを抜けた後にVRM Spring Boneに再設定すれば頭にめり込まなくなりますし、VRoid Studioの髪の毛編集の「揺れ方を編集」で「衝突半径」の値をその値にすると、次からはVRMをエクスポートした時点でその設定でエクスポートされます。

 これがこの記事唯一のVRoid Studioのスクリーンショットです。VRoidアドベントカレンダーとは………。

 前髪の揺れ方も好みがあると思いますが、全く揺らさないよりは多少揺れた方がいいという考えなので、私はこのような設定にしています。

余談

動画

 改めて動画を再掲です。


HIMEHINA『バブリン』256MB(HIMEHINAの創作ガイドラインに基づき使用

 動画の中では記事で取り扱った以外のアクセサリーもふんだんに使っていますが、基本的にはここで紹介した3パターンのどれかに当てはまります。慣れてしまえば結構あっさりできるので、ぜひ試してみましょう。アクセサリーは情報量に直結するので、VRoid製アバターを使っているVTuberさんなんかにもお勧めだったりします。

 ちなみに、動画の終盤、照明が暗くなると目が光って見えますが、このあたりのテクニックは去年の記事で紹介していますので、気になる方は去年の記事をご覧ください。
 Unityを使って、VRoid Studioで作ったアバターの見た目を調整するお話(MToonの設定を変更するお話)

 本当はVRMSpringBoneToolとVRMSkirtToolの使い方まで進みたかったのですが、前提となる揺れものとコライダーの話をし始めたらそれだけでものすごい量になりそうだったので揺れものとコライダーに特化しました。これらの話題は気が向いたら…。

参考になりそうな文献など(沼への入り口)

後書き

 募集開始早々に初日に飛び込むことで他の方も飛び込みやすくする、という狙いが多少あったりするのですが、内容が内容なので逆に飛び込みにくくなっているのでは、と、ほとんど書き終わった頃に気づきました………。(なんなら去年も同じことをやっているので、気づくのに1年かかったことに。)
 ですが、募集要項に「アナタの想いをしたためてください!」とあるとおり、好きなことを書けばいいと思いますし、私はこういうのを書くのが好きなので書いてみました。
 お付き合いいただきありがとうございます。
 あなたの揺れものに幸あれ!

Misskeyにノート

Fediverseに共有