読むVRChat。

VRとUnityの備忘録

[VRChat] 15分で完成!Questアバターのアウトライン [Unity / blender]

f:id:VarYU:20211210210029p:plain

 

この記事の動機

Quest版VRChatでは、シェーダーの制限があるためにアバターの表現が簡素化されます。

UTS2に代表されるPC専用シェーダーとは異なり、Questで主に使われているMobile/Toonlitにはアウトライン(輪郭線)の設定項目がありません。

そこで、blenderのモディファイアーをつかい、普段使っているアバター・ティグリなす(Quest版)にアウトラインをつけてみました。

 

この記事はその手法の備忘録です。

 

想定する読み手

以下の3つの条件に当てはまる人向けに書いています。

・UnityでアバターのアップロードをしたことがあるVRChatプレイヤー。

Androidビルドをしたことがある。

blenderをさわったことはあるけど使い方はよく分からない。

 

強調したいのは、blenderの事前知識は要らない。という点です。(私もほぼ使えません…)

 

またこの記事でサポートしていない範囲の内容は、TwitterやVRChat内でお気軽にお聞きください。

 

注意点

 

※ この記事の手法では、アバターの負荷パフォーマンスランクが若干上がります。

具体的には

ポリゴン数が約2倍になる。

マテリアルが1個ふえる。

 

そのため、元の状態で超過多ポリゴン・マテリアルマシマシアバターに適用するのはあまりおすすめしません。

また、元々が軽いアバターでも、アウトライン適用後に軽量化することを強くおすすめしています。

※上のツイートのアウトライン付きティグリなすも1マテリアルにまとめてあります。

 

この記事の末尾に、Questアバター最適化についてまとめた記事のリンクを貼っているので、もしよろしければお試しいただけると幸いです。

リアルタイムで描画されているVR空間上の限られたリソースを、みんなでなかよく分け合って使っていきましょう!

 

やりかた

 

blenderにfbxファイルを取り込む

アウトラインをつけたいアバターのfbxファイルをblenderにインポートします。

推奨バージョンはblender2.8です。 (この記事ではblender2.82aを使用します)

 

※ .fbxファイルがないときは?

① 買ったアバターに.unitypackageファイルしか同梱されていない場合

いちどUnity上で展開してから、Windowsエクスプローラー経由で.fbxファイルを取り出してください。

 

② .blendファイルを使う場合

.blendファイルは、アバターの作者さんが使用していたバージョン以外blenderで開くと、ボーンやテクスチャの参照が外れてしまうことがあります。

そのときは、blender2.7 / blender2.8 / blender2.9などそれぞれ別のバージョンで開いてみて、問題のなさそうなバージョンをみつけて.fbxファイルでエクスポートしてください。エクスポートの設定は後述の箇所を参考にしてください。

f:id:VarYU:20211209182242p:plain

↑ まずはデフォルトキューブを右クリックから消去して・・・。

 

f:id:VarYU:20211209182408p:plain

↑ 「ファイル」>「インポート」からアバターのfbxを取り込みます。

今回使わせていただいたのはNEFCOさんのシヴィーちゃんです。


② メッシュの裏側描画をオフにする

f:id:VarYU:20211209182837j:plain

↑ 「3Dビューのシェーディング」設定から、メッシュの裏面を非表示にしておきましょう。

 

③ アウトライン用のマテリアルを追加する。

f:id:VarYU:20211209183301j:plain

↑ 「編集モード」に変更し、メッシュを選択します。そしてマテリアル設定のタブを開き、「+」ボタン > 「新規」でマテリアルを作成します。

 

f:id:VarYU:20211209183548j:plain

↑ わかりやすいように名前を変更します。今回は”Outline”にしました。ベースカラーも適当に黒にしておきましょう。

 

f:id:VarYU:20211209183727j:plain

↑ このOutlineマテリアルも裏面を非表示にしておきます。

 

④ アウトラインを付けたくない箇所の選択

f:id:VarYU:20211209183941p:plain

↑ このままメッシュすべてにアウトラインを付けるのは非効率です。
(服でかくれている身体にアウトラインをつけてもただポリゴンの無駄になる)

また顔、とくに目のまわりにアウトラインをつけてしまうと"パンダ目"になってしまったり、口のまわりのアウトラインは"泥棒ヒゲ"みたいになります。
そこで、アウトライン不要のメッシュを一つ一つ選択していきます。

 

f:id:VarYU:20211209184421j:plain

↑ 面選択モードに切り替え、Shiftキーを押しながら顔面のポリゴンをどんどん選択していきます。ドラッグすれば範囲選択もできます。

 

