Slide 1

Slide 1 text

Pythonで 3Dモデリング&3Dプリント Kabuku Inc. Takuro Wada(@taxpon)

Slide 2

Slide 2 text

まずは自己紹介

Slide 3

Slide 3 text

Hello! • Takuro Wada (@taxpon) ‣ Software Engineer ‣ 
 • 3Dプリント関連サービスを 提供しています

Slide 4

Slide 4 text

最近フィギュアになりました

Slide 5

Slide 5 text

Pythonで 3Dモデリング&3Dプリント 「本日のお題」

Slide 6

Slide 6 text

Pythonで 3Dモデリング&3Dプリント 「本日のお題」 「3Dプリントってなんだっけ?」

Slide 7

Slide 7 text

3Dデータを元に 造形物を積層造形すること 3Dプリントって?

Slide 8

Slide 8 text

具体的には https://en.wikipedia.org/wiki/3D_printing

Slide 9

Slide 9 text

3Dプリントで なにができるの?

Slide 10

Slide 10 text

例:金型では作れない形状

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

例:究極のカスタマイズ 「一品モノ」

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

例:身の回りのもの

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

例:既成品のハック

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

DIME 10月号より 弊社CEO稲田

Slide 32

Slide 32 text

面白そう! どうすれば使えるの?

Slide 33

Slide 33 text

3Dプリントするはなにが必要? 3Dデータ 3Dプリンタ 3Dプリント = 3Dデータを元に造形物を積層造形すること

Slide 34

Slide 34 text

- データモデリング - データ修正 - 形式変換 - 3Dプリント - 後処理 3Dプリントにはどのような作業が必要?

Slide 35

Slide 35 text

今回お話する部分 - 形式変換 - 3Dプリント - 後処理 Pythonで 3Dモデリング Pythonで 3Dプリント - データモデリング - データ修正

Slide 36

Slide 36 text

Pythonで 3Dモデリング

Slide 37

Slide 37 text

3Dモデリングって?

Slide 38

Slide 38 text

3Dモデリングって? • 3Dデータを作ること 3Dデータ = 3Dの形状を表すデータ

Slide 39

Slide 39 text

STL(ASCII)の場合

Slide 40

Slide 40 text

三角形ポリゴンの定義 STL(ASCII)の場合

Slide 41

Slide 41 text

以下、ポリゴン定義の 繰り返し STL(ASCII)の場合 三角形ポリゴンの定義

Slide 42

Slide 42 text

以下、ポリゴン定義の 繰り返し STL(ASCII)の場合 コレを自前で計算するのは大変 →モデリングツールを使う 三角形ポリゴンの定義

Slide 43

Slide 43 text

3Dモデリングに使うツール • 3DCGソフト ‣ CGの作成が目的 • 3DCADソフト ‣ 工業デザインが目的

Slide 44

Slide 44 text

3DモデリングツールとPython • 様々なソフトがPythonAPIを提供 ‣ 機能拡張や自動モデリング等が可能になる 3DCG 3DCAD

Slide 45

Slide 45 text

3DモデリングツールとPython • 様々なソフトがPythonAPIを提供 ‣ 機能拡張や自動モデリング等が可能になる 今回 3DCG 3DCAD

Slide 46

Slide 46 text

(基本的に) 無料かつ高機能 ʮ͜ΕΒΛબΜͩཧ༝ʯ ‣ Blender ‣ OSSで無料で使用可能 ‣ Fusion360 ‣ 教育関係者、スタートアップは無料

Slide 47

Slide 47 text

(基本的に) 無料かつ高機能 ʮ͜ΕΒΛબΜͩཧ༝ʯ ‣ Blender ‣ OSSで無料で使用可能 ‣ Fusion360 ‣ 教育関係者、スタートアップ、ファンは無料

Slide 48

Slide 48 text

ということで 本題に入っていきます

Slide 49

Slide 49 text

Blenderで Pythonモデリング

Slide 50

Slide 50 text

Blenderって? • 1995年から開発され続けている3DCGソフト • オープンソース、マルチプラットフォーム(Win, Mac, Linux) • 開発言語はC, C++, Python ‣ Pythonは主にAPI部分に使われている ‣ Blender内部にPython Interpreterを保有(資料作成時点: 3.4.2) Blender

