VRoidモデルのQuest対応をする

2020年3月30日

ご苦労だった。
誠に見事な働きである。

アバターはアップロードされた。
VRCに入って十分楽しんでくれ…。
と、言いたいところだが、

我々の未来をより輝けるものに、
するために、私は
このVRoidモデルから新たなアバターを
築くことにした。

さしあたり貴公らには私の
獄滅極戮兵器群(OculusQuest)に対応してもらおう。

涙と鼻水の覚悟はよろしいか?

正に恐悦至極

はい、裏二週目突入でございます。一周目→VRoidのモデルをVRChatに導入する

……とまぁ、ネタはここまでにしておいてと。前回作ったVRoidモデルを使ってOculusQuestでも表示できるように対応していきます。「死ぬがよい。」というほど地獄ではありませんが、ちょっと面倒です。

では早速前回作ったVRoidモデルを利用して~といきたいところですが、そのままではちょっと困るので、VRoid側でモデルの改修をします。

うっかり前回作ったモデルを上書きしてしまわないよう、予め別名保存しておいてください。

顔面のテクスチャを統合する(妥協)

Quest用のアバターでは、VRChat組み込みのシェーダーしか利用することが出来ません。つまりどういうことかというと、テクスチャの透過処理が行なえません。

顔面透過テクスチャ祭りのVRoidモデルの透過部分を無くすのは地獄のようなものです。

とはいえ、妥協すれば大体なんとかなるので、透過を利用している目元を可能な限り統合して、透過しなくても大丈夫な状態にします。

この方法は「><(はぅ)」の表情が使えなくなりますので、><を使いたい人はテクスチャ統合をせず、メッシュの形状を気合で弄る必要があります。

まずは、肌のテクスチャにアイラインを直接書き込みます。元のアイラインテクスチャはそのまま流用できないので、肌へは新規に書き込んでください。「撮影・エクスポート」で表情を変えたりしておかしくならないかどうか確認しながらテクスチャを書いていきましょう。

妥協したい場合は眉も書き込みます。但し、肌に眉を書き込んでしまうと眉が動かせなくなりますので要注意です。

眉を動かしたい場合は、Blenderとの戦闘になりますが、眉の形状がシンプルであればなんとかなります。今回は雑対応でなんとかします。

白目と瞳と目のハイライトもテクスチャを統合して、瞳にセットしておきます。しかし、白目が微妙にはみ出すので、白目はセットしたままにしておきます。このとき、白目は影などを付けずに単色のものにしておくと違和感を減らせるかと思います。

但し、瞳のテクスチャがメッシュサイズぴったりに作ってあり、なおかつハイライトが瞳からはみ出さないのであれば、白目と統合せずに利用できます。(瞳&ハイライトと白目の2枚構成)

というか、そのほうがはみ出し事故も起こりにくくなるので、そうしたほうが良いです。とにかく透過部分をなくすことが大事です。

白目に影がかかっているとはみ出した部分が目立つかも……。

白目と眉毛と瞳だけテクスチャをセットしておきました。アイラインとまつげは非表示にしておきましょう。というか、まつげ対応は地獄なので妥協します。全部肌のテクスチャに書き込んでしまってください。

テクスチャを適用した場所(適用しないところは非表示に)

衣装で透過を使わない

VRoidではテクスチャの透過を用いて衣装の形状に変化を与えていますが、Quest対応するとこの手は一切使えないので、デフォルトの形状のままとなります。

具体的にはこういったレースのフリルなんかは駄目です。

透過されるはずの部分が真っ黒になって悲しいことになるので、塗りつぶすなり上手く書き込むなりして対策をします。

Blenderと本気で戦わない方針なので、妥協に妥協を重ねていきましょう。テクスチャの変更が済んだらエクスポートします。

Blenderで削る

CATSプラグインを用いてVRChat向けにセッティングしていきます。モデルを読み込んだら、「Fix Model」を押して自動修正してもらいます。

アイトラとリップシンクとマテリアル統合・アトラス化は前回書いたので割愛します。ウェイトペイントで目の可動範囲を狭めるのも忘れずにね。