f:id:VarYU:20211209184635p:plain

↑ 顔面のパーツのうち、だけはアウトラインをつけたいので、選択を外しておきます。(好みの問題)

 

f:id:VarYU:20211209184900p:plain

↑ 視点の回転(マウスホイール押し込みドラッグ)、視点の移動(Shift + ドラッグ)を駆使して、顔面の裏側も余すところなく選択していきます。
とくに忘れがちなのが、口の中眼孔の内面です。

 

f:id:VarYU:20211209185108p:plain

↑ 目の表情シェイプキー(ハート目やキラキラなど)も忘れずに選択しておきます。

 

⑤ アウトラインのための頂点グループを作成する

f:id:VarYU:20211209185321p:plain

↑ 選択し終わったら、Ctrl + i を押します。 これで選択範囲が反転します。

 

f:id:VarYU:20211209185651j:plain

↑ メッシュタブを開き、「+」ボタンで頂点グループを新規作成します。(名前は適当に"Outline"にしました)
ここのウエイト値を弄ることで、アウトラインのかかり具合を頂点グループごとに調整することができます。今回は1メッシュしかないので、ウエイト値は "1.000" のままでいきます。
最後に、「割り当て」ボタンを押すことで、いま選択している箇所が新たに "Outline"頂点グループになります。

 

f:id:VarYU:20211209190129j:plain

↑ なお余談ですが、このあと行うモディファイアー適用で「メッシュが爆発した」「アバターがウニみたいにトゲトゲになってしまった」という場合はシェイプキーが悪さをしています。

とくに「胸のポリゴンを消したのに、胸のシェイプキーを残したままにする」といった状況で爆発しがちです。

使う予定のないシェイプキーは オブジェクトモード >「-」ボタンで消しておきましょう。(容量も軽くなります)

 

⑥ 「ソリッド化」モディファイアーを追加する。

f:id:VarYU:20211209190724j:plain

↑ 編集モードに戻り、適当な場所をクリックして選択を解除。
モディファイアータブ > 「モディファイアーを追加」 > 「ソリッド化」 を選択します。
するとメッシュがなんかすごいことになります。

 

f:id:VarYU:20211209190946j:plain

↑ ”幅” を負の値(絶対値が大きいほど線が太くなります。今回は-0.0015)にし、頂点グループ欄には先ほど設定した"Outline"頂点グループを入れておきます。
「法線を反転」にのみチェックを入れ、「ふちをフィル」のチェックは外します。
最後に、「マテリアルインデックスオフセット」を "1" にします。
(この値は、③で作成した"Outline"マテリアルが上から2番目にセットされているので「2から-1した値」で1にしています。つまり、元のマテリアル数が15で、"Outline"マテリアルが16番目の場合に入力すべき値は"15"になります。)

 

⑦ Apply Modifierをインストールする。

f:id:VarYU:20211209191723p:plain

↑ さて、オブジェクトモードに変更し、このままソリッド化を適用しようとしても「モディファイアーはシェイプキーのあるメッシュには適用できません」とエラーが出ます。

 

そこで、このエラーを無視できるアドオン「Apply Modifier」を追加します。

ダウンロード先と、インストール方法は以下のサイトがわかりやすいです。

 

f:id:VarYU:20211209192042p:plain

↑ アドオンを入れおわったら、オブジェクトモードの「オブジェクト」 > 「適用」 > 「Apply Selected Modifier」をクリックします。

 

f:id:VarYU:20211209192216p:plain

↑ 「ソリッド化」にのみチェックを入れて、OKを押してしばらく待ちます。

 

f:id:VarYU:20211209192553j:plain

↑ 無事にソリッド化が適用されました!ポリゴン数を確認すると、しっかり元の2倍になっていますね。

 

⑧ fbxをエクスポートする 

f:id:VarYU:20211209192809j:plain

↑ 右上のアバターに関するコンポーネントをShift+クリックですべて選択し(重要)、fbx形式でエクスポートします。

 

f:id:VarYU:20211209192927j:plain

↑ Unity向けのエクスポート設定は上画像を参考にしてください。
一度設定したら、プリセットに保存していつでも呼び出せるようにしておくのがおすすめです。
(初期設定のままエクスポートしてしまうと、いろいろとおかしなことになってしまいます)

 

⑨ Unity上でfbxをアバター向けに再設定する

当記事公開時点のUnityバージョンはUnity2019.4.31f1です。これ以降のバージョンでは操作が異なる可能性があります。

 

f:id:VarYU:20211209193529j:plain

