こうめちゃんをフォールバックアバター化【VRChat】

# 前書き
こうめちゃんは可愛い
それはもう圧倒的に可愛い
<img width="240" alt="こうめちゃん可愛いいいいい.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/2b90d31f-4a6e-0d36-7a0a-4ab888d66102.png">
種の進化として全人類がこうめちゃんになる世界線であってくれ

そんな可愛いこうめちゃんではあるがVRChatにおいてその姿を拝見するには、アバターを纏う側の準備と、それを観る側の適切な設定が必要である。
纏う側としてこうめちゃんの可愛さを多くの人に見てもらいたい。

この記事は、その一心でフォールバックアバター化した備忘録です。
(体力がないので詳細な手順は省きます。フォールバックアバター化は個人の好みや癖が出るところかと思いますので編集の参考までに)

# 目的
パフォーマンスランクQuest - Goodを達成し、こうめちゃんをフォールバックアバター化

# 先に結果から
細部は省略されているが、ぱっと見違いはほぼわからないはず。

https://twitter.com/tsukuri32/status/1558356316477071360?s=20&t=FpighFkMBlOy53ZrUAEadQ

# 読者想定(備忘録なので私の水準並べてるだけです)
+ こうめちゃんへの愛を持つ
+ Blenderそこそこ使える、Unityちょっと使える、Gimpまぁ使える
+ 簡単な自作アバターをアップロードしたことがある。禅zenさんの動画が参考になります！！！

https://www.youtube.com/watch?v=Xg4AXYuzEqA&list=PLh2HlgtpWBpVI3GyRF-vBi-mqtG4ARJgc
+ バイブルにてこうめちゃんをPC、Questアップロードしている。もゑみん。さんありがとうございます！！！

https://www.youtube.com/watch?v=yStybUJZm1I&t=67s

# フォールバックアバター化するためには
2022年8月現在環境において、全てのプラットフォームで利用可能なフォールバックアバターにするためには、QuestでのパフォーマンスランクGood以上にする必要がある。

https://docs.vrchat.com/docs/avatar-performance-ranking-system#quest-limits

こうめちゃんの場合以下の修正が必要。
①ポリゴン数 14815→10000以下(33%以上削減)
②マテリアル 5→1
③アニメーター 2→1(アバターオブジェクトのルートに一つ必須な模様。そのためこうめちゃんのまばたきが使えなくなる。コントローラーで上手いこと実装できないだろうか。)
④PhysBoneComponents 8→4(もともと、尻尾、耳x2、スカートx1、髪x4なので今回は泣く泣く髪x4を諦める。)
⑤PhysBoneTransformCount 20→16
⑥PhysBoneCollisionCheckCount 27→16

⑤〜⑥はおま環が混じってる。

# 要点
+ [ポリゴン削減](#ポリゴン削減)
+ [テクスチャ統合](#テクスチャ統合)
+ [Armatureのスケールについて](#armatureのスケールについて)
+ [階層の調整](#階層の調整)
+ [PhysBoneの設定](#physboneの設定)
+ [アニメーションの修正](#アニメーションの修正)

# ポリゴン削減
こうめちゃんのFBXフォルダにあるkoume_kaihen_0.0.0.fbxをベースに削減調整を行った結果以下のようになった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/c0052181-6b99-3a52-7c52-e1cb7f7912c9.png)
以下はやったことの詳細を列挙。
## 毛束軽量化
+ 白い毛束の付け根を削除
+ 辺の溶解を使って毛束を形を崩さない程度にローポリ化
+ きつね耳部分のメッシュには手を入れてない

左がアフター、右がビフォー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/6a31ecf7-f4d7-b3b2-78c7-a3db02e24e87.png)

## 体の見えないところ削除
+ そで、ドロワーズ、靴に被るメッシュを削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/c98d283f-aa4b-ac72-06b5-4fed9a04e273.png)

## ローポリ化＆テクスチャ編集
+ 輪郭だけ残して中央にマージ
+ UVが崩れるので、UVエディタ側で輪郭の凹凸をピン留めして、再度UV展開
+ 裏面のメッシュも泣く泣く削除
+ 梅のおしべ(?)はGimpで編集してテクスチャ側にプリント
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/f21e7aa6-0a32-8c76-c484-85d80dc83b9d.png)

## 平面化
+ リボン系は厚みを持っているので、おもて面以外削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/9864ee52-ae8e-fa78-42f9-b6529621d51e.png)

## Alphaメッシュ削除
+ 表情用のメッシュの中でAlphaマテリアルが設定されているメッシュを削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/b13f546b-80b9-8c7e-d6e6-9504bedc16fb.png)

