見出し画像

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

手順1:VRCQuestToolsでアバターをQuest対応させる

VRCQuestToolsは、アバターを簡単にQuest対応アバターに変換することができるツールです。

画像2

インポート時にこのようなウィンドウが出てきます。画質が良くなるのはうれしいので、「ASTCでテクスチャを圧縮」をクリックしましょう。

画像3

上のメニューバーにVRCQuestToolsが追加されているので、その中のConvert Avatar for Questを開きます。

画像4

アバターの欄に変換したいアバターを選択して、変換ボタンをクリック。

画像5

これでQuest対応のラスクちゃんができました。

手順2:不要な部分を削除する

アバターは、様々なオブジェクトで構成されています。ポリゴン数削減のため、必要最低限のオブジェクト以外は全て削除してしまいましょう。私の場合は、ニーソ、スニーカー、パーカーのばってん、尻尾を削除しました。

念のため説明しますが、先にアバターをUnpack Prefabしてください。

画像6
画像7

パーツを削除すると身体の一部がこのようにくぼんだ状態になっていることもありますが、その時は身体の中にあるシェイプキーを覗きましょう。

画像9
画像8

Body_kneeのシェイプキーを0にしてやることで足が表示されました。このように、アバター着せ替え用に一部のメッシュがシェイプキーによって隠されていることがあります。

この後メッシュを削らなければならないので、このようなシェイプキーは全てのメッシュを表示させるように設定しましょう。

画像10

手順3:MeshDeleterWithTextureで必要のないメッシュを削除する

ラスクちゃんはパーカーを着ており、今回アップロードするラスクちゃんはそのパーカーを脱ぐことはありません。そのため、袖の部分に隠れて見えない腕の部分はなくても問題ありません。

このような不要なメッシュを削除することで、ポリゴン数を削減することができます。

MeshDeleterWithTextureは、テクスチャを塗りつぶすだけでメッシュ内のポリゴンを削除することができるツールです。

画像11
画像12

Rendererの欄にポリゴン数を削減したいオブジェクトを選択すると、そのメッシュに付けられたテクスチャの画像が出てきます。

画像13

テクスチャ内で削除したい部分を塗りつぶします。DrawtypeをPENにすると塗りつぶすことができ、はみ出したらERASERで消すことができます。Pen/Eraser sizeでペンの大きさも変えられるので微調整可能です。

範囲選択ができたらウィンドウ下部のDelete Meshをクリック。これで、腕のメッシュを削除することができました。

画像14
画像18

※この時点で、いったんアバターを複製しておきましょう(Ctrl+D)。

手順4:Mesh Simplifyでポリゴン数を削る

ここで、Mesh Simplifyの出番です。

画像15

Mesh Simplifyをインポートしたら、アバター内でポリゴン数を削減したいオブジェクトのInspectorにMesh SimplifyをAdd Componentします。

画像16

Vertex %のスライドバーを弄り、Compute meshをクリックすると、そのオブジェクト内のメッシュのポリゴン数がVertex %の割合まで削減されます。

画像17

Triangle countのところの数字の、左側が現在のポリゴン数、右側が元々のポリゴン数です。50%にしたので、ポリゴン数が半分になりましたね。

注意!:Compute Meshを実行すると、そのオブジェクト内のシェイプキーは使えなくなります。表情シェイプキーが含まれているオブジェクトでCompute Meshを実行すると表情が変更できなくなるので気をつけてください(その場合はRestore Original Meshをクリックして元のメッシュに戻してください)。

削りすぎて崩壊した場合はVertex %の値を増やしてもう一度Compute meshすることでポリゴン数を増やせます。

VRCSDKControlPanelでポリゴン数が確認できるので、1万以下になるまで根気よくやっていきましょう。

画像19

手順5:ModelBoneDeleterで不要なボーンを削る

ModelBoneDeleterは、アバター内のボーンを簡単に削除できるツールです。