↑ VRCSDKとアバターのunitypackageを展開しておいたUnityに、完成したfbxをインポートします。
そのままInspectorの「Model」タブから”Read/Write Enabled”にチェックを入れ、"Blend Shape Nomals"を"Import"にして"Apply"を押します。

(2022/03/11 訂正: "Blend Shape Nomals"は"None"にしたほうがいいです。Questのシェーダだとほとんど関係ないはずですが。)

 

f:id:VarYU:20211209193719j:plain

↑ 続いて、「Rig」タブで"Generic"を"Humanoid"に変更し、"Apply"を押します。
すると赤いエラーを吐いたので、"Configure"を押してボーンの設定に移ります。
(もしエラーが発生しなかったとしても、一応Configureからボーン構造を確認したほうがいいです)

 

f:id:VarYU:20211209194007j:plain

↑ どうやら今回はChestボーンと両Shoulderボーンの参照が外れてしまっているようです。
左のHierarchyから該当ボーンを探し、ドラッグ&ドロップしてあげましょう。

 

f:id:VarYU:20211209194207j:plain

↑ Bodyタブだけでなく、頭部や手のタブも忘れずにチェックします。
今回はどうやらVRChatのアバターには必要ない顎ボーンが、目のボーンを誤って参照しているようです。
Jawを "None" にしてエラーを解決します。

 

f:id:VarYU:20211209194404j:plain

↑ すべてのボーンを確認し終わったら、"Apply" → "Done"で設定を終了します。

 

⑩ VRChat向けにマテリアルを設定する

f:id:VarYU:20211209194633j:plain

↑ 何も設定していないと最初はStandardシェーダーになっているかと思います。
HierarchyにOutline版アバターを置き、メッシュを選択してマテリアルスロットを設定していきます。
(アバター本体のマテリアルは、プレハブ版に設定されているものをそのまま流用しました)

 

f:id:VarYU:20211209205216j:plain

↑ アウトライン用のマテリアルを新規作成します。シェーダーは、VRC/Mobile対応ならなんでもいいです。
もちろんMatcap lit や Standard liteもOKです。

 

f:id:VarYU:20211209195017p:plain

↑ 今回はToonlitにしてみます。単色にしてしまうよりも、グラデーションを含むテクスチャにしたほうが見た目が映えます。

 

Avatar Descriptorの設定をコピーする & リップシンク再設定

 

シヴィーちゃんはVRCSDK2時代のアバターなので一部画面が異なると思いますが、基本的にSDK3でも操作は同じです。

f:id:VarYU:20211209195243p:plain

↑ Outline版のアバターにInspector上の「Add Component」で”Avatar Descriptor”をアタッチします。

 

f:id:VarYU:20211209195841j:plain

↑ プレハブ版のアバターから設定を引き継ぎます。一番右上の3点マークをクリックし、"Copy Component"をクリックします。

 

f:id:VarYU:20211209200024j:plain

↑ Outline版のアバターに戻り、同じく3点マークから"Paste Component Values"をクリックします。これでアニメーターやビューポイントの設定が引き継がれました。

 

f:id:VarYU:20211209200241j:plain

↑ 唯一、リップシンクだけはボーンの参照を再設定しなくてはいけません。やり方は簡単で、「Default」→「Auto Detect!」をクリックするだけです。(もしこれでうまくいかない場合は、メッシュの名前を"Body"などにリネームするといいかもしれません)

 

これですべての設定が終了しました!

 

完成!アウトラインでアバターのかわいさも5割増しに!

 

↓左がプレハブ版のシヴィーちゃん。↓右のOutline版のシヴィーちゃんは顎や髪のラインがあるおかげで情報量がアップしていいかんじです。

f:id:VarYU:20211209200538p:plain

ただし、シヴィーちゃんの前髪メッシュは内側に向かって丸みを帯びているからか、正面から見ると前髪にアウトラインが付いていません。

 

別のアバターで試してみると、こちらは前髪の輪郭がくっきりと出ました。

f:id:VarYU:20211210192333p:plain

このへんの挙動はやってみるまでわからないので、色んなアバターで試してみるしかないです。

 

さて、最後にVRChatにアップロードして確認してみます。違いは一目瞭然ですね。

f:id:VarYU:20211210192146p:plain

とくにVRでインすると、手首や指にあるアウトラインのおかげで着用感がけっこう変わります。

テクスチャを変えずともアニメ調にグッと近づくので、アバターにあわせて適切な太さに調節したり、色を変えればもっと化けそうです。

 

おつかれさまでした!

アウトラインが付いてますます可愛くなったアバターで、Quest版VRChatを遊びつくしましょう。

 

