[Unity][Sculpris][Blender]自作モデルを作ってUnityで動かすまで

# はじめに
Unityを勉強し始めて何か自作モデルを作って動かしてみたいなと思いました。
とりあえず球体のモンスターのような簡単なモデルにしようと思い作ってみたのですが、思ったより（Blenderが）大変だったのでまとめました。

自作モデルを作って動かしたい方の参考になれば幸いです。

# モデル作り
Sculprisでモデルを作りました。

Sculprisは、直観的で操作が分かりやすいため、簡単なモデルなら初心者でも簡単に作れます。
操作方法は、[公式](https://oakcorp.net/pixologic/sculptris/requirements/)の日本語ドキュメントや動画などを参考にすれば簡単に把握できると思います。

## モデルの形づくり
まず、モデルの形づくりをします。
上記の9つのコマンドで粘土でこねるように形づくっていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/cdb51df4-fd36-74c4-2773-03a29ac73ed5.png)

それぞれのコマンドは、下記のサイトが参考になります。
[Sculptris　使い方　目次：3DCG 初心者向けブログ [TRY 3DCG]：So-netブログ](https://yamakatu.blog.ss-blog.jp/archive/c2303100789-1)  

SYMMETYで左右対称に描写できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/2e554ec2-49b1-dfcb-3f0b-2c6fdddc14cb.png)

NEW SPHPEで新たな球体をくっつけられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/3e720295-5f6b-fe84-771e-4e4905da88ac.png)

できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/106efea7-fcdc-4836-6358-db020a330c55.png)

## モデルの色付け
続いて、モデルに色を付けていきます。
ただし、**色を付けるとモデルの形を変えることが出来なくなるため、「SAVE」で保存しておきます。**

「PAINT」を押下すると色を付けることができるようになります。
色は、カラーコードを指定できないので注意してください。

できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/97b52549-da76-a4c4-6965-0a4316b10f28.png)

色が塗り終わったらテクスチャをpngファイルで保存します。
●Show advanced toolsをチェックして「SAVE TEXMAP」で保存できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/7104c5e3-dc19-71f3-13f6-9ba23cdbc5e1.png)

さらに、モデルをobjファイルで保存します。
「EXPORT」で保存できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/e37cb252-ef2e-96c8-b205-dd5f031f7c17.png)

これでモデルを動かす準備ができました。

# モデルのボーン及びアニメーション作成
## モデルのボーンを作成
Blenderでボーンを入れます。
Blenderが2.8系からGUIががらっと変わっているため調べるときは注意が必要です。

Unityでモデルを動かすだけならボーンを作成するだけで良いです。
テクスチャはBlenderで貼る必要はないです。
（特に、Blender2.8からテクスチャの貼り方がかなり変わっていてしんどかったです）

元々あった白い四角形はDeleteキーで削除して、保存したobjファイルを下記のようにインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/df797417-5177-3f8c-92dc-be4bc2c062ba.png)

因みに人型のモデルの場合は、人型のボーンがあるためそちらを使うと簡単です。
何故ならボーンは下記の既存の人型のボーンをモデルに当てはめるだけでよいからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/dedc9043-2b5e-6df0-f36e-7075e94d95f4.png)
アニメーションはUnity-chanのアニメーションがそのまま使用できるため自分で作成する部分がかなり減らせます。
詳しくは、下記のサイトが参考になります。
[【Unity】Blenderで人型のボーンを入れて、Animatorで走るアニメを再生する - おもちゃラボ](http://nn-hokuson.hatenablog.com/entry/2017/04/20/202447)  

残念ながら私のモデルは人型のボーンは当てはめられなさそうなので、ボーンを作成します。
「Single　Bone」を押下してボーンを1つ追加してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/696f6f3b-df2a-9df6-9184-ed10dd2ec71b.png)
ボーンを追加するメニューが出ない場合は、下記のようにツリーでInportしたモデルを選択しているか確認しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/91484a10-c9ef-72d3-4a83-461ed6679039.png)

ボーンがよく見えないので、ボーンを前面にします。
ツリーからAmatureを選択して、タブから「In Front」にチェックを入れます。
Amatureはボーンを追加したら出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/5e3e5d0a-0fc2-7adc-ff7c-afd2c52f17ab.png)


ボーンを編集するには下記のように「Edit Mode」にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/77d16fe3-49c8-6534-2e06-26dde58b6251.png)
「Move」を選択して動かします。
XYZ軸の赤緑青の矢印上をクリックしたまま動かすとボーンが移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/1be837ac-03c4-7b52-a08c-699ba50e0f36.png)