Decimationでポリゴン削減もやれますが、やりすぎると破綻したりするので、今回も触れずにおきます。もしポリゴン削減するのなら、VRoidStudio側で削減して出力するか、BlenderのDecimateモディファイアで顔以外を削減すると、7000ポリゴンぐらいにはなるんじゃないでしょうか。(希望)

眉を作る(任意)(あんまお薦めはしない)(修羅の道)

眉を作っていきます。眉を肌に書き込んだ人は次の工程まで飛ばしてOKです。

は~、めんどくせぇ~。

眉のメッシュ部分をどこか1点選択して、Ctrlキーを押しながら+キーを連打します。

選択を終えたら、Shift + Hを押して他の部分をすべて非表示にします。次にシェーディング設定をSolidからMaterial Previewに切り替えます。

すると、眉だけの表示になるので、この眉の形状に沿ってナイフを入れていきます。

なぜ新規に作らずにナイフを入れるのかというと、マテリアルの再割り当てやUV展開といったことをしなくても済むので、そういった関連付けを壊すことがないからです。(説明したくないだけとも言う)

雑にメッシュ削ったほうが楽だなと思っただけなので、新しく作って割り当てるのがやりやすい人はそうしたら良いです。というか最近はそうしてます。

さて、眉の形に沿って適当にナイフを入れたら、エンターキーを押して確定しましょう。後でテクスチャをベタ塗りするので、多少はみ出したりしていても大丈夫です。

その後は、要らない部分を選択してDeleteキーで削除していき、近い頂点は2つとも選択してAlt + Mで結合して整えていきます。

大変美しくない?これはええねん。

Alt + Hを押すと非表示になっていたメッシュが再表示されます。反対側はミラーで楽しちゃおってすると沼にハマるので、反対側も手動で切って整えます。あくまでもUV展開はやらない雑対応です。

真面目にやるならメッシュの形状を綺麗に整えていきましょう。これは雑な例。

大雑把に切り抜きが終わったら、VRMファイルの置いてあったフォルダ内に「tex_数字の羅列」のフォルダがいつの間にかできてると思うので、その中にある眉のテクスチャである「F00_000_00_FaceBrow_00.png」を眉の色で全部塗りつぶしておきます。

予め塗りつぶさなかったのは、眉の形状に沿ってナイフを入れたかったからです。そうそう、アトラス化してから適当に塗りつぶしに行ってもいいです。

しかしこのままでは端っこのシェイプキーが原点にすっ飛んでいって盛大に爆発するはずなので、Vertexメニューにある「Blend From Shape」を駆使してなんとかしなくてはいけなかったりします。眉だけを選んだ後、眉を使っていないシェイプキーを選択してBasisをベースにブレンドして~……をひたすら繰り返し、眉が変形するシェイプキーは個別にチマチマと修正し……。

眉はまだ楽な方で、アイラインを削ろうものなら大爆発したシェイプキー相手に格闘しないといけないので地獄を見ます。表情で><(はぅ)が使いたい場合は、同じ要領でアイラインと><も作成してください。

先にBlenderをしっかり学んでこい?それはそう。

ちなみに、眉とアイラインをガチで作るとシェイプキー入れるので丸1日潰れます。上の図は新規に作ったもので、PolyQuiltとか使ってちょいちょいっと作るだけなんですが、この状態からシェイプキーを入れていかないといけないのでしんどいです。

目元のメッシュを消していく

はい、恐ろしく非効率的な工程を飛ばして、最初から肌に眉を書き込んでおいた方はお待たせしました。目元のメッシュを削っていきます。

事故防止のため、シェーディングはMaterial Previewにしておきましょう。消してはいけないところを消したときにテクスチャが削れるので分かりやすいはずです。

明らかにはみ出している部分を適当に1点選択して、Ctrlキーを押しながら+キーを連打して選択範囲を広げます。そしてDeleteキーでどんどん消していきます。

今消しているのはアイラインとまつげです。

はみ出している部分を全部消しても、まだ目の中に余計なものが残っています。そう、瞳のハイライトです。