画像20
画像21

Avatarの欄にアバターを選択すると、ボーン一覧が表示されるので、不要なものにチェックマークを入れていきます。

一見絶望的な作業に見えるかもしれませんが、人型アバターはダイナミックボーンにしか使われないボーンが必ず入っています。

画像23

髪、アホ毛、尻尾、パーカー紐などなど、ダイナミックボーンで揺れているだけの部分のボーンは削除しても大丈夫です。特に、全く同じものに付いているやたら階層が多いボーンは何も考えず消してしまって良いでしょう。

選択できたらDelete Bonesをクリックします。Copy Avatarにチェックマークが入っている場合、アバターが複製されます。

画像23

ボーンを67個まで減らすことができました。

画像24

ここで更にアバターを複製しておきましょう(Ctrl+D)。ここまで来たらあと一歩です。

手順6:Mesh Bakerでメッシュを結合する

いよいよMesh Bakerを使う時が来ました。その前に、1つ下準備をします。

画像26

アバターにカーソルを合わせ右クリックしてCreate Emptyを選択。

画像27

できたGameObjectの中に、メッシュを結合したいオブジェクトを全て入れます。これで下準備完了です。

画像25

Mesh Bakerをインポートしたら、GameObject内のCreate Other->Mesh Baker->TextureBaker and MeshBakerをクリックすると、ゲームオブジェクトとしてTextureBakerとMeshBakerが生成されます。

画像28

TextureBakerのInspector内のスクリプトにある、Open Tools For Adding Objectsをクリックすると、ウィンドウが出てきます。

画像35

ウィンドウ上部のSearch For Meshes To Addをクリックすると画面が切り替わります。Exclude meshes with out-of-bounds UVsのチェックを外し、Hierarchy内の先ほどメッシュを纏めたGameObjectを選択して、ウィンドウ下部のAdd Selected Meshes To Targetをクリックします。

画像30

そのままウィンドウを閉じ、TextureBakerのInspector内のObjects To Be Combined内に、GameObject内のオブジェクトが入っていれば成功です。上手くできない場合、手動で設定することもできます。

手動で設定する場合、Size内に結合したいオブジェクト数を入力してエンターキーを叩き、表示されたElement内にオブジェクトを設定します。

画像31

その後、Inspector内少し下のOutputの欄に移動し、上部のCreate Empty Assets For Combined Materialをクリックし、アセットを作成します。名前は適当に付けましょう。

画像32

アセットが作成できたら、Output下部の青いボタン、Bake Materials Into Combined Materialをクリックします。

画像33

これで、マテリアルを結合することができました。ちなみに、Material Bake Options内のMax Atlas Sizeを変更することで、より小さい画像に結合することもできます。

画像34

私は2048に変更しましたが、ちゃんと画像1枚に収まりました。

さて、次はMeshBakerを使ってメッシュを結合するのですが、その前に1つ超重要なポイントがあります。

画像35

TextureBakerのInspector内の最下部に、このような設定画面があります。

ここで、画像のように、Include Blend Shapesにチェックを入れ、RendererをSkinned Mesh Rendererに変更します。シェイプキーの引継ぎをし、Skinned Mesh Rendererに纏めるという設定です。

画像51

そうしたら、Merge Blend Shapes With Same Namesにもチェックを入れます。このチェックを入れていないと、結合前と結合後でシェイプキー名が異なり、修正が面倒になります。

設定を変更したら、TextureBakerの子となっているMeshBakerのInspector内に移ります。

画像36

Outputの欄をBake Into Prefabに変更し、Create Empty PrefabをクリックしてPrefabを生成します。

画像37

これもまた名前は適当で大丈夫です。

画像53

Prefabが生成されたら、Inpector最下部のBakeをクリック。これでPrefabがラスクちゃんの姿に代わり、メッシュの結合が完了しました!

画像39

手順7:アバターをアップロードする