Slide 51

Slide 51 text

Python APIで何ができるの? Blender 3Dモデルの生成 3Dモデルの編集 Add-onによる機能追加 Animation編集 テクスチャ編集 割りとなんでも出来ます Blender Addon List http://blenderaddonlist.blogspot.jp/

Slide 52

Slide 52 text

Python APIの良い所 Blender • GUIマウスオーバーでPythonメソッド名が表示

Slide 53

Slide 53 text

Python APIの良い所 Blender • コマンド履歴がPythonで自動出力 Cubeの生成 移動 拡大

Slide 54

Slide 54 text

Python APIの良い所 Blender • Pythonコンソールの提供 ActiveObjectの確認 位置の表示 移動 スクリプトの動作を簡単に確認するときに便利

Slide 55

Slide 55 text

Python APIの良い所 Blender • PythonスクリプトTemplateの提供 ‣ 内部のテキストエディタでTemplateを選択 様々なタイプのTempleateが入っていて便利

Slide 56

Slide 56 text

Python APIの良くない所 Blender • ドキュメントがわかりにくい ‣ 引数の説明が不十分:用途不明 • オープンソース ‣ 分からなかったらソース読めばいい! ‣ でもやっぱり大変

Slide 57

Slide 57 text

Blender 違いがわからない

Slide 58

Slide 58 text

Blender 違いがわからない XCODE起動!検索!

Slide 59

Slide 59 text

Blender 違いがわからない XCODE起動!検索! PythonAPI全開のC言語!

Slide 60

Slide 60 text

Blender 違いがわからない XCODE起動!検索! PythonAPI全開のC言語! ここが怪しい

Slide 61

Slide 61 text

Blender 違いがわからない XCODE起動!検索! PythonAPI全開のC言語! ここが怪しい

Slide 62

Slide 62 text

Blender 違いがわからない XCODE起動!検索! PythonAPI全開のC言語! ここが怪しい これかな?

Slide 63

Slide 63 text

Blender 違いがわからない XCODE起動!検索! PythonAPI全開のC言語! ここが怪しい これかな?

Slide 64

Slide 64 text

Blender 違いがわからない XCODE起動!検索! PythonAPI全開のC言語! ここが怪しい これだ! これかな?

Slide 65

Slide 65 text

Blender 違いがわからない XCODE起動!検索! PythonAPI全開のC言語! ここが怪しい これか? ついに到達!

Slide 66

Slide 66 text

Blender 違いがわからない XCODE起動!検索! PythonAPI全開のC言語! ここが怪しい これか? ʢʀ´ɾдɾʣ ついに到達!

Slide 67

Slide 67 text

とはいえ Blender • 確実な調査方法があるのは心強い ‣ 分からなかったらソース読めばなんとなかなる、 という最後の砦が残っている ‣ なんなら、修正してOSSに貢献も? https://developer.blender.org/

Slide 68

Slide 68 text

では実際になにか作ってみよう Blender • この辺の内容はRinkakブログにまとまっています ‣ PythonによるBlender 3DCGモデリング ‣ https://www.rinkak.com/jp/blog/blender-python-modeling-1 ‣ 最近更新してなくてスミマセン
 • サンプルはGithubで公開してます ‣ https://github.com/kabuku/blender-python

Slide 69

Slide 69 text

デフォルトオブジェクトの削除 コーンの追加

Slide 70

Slide 70 text

Blender -Pオプションと 実行したいスクリプト名

Slide 71

Slide 71 text

No content

Slide 72

Slide 72 text

たくさんコーンを追加 論理和の計算

Slide 73

Slide 73 text

No content

Slide 74

Slide 74 text

枝分かれモデリング root 1 2 2 2 2 1

Slide 75

Slide 75 text

アプリ例 • 枝分かれプログラム root 1 2 2 2 2 1

Slide 76

Slide 76 text

サポート除去に30分かかる

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

No content

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

リアルタイムに音声解析をし その波形の3Dデータを生成

Slide 81

Slide 81 text

No content

Slide 82

Slide 82 text

Fusion360で Pythonモデリング

Slide 83

Slide 83 text