新たなボーンを追加するときは「Extube」を使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/c8ca4601-46f4-372b-22cd-9cea7d444bef.png)
「Extube」は、ショートカットが楽ちんなので、ショートカットを駆使しましょう。
追加したい球体をクリックしてEを押しながらドラッグするとボーンが伸びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/cf4ab7d3-2c6e-4b3b-5243-cb547ea0cccc.png)
ドラッグ後にクリックすると確定されます。
Ctrl+Zが利くため、戻したい時は使いましょう。

左右対称にしたい時は、画面の左にある下記の「X-Axis Mirror」をクリックしてからボーンを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/bf69a470-2e49-5abb-a6f9-9901197c6bc2.png)
左右対称のボーンを追加するときは「Extube」のショートカットであるShift+Eを使って追加します。

他の詳しい操作は、下記のサイトが丁寧でとても良いです。参考にさせて頂きました。
[【Blender2.8】ボーンとウェイトペイント【初心者用】 | ゲームの作り方！](https://dkrevel.com/unity-and-blender/blender-bone-weight-paint/)  

できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/dde8596d-7c7e-528d-cbf2-454ed29008d6.png)

## ボーンとメッシュを関連付ける
「Edit Mode」から「Object Mode」に戻して「Object」→「Parent」→「With Automatic Weights」を選択して、ボーンとメッシュを関連付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/29d11389-1cc3-b7bf-f444-603bdaa5108f.png)

きちんとボーンとメッシュが関連づいているか確認しましょう。
「Object Mode」から「Pose Mode」にしてボーンを動かしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/766f6ffc-dec7-a00c-d3a9-c3dd91416c3a.png)

ボーンを選択して、下記のコマンドを使ってボーンを動かしてメッシュが付いてきているか確認しましょう。
下記のコマンドは、上から移動、回転、縮小になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/d79c622c-efcb-61de-c306-01ea53bf9445.png)

今回のモデルは、歩くことを想定しているので、両手両足頭を動かしてみて不具合がないか見ていきます。
頭を移動したら下記のように分離してしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/e6b51eee-2dd3-85bf-56c1-7c8611af4431.png)

どうやら余計なボーンが邪魔していて本来軸としてくっつけるべきボーンに頭のボーンがくっついていなかったみたいです。
ツリーで余計なボーンがないか確認しておきましょう。
あと、ボーンの名前は分かりやすいように書いておくと整理できていいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/6fc560a9-d7a6-cf02-9af4-1b30a0c9bcdf.png)

ということで作り直したボーンがこちら。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/6dfd56f9-064c-9526-1564-276a0bd7702a.png)

動かしてほしくないところまで動いていたらウェイトペイントという機能で調整しましょう。
私のモデルは調整するところが特になかったのでそのままにしています。
詳しくは、[【Blender2.8】ボーンとウェイトペイント【初心者用】 | ゲームの作り方！](https://dkrevel.com/unity-and-blender/blender-bone-weight-paint/) が参考になります。（上記で挙げたサイトと同じですが…）  

## アニメーション作成
「Pose Mode」にして
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/e9522559-189c-ce88-0df8-c8d95ff5a742.png)
画面の下部のビューから「時計マーク？」→「Dope Sheet」を選択してモーションを作っていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/3538ee2f-bb2f-0787-1f74-5c5454de4e72.png)

今回は歩くモーションを作っていきます。
「Dope Sheet」を1フレームにもってきて、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/5b72e676-1440-cf18-7cd6-deaf4843ac85.png)
モデルの左足と右手を前に出しておきます。

この状態を「Dope Sheet」に記録していきます。
Aキーで全選択した後、Iキーでメニューを開きます。
メニューでは、「LocRot」（位置/回転）を選択して、ボーンの位置を記録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/bdca363f-51ed-4058-d0a1-0c79104814b1.png)
21フレームに移動して、右足と左手を前に出して同様に記録します。
「Dope Sheet」には、黄色の丸がいくつも付いていると思います。そうすれば記録されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/f76be54b-3d12-ee81-6431-638078d77423.png)

また、上書きが可能ですので、間違えたときは同じ手順で上書きすれば大丈夫です。
コピペもでき、あるフレームの時にCtrl+Cでコピーしてコピー先のフレームを選択してCtrl+Vで張り付けます。
繰り返しを表現するときはこの方法でやると楽です。

詳しくは、下記の動画が分かりやすかったです。
[Blenderでアニメーション作成〜Unityで動かすまで　[Blender2.8入門] - YouTube](https://www.youtube.com/watch?v=nST2Uhb-_yA&feature=youtu.be)  

データを保存するときは、「Object Mode」にして「File」→「Export」でfbxファイルで保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/16ef6e86-363f-8c06-eed0-7e059717d538.png)

この時、注意したいのが、必要最小限のものだけExportします。
Lightを入れるとUnityに入れた時に謎の光源が常にモデルに当たって真っ白になってしまうこともあります。
なので、「Object Types」には、ArmatureとMeshのみを選択します。Shiftを押しながら選択すれば複数選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/f1823256-9d9d-3d4a-8243-f273085fe763.png)