画像40

生成されたPrefabをHierarchy内にドラッグアンドドロップします。Prefabの中身はこのようになっており、無駄なものも入っています。

画像41

Prefabの中に入っているアバター(Avatar Descriptorが入ったオブジェクト)を取り出し、先ほどの下準備で作成したGameObjectを削除します。その中にMeshBakerで生成されたオブジェクトを入れます。
上画像のように組み替わればOKです。

画像52

MeshBakerで生成されたオブジェクトの名前を、表情シェイプキーの入っているオブジェクトの名前に変更します。今までの工程を踏むことで、表情アニメーションが今まで通り使えるようになります。

これで、アバターをアップロードできる状態になりました!

画像44

Unityウィンドウ上部のFileから、Build Settingsをクリック。

画像45

Androidを選択してSwitch Platformをクリックしましょう。

画像58
画像59

もしSwitch Platformできない場合、Androidビルド用のモジュールが入ってないのかもしれません。「モジュールを加える」を選択してインストールしましょう。

Switch Platformにはそれなりの時間を要するので、一旦作業を区切って休憩に入ってもOKです。ここまで読んでくれてる方が果たしてどれだけいるのだろうか。

Switch PlatformできたらVRCSDKControlPanelを開きます。

(画像ではPC状態で開いちゃってます、すみません。)

画像42

「This avatar has mipmapped ~」はAuto Fixできます。

「This avatar uses Visemes ~」ですが、

画像43

Avatar Descriptor内のLipSyncの設定でDefaultを選択。Auto Detect! をクリックします。

画像53

ワンボタンでリップシンクの設定ができました。

エラー修正が終わったらいよいよアップロードです。

画像48

しっかりとパフォーマンスランクがGoodになっています。

画像49

Use For Fallbackにチェックを入れてアップロードします。

その後、PCプラットフォームに切り替えてもう一度アップロードします。こうすることでPC版VRCで動作確認ができます。

アップロードできたら、Fallbackとして使えるか見に行きましょう!

画像50

ほら!!見てくださいこれ!!ラスクちゃんがFallback設定画面に存在してます!!!!

…こほん。というわけで、好きなアバターをFallbackアバターとしてアップロードする方法でした。

画像54

表情の引継ぎもちゃんとできてますね!

…え?なんか表情が変だって?

実は、表情に使われているシェイプキーの一部テクスチャには透過テクスチャが使われており、Quest対応アバターでは透過テクスチャが使えないため、このような状態になっているのです。

おまけにそのシェイプキーを使わないように表情を修正する方法を説明します。

手順EX:表情の修正

VRCAvatarEditorを使います。

プレビュー画面で実際のアバターの表情を確認しつつ表情変更アニメーションを作成できる優れものです。

画像55

Editorを開いたら、Avatarの欄に表情を変更したいアバターを入れます。

画像56

右側にアニメーションがずらーっと並んでますね。そこのEditをクリックすると、

画像57

表情のプレビューが表示されます。下側に大量に並んだスライドバーがシェイプキーです。

このシェイプキーを弄って、表情を作りましょう。

画像58

表情が作れたら、AnimClip FileNameでファイル名を指定して、その下のStateの欄でこのアニメーションを付けるステートを選択します。

Set to Left & Right Hand Layerにチェックを入れると両手の同じステートにそのアニメーションが入るようになります。

設定できたら、最下部のCreate AnimFileをクリック!これでもう一度先程と同じようにアップロードしてみましょう。

画像59

表情を修正することができました!

これにてFallbackアバターの作成は終了です、お疲れ様でした。できることは少ないですが、自分好みに改変することもできます(アニメーション追加など)。あ、でも詳しいことは省きますがパラメータを追加するのはやめたほうがいいです。

ここまで読んでいただき、本当にありがとうございました。

良いVRCライフを!



この記事が気に入ったらサポートをしてみませんか?