Unityを使って、VRoid Studioで作ったアバターの見た目を調整するお話(MToonの設定を変更するお話)

  1. Home
  2. 読み物
  3. 副産物
  4. Unityを使って、VRoid Studioで作ったアバターの見た目を調整するお話(MToonの設定を変更するお話)

始めに

あいさつ

 この記事はきんととさん主催の「VRoidのお話まったりしよう会クリスマス Advent Calendar 2024」の1日目の記事です。初日からVRM×Unityとちょっと脇道に逸れた話ですが、お付き合いいただければ幸いです。

 UnityはVRChatを始めるに当たって初めて触れたので、得意分野ではないのですが、いつの間にかVRMの調整までやるようになったので、その内容をとまとめてみることにしました。Unityでできる事、あるいはVRMの見栄えに関する事はこの記事の内容にとどまりませんが、私のやっていることの紹介を通して、「もっといろんなことができるのでは…?」という気づきになれば幸いです。

この記事の概要

 私はVRoid Studioで作ったアバター(VRMファイル)を、静止画や動画の撮影用アプリや、clsuterやVRChatなどのメタバースサービス(VRSNS)に持ち込む前に、Unityで微調整を行った上でVRMとして改めて保存し、そのVRMを撮影用アプリに読み込ませたり、clsuterやVRChat向けに変換をしています。つまり、VRoid Studioから書き出したVRMを直接使うのではなく、一度Unityで編集してから使っています。
 この記事では、私がやっている微調整の方法を紹介します。


私のVRM編集の流れ。今回はアバターの見た目に関する最終調整の内容を紹介します。

 VRMファイルの調整方法、順番やそのために使うツールは人によって様々で、ここで紹介する方法の大半またはすべては、Unityを使わずに編集できるツールが提供されています。それらの方法は検索すれば出てきますので、調整はしてみたいけどUnityを使うのは大変だなあ…という方は、自分のやりたいことで検索してみてください。意外とたくさんのことが手軽にできるようになっています。
 一方で、それらのツールは機能が独立しているので、複数のツールを使い分ける必要がありますが、Unityを使えばUnityで大半が完結するというメリットがあります。上の画像では「アバターの見た目」とそれ以外に分かれていますが、「今回はここ」から先の工程はすべてUnityでの処理なので、複雑なように見えて実はとてもシンプルです。頑張ってUnityと和解しましょう。

前提条件

本編

目次

編集に使うアバターの紹介


2024年冬モデル(VRoid Studioで撮影)

使用しているテクスチャー等(Unityで後付けするものも記載しています)
部位 ショップ名 商品名
帽子 studioH。 フェルトベレー帽
しらとりこはね【とりんご】 TORINGOヘアテクスチャ
アイライン しらとりこはね【とりんご】 瞳アイライン眉まつげセットMia1.0
瞳・ハイライト nonolily(現在非公開) NONO(現在非公開)
リップ AQUANGE - 羽澄愛 リップコレクション全6カラーセット
トップス 彼方基地 ふたご座流星群イメージ衣装
ボトムス ウィズエスティ ロールアップショートパンツ
蒼空の下の市場 BOOTH店 Saku*saku ムートンブーツ01
しらとりこはね【とりんご】 VRoidっぽくないお肌2 垢抜
ネイル あくむ病院 きらきら宇宙ネイル3色セット(現在非公開)
インナー ~Starry Sea~☆彡 極上のこだわりランジェリー
ネックレス Luna*Flake ペンデュラムネックレス
ヨリドリガレージ 指・肘・膝アウトライン調整マスクテクスチャ

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

Unityを準備しよう

照明を変えよう

 Unityを起動してシーンを開くと、メインカメラとディレクショナルライトが設定されていますが、このディレクショナルライトは色温度が低く黄色みがかっている色になっていて、アバターの表示もこの影響を受けて色被りしてしまうので、設定を変更して無色の照明にします。


ヒエラルキーから「Directional Light」を選択すると、色温度が低めの照明になっていることが分かる


色を白に変更することで、アバターの色被りがなくなる