Fusion360って? • 2012年頃にAutodeskが発表した3DCADソフト • マルチプラットフォーム(Win, Mac) • パラメトリック(強力!), クラウド処理 • APIはJavascript, Python, C++が公開されている ‣ Fusion360内部にPython Interpreterを保有(資料作成時点: 3.3.5) ‣ 動作速度は C++ > Python > Javascript(推測) Fusion360

Slide 84

Slide 84 text

APIで何ができるの? 3Dモデルの生成 3Dモデルの編集 Add-onによる機能追加 割りとなんでも出来ます Fusion360 GUIの作成

Slide 85

Slide 85 text

公開されてるアプリ • APIで作ったアプリはAutodesk App Storeで公開可能 ‣ https://apps.autodesk.com/en  ‣ Fusion360は今のところ14件…( ̄。 ̄;) ‣ https://apps.autodesk.com/FUSION/en/List/Search?searchboxstore=FUSION   Fusion360

Slide 86

Slide 86 text

No content

Slide 87

Slide 87 text

Fusion360 Hackathon • ただいまFusion 360 Online Hackathonが開催中 ‣ http://fusion360hackathon.com/  ‣ 2015/9/23 - 2015/10/30 ‣ アプリを登録して、承認されたらアプリ1つにつき$500 Fusion360 太っ腹

Slide 88

Slide 88 text

Python APIの良い所 • Pythonコンソールの提供 Fusion360 スクリプトの動作を簡単に確認するときに便利 UIオブジェクトの取得 メッセージボックの描画

Slide 89

Slide 89 text

Python APIの良い所 • Debugger内蔵 ‣ Spyderが同梱 ‣ Break Pointの設置 ‣ ステップ実行 ‣ 変数のWatch ‣ Spyder以外のエディタで はDebugger使用不可(編 集は可能) Fusion360

Slide 90

Slide 90 text

Python APIの良い所 • ドキュメントが充実 ‣ http://fusion360.autodesk.com/learning/learning.html Fusion360

Slide 91

Slide 91 text

No content

Slide 92

Slide 92 text

ちなみに • Fusion360のマニュアルが読みやすくなるという超 ニッチなChromExtension作りました • Chrome Web Storeからどうぞ • ChromeWebStoreで「Fusion360」で検索 • https://chrome.google.com/webstore/detail/autodesk-fusion360-learni/amkdnibbgekpljlononmmglfppeihpdn Fusion360

Slide 93

Slide 93 text

Python APIの良くない所 • コマンドライン実行ができない ‣ GUIポチポチでスクリプトを実行するのは億劫
 • Spyderの使い勝手が良くない ‣ 好みの問題 • Debuggerいじってると結構頻繁に落ちる…
 • API自体があまり直感的ではない ‣ パラメトリックだから? ‣ なれればそんなに気にならないかも Fusion360

Slide 94

Slide 94 text

では実際になにか作ってみよう • スクリプトはメニューから追加可能 ‣ runメソッドが実行される Fusion360

Slide 95

Slide 95 text

Sketchの準備 矩形の描画 押し出しを適用するためのCollection作成 押し出しの適用

Slide 96

Slide 96 text

1辺の長さが2の立方体

Slide 97

Slide 97 text

矩形の描画メソッドを作成 10個のランダムな矩形を描画 押し出しを適用するためのCollectionを作成

Slide 98

Slide 98 text

No content

Slide 99

Slide 99 text

アプリ紹介 • 画像から3Dデータを自動生成 Fusion360

Slide 100

Slide 100 text

No content

Slide 101

Slide 101 text

メッシュ操作ライブラリ Pymesh

Slide 102

Slide 102 text

そもそも • データの位置を移動してマージをするような作業 ‣ Cでごりっと実装するのは億劫 ‣ Blenderでやるものなんかちょっとね

Slide 103

Slide 103 text

そもそも • データの位置を移動してマージをするような作業 ‣ Cでごりっと実装するのは億劫 ‣ Blenderでやるものなんかちょっとね Pythonで簡単に使える ライブラリがあればいいのに! みんな

Slide 104

Slide 104 text

そもそも • データの位置を移動してマージをするような作業 ‣ Cでごりっと実装するのは億劫 ‣ Blenderでやるものなんかちょっとね Pythonで簡単に使える ライブラリがあればいいのに! 安心してください、ありますよ! みんな

