BlenderでVRChat向けアバターの体型を改変する

# 概要

Blenderのアーマチュア変形(ボーンでメッシュを変形させる機能)を利用して、VRChat向けアバターの体型を変える方法をご紹介します。
ある程度Blenderの基本的な操作に慣れていて、販売アバターをBlenderで改変したことがある人を対象にしています。
結構手順が多く大変ですが、色々と応用できるテクニックでもあるので参考にして頂けると幸いです。

本記事では、鯨井さん( [@kuzirai__](https://twitter.com/kuzirai__) )の [yellちゃん](https://kuziraindustry.booth.pm/items/1048063) を例に低頭身化の改変を行っていきます。

ビフォーアフター例
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/407fa79f-fedf-5b92-6ace-b7d301b27d7c.png)

# 制限

~~おっぱいスライダー~~胸サイズ変更など、顔部分以外のシェイプキーを含むモデルの場合、体型変更を確定するタイミングでそれらのシェイプキーを削除する必要があります。そのため、Unityにそれらのシェイプキーを持ち込むことはできません。

# 手順

以下の流れで作業します。

1. モデルをBlenderにインポートする
2. 頭部を分離する
3. 体部分のシェイプキーを削除する
4. ポーズモードで体型を変更する
5. アーマチュアモディファイアを適用する
6. 頭部の位置を調整する
7. 首を縫合する

## 1. モデルをBlenderにインポートする

販売アバターはfbxで配布されていることが多いので、fbx形式でインポートします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/28a55943-9990-e403-b729-ae01f5b9e4c8.png)

たまにアニメーションがインポートされてうまくポーズの編集ができないことがあるので、「アニメをインポート」のチェックは外しておきます。(Blenderのアニメーションよくワカラン)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/479583ae-ba4a-8795-29b5-f6de27f4ab32.png)

インポートできました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/ae7baff5-9981-5303-5caa-47590dc5ebba.png)

## 2. 頭部を分離する

yellちゃんは図のように体部分と頭部が1つのメッシュになっているので、分離します。最初から分かれている場合はそのままで大丈夫です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/21d5eca2-cd20-72f5-2a32-c78b4e6596af.png)

以下のような感じで頭部だけ選択してPでオブジェクトを分離しましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/e5223f0e-e65d-751c-02ad-d6a5ae65702d.png)

## 3. 体部分のシェイプキーを削除する

頭と体が一体になっている状態から体だけを分離したので、体側のオブジェクトに頭のシェイプキーが残ったままになっています。このままではモディファイアを適用できないので、シェイプキーを削除していきます。最初から体部分が分かれていて、シェイプキーが無い場合はそのままで大丈夫です。

### 体を変形させるシェイプキーが特にない場合

オブジェクトモードで体部分のオブジェクトを選択し、「全シェイプキーを削除」を実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/e6eb91ed-57fa-ec03-19be-845d22e8c1a3.png)

### 体を変形させるシェイプキーを使いたい場合

胸の大きさ調整などのシェイプキーを使いたい場合、以下の手順でシェイプキーが適用された状態でシェイプキーを全削除します。

1. 目的の状態になるようにシェイプキーの数値を変更する
2. 「新シェイプをミックスから作成」を実行する  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/d43fdc9a-4fe2-5e09-e3e1-261f53d4bf15.png)
3. 一番下に合成されたシェイプキーが作成されるので、それが**一番最後に**削除されるように[－]ボタンを連打して全シェイプキーを削除する

## 4. ポーズモードで体型を変更する

Armatureを選択し、ポーズモードでボーンを拡大縮小していきます。

### 準備
ヘッダーで拡大縮小・ローカルに指定しておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/4f614202-4a72-3335-f3ac-f9a8dd0a4623.png)

体型変更の目安となる物があった方が作業しやすいので、私はこの段階で下絵を設定しました。(右近ちゃんくらいの投身にしようと思い右近ちゃんを設定)
下絵は頭の大きさが同じくらいになるサイズで、足が地面に付くようにしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/99c85ad5-a4e1-f099-2422-d6b8420788cb.png)

ボーンの拡大縮小が継承されないように、Spine、Chest、Neckなどを1個ずつ選択してそれぞれ「スケールを継承」のチェックを外していきます。Head以降と手の各指ボーンはチェックを入れたままにしておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/682a13fb-33b5-33cb-33a5-165f51469030.png)

### ボーン編集
下絵を参考にボーンを縮小していきます。最初にHipを選択してg→z(縦方向移動)で股部分の位置を揃えるとやりやすいです。

ポーズモードなのでミラー編集はありません。(ないよね？)
反転コピペボタンや数値のコピペなどで左右とも変更していきましょう。

下半身を調整するとこんな感じ。地面に足が付くようにしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/166c008e-b54f-f4a9-cae6-8f95e251a44d.png)

