Blenderで3Dの本を作った時の話

「QualiArts Advent Calendar 2020」 4日目の記事になります。
今回紹介するのはこちらについてです！
![51605103-66dbbe80-1f51-11e9-9c8f-6ba9468b3322.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/033f42f8-3236-afd2-bf7b-74c99604c175.gif)
3Dの本の制作についてになります！
アドベントカレンダーは初めてで、何か間違っているところがあるかもしれませんが、暖かい目で読んでいただければ幸いです。

## はじめに
3Dの本を作る機会がありBlenderで制作してみたのですが、ちょっとしたつまずきポイントがありました。この記事ではそのポイントと打開策について紹介していきます。一見簡単そうに思える3Dの本の制作にさえ、ちょっとした奥深さがあるということを知っていただければと思います！

### つまずきポイント
さて、僕がつまずいたポイントですが、**本を開いたり閉じたりするときの紙の挙動の再現**です。実は本は開いているときは紙が盛り上がっていき、閉じていくときはまっすぐに戻っていくのです。当たり前に思える挙動ですが、3DCGで再現するためには本の開け閉めの動きと紙の動きの二つを考慮しなくてはいけません。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/e9726ea9-ab96-f300-c556-cd7d9604b368.png" width = "900">
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/85cad7f0-90bd-eedb-01b0-f004db95b082.png" width = "900">

### 打開策について
まず前提として、3DCGを動かす基本的な方法は以下の2つになります。

- リグを動かす
- モーフィングを使う

リグというのは3DCGに入れる骨のことで、このリグで3DCGを動かすことができます。3DCGは大体この方法で動かされています。
モーフィングは、3DCGに貼られた面（メッシュ）や頂点を動かして変形させた形と、変形前の形の間を連続的に変形させて動きを補間する機能です。例えば人間の3Dモデルの口パクや目のぱちぱちの動きを作るときに使われます。

リグの動きは本の開閉、モーフィングは紙の盛り上がりに適用することになりますが、本を開いたり閉じたりするときの紙の挙動を再現するためには、上記2種類の方法を組み合わせる必要がありました。本の開閉具合のリグの動きに伴って、紙の盛り上がり具合のモーフィングを追従できるように施すこととなります。この同時に処理をするという設定がBlenderのドライバーという標準機能を使って実現できたので紹介します。

### 使用する環境
Blender2.79を使用して説明します。現在は2.9まで出ているようですが、愛用して操作に慣れてしまっている一昔前のバージョンでの説明になります。最新のバージョンでも今回紹介する機能は利用できるようです。
https://docs.blender.org/manual/ja/dev/animation/drivers/index.html

## 実現方法について
実際に作った本の3Dモデルを元に、実現方法について説明していきます。本の3Dモデルの作り方やBlenderの操作方法については長くなってしまうので説明は割愛します。代わりに配布しますので、ぜひご参考にしてみてください！
https://github.com/vinyel/A3Book

### 本の3Dモデルの用意
下図のように、本を作ります。僕の場合、本を開いたときの見た目を最初に作り上げたかったので、本は開いていて紙は盛り上がっている状態で作りました。また、ボーンについては入れ方には様々ありますが、IKボーン（任意のボーンの動きに追従して動くようにしたボーン）と通常のボーンを組み合わせ、一つのコントローラー用のボーンを動かすだけで本を開け閉めできるようにしています。こうすることで地道に一つ一つのボーンを動かしたり角度を調整したりせず、簡単に開いて閉じる挙動を作ることができるようになります。
![スクリーンショット 2020-12-03 20.35.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/54132007-5f1d-1103-66ae-024ac72f0ded.png)
![スクリーンショット 2020-12-03 20.58.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/db977a17-9e2c-1f73-f29e-7207c2e11669.png)


### リグの動きついて
図のようにボーンが動き、本の開け閉めができるようになっています。しかし、単純に開いて閉じられるようにしただけでは紙が盛り上がったまま本が閉じられてしまっています。
![rig.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/7278549d-160e-c5be-d1bb-8b96b573508e.gif)

### モーフィングについて
本を閉じた時に紙を真っ直ぐにするために、上図のように紙の盛り上がりのモーフィングを制作します（Blenderではモーフィングではなくシェイプキーという名前の機能になります）。モーフィングの0から1までの数値を設定することによって、形状を変えられるようになります。しかし、リグの動きとモーフィングは通常同時に動かすことができません。
![mof.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/cf2029b1-577c-7972-7e37-79da4c83d167.gif)

### リグの動きとモーフィングを組み合わせる
そこで、上記二つの手法を組み合わせるために、Blenderでドライバーを設定して、モーフィングをボーンの動きで制御できるようにします。設定には手順がありますので、以下に述べます。

#### ドライバーの設定方法
1. モーフィングを右クリックすると、ドライバーを追加できます。「ドライバーを追加」の「後で手動設定」を選択します。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/bf50aff3-8068-d658-062c-d499e38e7e50.png" width = "900"> <img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/4e6bfc43-3cc7-c558-ebc9-9bb4fe9456b4.png" width = "900">

2. エディタータイプを「グラフエディター」に変更します。モードを[ドライバー]にします。該当するモーフィングを選択すると関数のグラフが表示されます。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/3bad0923-3db9-27f8-12f6-eb80de07f3eb.png" width = "900"> <img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/963dc1bc-452c-1c25-a958-69da57357e8b.png" width = "900">　
3. Nキーを押すとメニューパネルが表示されるので、パネルのドライバータブを選び、ドライバーを設定していきます。
![スクリーンショット 2020-12-04 2.57.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/30752d2d-cda8-8eb1-220b-4d98ef4399e3.png)

4. タイプを「平均値」にし、モーフィングに連動させたいボーンとその親のボーンを設定します。ボーンを設定した項目の下のタイプにはボーンをどの軸にどの動き（回転・移動・拡大縮小）でモーフィングに連動させるかを設定します。今回はコントローラーボーンの上下で本の開閉をしているので、コントローラーボーンのローカル座標のY軸の位置によってモーフィングが変化するように設定しました。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/43f12cbb-1b02-238d-bc67-4df19f0d8262.png" width = "400">

5. メニューパネルのモディファイアータブを選択し、「追加」の「生成」を選択します。一次関数の式が表示されますので、xの係数を変えることでモーフィングの変化率を変更することができます。
<img src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/ff56f60b-081a-5e45-7cb1-39d43d3083d9.png" width = "400">

ドライバーを設定すると図のようにリグの動きとモーフィングが組み合わさった本が出来上がります。ちゃんと本を開くと紙が盛り上がり、本を閉じると紙がまっすぐになっています。
![Kapture 2020-12-04 at 03.19.40.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878088/386a5b21-46ab-b89b-2912-5fa644c6590e.gif)

## まとめ
3Dの本を制作する中で、開け閉めと紙の盛り上がりの二つの動きを組み合わせるために使用した、Blenderのドライバーという機能を紹介しました。この機能を使うことで人間が腕や足を動かしたときの筋肉の動きなども再現できそうと考えています。
3DCG作りを始めてみたい気持ちはあるけど、何から始めたらいいか分からないという方は今回紹介したような本を作ってみるといいかもしれません。短い時間で3DCG制作に必要な工程を一通り経験できてしまうので、意外とおすすめです！

以上になります。
最後まで読んでいただきありがとうございました！

次回は [kasai_yoshia_](https://qiita.com/kasai_yoshia_)さんの記事になります。