見た目を調整しよう(MToonシェーダーの調整をしよう)

 シェーダーについてざっくり説明すると、アバターの見た目を制御する仕組みです。この見た目には、単に色やそれによって作られる模様だけではなく、発光、陰、反射、透明度など、あらゆるものが含まれます。Shederですから、Shede(陰)、すなわち陰影を制御する仕組みというのが本来の姿でしょうですが、ざっくりと見た目を制御する仕組みという理解でよいと考えます。

 シェーダーという聞き慣れない言葉ですが、VRoid Studioの「ルック」で設定できる「アウトライン」や「リムライト」はVRoid Studioの画面を通して、このシェーダーの設定を変更しているに他なりません。あるいは、みなさんがBOOTHで購入した衣装を着せる時や自作のテクスチャーを読み込むとき、VRoid Studioの「テクスチャの編集」で画像をインポートすることがあるかもしれませんが、これもシェーダーにテクスチャーとして画像を読み込ませる作業を、VRoid Studio上で行っているのです。


VRoid Studioの「ルック」メニューのうち「アウトライン」と「リムライト」はシェーダーの設定を変更している

 このようにみなさんは知らない間にシェーダーの設定を変更しているのですが、VRoid Studioでは操作が簡略化されているので、シェーダーの中でもごく一部の設定しか変更していません。
 Unityを使うことで、シェーダーの設定をもっと細かく調整することができます。ここではシェーダーの機能を使ってVRoid Studioから出力したVRMの設定を変更します。

アウトラインの色を調整しよう(アウトラインの描画方法を変更しよう)

 VRoid Studioではアウトラインの太さを調整することができますが、アウトラインの色や色のブレンド方法は指定できません。これによって起こるのが、暗い服を着たときに、アウトラインの方が明るい色(茶色)になってしまう現象です。


服の色よりアウトラインが明るいため違和感がある(わかりやすくするためにアウトラインの幅を5倍に設定)

 この現象を回避するには、マテリアル(説明は省略)を選択して、Outline→Color→ModeのFixedColorをMixedLightingに変更します。


マテリアルを選択するとインスペクターにシェーダーの設定が表示されるので、Outlineの設定を変更する

 こうすることでアウトラインがテクスチャーに乗算されるようになり、タイツよりも濃い色でアウトラインが表示されるようになります。


アウトラインがタイツよりも濃くなり、自然なアウトラインになる

 VRoid Studioでアウトラインの幅を0より大きい値(アウトラインあり)に設定したパーツすべてに対して、この設定を施すことで、アウトラインの色を自然にすることができますし、肌と服については焦げ茶色固定だったアウトラインの色を自由に変更することができるようになります。マテリアル単位でアウトラインの色や幅を変えることもできますが、私はデフォルトの焦げ茶のまま、MixedLightingに変更するにとどめています。
 また、髪の毛で作ったアクセサリー等は髪の毛のアウトライン設定の影響を受けますが、マテリアルを削減してエクスポートしない限りはマテリアルが分かれますので、髪の毛とアクセササリーで別々のアウトライン設定をすることもできます。

アウトラインによる不要なシワを取り除こう(アウトラインにマスクを設定しよう)

 アウトラインを設定すると、指や腕を曲げた部分のアウトラインが汚くなります。


アウトラインが乱れる例

 手っ取り早い解決方法はアウトラインを使用しないことですが、アウトラインが欲しい場合はこの手段は執れません。
 そこでアウトラインにマスクを設定します。
 マスクとは特定の箇所だけ非表示(言い換えれば特定の箇所だけ表示)にする事ができる仕組みで、VRoid Studioでも「肌マスク」という仕組みがありますので聞き覚えのある人も多いと思います。アウトラインに対してマスクを設定することで、アウトラインの範囲や太さを調整できます。
 しかし、このマスクを一から作るのはとても大変ですので、配布されているものを使います。

 ダウンロードしたPNG画像をUnityで読み込み(分からなければプロジェクトに画像をドラッグアンドドロップでもよい)、その画像をインスペクターのOutline→Width→Width左の箱にドラッグアンドドロップで入れてあげます。


アウトラインにマスクが設定されてシワが軽減された

 アウトラインを設定することで、指のシワが大幅に軽減されたことが分かります。

