VRoidをVRCクエスト対応にするための考察
最初の説明
ある日のこと。VRCで雑談してて出た話。
VRoidのアバターをVRCで使っているんだけど、クエストの配信企画にも行く機会がありそうなので、使えるだろうか?
ポリゴン数?それはまあとりあえずなんとかなるんじゃないかな。
でもシェーダに重大な問題があるよ?
どんな時にそういう必要があるのか?
Vチューバーをやってる人だったりするので、アバターの着せ替えとかの都合もあって、VRoidを利用してるんだけど、配信の都合によってクエストのワールドとかにも行く必要が出てきそうってことみたい。
だけど、VRoidのモデルはVRCのクエストと凄く相性が悪い。
何が相性が悪いのか?
VRoidのモデルって、透明をすごく使う。
髪の毛はともかく、顔のパーツや服のパーツは、あらかじめメッシュが用意されているところに、睫毛、眉、瞳みたいなパーツはテクスチャで表現することが基本になっている。
この画像のように、メッシュは広い領域に配置しつつ、テクスチャで透明にして、そこにパーツを描き込むことで表現している。
これに対してVRCのクエストで使えるシェーダは透明が表現できなかったりする。
例えば VRC/Mobile/ToonLit を適用するとこうなる。
なるほどこういうことかぁ…
なんとかならないかなあ。
対策を考える
モデリングツールで弄らざるを得ない
そもそもシェーダで透明が表現できない前提であるなら、もうメッシュを切り抜いてしまうしかない。
そうなるとVRoidでは出来ないし、Unityで、っていうのも違うよな。やっぱモデリングツールに持ち込んで改造することになるなあ。
ブレンドシェイプを維持できるか
ここで注意したいのは、ブレンドシェイプをどうするかってこと。
顔のメッシュはブレンドシェイプで制御されるので、その情報とセットで運用されてるんだけど、それって頂点インデックスが増えたりするだけでも致命的に壊れてしまう。メッシュを切り抜いてトポロジーをガッツリ大きく変えまくることなどもってのほかレベルの話。
まあでもメタセコには、シェイプのもとになるメッシュを加工したとき、シェイプ対象のメッシュも同じように加工してくれる機能があるので、それをあてにしてみよう。
実際にやってみたわけだが
いきなりアテがはずれる
というわけで実際にやってみることに。
VRMファイルの拡張子を.glbにしてメタセコで開いてみると、VRoidの顔のパーツのうち下記が透明を利用していることがわかった。
・EyeHighlight
・EyeIris
・FaceBlow
・FaceEyeLine
これらのメッシュについて、テクスチャに分割を増やし、描かれている部分を残して透明部分を消した。
けどこのとき、ブレンドシェイプに反映されなかった!
反映させるべく操作は行ったのだが、できない、と出て、シェイプの登録が消えてしまった!
これは困ったがしかし…別の対策を
結局シェイプは壊れてしまった。いちからブレンドシェイプを作り直し?冗談ではない!そこまでしたくはない。
そこで別の対策を試してみることにした。
VRCやVRM用途向けのUnityのツールで、ブレンドシェイプを色々扱えるものがある。その中でも今回は『HANA_Tool』を試してみることにする。
これ、ブレンドシェイプの変形情報を単体でインポート/エクスポートできたり、頂点インデックスの異なるメッシュに転写できたりもできるので、もしかしたら、切り抜きで形状の変わってしまったメッシュにも、もともとのブレンドシェイプが転写できるのでは…と、だめもとだけどやってみることにした。(尚、このツールは他にもいろんな機能がある)
できたよ!
HANA_Toolすげえ!
どうやらこの転写機能(BuildCopyツール)は予想以上に高性能だったようだ。
なんと、座標位置が不規則にずれていても、転写対象を探して割り当ててくれる機能があり、これがうまく作用した。
ちゃんと全項目が転写され設けられているのだ。
因みにVRoidの顔のブレンドシェイプは57種程あり、いちから再構築ってのはとてもやりたくない作業だ。これがなんときっちり自動で設けているではないか!
素晴らしい成果だ。
流石に完ぺきとはいかず、眉は変形できない部分が出てしまったが、それ以外の睫毛や瞳は完璧に転写されている。眉の部分も、ほんの頂点7~8か所だ。
ただVRM状態では、データの更新が上手くいかないっぽかったので、FBXExporterでFBX化してから再度VRM化する必要があった。
また、VRM化してから、表情制御のメタデータの編集も必要なので、フジさんのツール『Copy VRMBlendShapeAvatar』を利用した。
ついでに、VRMSpringBoneやコライダーの設定も転写する必要があったわけだけど、これについては、UniVRM内に、設定内容を保存、読み込みできる機能があって利用したが、ボーンのインデックスかなにかをアテにしてるらしく、別のボーンに割り当てられたりするなどしてしまったので、面倒な修正が必用になった。
まあでも再度モデリングツールで修正したわけだけど
HANA_Toolでの転写はかなりの部分成功だったけど、流石に完ぺきではなかったので、やはり再度モデリングツールで修正する必要があった。
ただこの時、拡張子を.glbにしてメタセコで読み込む際、ブレンドシェイプ名が持ってこれず、全部連番の別の名前に替えられてしまったので、あとで再度名前を付けなおす大変面倒な手間がかかってしまった。
これについてはFBXエクスポートして扱ったら対策できてたかもしれない。
頂点の修正自体は前述のように、大した分量ではなかった。
そんなわけで、一応できたけど
ちょっと課題が残った
ということで
できてみた。
左の様に、透明が表現できないシェーダでも普通の見た目にできた。ブレンドシェイプもちゃんと使える。
この様にすれば、VRoidのモデルでもクエスト対応が可能になる。
しかし、これだとほぼワンオフ状態だ。
服を変えたりしたくても、都度モデリングツールで編集とかが必要になってしまうし、手間もかかる。
そこで、顔だけモデルと、顔以外のモデル、にわけてVRM化して、それを『vearDresser』で合体させて使うという方法を考えたんだけど…
この作成したVRMを、vearDresserは合成させることができなかった。
何が悪かったのか…よくわからないが。
これはとても残念だ。
結局モデリングツール作業
Unityのツールでの合成がうまくできなかった理由はよくわからないが…
とりま、メタセコとUnityを何度か行き来して編集することで、最初にやりたかった目標は達成できた。
欲を言えばVRoidとかUnity上で全部出来てもいいのかもだけど、それは現状僕の出来る範囲ではない。
例えばVRCのクエストで、透明・半透明がきちんと使えるシェーダがあれば、もっと話は変わりそうではある。
この記事が気に入ったらサポートをしてみませんか?