シャーロちゃんをblenderでいじる時の注意点

初めてblenderを触った結果、長時間なやんでしまったので備忘録として残しておきます。
VRChatに無事アバターアップロードすることを目的としています。

文中の値段表記については、18/09/19現在での情報です。

* **2019/8 更新**

    古いままだったいくつかの情報について更新しました。
    Blender 2.8 対応はできてないです許して。

    |Soft |Version |
    |---|---|
    |Blender |2.79b |
    |Cats Blender Plugin |0.13.3 |
    |Unity |2017.4.28f1 |
    |VRChat SDK |2019.07.31 |
    |Shaclo |1.2.2 (shoesモデル) |

## シャーロちゃんとは

まずはうちの改変（色とか絆創膏とか）済みシャーロちゃんを見てくれ。
かわいかろ～？

![myShaclo.jpg](https://qiita-image-store.s3.amazonaws.com/0/238841/a237976c-8a5f-df67-ff45-8f1a8b843564.jpeg "kawaii")

（Shaclo; © 2018 ⊿S.I.N
　Two-handed Sword; © 2018 The garden of Ashen
　UTS2.0; © 2017 Unity Technologies Japan/UCL）

このかわいい3Dモデルが [`⊿S.I.N` さんのbooth](https://tomori-hikage.booth.pm/items/987296) でなんと3000円でお迎えできちゃうんだ！

注：装備してる両手剣は [`Ash` さんのbooth](https://garden-of-ashen.booth.pm/items/943371) で購入したものなので付いてきません。オプション料金500円。


## blenderでモデルデータをいじる

本題。

シャーロちゃんの `.unitypackage` をインポートするのは何も問題ないですが、blenderで `.fbx` ファイルからいじる際にはいくつかテクニックが必要のようです。
（初めてのblenderチャレンジだったので、もしかしたら常識なのかもしれませんが…）

以下、自分がつまった点についての説明と対策を書いてます。

### `Cats Blender Plugin` （追加）

簡単にモデルをインポートする機能やVRChat向けに最適化してくれる機能などを提供してくれる神ツール。
もっとはやく導入してればよかった。

インストール方法についてはこちらの [READMEのインストール項目](https://github.com/michaeldegroot/cats-blender-plugin#installation) 通りです。

### `Material Combiner` （追加）

こちらのBlenderアドオンを導入することで `Cats Blender Plugin` からマテリアルの統合ができるようになります。

インストール方法についてはこちらの [VRChatフォーラムのスレッド][mat-combine] にかかれています（`Cats Blender Plugin` の導入と同様の手順）。

インストール後にBlenderを再起動。
`CATS` タブの `Optimization` 項目の `Atlas` から利用できます。

### .fbxファイルのインポート時にボーンを揃える（更新）

`Cats Blender Plugin` を導入していれば `ツール` シェルフ -> `CATS` タブ から

1. `Model` 項目を開く
1. `ImportModel` ボタンを押す
1. 読み込むモデルのファイルを選択  
    ![model-import.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238841/ab894661-85bb-3722-2004-ae1833d15c54.png)

これだけできれいにインポートしてくれます。
**神か。**

### シェイプキーが消えるのを防ぐ（更新）

**シャーロちゃん v1.2.2 ではすでに対策されているようなので、以下の作業は必要ありません。**

* 問題
  blenderでは存在するのに `.fbx` エクスポート後、Unityで読み込むと消えてしまう。
  `v_sil, blink_left/right, lowerlid_left/right` の5つが消えていました。

* 原因
  `Basis` キーと全く同じ（＝メッシュを動かしていない）状態だと最適化の結果、削除されてしまうみたいです。

* 解決策
  そのため次のような操作を行い、メッシュを肉眼では判別できないほどの微小値変化させます。
  1. 表情シェイプキーのある `Body` を選択
  1. `編集モード` に変更し、変化させるメッシュを選択
  1. *プロパティウィンドウ* で `データ` タブから微小値変化させたいシェイプキーを選択
  1. *3Dビューウィンドウ* で `'W'キー -> 任意のシェイプキーを選択部に合成`
  1. 左下の *ツールシェルフ* に合成するプロパティが出てくるので、適当なシェイプを選択し値を **0.001** にする  
    ![shapekey03.png](https://qiita-image-store.s3.amazonaws.com/0/238841/c4940487-97ee-9edb-3653-beb3c5d39f2d.png "a little change")

以上でUnityにインポートしてもシェイプキーが残っているはずです。

### VRChatでシェイプキーが暴れる

* 問題
  何もしてないのにお口やお目々がビクンビクンする。
  まばたきアニメーションの設定ミスかと思いきや、どうも違う様子。

* 原因
  アイトラッキング機能がシェイプキーの上から4つを使用するため、シェイプキーの並びが推奨順でない場合に暴発するみたいです……？（よくわかってない）
  またUnityに取り込んだ際、ボーン設定が間違ってることも影響してそうです。

* 解決策

1. シェイプキーの並び順

    とりあえずblender上でシェイプキーを次の推奨順に並べ直すと直ったので、試してみてください。

    1. `Basis`
    2. `blink_left`
    3. `blink_right`
    4. `lowerlid_left`
    5. `lowerlid_right`

    ![shapekey-sort.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238841/74f8661f-e924-0891-4f4c-3d6aac5c61f6.png "シェイプキーの並び順")

1. `Humanoid` のボーン対応修正

    Unityにインポートしたさい、`Humanoid` のボーン対応で顎( `Jaw` )に髪のボーンが設定されていたので外す（None）。

    ![bone.png](https://qiita-image-store.s3.amazonaws.com/0/238841/fc65be79-bc42-0502-2cb9-bf4d1dc0f3ec.png "specify None on Jaw-bone")

### シェイプキーが爆発する（追加）

もしくはウニになる。
アバターを改造しようとしたときになるやつです。

シャーロちゃんでは発生しにくいと思われますが、Blenderでいじってるといつか遭遇するので念の為に書いておきます。

* 原因
  シェイプキーが頂点の移動情報を記録しているためメッシュの頂点を削除したときにバグるせいみたいです。

* 対策
  メッシュを直接編集するのではなく、編集するメッシュ部分を分離しておくといいようです。

アバターの多くはシェイプキーを表情表現のみに使っており、変形する頂点は顔部分のメッシュに集中しているので、

1. オブジェクトを顔と身体に分離（ `選択物を分離` ）
2. 身体部分のオブジェクトからはシェイプキーを削除
3. 作業終了後ないし出力前にオブジェクト統合

とすれば大丈夫だと思います。
とはいえ割とミスしやすく、費やした作業時間が無駄になるのを防ぐため、分離・削除したときはシェイプキーの動作を確認しておくことをおすすめします。

参考：<https://twitter.com/nukomiya09/status/1101144929189867520>

## 単位設定（追加）

Blenderで扱う長さの単位をメートル法にしておいたほうがいいみたいなので設定します。

プロパティウィンドウにおいて

1. `シーン` タブを開く
1. `単位` 項目で `メートル` を選択  
    ![meter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238841/d75fd4ca-828b-6a5e-9253-f6614234034c.png "単位をメートル法にする")

## オブジェクトモードと編集モードでボーン位置がずれる（追加）

ポーズモードがデフォルト値から変更されているのが原因だと思われます。

左 `ツール` シェルフ -> `CATS` タブ から

1. `Model` 項目を開く
2. `Start Pose Mode`
3. 即座に `Stop Pose Mode`  
    ![model-pose.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238841/767e05ee-32bc-7638-17c3-0fc17d0eee55.png)

以上でボーンの変更値がリセットされTポーズに統一されます。
**やはり神では。**

## 髪・ヘアピンの位置がずれている（追加）

原因はわからないですけど、なんかずれてますね……。
正しい位置についてはちょっとわかりませんが、だいたいこのぐらいに合わせてみました。
残念ですが手動です。

* 髪部分を選択
  1. `オブジェクトモード`
  1. `G` -> `Z` -> `0.02` （2cm上に移動）
  1. `G` -> `Y` -> `-0.0152` （1.52cm前に移動）
  1. `Ctrl + A` -> `位置` で適用

* ヘアピンについても修正
  1. `オブジェクトモード`
  1. `G` -> `Z` -> `0.015` （1.5cm上に移動）
  1. `G` -> `Y` -> `-0.0185` （1.85cm前に移動）
  1. `Ctrl + A` -> `位置` で適用

### マテリアル統合（追加）

あまりに長くなったので別記事で書いてます。

* [シャーロちゃんをblenderでいじる-マテリアル統合編-](https://qiita.com/akiakishitai/items/9e696c8b762c1c03abde)

## FBX出力（追加）

`Cats Blender Plugin` の `Export Model` 機能から出力できる。

左 `ツール` シェルフ -> `CATS` タブ から

1. `Model` 項目を開く
2. `Export Model` をクリック
3. `Continue to Export` をクリック  
    ![export-model.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238841/424c6eef-ef42-fcef-1798-b7dacd2fae0d.png "FBX出力")

メッシュオブジェクトやマテリアル数が多かった場合、ここで次のような警告が出ます。
`Continue to Export` でそのまま出力もできますが、できれば結合を試してみてください。

![export-warning.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238841/b3218e2c-082a-cba8-3bf8-da6ff45faf0e.png "メッシュ・マテリアル数が多いと出る警告")

## Unityでのアップロード作業（追加）

本記事では説明せず、参考文献を挙げるにとどめます。

Unity開発環境（VRChat用）

* [第22回 行くぞ！unity開発環境お引越し！~Unity Hubで2017.4.15f1から2017.4.28f1へ~ | ユニティちゃんでわかるVRchatのためのunity教室](http://vrherokichi.com/2019/06/20/dai22kai/)

アバターアップロード

* [『VRChat』で自作アバターを使うには？ 導入方法まとめ | MoguLive](https://www.moguravr.com/vrchat-9/)
* [MMDモデルからVRChatのアバターを作ってみた。 | VRで美少女になりたい人の備忘録](http://shiasakura.hatenablog.com/entry/2018/01/31/112624)

アニメーションオーバーライド

* [アニメーションオーバーライドを入れてみよう！！(表情編) | ケーキのPC情報集会所](https://keiki002.com/vr/anime-face/)

----------

以上、自分がつまづいてしまったポイントでした。
何かの役に立てば幸いです。

では、よきVRライフを。

## 参考

* [VRChatに興味のあるねずみさん用 FAQ編](http://noracat.info/d/VRChat%A4%CB%B6%BD%CC%A3%A4%CE%A4%A2%A4%EB%A4%CD%A4%BA%A4%DF%A4%B5%A4%F3%CD%D1%20FAQ%CA%D4)
* [shape key でおかしくなった頂点だけをリセットしたい。 | Blenderと３DCGについてのTIPSや情報を紹介](http://blender-3d.tumblr.com/post/89851691929/shape-key-でおかしくなった頂点だけをリセットしたい)
* [Eye trackingの実装【VRChat技術情報】（情報募集中） | VRChatパブリックログ](https://jellyfish-qrage.hatenablog.com/entry/2018/07/25/034610)

* [Cats Blender Plugin - A tool designed to shorten steps needed to import and optimize models into VRChat.][cats-1]
* [Avatars - Material Combiner Blender Addon (2.0.3.2) | VRCat: Community-Run VRChat Forums][mat-combine]


[cats-1]:https://github.com/michaeldegroot/cats-blender-plugin
[mat-combine]:https://vrcat.club/threads/material-combiner-blender-addon-2-0-3-2.2255/