Spineのメッシュ変形で立体感を出そう

# はじめに
メッシュ変形アニメを効率的に行う方法の一つを紹介をします。
Spine Pro版とPhotoshopを使っています。

#素材をspineにとりこむ
素材を用意します。Photoshopで顔とお皿を描きました。
ゲームの中盤ダンジョンから出現するふわふわ浮いているモンスターをイメージしています。
![PhotoshopData.png](https://qiita-image-store.s3.amazonaws.com/0/125608/56fe9102-cf7f-9d30-a782-fe1c493e7855.png)


[公式ページに紹介されてるプラグイン](http://ja.esotericsoftware.com/spine-images)をつかってPhotoshopからspineにもっていきました。
![import_spine.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/eadc585e-edd9-0531-8390-0a154de63e7a.png)

#メッシュをつくる
[公式のマニュアルはこちら](http://ja.esotericsoftware.com/spine-meshes)
画像にあわせてメッシュをつくります。
![MeshEdit.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/3168e9b6-4ce2-f64e-4d3a-a12777af7e9d.png)

1.
Newボタンを押し、画像の透明部分の堺ギリギリにポイントを打って囲ってしまいましょう。描画領域を少なくする目的です、が、ゲームデータにすることを考えなければ適当でいいです。
![EditMeshNew.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/166d96af-b93b-dcd6-ca1d-973c5a87b5e5.png)

2.
Createボタンを押し、顔の特徴的なポイントに意識して水色の点を打ちましょう。眉尻　眉山　眉頭　眼球　頬骨　鼻筋　額・・・。
![EditMeshCreate.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/f520c66c-5dff-4fef-f5e1-1315c577f34d.png)
●補足●3Dモデリングで動きを考えてポリゴン分割するのと似ています。

3.つながってほしい部分の点をととのえます。Createボタンを押して、一度打った水色の点を別の点にひっぱると分割線を編集できます。編集した線はオレンジ色になります。
![EditMeshCreate2.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/88cc919b-942e-d97d-65df-f5676407ca00.png)
●補足●点を打っただけだと、眉毛の眉尻と眉頭までの分割線が繋がっていない場合があるので、その際はつなげてあげましょう。そのほうが変形時に綺麗なので。[公式のマニュアル](http://ja.esotericsoftware.com/spine-meshes)の鼻の三角形を変更してる箇所とおなじことを行っています。

メッシュの工程を終えました
![Head_Mesh.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/d67adc0a-f911-84b6-5fdd-d19e82951ee1.png)

#骨をつくる
[公式の解説はこちら](http://ja.esotericsoftware.com/spine-tools)
メッシュにウエイトを割り当てる準備をするため骨をつくります。メッシュのポイントごとにキーフレーム打つわけではなくて、3Dツールみたいに骨に追従してぐにゃっとうごくようにしようかと思います。
・ポイントごと個別アニメ→たいへん。
・骨に追従→複数ポイントをまとめて動かせるから楽。
![BoneDesign2.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/95177d81-59d2-d659-35c9-fcffbce38ea7.png)
*くわしくは後述*
各骨には役割を決めています。
メッシュ変形担当骨はウエイトをひっぱるためだけにつかっています。

**head**　顔の拡大回転移動をする骨。
*以下メッシュ変形を担当。*
　**direction**　顔の向きをかえる骨。
　　**eyelid_l_bottom**　左下まぶたを開閉する骨。
　　**eyelid_l_top**　左上まぶたを開閉する骨。
　　**eyelid_r_bottom**　左下まぶたを開閉する骨。
　　**eyelid_r_top**　左上まぶたを開閉する骨。

●上記のボーンをつくります。最終的に6つになりましたが工程毎に追加しています。手順を記載します。
1.headボーンをつくります。ボーン制作時にドラッグするとこの形状になります。今回は顔の根本から真ん中に伸ばしました。
2.headボーンの子供にさきほどつくったメッシュを割り当てます。
3.directionボーンをつくります。どこでもいいですが今回は顔の上にしました。
4.headボーンの子供にdirectionボーンを割り当てます。
![BoneDesign0.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/da80d727-cf37-144b-8333-6cdcf6b2bafd.png)
*まずはこの構造にします。*
*形状は違いますがheadもdirectionも同じボーンです。*

#立体的にウエイトをつける
[公式の解説はこちら](http://ja.esotericsoftware.com/spine-weights)
骨に追従する具合がウェイトです。
まずは顔画像に骨をBindします。MayaでいうSmoothBindです。

1.headとdirectionをメッシュにBindします。
![bind.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/1671b53d-3f84-7c67-d477-62f04351e547.png)

2.メッシュのポイントすべてをheadのWeight１００％にします。
![weight_head0.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/80f23d1c-d852-5159-d18c-8de60fb596dc.png)

3.絵を見ながら、顔のでっぱっている部分にあるポイントにdirectionのweightをふりわけていきます。
![weight_head1.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/0bc57eb1-57f9-55f0-7c03-53135c6ca0f2.png)
球体モンスターのため基本的に絵の真ん中ほどでっぱっているのでより多くdirectionにふりわけています。今回は眉尻　眉山　眉頭　鼻筋です。逆に顔のへこんでいる部分にあたるまぶたや顔の絵の外周は少なめにしています。

●ワンポイント●
一点透視図法の考え方でウエイトをつけています。遠くにあると同じ大きさのものでも小さくみえて、その分移動量も小さく見える仕組みのことです。そのため距離を計測することが重要です。まっすぐな紙をご自分の顔にくっつけて、紙からの距離を測量してください。女の子のイラストでいうところの赤い矢印が短い場所ほどdirectionボーンのweightが強い箇所になります。そうすることでdirectionボーンを動かした時に凸が大きく凹が小さく移動するようになり一点透視図法らしい遠近感が出ます。*赤縦点線はFrontから見える限界を表す*
![z軸.png](https://qiita-image-store.s3.amazonaws.com/0/125608/5a135bd6-5039-880d-4adb-0723642fcb0c.png)

4.directionボーンを移動させて形状変化を確認します。自然な立体感になるまで試行錯誤してください。
![ウエイト２.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/5c111a96-f1ed-aa0e-58da-b21546bdb691.png)![ウエイト３.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/ec786efb-14bd-afe6-5369-be36e84738e1.png)
**これでボーン１つの移動だけによるメッシュ変形で立体感を出せるようになりました。**

*余談ですが関節持ってないボーンは、ゲームエンジンにとりこんだときに別で作ったエフェクトを配置する場所に指定したりとか、色々応用は効くと勝手に想像してます。*

#細かいパーツのウエイトをつける
目を動かせるようにします。基本的には顔全体のウエイト設定と同じです。
1.目周りを細かくうごかすためのまぶたのボーンを作り、すべてdirectionの子供にします。
　eyelid_r_top　eyelid_r_bottom
　eyelid_l_top　eyelid_l_bottom
![BoneDesign1.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/4d04ca82-b6c8-cc33-e663-97ef6fdffd23.png)
*この構造にします。*
![BoneDesign2.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/95177d81-59d2-d659-35c9-fcffbce38ea7.png)
*配置は見やすくこのようにします。*
まぶたのボーンをdirectionの子供にしないとまぶたが顔の向きかえてもいっしょに動かないので、まぶただけその場に固定されたままになります。全体動かす時にいっしょに手作業で動かすことになってしまいます。
「向きを処理してから表情の処理をする」考えなのでボーンも親子関係にしました。

2.メッシュにBindします。
![weight_all.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/088ef794-dffb-9203-f452-788eb7014c64.png)

3.まぶた付近にあるポイントにウエイトをつけます。５や10程度の少ない値で十分です。
　最初に決めた動かす部位ごとにウエイトをつけてください。
4.こちらもそれぞれのボーンを移動させて、目を綺麗に閉じれるか確認します。
![ウエイトeyelit.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/fb1f667f-5bcb-41ab-a269-886a81542330.png)![ウエイトeyelit2.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/12a4c0ba-ff8a-bb93-19bb-6382828dc5b9.png)
ウインクをさせました。
向きを変えても表情はそのままキープできているのが確認できます。
個人的にウエイトつけ作業は基本Pies表示で作業して、最後Overlay表示で確認程度に見ています。

上記手順で顔のリギングは終了です。

#胴体を設定する
顔と同様、胴体も同じ手順で編集します。
![お皿.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/7c27fb41-1ecb-ff27-5d76-73b7da233b9c.png)
![お皿2.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/4b168d38-23ac-d52c-b62c-edd0717e0866.png)

#アニメーションをつける準備が完了する
全ての設定が終了しました。あとはたのしいアニメーション作業です。
設定前よりもかなり楽に立体的なアニメをつけれるようになっているかと思います。
![アニメーション.PNG](https://qiita-image-store.s3.amazonaws.com/0/125608/be41d279-b51d-e5ed-35f4-8f75880544c8.png)
[アニメーションつけた結果がこちら](https://twitter.com/wwikii/status/732571191009902592)
[人物の絵に応用した結果](https://twitter.com/wwikii/status/733996833731543045)

骨に細々メッシュのウエイトや骨をわりあてるリギングの作業は手間ですが、
その後の作業を効率的に、また表現豊かにすることができます。
がんばりましょう。