番外編:アバターの軽量化もやってみよう

一番最初にも言及しましたが、今回の手法はUVやメッシュを調整することなく、ポリゴン数とマテリアルを単純に増やすため、アバターの負荷とパフォーマンスランクが悪化します。

なのでもし余裕があれば、このあとはアバターの軽量化作業をおすすめします!

 

簡単な方法を以下の記事にまとめているので、ぜひ一度お試しください。

(この軽量化方法をつかって、私のなすちゃんはアウトラインを付けても15000ポリゴン / 1マテリアルのQuest Mediumに収まっています)

 

それではまたどこかでお会いしましょう!
VarYUでした。

 

VRChatアバターをUnityだけで雑に軽量化する。(Quest対応編)

f:id:VarYU:20211210195146p:plain

 

この記事は、以前ツイートした内容をあらためてまとめ直したものです。

アバターの負荷軽減」に役立つTipsをまとめた記事になります。

 

この記事の動機

PCVR向け販売アバター[6ポリ / 12マテリアル]を購入したはいいものの、
普段Questイベントに参加するので

①他の人(とくに初めて会う人)にShow Avatarの手間を取らせたくない!

②他の人の負荷になりたくない!

という個人的理由からQuest-Poor [2ポリ / 4マテリアルまで]に軽量化することを決意。

(Blenderは苦手なので)各種ツールを使ってUnity上だけでなんとか削減しようと思い、Twitterに結果を載せたらそこそこ反応をいただけました。ありがとうございます。)

ちょうどPC/Quest両対応のAvatar FallBack Systemが正式導入され、
アバターの軽量化に関心が寄せられていそうなタイミングがきたので、今回のTipsを残しておくことにしました。

 

想定する読み手

アバターアップロードに必要な基本的Unity操作を習得済み。

アバターを一度でもAndroidビルドしたことがある。

 

前提

①Quest-Poor対応をゴールにします

アバターの原型を残せるギリギリのところまで軽量化することになります。

PCVR向けの軽量化がしたい人には不要な作業が含まれているので、そのへんは読み飛ばしてください。

※ Quest用FallbackアバターにできるのはQuest-Good [ 1万ポリゴン / 1 マテリアルまで ] です!

もともとが1万ポリゴン以下のQuest向け販売アバターを設定するのがおすすめです。とても楽でいいと思います。

逆に今回の手法でPCアバターからFallback仕様を目指すならば、元々2.5万ポリくらいでないと厳しいかも。

 

(なお、PC側に表示されるFallbackアバターはPC-Good [ 7万 ポリ / 8 マテリアル] であれば設定可能です。

ただしFallbackアバターはQuest-PCのそれぞれのプラットフォームでGood判定な必要があるため、どちらにせよQuest-Good状態のアバターを必ず1体は用意しなくてはいけない仕様となっています。)

 

②うまくいかないアバターもあります

今回の場合は、アバターを見て「あっこのアバターならQuest-Poor目指せるな」と直感でわかったのでチャレンジしてうまくいきました。
たぶんここまでいける販売アバターのほうが少ないと思います。

見極めるポイントは、こんなかんじ↓

  • ポリゴン数をあまり減らせないタイプ

・元々の肌面積が広いアバター (服の内側のポリ削減ができないので)

  • (UnityだけでQuest対応は) 諦めた方がいいタイプ

・まつげ、眉毛、眼球を透過テクスチャで表現しているアバター (Vroid全般)

・rotation constraintで腕や脚の動きを直接制御しているアバター

  • (なぜか一部ツールが動かないので) 途中で諦めざるを得ないタイプ

・MeshBakerが機能しないアバターがたまにあります。
原因不明なので諦めるか、Blenderで原点を動かしたりScaleを1に合わせたりして解決する可能性に賭けるか。

 

③Unityの有料アセットを使います

定価7000円くらいのアセットを1つ(or 2つ)使用します。
(前述の通り、)
なぜかアセットが機能しないアバターや服もあるので、この目的のためだけに購入してうまくいかないと泣きます。
その責任は負いかねますのでご了承ください!
blenderならタダってマジですか

 

なおQuest-Poor対応なら15,000円で代行するという神サービスnyantelさんがおこなっています(勝手な宣伝)。
綺麗にポリ削減してくれて満足度が高いので自分でやるよりおすすめです。

 

アバターの見え方は変化(劣化)します

せっかく美しくセットアップしてくださったマテリアル設定や、綺麗なポリゴン割りを弄ってしまうことになります。アバター製作者さまに顔向けできない・・・大変申し訳ございません!

 

⑤ポリゴン削減は、どうしても削る必要がある人だけ