## テクスチャにベイク
+ ボタンをtex_costumeテクスチャにベイクした(別記事でまとめたので詳細手順は以下参照)

https://qiita.com/tsukuri32/items/8c59586dd19ccd39ce51

+ 当初はリボン系もtex_hairにベイクしていたが、三角面に余裕ができたのと、衣装に手を入れる際tex_hairをいじる必要が出てくるためベイクはやめた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/3d9bd9ea-e0be-196b-8225-287b11d83cc1.png)

## 首の集結点削除
+ Costumeのメッシュの首のとこ。ちょっと削減。
+ (Bodyメッシュにも集結点がある。削除し忘れてた)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/57c9b43f-1481-037c-1909-21f3ff499634.png)

# テクスチャ統合
+ Alpha.pngを抜いた4枚のテクスチャを1枚に統合
+ こうめちゃんのUVを移動(移動・拡縮ツールの数値入力機能を使うとビシッと決まる)
![スクリーンショット 2022-08-13 18.40.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/4b1233ff-d809-87a4-547d-4fb6272a5ff6.png)

# Armatureのスケールについて
+ .fbxへ出力する際の話。
+ .unitypackageにまとまとってるこうめちゃんアバターはArmatureのスケールが90程度。一方、Blenderから脳死で.fbx出力すると0.9程度で1/100になる。
+ これが尻尾や耳のAnimationやPhysBoneのRadius設定に不都合。

https://twitter.com/tsukuri32/status/1558690124183240704?s=20

https://note.com/mikekirisima/n/na4136e82eaf2

https://note.com/mikekirisima/n/n011c4a288465

+ Blender側でArmatureのスケールを100倍にするのも一つの解決法だと思われるが、今回はArmatureのスケールを1で統一する方向。
+ 表情アニメーションから耳尻尾のPositionを削除＆PhysBoneのRadiusの設定値を100倍で対応。
+ Blenderにて、.fbx化するオブジェクトの全スケールを適用して1で再出力。

# 階層の調整
+ 禅zenさんの動画とか参考にしながら、Blenderから.fbxを吐き出し、Humanoidの設定やマテリアル設定など色々やってUnityに持ってきた後、"blink reset"の下に"Body"オブジェクトを持ってくる
+ こうしておかないとこうめちゃん標準のアニメーション("koume_〇〇_blink reset"など)が動作しなくなる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/047c76bc-a80f-69c1-a11f-c179b308f11e.png)

# PhysBoneの設定
+ PhysBoneの設定数は4つが上限なので、両耳と尻尾とスカートに設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/ffcfcae3-9ed8-421c-3343-17eba4e10a0b.png)

+ メモがわりにPhysBoneの設定値を列挙。詳しくはこうめちゃんの.unitypackage由来のアバターのDynamicBoneの設定値を参照。
    + Integration Type：Advanced
    + Pull：0.03 とか 0.05 とかそれくらい 
    + Momentum：0.95
    + Stiffness：0
    + Immobile Type：World
    + Limit Type：Angle
    + Max Angle：129
    + Radius：0.03〜0.1のオーダー※
    + Is Animated：チェックを入れる
+ ※Radiusの設定値は以下のページが参考になる。このページはDynamicBoneでの設定だが、設定項目はPhysBoneに読み替えて問題なさげ。(リンク先のRadius設定値は1/100での設定値なので、100倍して入力すること)

https://ameblo.jp/lomey/entry-12730738588.html

# アニメーションの修正
+ Fxコントローラーに設定しているアニメーション全て複製してから、複製したアニメーションのearとtailのPositionを全て削除してFxコントローラーに設定
+ 画像のear_○:PositionをクリックしてDelete。tailも同様。Rotationは残す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/be080934-b49c-185d-27d0-0fb81555a424.png)

# これにて完了。後書き
Excellentは三角面数からしてモデリングセンスが要求されてかなり難しそうです。そちらは機会があればいずれ...

Goodなこうめちゃんができました。
手をかけたこうめちゃんへの愛着はひとしお。こうめちゃんアバターへの理解が深まり、BlenderやUnityとの友情もまた深まりました。やはりこうめちゃんは素晴らしい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738995/b0c55190-2aa6-638e-2435-0910591d6790.png)