Slide 105

Slide 105 text

Pymesh • https://github.com/taxpon/pymesh • 特徴 ‣ numpyを使用 • 複数フォーマットサポート • STL(Binary, ASCII), OBJ • Transform ‣ 移動、拡縮、回転 ‣ メソッドチェーンサポート • 複数Meshの結合(Booleanではない) • Analyse • 体積計算

Slide 106

Slide 106 text

Pymesh -使ってみよう- • インストール ‣ numpyが必要なので事前に要インストール ‣ PyPIに登録してあるのでpipでインストール可能 $ pip install pymesh

Slide 107

Slide 107 text

モジュールimport ファイルロード 体積取得 拡大 回転 回転 移動 ファイルセーブ Pymesh -使ってみよう-

Slide 108

Slide 108 text

実行前 実行後 Pymesh -使ってみよう-

Slide 109

Slide 109 text

実行前 実行後 Pymesh -使ってみよう- これは簡単だ! みんな

Slide 110

Slide 110 text

Pymesh -使用事例- • 複数のデータを組み合わせるアプリ ‣ 文字が彫られたモジュールをユーザの入力した文 字列で組み替えるアプリ

Slide 111

Slide 111 text

Pymesh -使用事例- • 組み合わせて作成した事例

Slide 112

Slide 112 text

• 昨日(10/10)に発表があった石本さんのtse(text stream editor) ‣ 早速使ってみた ワンライナー

Slide 113

Slide 113 text

• 昨日(10/10)に発表があった石本さんのtse(text stream editor) ‣ 早速使ってみた ワンライナー echo ""|tse --module "pymesh.stl" -p ".*" -a "m = pymesh.stl.Stl('sample.stl').rotate_x(45).save_st l('sample_out.stl')"

Slide 114

Slide 114 text

• 昨日(10/10)に発表があった石本さんのtse(text stream editor) ‣ 早速使ってみた ワンライナー echo ""|tse --module "pymesh.stl" -p ".*" -a "m = pymesh.stl.Stl('sample.stl').rotate_x(45).save_st l('sample_out.stl')" ドヤ顔もできる! みんな

Slide 115

Slide 115 text

Pythonで 3Dプリント 3Dプリントに使える Python実装のソフトを紹介します

Slide 116

Slide 116 text

Cura • オープンソースのスライシングソフト ‣ https://github.com/Ultimaker/Cura ‣ 3Dプリントメーカー「Ultimaker」が提供 ‣ 構成 ‣ GUI: Python ‣ Engine: C++ Cura Engine Cura

Slide 117

Slide 117 text

Cura • オープンソースのスライシングソフト ‣ https://github.com/Ultimaker/Cura ‣ 3Dプリントメーカー「Ultimaker」が提供 ‣ 構成 ‣ GUI: Python ‣ Engine: C++ Cura Engine Cura スライシング?

Slide 118

Slide 118 text

スライシング? - データ作成 - データ修正 - 形式変換 - 3Dプリント - 後処理 ここ!

Slide 119

Slide 119 text

スライシング? レイヤー毎に分割し、 プリンタが読める形式に変換

Slide 120

Slide 120 text

• 3Dプリンタをネットワーク越しに操作可能にする ‣ 例えば, RaspberryPiに接続された3Dプリンタを 制御できるようになる OctoPrint RaspberryPI PC

Slide 121

Slide 121 text

まとめ

Slide 122

Slide 122 text

まとめ • 3Dプリントには、「データモデリング」「データ修正」「形式 変換」「3Dプリント」「後処理」作業が必要 • 3Dモデリングソフトはたくさんある ‣ Blender/Fusion360は無料でPythonモデリングが楽しめる ‣ Pymeshというデータ操作ライブラリがある • 3Dプリント用ソフトにはPython実装のものがいろいろある

Slide 123

Slide 123 text

We are Hiring!! • カブクではPythonエンジニアを募集しています ‣ GCP, AWS ‣ 3Dに興味ある方 ‣ 3Dプリンタ使いたい放題 ‣ グローバルな職場 エンジニアチーム

Slide 124

Slide 124 text

Thank you! Happy halloween :)