アバター・パフォーマンスランクにこだわりがないならポリゴン削減の項目はスキップ推奨。

VRChatにおいて、ポリゴン数を半分にしても負荷はほとんど下がらないことが知られています。

・Visitorに会う機会が多い人 (初心者案内など)

・自身のアバターが、Questユーザーのスクショでおじさん(Fallback系アバター)に映っているのが嫌な人

だけ、ポリゴン削減する意味があるんじゃないかなと思います。

それよりもメッシュ結合だけで超軽量化になります。△は削らなくていいので全VRC民メッシュ統合してくれ…!

 

大まかな流れ 

元のアバターからQuest用にメッシュ・マテリアルを複製す
VRCQuestToolsを使いワンボタンで設定します。

着せ替えギミックを消す / マテリアルスロットを見直す
素体をほぼ消してしまうので着せ替えはナシでいきます。メッシュ数も減らせる。

見えないメッシュ/使わない表情メッシュなどを消す
MeshDeleterWithTextureで地道に削ります。

メッシュごとのポリゴン数を削る
Mesh Simplify(Unityの有料アセット)またはにゃんにゃんメッシュエディターを使ってざっくり削ります。

メッシュ・マテリアルを1つにしてテクスチャを1枚に
Mesh Baker(Unityの有料アセット)を使って全て1つにまとめます。

細かな調整をしてアップロード

 
 

具体的な方法

< 1 > 準備

・VRCSDK, Dynamic Bone, Shader, 販売アバターのUnity Packageをインポート

UnityはPCビルドのまま。Androidビルドには最後の最後までSwitchしません。


アバターの設定済み.prefabをシーンに置く。& アバターの.fbxをシーンの(0,0,0)に置く。

プレハブは設定のコピー用に置いておくだけなので一旦非表示にしておきます。以後はfbxのほうを弄っていきます。(これは私の好みなので、プレハブをUnpackして使ってもOKです。)

f:id:VarYU:20211121110543p:plain