応用編

 VRoid Studioでは口の周りなどにアウトラインが表示されないようにあらかじめマスクが設定されていますが、表情設定によっては口の周りにほうれい線のようなシワが入ったりする事があります。この場合、顔のマテリアルに対してアウトラインマスクを設定することで回避することができます。
 これについても、自分でアウトラインマスクを書いてもいいですし、配布されているものを使っても良いでしょう。

目を光らせよう(発光を設定しよう)

 アバターの写真を見ていると、暗いところで目が光っているような写真を見かけることがありませんか? 淡く光り輝く瞳はちょっとしたアクセントになり、画像の訴求力が上がると思います。人によっては活き活きとした顔に感じる事もあるでしょう。
 次の画像はVRChatでの私のアバターの写真です。


暗いところで目が光って見える例(World:黎明 / PhysisKITE アバター:雪冬(あじさい着物Ver.)

 VRChat向けに販売されているアニメ調のアバターの多くはそのような設定になっていると思いますが、VRoid Studio製アバター(MToonシェーダー)でも似たような設定をすることができ、VRMを使うclusterなどで使うことができます。
 次の画像はclusterでの私のアバターの写真です。


VRM(MToon)を使うclusterでも同じ事ができる(World:Yuki's Home World アバター:雪冬(秋服Ver.)

 操作方法としてはマスクを設定したときと同じような方法でできますので、ぜひ挑戦してみましょう。この編集をするときはシーン内の照明を消してあげると、効果がわかりやすくなり、調整しやすくなるのでお勧めです。


ヒエラルキーからDirectional Lightを選択して、インスペクターでチェックボックスをオフにするだけで照明を切ることができる

 ざっくりとした流れとしては、虹彩とハイライトのマテリアルに対して、Emission用のテクスチャーとして虹彩とハイライトのテクスチャーをそれぞれ割り当ててあげます。

 まずは虹彩からやってみましょう。
 虹彩のマテリアルを選択して、虹彩に割り当てられているテクスチャーを探します。


~.Texturesフォルダを直接参照してもいいが、最終的にマテリアルにD&Dで設定するのでマテリアルから飛んだ方が早い


虹彩のテクスチャーを虹彩のマテリアルのEmissionにドラッグアンドドロップする

 虹彩のマテリアルのEmissionに虹彩のマテリアルに指定されたテクスチャーをドラッグアンドドロップで割り当てて、明るさを指定することで、発光させることができます。
 マテリアルの画像をクリックしてしまうとインスペクターがテクスチャーの設定に切り替わってしまうので、ボタンを離さないように注意するか、マテリアルを選んだ段階でインスペクター右上の鍵マークをクリックしてインスペクターの表示をロックした上で操作するといいです。

 これで発光の設定ができましたが、明るい場所でも同じだけ発光しているため、虹彩の色が薄くなってしまいます。そこで明るい場所での見え方を調整します。


明るいところでも発光している

 明るい場所での見え方を調整するので、Directional Lightをオンにして、Shade Colorの明るさを調整します。


Shade Colorを調整することで、明るい場所での見え方が変化する

 Shade Colorを調整することで、明るい場所でも色が薄くなることを防ぐことができます。
 同じ作業をハイライトのマテリアルに対して行うことで、暗いところで目が光って見えるようになります


虹彩とともにハイライトも光るようになり、暗いところで仄かに光って見えるようになる

 虹彩よりハイライトの方が明るくあるべきですので、虹彩を発光させたらハイライトも必ず発光させましょう。もちろん、ハイライトオフが好きな人はこの作業は省略してもかまいません。

応用編

 同じ方法で衣装を光らせることができます。
 ですが、虹彩やハイライトはマテリアル全体を光らせても違和感がありませんが、衣装全体を光らせると違和感がありますので、画像編集ソフトを使って、元のテクスチャーから金属や宝石などの光沢がある素材の部分だけを残したEmission用のテクスチャーを用意する必要があります。これによって狙った場所、例えば金属っぽいパーツや、模様の部分だけを光らせることができます。
 一部だけを光らせるような場合、Shade Colorを使って明るい場所での見え方を調整してしまうと、全体が暗くなってしまうため、発光が設定されたところは問題ありませんが、設定されていないところが本来よりも暗くなってしまうため、Shade Colorを使うのではなく、暗い場所での発光量を押さえる必要があります。
 私の場合は、Shade Colorは初期値(真っ白)のままにして、Emissionの色を濃いグレー(RGB:60,60,60)にしています。


服の一部だけを光らせた例

 もちろん、全体を光らせたいような衣装の場合(例えば白一色のドレスとか)は、Emission用のテクスチャーを作ることなく、衣装のテクスチャーをそのままEmissionに指定してよいでしょう。
 また、VRoid Studioで髪の毛に対してハイライトを設定した場合、その画像は髪の毛のマテリアルのEmissionに登録されますが、Unity上でEmissionの色を調整することでハイライトの強さや色を調整できるので、ハイライトが明るすぎると感じる場合や、髪の毛になじんだ色にしたい場合は調整してみましょう。

髪で作ったパーツをなじませよう(リムライトを調整しよう)

 光にまつわる設定にリムライトがあります。リムライトは、背面から当てられた光(逆光)が表側に回り込んで、縁が明るく表示されるものです。これによって輪郭が強調されるのと同時に、光沢感が得られます。VRoid Studioでは、髪の毛、衣装、アクセサリーの3つの区分で「リムライト」を設定することができます。
 私の場合、衣装に設定されたリムライトによって、衣装の素材に関係なく光沢感が出てしまうのが苦手なので、VRoid Studio上では髪のリムライトだけ設定し、服のリムライトは設定していません。同じような設定にしている方も多いかも知れません。

 さて、VRoid Studioの独特な使い方の一つに、髪の毛でいろいろなパーツを作る文化(?)がありますが、頭に追従するパーツは特にその傾向が強くて、代表的なものには、帽子、イヤリング、メガネといったものがあるでしょう。
 このようなパーツを使うとき、髪の毛のリムライトを残し、衣装のリムライトを消している場合は、服全体にリムライトがないのに、髪の毛で作った帽子だけリムライトが残って光ったままになる、という現象が発生します。


髪で作られたパーツは髪の設定が適用されている

 画像のように、髪で作ったパーツは衣装に属するようなパーツであっても、髪の設定が適用されていることが分かります。これもシェーダーの設定を変更することで帽子を服と同じ設定にすることができます。
 設定としてはとても単純で、マテリアルの設定を服と同じにするだけです。


服のマテリアル設定をベレー帽にコピーしていくだけ

 ベレー帽のマテリアル設定のうち、Lighting、Emission、Rimの設定を、服のマテリアル(どれでもいい)を見ながら、服と同じ値になるように設定するだけです。このアバターの場合、ベレー帽のマテリアルが4種類ありますが、この場合、4種類すべて選択して一括で変更することができます。


ベレー帽のマテリアルの設定変更後

 ベレー帽の設定を服の設定に合わせることで、同じような表示になりました。この時、アウトラインの設定も服に合わせたければ合わせても良いでしょう。

応用編

 一つ前で説明した「画像マスク」は、このリムライトにも設定することができます。つまり、衣装の一部だけリムライトを設定する(あるいは解除する)という設定ができます。複数の素材を想定した衣装で、特定のパーツだけリムライトを設定したいという場合は、マスク画像を作ることで実現できます。


タイツにだけリムライトを設定するとタイツの光沢感を表現できる

 タイツに光沢感が欲しかったのでタイツにだけリムライトが入るようにしてみました。
 これに限らず、衣装の質感についてはマットキャップ(光沢感の調整)やノーマルマップ(凹凸感の調整)がありますので、ポリゴン数は増やしたくないけど質感を豊かにしたいという場合はこのキーワードで検索してみましょう。

メッシュを透けさせよう(レンダリングモードを切り替えよう)

 この衣装はデコルテの部分がメッシュになっていますが、肌の色に合わせて透けているように見えるメッシュ(透過無し)と、実際に肌の色が透けるメッシュ(透過あり)の2種類のテクスチャーが同梱されています。この辺のチョイスは好みだと思いますが、私の場合は隙あらば鎖骨を見せたい(見たい)人なので、VRoid Studioでは後者のテクスチャーを読み込んでいます。


Cutoutは透明か否かの二択なのでメッシュの描画が荒い

 しかし、VRoid Studioでは自動的にCutout(透過度(α値)半分を境目に、透過と無透過が切り替わる)が選択されてしまうので、半透明という概念がありません。その結果、メッシュの描画が荒くなってしまいます。もう少し自然な透け感が欲しいので、レンダリングモードを切り替えて、半透明にしてみたいと思います。
 (VRoid Studioで自動で半透明が設定されるのは、確認できている範囲では「瞳のハイライト」がある)

 操作としては簡単で、半透明にしたいマテリアルを選択して、レンダリングモードを切り替えるだけです。


レンダリングモードを変更するだけで半透明になった

 元々この衣装のテクスチャーが半透明にも対応した作り(透過度(α値)がなだらかに変化している)のでレンダリングモードを切り替えるだけで半透明になりましたが、そうでない場合は画像編集ソフトで輪郭をぼかしたりする必要があります
 ちなみに、BOOTH等で販売されている商品の中には始めからレンダリングモードを切り替える想定の衣装もあるのでぜひ探してみてください。

 なお、今回は透過が一つだけなので問題ありませんが、透過と透過が重なったときの描画についてはレンダキューという概念が加わりますので、検索キーワードとして覚えておくといいでしょう。

最後に

Unityでの編集結果

 VRoid Studioで出力したVRMと、そのVRMをUnityで編集した結果を並べてみました。
 まずは照明の明るさ1の昼間の姿から。


Vピク / Vpicで4K出力してPhotoshopで背景を合成

 デコルテの部分のメッシュの描画が綺麗になっているのと、タイツに光沢感(リムライト)があるのがわかるぐらいで、照明が明るいうちは大きな変化は少ないです。

 明るさを0.4に設定して夜の姿。


Vピク / Vpicで4K出力してPhotoshopで背景を合成

 ベレー帽のリムライトが消えて落ち着いた雰囲気に。そのほか、虹彩や衣装の一部が光っているのが分かるかと思います。

 なお、胸元のアクセサリーはVRChat向けに販売されているアクセサリーをUnityで着用して、VRChat向けの設定を削除して、VRM向けの設定を手動で行っています。

お礼

 ここまで読んでいただきありがとうございます。
 本当は3Dアクセサリーの身に付け方やスカートの揺れ方の調整、太ももに追従するスカートの修正方法なども紹介したかったのですが、シェーダーの話でだいぶ長くなってしまったので割愛しました。
 VRoid Studio 2.0では3Dアクセサリーや3D衣装の組み込みが手軽になっていますが、現状でもUnityがあれば取り付けることができますし、シェーダーとコンポーネントを調整することで、VRChat用のアクセサリーを身につけることも比較的簡単にできますので、興味がある方はぜひチャレンジしてみてください。衝突判定がなくても違和感がないイヤリングや帽子が挑戦しやすいと思います。ネックレスは揺れない状態であれば簡単ですが、ゆらそうとすると体との衝突判定を追加する必要があるのでコライダーについて理解する必要があるのでちょっと大変かも知れません。
 ですがこれらの作業がすべてUnityで完結するメリットがあるので、ぜひUnityに挑戦してみてください。

余談

 ここから先は余談です。

 せっかくVRMという使い勝手のいいフォーマットで保存していますので、VRMファイルを読み込んで踊らせることができるソフトである「VRM Live Viewer」を使ってアバターを動かしてみました。ライティングの違いなどを動画で見たい方はこちらをどうぞ。
 今回の衣装は揺れものの調整をしていないので、動かしてみてもあまり大きな違いがありませんが、リムライトやエミッションの違いは分かると思います。前半は昼間(アバターライト1.0)、後半からは夜のライティング(アバターライト0.4)になります。


HIMEHINA『愛包ダンスホール』151MB(HIMEHINAの創作ガイドラインに基づき使用

 さらに踏み込んでUnityで揺れもの調整をするとどのぐらい動きが変わるかについては、ちょっと古いですが「VRMの揺れもの設定がとてもうまくいったので、HIMEHINAさんの「愛包ダンスホール」をVRMLiveViewerで踊らせてみた」という動画を公開しているので、そちらをご覧ください。エミッションの設定が今と違う以外は大体同じようなことをやっています。

Misskeyにノート

Fediverseに共有