Unityアセットの力でFallbackアバターを作ろう[VRChat]
21/11/13 追記:表情を引き継ぎ・修正する方法の追加
22/03/04 追記:ラスクちゃんが公式でFallback対応しました。
22/07/14 追記:モジュールを加えるところの説明画像を新しくしました
こんにちは。Ran_kotonohaと申します。
最近、VRChatのFallbackシステムがアップデートされ、自分でアップロードしたアバターをFallbackアバターとして使うことができるようになりました。
ただ、Fallbackアバターに求められる条件はQuest対応アバター用のパフォーマンスランクがGoodであること。言い換えると、
・Quest対応アバター
・ポリゴン数1万以下
・ボーン75個以下
・Skinned Mesh Renderer1個
・Material1個
が(主な)条件になっています。
特に、多くの市販アバターはポリゴン数が1万を大幅に越えており、マテリアルはほぼ全てのアバターにおいて複数設定されています。
ポリゴン数やマテリアル数、そしてボーン数の削減のためにはBlenderを使ってモデルデータを弄らなければならず、Fallbackアバターの作成はBlenderを触ったこともない私のような初心者にはとても敷居の高いことです。
それでも、好きなアバターをFallbackに設定したい!!と思った私は、便利な有料アセットに頼ることにしました。
この記事では、2つのアセットと様々な有志ツールを利用して、Unity内のみで比較的簡単に市販アバターをFallbackアバターとしてアップロードする方法を説明します。
今回使うアセットは次の2つです。
・Mesh Simplify
Unity内でワンボタンでポリゴン数を削減してくれるアセット。ポリゴンを削る割合をオブジェクト毎に指定できるのが強み。
・Mesh Baker
メッシュやマテリアルを1つに結合してくれるアセット。シェイプキーを引き継ぎできるので、メッシュを結合しても表情切り替えは今まで通りできる。
Mesh Bakerは値が張りますが、需要が非常に高いことからセール時に大きく割引されやすいので、セール時を狙って買うのが良いでしょう。
今回は、こまど様の「ラスク」ちゃんを使っていきます。
なお、この記事は21/11/13に投稿したものなのですが、今現在、ラスクちゃんは公式でFallback対応しています。
ラスクちゃんをFallbackアバターにしたい場合、そちらを使うほうが手っ取り早いかと思います。
この記事では、それなりにアバター改変を理解している人向けに説明するので、分からない言葉が出てきた場合は調べていただけると幸いです。
また、様々なツールをアバターをFallback化するためだけに使っていくので、それぞれのツールの詳しい仕様や細かい仕様について説明できません。ご了承ください。
この記事のUnityバージョンは2019.4.31f1で、
SDKのバージョンはSDK3-AVATAR-2021.11.08.14.28です。
手順0:下準備
まずはいつも通りダイナミックボーンとSDKをインポートして、アバターをシーン内にドラッグアンドドロップしましょう。色改変や衣装改変を行う場合は、この時にやっておくのが良いでしょう。
手順1:VRCQuestToolsでアバターをQuest対応させる
VRCQuestToolsは、アバターを簡単にQuest対応アバターに変換することができるツールです。
インポート時にこのようなウィンドウが出てきます。画質が良くなるのはうれしいので、「ASTCでテクスチャを圧縮」をクリックしましょう。
上のメニューバーにVRCQuestToolsが追加されているので、その中のConvert Avatar for Questを開きます。
アバターの欄に変換したいアバターを選択して、変換ボタンをクリック。
これでQuest対応のラスクちゃんができました。
手順2:不要な部分を削除する
アバターは、様々なオブジェクトで構成されています。ポリゴン数削減のため、必要最低限のオブジェクト以外は全て削除してしまいましょう。私の場合は、ニーソ、スニーカー、パーカーのばってん、尻尾を削除しました。
念のため説明しますが、先にアバターをUnpack Prefabしてください。
パーツを削除すると身体の一部がこのようにくぼんだ状態になっていることもありますが、その時は身体の中にあるシェイプキーを覗きましょう。
Body_kneeのシェイプキーを0にしてやることで足が表示されました。このように、アバター着せ替え用に一部のメッシュがシェイプキーによって隠されていることがあります。
この後メッシュを削らなければならないので、このようなシェイプキーは全てのメッシュを表示させるように設定しましょう。
手順3:MeshDeleterWithTextureで必要のないメッシュを削除する
ラスクちゃんはパーカーを着ており、今回アップロードするラスクちゃんはそのパーカーを脱ぐことはありません。そのため、袖の部分に隠れて見えない腕の部分はなくても問題ありません。
このような不要なメッシュを削除することで、ポリゴン数を削減することができます。
MeshDeleterWithTextureは、テクスチャを塗りつぶすだけでメッシュ内のポリゴンを削除することができるツールです。
Rendererの欄にポリゴン数を削減したいオブジェクトを選択すると、そのメッシュに付けられたテクスチャの画像が出てきます。
テクスチャ内で削除したい部分を塗りつぶします。DrawtypeをPENにすると塗りつぶすことができ、はみ出したらERASERで消すことができます。Pen/Eraser sizeでペンの大きさも変えられるので微調整可能です。
範囲選択ができたらウィンドウ下部のDelete Meshをクリック。これで、腕のメッシュを削除することができました。
※この時点で、いったんアバターを複製しておきましょう(Ctrl+D)。
手順4:Mesh Simplifyでポリゴン数を削る
ここで、Mesh Simplifyの出番です。
Mesh Simplifyをインポートしたら、アバター内でポリゴン数を削減したいオブジェクトのInspectorにMesh SimplifyをAdd Componentします。
Vertex %のスライドバーを弄り、Compute meshをクリックすると、そのオブジェクト内のメッシュのポリゴン数がVertex %の割合まで削減されます。
Triangle countのところの数字の、左側が現在のポリゴン数、右側が元々のポリゴン数です。50%にしたので、ポリゴン数が半分になりましたね。
注意!:Compute Meshを実行すると、そのオブジェクト内のシェイプキーは使えなくなります。表情シェイプキーが含まれているオブジェクトでCompute Meshを実行すると表情が変更できなくなるので気をつけてください(その場合はRestore Original Meshをクリックして元のメッシュに戻してください)。
削りすぎて崩壊した場合はVertex %の値を増やしてもう一度Compute meshすることでポリゴン数を増やせます。
VRCSDKControlPanelでポリゴン数が確認できるので、1万以下になるまで根気よくやっていきましょう。
手順5:ModelBoneDeleterで不要なボーンを削る
ModelBoneDeleterは、アバター内のボーンを簡単に削除できるツールです。
Avatarの欄にアバターを選択すると、ボーン一覧が表示されるので、不要なものにチェックマークを入れていきます。
一見絶望的な作業に見えるかもしれませんが、人型アバターはダイナミックボーンにしか使われないボーンが必ず入っています。
髪、アホ毛、尻尾、パーカー紐などなど、ダイナミックボーンで揺れているだけの部分のボーンは削除しても大丈夫です。特に、全く同じものに付いているやたら階層が多いボーンは何も考えず消してしまって良いでしょう。
選択できたらDelete Bonesをクリックします。Copy Avatarにチェックマークが入っている場合、アバターが複製されます。
ボーンを67個まで減らすことができました。
ここで更にアバターを複製しておきましょう(Ctrl+D)。ここまで来たらあと一歩です。
手順6:Mesh Bakerでメッシュを結合する
いよいよMesh Bakerを使う時が来ました。その前に、1つ下準備をします。
アバターにカーソルを合わせ右クリックしてCreate Emptyを選択。
できたGameObjectの中に、メッシュを結合したいオブジェクトを全て入れます。これで下準備完了です。
Mesh Bakerをインポートしたら、GameObject内のCreate Other->Mesh Baker->TextureBaker and MeshBakerをクリックすると、ゲームオブジェクトとしてTextureBakerとMeshBakerが生成されます。
TextureBakerのInspector内のスクリプトにある、Open Tools For Adding Objectsをクリックすると、ウィンドウが出てきます。
ウィンドウ上部のSearch For Meshes To Addをクリックすると画面が切り替わります。Exclude meshes with out-of-bounds UVsのチェックを外し、Hierarchy内の先ほどメッシュを纏めたGameObjectを選択して、ウィンドウ下部のAdd Selected Meshes To Targetをクリックします。
そのままウィンドウを閉じ、TextureBakerのInspector内のObjects To Be Combined内に、GameObject内のオブジェクトが入っていれば成功です。上手くできない場合、手動で設定することもできます。
手動で設定する場合、Size内に結合したいオブジェクト数を入力してエンターキーを叩き、表示されたElement内にオブジェクトを設定します。
その後、Inspector内少し下のOutputの欄に移動し、上部のCreate Empty Assets For Combined Materialをクリックし、アセットを作成します。名前は適当に付けましょう。
アセットが作成できたら、Output下部の青いボタン、Bake Materials Into Combined Materialをクリックします。
これで、マテリアルを結合することができました。ちなみに、Material Bake Options内のMax Atlas Sizeを変更することで、より小さい画像に結合することもできます。
私は2048に変更しましたが、ちゃんと画像1枚に収まりました。
さて、次はMeshBakerを使ってメッシュを結合するのですが、その前に1つ超重要なポイントがあります。
TextureBakerのInspector内の最下部に、このような設定画面があります。
ここで、画像のように、Include Blend Shapesにチェックを入れ、RendererをSkinned Mesh Rendererに変更します。シェイプキーの引継ぎをし、Skinned Mesh Rendererに纏めるという設定です。
そうしたら、Merge Blend Shapes With Same Namesにもチェックを入れます。このチェックを入れていないと、結合前と結合後でシェイプキー名が異なり、修正が面倒になります。
設定を変更したら、TextureBakerの子となっているMeshBakerのInspector内に移ります。
Outputの欄をBake Into Prefabに変更し、Create Empty PrefabをクリックしてPrefabを生成します。
これもまた名前は適当で大丈夫です。
Prefabが生成されたら、Inpector最下部のBakeをクリック。これでPrefabがラスクちゃんの姿に代わり、メッシュの結合が完了しました!
手順7:アバターをアップロードする
生成されたPrefabをHierarchy内にドラッグアンドドロップします。Prefabの中身はこのようになっており、無駄なものも入っています。
Prefabの中に入っているアバター(Avatar Descriptorが入ったオブジェクト)を取り出し、先ほどの下準備で作成したGameObjectを削除します。その中にMeshBakerで生成されたオブジェクトを入れます。
上画像のように組み替わればOKです。
MeshBakerで生成されたオブジェクトの名前を、表情シェイプキーの入っているオブジェクトの名前に変更します。今までの工程を踏むことで、表情アニメーションが今まで通り使えるようになります。
これで、アバターをアップロードできる状態になりました!
Unityウィンドウ上部のFileから、Build Settingsをクリック。
Androidを選択してSwitch Platformをクリックしましょう。
もしSwitch Platformできない場合、Androidビルド用のモジュールが入ってないのかもしれません。「モジュールを加える」を選択してインストールしましょう。
Switch Platformにはそれなりの時間を要するので、一旦作業を区切って休憩に入ってもOKです。ここまで読んでくれてる方が果たしてどれだけいるのだろうか。
Switch PlatformできたらVRCSDKControlPanelを開きます。
(画像ではPC状態で開いちゃってます、すみません。)
「This avatar has mipmapped ~」はAuto Fixできます。
「This avatar uses Visemes ~」ですが、
Avatar Descriptor内のLipSyncの設定でDefaultを選択。Auto Detect! をクリックします。
ワンボタンでリップシンクの設定ができました。
エラー修正が終わったらいよいよアップロードです。
しっかりとパフォーマンスランクがGoodになっています。
Use For Fallbackにチェックを入れてアップロードします。
その後、PCプラットフォームに切り替えてもう一度アップロードします。こうすることでPC版VRCで動作確認ができます。
アップロードできたら、Fallbackとして使えるか見に行きましょう!
ほら!!見てくださいこれ!!ラスクちゃんがFallback設定画面に存在してます!!!!
…こほん。というわけで、好きなアバターをFallbackアバターとしてアップロードする方法でした。
表情の引継ぎもちゃんとできてますね!
…え?なんか表情が変だって?
実は、表情に使われているシェイプキーの一部テクスチャには透過テクスチャが使われており、Quest対応アバターでは透過テクスチャが使えないため、このような状態になっているのです。
おまけにそのシェイプキーを使わないように表情を修正する方法を説明します。
手順EX:表情の修正
VRCAvatarEditorを使います。
プレビュー画面で実際のアバターの表情を確認しつつ表情変更アニメーションを作成できる優れものです。
Editorを開いたら、Avatarの欄に表情を変更したいアバターを入れます。
右側にアニメーションがずらーっと並んでますね。そこのEditをクリックすると、
表情のプレビューが表示されます。下側に大量に並んだスライドバーがシェイプキーです。
このシェイプキーを弄って、表情を作りましょう。
表情が作れたら、AnimClip FileNameでファイル名を指定して、その下のStateの欄でこのアニメーションを付けるステートを選択します。
Set to Left & Right Hand Layerにチェックを入れると両手の同じステートにそのアニメーションが入るようになります。
設定できたら、最下部のCreate AnimFileをクリック!これでもう一度先程と同じようにアップロードしてみましょう。
表情を修正することができました!
これにてFallbackアバターの作成は終了です、お疲れ様でした。できることは少ないですが、自分好みに改変することもできます(アニメーション追加など)。あ、でも詳しいことは省きますがパラメータを追加するのはやめたほうがいいです。
ここまで読んでいただき、本当にありがとうございました。
良いVRCライフを!
この記事が気に入ったらサポートをしてみませんか?