↑今回お世話になったタビ -Tabi- ちゃん (https://booth.pm/ja/items/3241242). かわいい。色は改変済み。

元々は△59056 / 10メッシュ / マテリアルスロット12 の一般的パフォーマンスなPCアバター

Avatars3.0でアウタージャケットやリュックや靴下が着脱可能だったり、表情モーフの出し入れが可能。

 

< 2 > Quest用のメッシュ・マテリアルを複製する

VRCQuestTool の「Convert Avatar for Quest」機能を使わせていただきます。ツールの使い方はBOOTHページの画像の通りです。

f:id:VarYU:20211121111714p:plain

↑自動でアバターを複製して、Questに対応したマテリアルとテクスチャを生成してくれる神ツール。シーン上にアバターがクローンされ、生成物は初期設定でKRT>Quest Avatarsフォルダに格納されます。

また、初期設定では画像テクスチャの最大サイズを1024x1024にしてくれます。今回はこのテクスチャをそのまま使うのではなくアトラス化して使うので、画質劣化を抑えるため2048x2048を選択しました。

 

< 3 > 着せ替えをオミットする

Avatars3.0の着換え機能を維持したままQuest-Poor雑対応はかなりしんどいので、どの衣装パターンにするかを決めてしまい、残りのメッシュは右クリック>Deleteで消してしまいます。

その後、FXレイヤーから消したメッシュの情報を消すのですが・・・これは製作者さまによって全く異なった構成だと思いますので操作の説明は割愛します(たぶん大体のアバターなら何もしなくても大丈夫のはず)。

f:id:VarYU:20211121113244p:plain

※ ここからはVRCQuestToolsでクローンされたほうのアバターを弄っていきます。

今回は好みでジャケットとリュックとシューズを消しました。消したからポリゴン削減に有利というわけでもないです。(とくに服や靴は内側の腕や足のポリゴンを削れるので、むしろ残しておいた方が有利)

 

< 4 > マテリアルの重複を見直す

1つのメッシュに対して複数のマテリアルがセットされている場合、そのマテリアルを1つにできることがあります。(できないアバターのほうが多いと思います、その場合はスキップ)

たとえば今回は、顔のメッシュに [Face]  [Face_Transparent]  [Face_Eye] の3種類のマテリアルがセットされていました。

PC版アバターはUTSシェーダーなので、それぞれ別々のアウトライン設定にしたり、補助テクスチャをつかった表現力アップをするためにマテリアルが分けられています。
しかしQuest版アバターにすると全部Toonlitシェーダーに統一されてしまうので、3つに分ける必要が無くなります。(ついでに透過もつかえないので)

f:id:VarYU:20211121113403j:plain

↑元々のタビちゃん。異なる3つのマテリアルがそれぞれ別のシェーダー設定でBodyメッシュにセットアップされている。

 

f:id:VarYU:20211121113444j:plain

↑3つ全ての欄に 1つの[Face] マテリアルをドラッグ&ドロップした結果。

シェーダーがToonlitなので3つとも同じにしても表示は変わらない。ちなみに、マテリアルスロットの上の段の”Size”の数を弄る(3→1にする)と表示がおかしくなるので非推奨。

 

> Toonlitにしたら表情がおかしくなった!?

透過が使えないため、ほほ染め、キラキラ目、シイタケ目、目のハイライト、眉毛あたりがおかしくなるアバターがいます。

表情に関するものは、のちほど < 5 > でそもそもそのメッシュを消してしまうのでここで対応する必要はないです。
ただし綺麗に消せないアバターの場合もあるので、表情アニメーションから該当のシェイプキーの値を0にしてしまうのが一番安心です。

f:id:VarYU:20211121113821j:plain

↑表情のAnimationファイルをクリックして、右下のwindowにアバターをドラッグ&ドロップ。

キラキラ目のまわりが透過されておらず、白い目になってしまっています。Questにはこう見えてしまうので、キラキラ目シェイプキーをこのAnimationから外そうと思います。

 

f:id:VarYU:20211121113942p:plain

↑Window > Animationで該当するシェイプキーをみつけ、値を100→0にすれば解決します。

これ以外に、
・目のハイライトが消えて闇落ちしてしまう場合、
・眉毛が白海苔状態で消さないといけない場合は、
メッシュを削除したのちテクスチャに自力で書き込むしかないです。

 

< 5 > 見えないメッシュ・つかわない表情メッシュを消す

MeshDeleterWithTextureをつかわせていただきます。使い方は、BOOTHページのTwitterリンク先の通りです。

f:id:VarYU:20211121114226p:plain

↑テクスチャが映り込んでしまうので説明画像は割愛。
服の内側に隠れた素体のメッシュを主に削っていくことになる。”Ctl+Z → メッシュを枠内に再度D&D” で何度でもやり直せるので限界を攻めよう。


f:id:VarYU:20211121114331p:plain

↑ズボンの下もごっそり削る。貫通対策にもなる。髪で隠れた頭頂部や、><目, !?モーフのメッシュなどとにかく要らないものは全部消す。
ここでいかに削るかが2万ポリ到達の要。今回は△59000→35400まで達成。ギリギリを攻めて何度もやり直してここまで削れました。

 

※このツールはAndroidビルドでは動きません。

Windowsビルドで使いましょう。

基本的に、Unity上のアバター改変は全般的にWIndowsビルドで行ったほうがPCへの負荷も少なく、処理も速く、おかしなバグの発生も少ないです。

Androidビルドには、アップロードの直前にSwitch Platformするスタイルがおすすめです。

 

< 6 > ポリゴン削減ツールをそれぞれのメッシュに1つずつ適用する

いろいろと種類がありますが、今回私は Mesh Simplify をつかいました。

単独販売のほか、よくセールになるAdvanced Tools Mega Packというバンドルにも入っており、
ワールド制作やその他Unityの制作系をする人ならおすすめです。(アバターのポリゴン削減のためだけに購入するのは正直おすすめできない)

 

Mesh Simplifyの使い方に関しては、この方のページに全てまとまっていたのでこれを読めば大丈夫です。

 

<2021.11.21 追記>

Mesh Simplifyよりも、さらによいポリゴン削減ツールがありました!

このにゃんにゃんメッシュエディターのポリゴン削減機能は、同じ倍率で削ってもMesh Simplifyよりウエイトの破綻が少なく、

さらにシェイプキーのある顔メッシュにも適用できます!
しかも無料。いまなら迷わずこちらを使ってください。

 

この記事を書いた段階ではまだ↑のツールを知らなかったので、写真はMesh Simplifyを使って説明していきます。

 

VRCアバター向け Mesh SimplifyのTips

・ただポリゴン削減したままでは、アップロード時に元に戻ってしまう。

(Mesh Simplifyはスクリプトで動いているが、VRCは基本的に外部のスクリプトをはじく仕様なので)

→ Mesh Simplifyの作業を行ったあとに、Mesh Bakerなどでメッシュを固定する必要あり。

 

大きく減らせるのは服・髪、あまり大きく減らしてはいけないのが素体(腕と脚)、そもそも減らしてはいけないのは顔

服や髪は70%削っても意外と何とかなりましたが、素体は30%以上減らすと腕や脚を曲げた時にモモンガ(ムササビ)のようにメッシュが突き抜けてしまいました。

Tポーズだとうまくいったように見えて、実際は動くとモンスターみたいになっていることが多々あります。
Unityの▶再生ボタンを押してアバターの腕や脚や腰を回転させてみて、破綻のないギリギリラインを探りながら1%ずつ減らしていくといいと思います。(作業途中にアップロード&確認してもいいかも)

→ このツールを通すとBlend Shapeが消えてしまうので、基本的に顔には適応してはいけないようです。

 

f:id:VarYU:20211121115344p:plain

↑なんとか△19951に。このツールで半分以上削るのは無理があるので、やはり前段階の< 5 >が大事。

 

< 7 > メッシュ・マテリアルを1つにして、テクスチャも1枚にまとめる

有名なツール:Mesh Baker を使います。ときどきセールで半額にもなります。

無料版もありますが、プレハブ焼き込みという超重要機能が使えないので有料版が必要です。

しょっちゅうバグるし、うまく機能しないメッシュもありなかなか痒いところに手が届かないアセットではあるのですが、
やはり(Blenderを通さない簡易的な)ワールド制作には必須で、アバターにも時々利用したくなるので熟練VRCプレイヤーなら購入しておきたいツール筆頭ではあります。

 

アバターへの応用はこちらの方の記事がとてもわかりやすいので、大体の状況ではこれ通りに操作すれば大丈夫です。

というかこの記事さえ読んでおけば基本なんとかなるので、今回も使わせていただきます。

    

しかし今回は上の記事よりもさらに一歩踏み込んで「テクスチャのアトラス化」まで行うので、追加で説明を加えます。

基本の流れは上の記事と同じなのでそれに準じて説明し、詳細は省きます。
交互に読み進めていただけると幸いです。

 

重要:MeshBakerでメッシュが焼けない時は?

・ボーンを手動で削除してしまったアバターはBakeできなくなる。

MeshBakerの仕様(バグ?)で、アバターは元データのfbxのボーン構造が残っている必要があり、例えばQuestには不要だからとDynamicBoneの制御ボーンをdeleteしていたり、服を入れ子にして着せる段階で親子関係の順番を間違えておいてしまうと、後述の「Bake」を押しても何も起こらないか、もしくは"結合されていないただのコピー"が生成されてしまいます。

→ボーンを消すのは、MeshBakerの作業が終わってからにしましょう。(Bakeしたあとに消せば問題ありません。)

 

     0. 下準備

元記事と同じ。割愛。

 

  1. MeshBakerの作成

元記事ではMeshBakerですが、今回はTextureBaker & MeshBaker を選びます。

f:id:VarYU:20211121115914p:plain

↑ちなみに今回のメッシュ結合は、ワールド制作でも負荷を下げるときに超絶重宝します。軽いワールドを作りたい人は覚えておいて損はありません。

 

 1-a. TextureBakerでマテリアルを生成する。

元記事にはない作業です。

f:id:VarYU:20211121120048j:plain

↑①TextureBakerを選択し、Inspectorの濃いグレーのところにアバタードラッグ&ドロップ

②Max Bake Sizeを弄る。今回は元々のマテリアルが [顔] [髪] [素体] [服]の4種 = テクスチャも4枚 だったので、ちょうどMaxを2048にセットすれば 4096x4096のテクスチャにぴったり敷き詰められる計算になります。テクスチャが5個以上ある場合は、Max Atrasを8192x8192にするといいかも(動くかは不明) 無難なのは1枚あたり1024にして余白アリで敷き詰める方法ですが、解像度が落ちて模様が潰れます。

③アトラス化したテクスチャとマテリアルの保存場所を選んでこの白いボタンをタッチします。これを忘れるとTextureBakerは動きません。

 

f:id:VarYU:20211121120139j:plain

↑④最後に紫のボタンを押します。処理が走り、テクスチャをアトラス化してくれます。

 

f:id:VarYU:20211121120220j:plain

↑さて、そのまま下にスクロールするとMeshBaker用の設定項目があるのでそこをアバター用に変更します。(詳しくは前述の記事を参考にしてください)

Include Blendshapes: ON / Renderer: Skinned Mesh Renderer / Merge Blend Shapes with~: ON

 

  1. メッシュ保存先の prefabを作成

元記事の3. まできました。ここは同じです。座標(0, 0, 0)の空のプレハブを作ります。

 

  1. 出力先の設定

TextureBakerを使っているので、元記事とは画面がやや異なります。

SceneのTextureBakerを▶で展開すると、子オブジェクトにMeshBakerがくっついています。

f:id:VarYU:20211121120518j:plain

↑①出力先をPrefabに変更する。

②空のプレハブを枠にドラッグ&ドロップ。

③Bakeを押す。ここで処理が走ってくれるのを神様にお願い!(相性が悪いと動いてくれない)

 

  1. Prefabの整理

一気に元記事の9. まできました。ここも大体同じですが若干差異があります。

 

(元記事と比較して見てください)

f:id:VarYU:20211121120609j:plain

↑元記事と同じく、Prefabの > を押して設定画面へ。

①中身が無くなった元々のメッシュオブジェクトたちをすべてDeleteする

②代わりにMeshBaker-mesh-meshをアバター入れ子にする。(ドラッグ&ドロップ)

 

f:id:VarYU:20211121120651j:plain

↑MeshBaker-mesh-meshの名前を、元々顔のメッシュに付いていた名前に変更する。基本的に「Body」のことが多いと思います
この操作をすることで、各種ブレンドシェイプやリップシンク、アニメーションの参照先が壊れることを防げます。ここまできたら
< で元の画面に戻ります。

 

< 8 > アップロード前の細かな調整

 

a.  テクスチャの適切な圧縮

f:id:VarYU:20211121120833j:plain

↑先ほど生成したアトラステクスチャはこのままだと低圧縮の4Kテクスチャなのでとても容量が大きくなってしまいます。(そもそもQuestアップロード制限の10MBを超過してしまうかも)

なので、テクスチャを選択して、ドロイド君のマークをクリック → Overrider for Android: ON → Formatを「RGB(A) Compressed ASTC 10x10 Block」などに変更 → Compressor Quality: Best に変更し、
右下のApplyボタンを押せばOK。容量をもっと軽くしたければ元サイズを4096から2048に落とします。

容量が5MBくらいになったら十分でしょう。(実際はアップロード時にさらに圧縮されて2MBくらいになります)

余談ですが、Textureの設定で Streaming mip MapsはONにしておきましょう。

 

b.  設定済み.prefabからAvatar Descriptorの設定をコピペする

< 1 >で用意していた元々の設定済みプレハブから、設定値を拝借します。

 

やり方は簡単で、元のプレハブのAvatar Descripitorのスクリプトの右上にある「:」(実際には縦向きの3点)をクリック → [Copy Component]をクリック

BakeしたほうのアバターのInspectorのAdd Componentボタンを押す → Avatar Descriptorを検索して追加する。→ そのAvatar Descripitorのスクリプトの右上にある「:」(実際には縦向きの3点)をクリック → [Paste Component As Values]をクリック

 

これで設定が引き継がれました。 

 

c.  リップシンクを再設定する

ただAvatar Descriptorをコピペしただけだと、リップシンクの参照が外れてしまいます。

そこで、自動設定機能を使って再設定します。

f:id:VarYU:20211121121024j:plain

↑一旦ModeをDefaultに戻し、その後 Auto detect! ボタンを押します。

 

f:id:VarYU:20211121121112p:plain

↑ < 7 > - 4. がうまくできていれば、このように新しいリップシンクが参照されます。

 

d.  Android PlatformにSwitchし、アップロード

f:id:VarYU:20211121121158j:plain

↑ ついにここまできた…!  VRCSDKのAndroid Switchボタンは信用ならないので、Unityの標準機能でプラットフォームを変更します。
File > Build Settings > Androidを選択 (ない場合はダウンロード) > Switch PlatformでQuestの世界へ。

 

f:id:VarYU:20211121121241j:plain

↑ Mesh Simplifyのスクリプトがエラーを引き起こすので、右上の点からRemove Componentしてあげましょう。これでアップロードできるはずです。

 

e.  Quest実機でチェック もしくは PCアバターとしてアップロードしてチェック

 

ちゃんと表情が動くか、リップシンクが機能するか、素体のポリゴンの削り過ぎでムササビみたいになっていないかをチェックしましょう!

Quest実機でチェックするのが理想的ですが、持っていない人は仕方がないので、PCに再度Switch PlatformしてPC版アバターとしてアップロードしてテストプレイしましょう。

 

おそらくここまでの作業で(ミスをしていなければ)Quest-PoorでShow Avatarが不要な超軽量アバターを身にまとっているはずです!

 

おつかれさまでした!

f:id:VarYU:20211121095624j:plain

もしうまくいかない、~の作業で失敗する、などありましたら、
私までご連絡いただけると一緒に原因を究明するお手伝いをさせていただくかもです。

それではまたどこかでお会いましょう!VarYUでした。