VRoidモデルの口元にヒゲみたいな線が出てしまう問題
VRoid触りたてのときに原因がわからず、かといってググり方もいまいちわからなかった問題の解決法を書いておきます。
- おことわり
- 追記(2022/08/19)
- ヒゲみたいな線の正体は何なのか
- 解決策1:顔のアウトラインを無効化する
- 解決策2:顔のアウトラインのマスクを編集する
- マテリアルの削減を行っている場合
- lilToonを使っている場合
おことわり
- 以下の記述はすべて「執筆時点ではこうだった」というのを書いているだけなので、アップデート等により正しい情報でなくなる可能性があります。ご了承ください。
追記(2022/08/19)
下記ページにて、この問題を解決するためのテクスチャが配布されています。
手っ取り早く解決したいならこちらを使いましょう!
(2022/08/30 FC2ブログから記事移行)
ヒゲみたいな線の正体は何なのか
ズバリ、顔のアウトライン(輪郭線)が口角に現れてしまったものです。
MToon等のトゥーンシェーダーは「どこに輪郭線を出せばいいか」というのをリアルタイムで計算しているのですが、口の周りは造形が複雑であるため、輪郭線の描画が(我々から見ると)不自然になってしまう場合があります。
(VRoid製アバターの場合、口まわりのパラメーターをガンガンいじっていると出やすくなるっぽい)
解決策1:顔のアウトラインを無効化する
一番お手軽なのは、VRoidで顔の「アウトラインの太さ」を0にしてしまうことです。
こうすればヒゲみたいな線は出ようがありません……が、この問題に悩む人の大半は「輪郭は出したいけどヒゲみたいな線は消したいんだよ!」と思っているでしょう。
解決策2:顔のアウトラインのマスクを編集する
こっちが本題です。
実は、VRoidから出力したVRMには「この部分には何があっても輪郭線を出さないようにしてね」と指定するための画像(マスク)が含まれています。
しかし、そのマスクはVRoidから直接いじることができないため、UnityやBlenderといった外部ソフトを使ってVRMファイルを自分で編集する必要があります。
ここではUnityを使って編集していくことにします。
UnityでVRMファイルを読み書きする環境をお持ちでない方は、下記ページを参考に環境構築してください。
※UniVRMはv0.100.0
からUnity-2020.3
が最低バージョンとなっていることに注意してください(1敗)。
VRChatをいじっている人だとUnity-2019.4
あたりが入っていると思うので、それを使い回すならUniVRMはv.0.99
系にしましょう。
UnityにVRMファイルを読み込み、モデルをHierarchyに配置するところまで進めてください。
Hierarchyでモデル内のFaceを選択し、Inspectorを下にスクロールしていくと、 N00_000_00_Face_00_SKIN
というようなMaterialがあると思います。
そこの Outline>Width の左横にある画像をクリックしてください。
※VRoid側でマテリアルの削減を行っている場合はこのMaterialがないかもしれません。その場合については後述します
すると、こんな感じの画像が選択されると思います。
これが「顔のOutlineのマスク」です。この画像で黒くなっている部分には何があっても輪郭線は出ません。
↑の画像を選択した状態でCtrl+Dを押して複製し、その画像を適当なペイントソフトで編集しましょう。
口の周りがマスクしきれてない状況なので、口の周りの黒塗りを少し広げてあげました。
(私の場合は「鼻頭の輪郭線もいらないかな」と思ったのでついでに塗ってあります。このあたりはモデルによって塩梅が違うと思います)
編集後のマスクをさっきの場所にドラッグ&ドロップしてあげれば、ヒゲが消えてくれてるはずです!
(左が編集前、右が編集後)
マテリアルの削減を行っている場合
軽量化のためにマテリアルの削減をしている場合、肌単体のマテリアル(N00_000_00_Face_00_SKIN
)が存在しないことがありますが、この場合も対処法は特に変わりません。
Outlineのマスクに↓のように顔っぽい部分が含まれているMaterialを探し、それを先程と同じように編集・適用してあげれば同じように解決するはずです。
lilToonを使っている場合
シェーダとしてlilToonを使っている場合、先述の設定に加え、「詳細設定」を選ぶと出てくる「太さ0の頂点を削除」にチェックを入れるとうまくいきます。