ハイライトのメッシュを消そうとして、うっかり瞳のメッシュを消してしまうと、白目の状態になると思うので、その場合はCtrl + Zで戻りましょう。

全部消したと思っていても、微妙に残骸が残ってたりすることもあるので気をつけて消していきます。これでFace上に残っているのは、瞳と白目だけのはずです。(あと眉)

瞳の感じによっては上下に動いたときに貫通することがあるので、瞳のメッシュもある程度削ったほうがいいかもしれません。あーもう。やーんなっちゃうわね。

前回も書きましたが、瞳の位置は後ろに下げておくのは大事です。

可能であれば、ポリゴン数も削りますが、今回はそのままやります。もしDecimateモディファイアを使うのであれば、顔以外をデシメートしましょう。顔を削るとシェイプキーが爆発します。

最後に、MatCombinerでマテリアルとテクスチャをひとまとめにしてください。極力マテリアル1個、テクスチャ1個で行きましょう。分けたところでQuest向けのシェーダーは設定項目皆無なので。

UnityでGO!〜Quest対応編〜

手順は前回同様なのでそっち読んでください。(手抜き)

FBXファイルをHierarchyに投げ込んだときに、目元がパンダみたいに黒くなっていたりしなければ大丈夫です。

黒い部分が残っていた場合は、Blenderに戻って消し忘れたところを消すか、Unity内で「MeshDeleterWithTexture」を使って上手いこと削除するかしてください。

(人によってはMeshDeleterWithTexture使ったほうがメッシュ削除楽かもしれない。)(それ今言う?)

Quest用のシェーダーに切り替える

HierarchyでBodyを選択し、右下でシェーダーを選択するのですが、ここで選べるのは「VRChat/Mobile」以下のシェーダーのみです。

「VRChat/Mobile/Toon Lit」あたりが無難かなと感じています。シェーダー切り替えの際に、「Enable GPU Instancing」にチェックを入れるのを忘れないようにしましょう。

VRC_Avatar Descriptorの中身は、前回アップロードしたモデルのものをそのまま利用できるので、PC版のアバターを選択した後、VRC_Avatar Descriptorを右クリックして「Copy Component」を選択します。

Questの方に戻ったら、同じように右クリックから「Paste Component Values」を選択して貼り付けます。Face MeshはQuestの方のものに変えておきます。

でも、Unity 2018からはリップシンクのパラメータは自動で入るので新規に入力しても手間は変わらないですね。

髪飾りの位置なんかも値をコピペで入力しちゃいましょう。

PC版と表情を変える(任意)

肌に眉を書き込んだせいで眉が動かせなかったり、「><(はぅ)」の透過処理の対策はしなかったので、Questでは使えない表情が出てくるかもしれません。

PC版のものを使いまわしていくので、「CO_モデル名」となっているオーバーライドコントローラーをCtrl + Dで複製して、そっちにQuest用の表情を入れていきます。

ƪ(•◡•ƪ)”あっぷろーーど

ああ、いけない忘れていました。Quest用にアップロードするので、FileからBuild Settingsを開いて、プラットフォームを「Android」に切り替えましょう。

また、VRChat SDKの「Content Manager」ではアップロード済みのアバター一覧が出てきます。

PCとQuest両対応したい場合は、対応したいアバターの「Copy ID」を押して、Pipeline Managerにペーストし、Attachしておきます。

さて、この状態でアップロードをしようとするとメッチャ怒られますが、ポリゴン数多すぎって話なので無視して投げ込みます。大丈夫だ、問題ない。

 

VRC内で緑と青の丸が両方ついていたら両対応済みのアバターとなります。

Questから見たときにモデルが爆発してるかもしれないので、Questで動作確認はしましょう。爆発はしていなくても、表情とかが意図した感じになっていないかもしれません。特に目が大変なことになりがちなので……。

Quest持ってない人は、Quest持ってる人にジャンピング土下座をキメて確認してもらうのがベターです。

Quest買うか……。→買った

そうそう、HTC VIVE Focus Plusでもモバイル版のVRChat行けるらしいっすね。

Amazon