これでBlenderでの操作は完了です。（長かった・・・）

# Unityで自作モデルを動かす
Hierarchyビューで左クリックして、「3D Object」→「Plane」を選択し床を作ります。
Projectビューでfbxファイルをドロップしてモデルのオブジェクトを生成します。
それをHierarchyビューにドロップすればSceneビューでモデルが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/cb0d9ebf-e387-22a2-af6e-35a5994c2bdc.png)
モデルが床にめり込んでいたらInspectorビューの「Transform」→「Position」のYの値を調整してください。

## テクスチャを貼る
テクスチャを張ります。
Hierarchyビューにテクスチャのpngファイルをドロップします。
Projectビューでモデルのオブジェクトを選択して、
InspectorビューのMatrtialsタブを選択して「Extract Materials」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/6a93eae9-0c7e-9efa-0fd6-ea33bf5424a0.png)
ここではマテリアルの出力先を選択しますが、基本的にこのまま「フォルダの選択」を押下でOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/d9e1ae9c-7261-f47a-59ca-1975aff7d357.png)
(null)というマテリアルが作成されました。
ダブルクリックしてInspectorビューを開きましょう。
Albedoの横にある〇をクリックして先ほど置いたテクスチャのpngファイルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/865d01f0-96e4-73f7-e10d-0722bcf9aeac.png)

無事テクスチャが貼れてモデルに色が付いたと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/3bd90818-7b39-e499-833e-7353b6bfc5d3.png)

詳しくは、下記のサイトも参考にしてください。
[Blenderで作成した3DモデルをUnityに取り込む その６（マテリアルの設定） - MRが楽しい](https://bluebirdofoz.hatenablog.com/entry/2019/02/21/003516)  

## アニメーションを付ける
Animator Controllerを作ります。「Animator Controller」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/98a0df85-74a4-1c4e-420b-4ee0a2b80c14.png)

Animator Controllerを開いて、「Empty」で新しい状態を生成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/4274d2c2-d184-3073-6f57-3f584105603f.png)
作ったNew Stateを選択してInspectorビューで「Motion」横の○を選択しモデルのアニメーションを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/b1673849-1985-72aa-b987-4d91661471ff.png)
何故か2つ生成されていますが、.001の方を選択しないと動かなかったです。

モーションを繰り返して動かしたい場合は、モデルのアニメーションのInspectorビューを開いて、「Edit」を押下して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/e58e51f8-d677-7f59-1b51-9d55b0104bef.png)
「Loop Time」にチェックをしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/5b71ee24-8530-9f07-15d8-6d5d1144a3ec.png)
「Apply」ボタンを押下して変更を確定します。

あとは、Hieビューのモデルオブジェクトを選択して、InspectorビューのAnimator→Controllerの横の○を選択して先ほど作ったAnimator Controllerを設定すれば完成！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/903e386b-b6fd-b43f-7405-ac0ca2173e88.png)
これで「Play」ボタンを押せばモデルが動くと思います。

出来ました！動いた！
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Sculprisで作ったモデルをBlenderでボーン入れてアニメーション作ってUnityで動かした。<br>結構大変だった、Blenderが。 <a href="https://t.co/AHtCpDcXlq">pic.twitter.com/AHtCpDcXlq</a></p>&mdash; nori (@nori0__) <a href="https://twitter.com/nori0__/status/1269627329627557889?ref_src=twsrc%5Etfw">June 7, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

床いらなかったですね…。

# まとめ
モデル作りは比較的簡単ですが、ボーンを入れるのがとにかく大変でした。
何故ならBlenderが2.7系と2.8系でGUIがかなり違うからです。
特にテクスチャが違っています。今回Unityで動かす分には読み込む必要がないのですが、読み込むのにかなり時間がかかりました（作業してた時は必須でないと知らなかった）。

あと、ボーンとメッシュを関連付けるため自動ウェイトを選択したのですが、凹凸の少ない綺麗なモデルでないと上手くウェイトが付きません。
そうすると、自分でウェイト付けなおしたりしないといけなくて大変です。
このチュパカブラモデルは自動ウェイトでは上手くメッシュ動いてくれなかったです。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">チュパカブラモデルは、Sculptrisで作成しました。なので色とかちょっと違います。<br>Blenderでボーン入れて動かそうかとも思ったけど、時間がなかったからやめました。 <a href="https://t.co/K6lRSZGNFk">pic.twitter.com/K6lRSZGNFk</a></p>&mdash; nori (@nori0__) <a href="https://twitter.com/nori0__/status/1267014370493526018?ref_src=twsrc%5Etfw">May 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
今回のモデルはかなり単純な形だったので助かりました。