上半身も同様に調整していきます。腕の高さが合うようにHip、Spine、Chestを少しづつ縮小します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/ac15fb00-1202-b99d-dac1-bb078f94b4ac.png)

なんだかずんぐりむっくりしたので左右Leg、Hip、Spine、Chestの水平方向も縮小してみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/1483dd43-4e35-f169-746d-6f8732467c10.png)
こんなものでしょうか。

次に腕の長さを調整します。腕や足は関節の位置が下絵と合うようにすると良いです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/4e85451f-321d-dfc9-d2ef-93c2ff615874.png)

手の大きさも調整しておきましょう。Handボーン以降の部分はモデルによって基準軸が異なるので、xとyのみ縮小、yとzのみ縮小など、違和感がなくなるように縮小していきます。指ボーンは「スケールを継承」にチェックを入れたままにしておくと、Handボーンの縮小のみで調整できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/2a211d2c-6b90-9404-f4d7-7631f63ad5e1.png)

## 5. アーマチュアモディファイアを適用する

オブジェクトモードに戻り、体や服などの全てのオブジェクトについてアーマチュアモディファイアを適用していきます。頭部だけはシェイプキーがあるため適用できないので、後で手動で位置を調整します。モディファイアを適用すると元に戻せないため、適用する前に.blendファイルのバックアップを取っておくと良いでしょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/0804253b-cf0e-1445-430c-9fc458f568c9.png)

※頭部以外に変形する小物などでシェイプキーがある場合、一旦そのまま進んで[[6. 頭部の位置を調整する](#6-頭部の位置を調整する)]で一緒に位置を調整すると良いでしょう。

次にアーマチュアのデフォルトポーズを更新します。アーマチュアを選択してポーズモードに入り、「デフォルトのポーズに適用」を実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/e85d9718-3d50-6051-2745-fa5e648b1d9e.png)

実行すると頭が飛び出ると思いますがお使いのPCは正常です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/ebe5c555-1a9e-0958-3cba-9dcc0a2e7232.png)

オブジェクトモードに戻り、さきほどアーマチュアモディファイアを適用したオブジェクトそれぞれにアーマチュアモディファイアを追加し直していきます。「オブジェクト」にアーマチュアオブジェクトを指定するのを忘れないようにしましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/2df1ec6f-7eee-9569-0d6f-95fcf5fdb8ba.png)

## 6. 頭部の位置を調整する

編集モードで頭部の位置を調整します。

ぴったり調整できるように、座標の数値を引き算して移動距離を求めます。
まず頭側オブジェクトを選択して編集モードに入り、首断面中央の頂点を選択してY座標とZ座標の数値をメモ帳にコピペします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/8dca5c5e-367b-e590-f174-865335e232e2.png)

次に体側オブジェクトを選択して編集モードに入り、対応する首断面中央の頂点の座標を同様にメモします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/3266d712-36f7-50cf-28b9-2cbd4b001b47.png)

y座標とz座標をそれぞれ電卓で引き算し、移動距離を計算しておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/96d2f5d1-8794-72c9-578b-b706a0905214.png)

頭側オブジェクトに戻り、Aで全選択してからg→y→y移動距離をコピペ→Enter、g→z→z移動距離をコピペ→Enterを実行して頭部の位置を合わせます。**★この際、Basisシェイプキーを編集するように注意してください。(1敗)★**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/7731fe58-1d00-0f69-fa9b-b101de956901.png)

## 7. 首を縫合する

yellちゃんの場合は断面部分までChestのウェイトが塗られており、首に微妙に隙間が空いてしまいます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/e69a1c4b-8e9b-6202-5055-a26e4d08a76e.png)

これを頂点の結合で修正していきます。特に隙間が開かなかった場合はそのままでも問題ないですが、結合しておくと断面が目立たなくなり首がなめらかに表示されるので良いと思います。

まず、オブジェクトモードで頭部と体部分のオブジェクトを選択し、「結合」を実行します。Ctrl+Jでも実行できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/f1c98bf0-4068-52dc-6623-2523a1a4c693.png)


次に編集モードに入り、完全に一致している頂点を重複頂点の削除で結合します。隠面処理を有効化してCやBで頂点選択をするとやりやすいです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/efa0c212-3ff2-c29d-2654-f473e3929300.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/4e095d3c-0319-c253-1988-33f727fa197f.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/fc94f71c-9233-932a-aea6-2478f51a7ebc.png)

最後に、ずれている頂点をそれぞれ選択しながらAlt+Mで結合していきます。(これ、辺ループのブリッジみたいに一括でできるアドオンだれか教えてください…)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/46bac502-205a-fb6b-21ab-efa52e2f1474.png)

首がきれいにくっつきました。(縫合手術感)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137387/c7b99c95-c2df-45c5-35e1-450c955e2ec5.png)

# まとめ

以上でアーマチュア変形を利用した体型の変更は完了です。fbxとしてエクスポートして、Unityに持っていきましょう。