BlenderでSalesforce アストロくんのペーパークラフトを作る

こんにちは。co-meetingの木村です。

この記事は[Salesforce Platform Advent Calendar 2018](https://qiita.com/advent-calendar/2018/salesforce-platform)の17日目です。
今年はネタに走ることにしました:grinning:

# はじめに

Salesforceには最近かわいいキャラクターがいっぱいいます。その筆頭がこの**アストロくん**です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/2e25ee4c-6911-cbc1-256a-3d3c4e0a8278.png)
（[Trailblazing - Salesforce.com](https://www.salesforce.com/company/careers/culture/trailblazing/) ）

今回は3Dモデリングツールの[Blender](https://www.blender.org/)でこのアストロくんの3Dモデルを作り、そこからペーパクラフトの展開図を作るというお話にしようと思います。

モデリングの仕方は軽く触れるにとどめ、今回の技術ネタとしては、主にペーパークラフトの展開図を生成するのに使用した[Export-Paper-Model-from-Blender](https://github.com/addam/Export-Paper-Model-from-Blender)アドオンの使い方をご紹介しましょう。

Salesforceに関係ない？いやまあ、たまにはこんなのもいいじゃないですかｗ

真面目なのは先月二本書いているので、よかったらそちらもどうぞ。

* [SFDX-Falconを使ったISVパッケージの開発 - Qiita](https://qiita.com/atskimura/items/37c6f58d000189dc7a9d)
* [Salesforce DX + Vue.js + TypeScriptでISVパッケージ開発 - Qiita](https://qiita.com/atskimura/items/4c034b0327abc1d91184)

# できたもの

こんな3Dモデルを作ると、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/40248171-8934-7911-9b41-111e16011cba.png)

こんな展開図が自動生成されて、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/f9386025-11bc-8fc0-dee3-9f6ed3150b25.png)

印刷して組み立てると、こうなります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/0d896c96-f2e8-f8e3-f493-8a0b2f9db12b.png)

なかなかかわいくできたんじゃないでしょうか。

なお、[電源ボード](https://www.switch-science.com/catalog/3178/)と[薄型スピーカー](https://www.switch-science.com/catalog/671/)をつけた[micro:bit](https://microbit.org/ja/)が頭にぴったり入るサイズにしているので、しゃべらせることもできますよ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/7e0841cd-4327-de7b-ac3a-7ebaba04ca9d.png)

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">「BlenderでSalesforce アストロくんのペーパークラフトを作る」の記事の動画です。（Qiitaに動画を貼りたいためTwitterに投稿しています。）<br>記事はこちら↓<a href="https://t.co/XXezAEzuPA">https://t.co/XXezAEzuPA</a> <a href="https://t.co/NuuiHH81Zg">pic.twitter.com/NuuiHH81Zg</a></p>&mdash; Atsuhiko Kimura (@atskimura) <a href="https://twitter.com/atskimura/status/1074479983257518080?ref_src=twsrc%5Etfw">2018年12月17日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# ペーパークラフトのダウンロード

上の自動生成されたSVGをきれいに配置し直したものを置いておきます。配置し直しただけで展開図自体には何も手を加えていません。
Blenderのファイルもついでに公開しちゃいます（v2.79bで作っています）。

### [展開図のダウンロード](https://drive.google.com/file/d/1lfow2TQ60t5uSYaw7BqSizApFmJfe5l7/view?usp=sharing)
[Blenderファイルのダウンロード](https://drive.google.com/file/d/1z8iTV1zX-X2SUuvtwey5S5HNi38fF2_D/view?usp=sharing)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/65bd06a5-fcb9-92fe-9520-b05f2a4bb6b4.png)

よかったら印刷して作ってみてください。印刷する時は100%で印刷しないとmicro:bitは入らないのでご注意ください。

私はエレコムのペーパークラフト専用紙を使いましたが、micro:bitを入れないならコピー用紙でも作れなくはないですよ。
<a href="https://www.amazon.co.jp/dp/B000G1T6V2/ref=as_li_ss_il?ie=UTF8&linkCode=li2&tag=atskimura-22&linkId=dbbf4f0daeb41217086ad573711ae406&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B000G1T6V2&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=atskimura-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=atskimura-22&language=ja_JP&l=li2&o=9&a=B000G1T6V2" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

# 作り方

Qiitaの記事なので、技術的？な話も書いていきましょう。

## モデリング

コピペテックでチュートリアルを書いているので詳しくはそちらをご覧ください。

[Blenderで作るmicro:bitペーパークラフト](https://note.mu/copipetech/n/n134188d008e4)

ただ、手足が二つ折りのパーツはこちらにしかないなどこちらのモデルの方が複雑なので、その辺り含めこちらの記事ではポイントを箇条書きしておきます。

* 例えば平面と円を合体させたい場合、結合ではなく[重複頂点を削除]か[辺ループのブリッジ]で連結する必要があります。じゃないとパーツが分かれてしまいます。
* 手や足のような二つ折りのパーツはコピーして接続部にピボット（回転軸）を指定して、ちょっと回転したあとに[重複頂点を削除]で連結しています。
* 単色は普通にマテリアルで色をつけて、顔やお腹はUVマッピングで以下の画像を貼っています。（クリックすると大きい画像が開きます）  
<a href="https://qiita-image-store.s3.amazonaws.com/0/27267/a8851ef9-fe78-a560-12af-6c7e5cb82904.png" target="_blank">![astro_face.png](https://qiita-image-store.s3.amazonaws.com/0/27267/1fa0116e-6150-4512-e79d-1abf211e857c.png)</a>
<a href="https://qiita-image-store.s3.amazonaws.com/0/27267/7acb882f-0050-8123-a0ee-26ef09cf2094.png" target="_blank">![astro_body.png](https://qiita-image-store.s3.amazonaws.com/0/27267/8ff56799-06eb-43de-b84f-ed16a7243d38.png)</a>
* パーツの接続部の穴は実際に挿した状態にして場所がわかるようにして、ナイフツールでいい感じの大きさの面を作っています。
* 耳/手/足のように左右対称のパーツは`Shift+S` → `.` で原点にピボットを移動してから、`Shift+D`（コピー） → `Ctrl+M X`（X軸対称にミラー反転）で簡単にコピーできます。
* しっぽだけベジェ曲線を使っていて、他は平面と円の組み合わせ/変形で書いています。
* いろいろ操作してたら平面のつもりのメッシュの頂点がずれてしまうことがあります。そのときは`S`（拡大縮小）→`Z`（揃えたい軸）→`0`でZ座標が揃います。
* 手は最初片面印刷にしたら、片手の親指が逆を向いてしまいました。平面に裏表を設定できないせいですね。仕方なく両面にしました。
* 最後に`Ctrl+J`（オブジェクトの統合）で一つのオブジェクトに統合する必要があります。後で分離したいこともあるので、分離しやすいように各パーツは接触しないようにしておいた方がよいでしょう。
* 実寸で作ったけど小さすぎて作りにくかったので、100倍くらいで作って展開図出力時に倍率を指定する方が作りやすいかもしれません。
* 重複頂点があったり、複雑過ぎたりするとエラーになって出力できないので、ペーパークラフトを作るんだ！と思ってモデリングした方が良いと思います。

## ペーパークラフト展開図の作り方

モデルはもう完成している前提で、ペーパークラフト展開図を出力していきます。

### Export Paper Modelの有効化

Blenderアドオンの[addam/Export-Paper-Model-from-Blender](https://github.com/addam/Export-Paper-Model-from-Blender)を使います。

[ファイル] > [ユーザ設定]を開き、[アドオン]タブの[Import-Export: Export Paper Model]にチェックを入れ、[ユーザ設定の保存]をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/bd9f4ad7-9061-18f3-7d38-9d8acd427870.png)

もしアドオン一覧にない場合は、以下の手順で追加してください。

1. 上のgithubの[io_export_paper_model.py](https://github.com/addam/Export-Paper-Model-from-Blender/blob/master/io_export_paper_model.py)の[Raw]ボタンからファイルを保存。
2. アドオンタブ下部の[ファイルからアドオンをインストール]ボタンでダウンロードした`io_export_paper_model.py`を選択し、インストール。

### シームを付ける

展開したときに立体の切り口をどこにするかを設定します。
なお、つけなくても自動的にいい感じに切ってはくれます。

1. [編集モード]にし、[辺選択]にします。
2. 切り口にしたい辺を`Shift + 右クリック`で複数選択します。
3. ツールボックスの[Paper Model]を開き、[シームを付ける]をクリックします。  
これで以下のように切り口にしたいところが赤線で表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/2587fd61-5279-ec73-b052-abf230e00d9f.png)

### 展開図を生成

[Export Paper Model]ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/12f6b5e3-79bb-3c5e-4148-5f0146e74d78.png)

以下の設定にして、適切なファイル名で[Export Paper Model]をクリックすると展開図がSVGファイルで出力されます。

* フォーマット: SVG（またはPDF）
* Create Numbers: チェックを外す
* テクスチャ: From Materials
* Resolution (DPI): 300

![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/7299d641-a042-a8ca-7539-51e8157631de.png)

軽くオプションを解説しましょう。

|名前|説明|
|---|---|
|フォーマット|**PDF** or **SVG**<br>PDFだとなぜか折り線も実線になってしまうので、SVGがちゃんと印刷できるツールがあるならSVGの方がおすすめです。|
|Scale|倍率です。モデルを実寸で作っていれば、1:1.0のままでOKです。|
|Create Tabs|のりしろをつけるかどうか。当然ながらつけたほうが楽ですが、のりを使わない全部はめ込み式のペーパークラフトを作る時はオフにするべきです。|
|Create Numbers|組み立てたときに接続する辺同士に同じ数字を表示します。<br>以下のようにあまりきれいに出力されないので、オフにした方がよいかと思いました。<br>![image.png](https://qiita-image-store.s3.amazonaws.com/0/27267/ab1af962-54b6-7e3f-5de7-9e6bf780564e.png)|
|テクスチャ|**No Texture**: テクスチャなしなので全面真っ白です。出力した後、別ツールで塗る場合に使えると思います。<br>**From Materials**: 各面に割り当てられているマテリアルを出力します。<br>**フルレンダー**: レンダリングしたときと同じ状態で出力します。<br>他はよくわかりません。|
|Resolution (DPI)|解像度。<br>印刷だと300DPIくらいがいいとよく言われます。|
|Colors and Styles|各線の色やスタイル（実線/破線とか）、文字色などを設定できますが、まあデフォルトで問題ないと思います。そしてPDFのときは破線にならないです。|

# 終わりに

よかったら皆さんも作ってみてください！
来年も楽しいSalesforceライフを送りましょう！

最後に軽く宣伝を。

こんな記事も業務時間に書けちゃう株式会社co-meetingはエンジニアを募集しています。
ぜひぜひお気軽にご応募ください！

### [ずっとプログラマでいたいWebエンジニア募集！プロダクト開発もSIも両方できる！在宅/時短可/残業ほぼなし！ | 株式会社co-meeting](https://www.co-meeting.co.jp/recruit-engineer-2018/)