Slide 1

Slide 1 text

Python で始める Blender Addon制作入門 ナカオクタカヒロ / hiroshima.blender

Slide 2

Slide 2 text

ナカオク タカヒロ Follow me! Github/FB @kamera25 Twitter @csc_kamera25 仕事 : NWの保守運用@広島 趣味 : ゲーム制作 所属コミュニティ : 2

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

Blender とは 1

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

OSS の3DCGソフトウェア

Slide 7

Slide 7 text

Blenderについて Blender ポリゴン モデリング ビデオ編集 VFX アニメーション 2Dアニメ (グリースペンシル) デジタル合成 レンダリング Python プログラミング** ゲームエンジン* *2.7系まで搭載 **アドオン作成で利用可能 スカルプト モデリング リギング

Slide 8

Slide 8 text

https://www.blender.org/ https://www.youtube.com/watch?v=R7TLwKwixZA

Slide 9

Slide 9 text

Addon とは 2

Slide 10

Slide 10 text

おことわり ・本資料にはWebから引用をしている、画像や資料などがあります。  引用元はURLで示しているので、正しい情報についてはそちらをご確認ください。 ・引用以外の情報は クリエイティブコモンズ -表示 4.0 国際 (CC BY 4.0)でご利用いただけます。 ・この情報は2020年10月10日(最新版リリースはBlender 2.90.1)時点の情報となります。 ・以後の説明では、Blender 2.83.6 LTS の環境を想定しています。

Slide 11

Slide 11 text

Addonとは ・Blenderの機能を拡張するプログラム 例 : LoopTools、AutoMirror、Rigfyなど ・アドオンはほぼ全てPython製 ・Python 3.7系が利用できる(v2.80以上)   書式化文字リテラルなども利用できます。

Slide 12

Slide 12 text

Python で 動かしてみよう 3

Slide 13

Slide 13 text

1) 「Scripting」タブをクリック。 2) 左側にPython インタラクティブコンソール 右側にエディタ。 Pythonコードを実行! 実行準備してみよう コンソール エディタ

Slide 14

Slide 14 text

Hello World! >>> bpy.ops.object.text_add() >>> bpy.context.selected_objects[0].data.body = "Hello World!" Pythonインタラクティブコンソール(左)に 入力 & Enter

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

>>> bpy.ops.object.text_add() >>> bpy.context.selected_objects[0].data.body = "Hello World!" bpy.ops 参考 : https://docs.blender.org/api/current/index.html bpy.context bpy.data オペレータ アクション実行(メッシュ作成、レンダリング実行など ) 状態取得 (ポインター的な) Blenderで選択している物、存在している物 データ プロパティで操作可能なもの (オブジェクト名、原点など )

Slide 17

Slide 17 text

bpy.ops と bpy.data 編集 > プリファレンス から Pythonツールチップを表示 をチェック

Slide 18

Slide 18 text

bpy.ops と bpy.data bpy.ops bpy.data

Slide 19

Slide 19 text

bpy.ops と bpy.data >>> bpy.ops.object.text_add() >>> bpy.context.selected_objects[0].data.body = "Hello World!" bpy.ops bpy.data

Slide 20

Slide 20 text

操作履歴 操作から、対応するコード確認。

Slide 21

Slide 21 text

Addon を 作ってみよう 4

Slide 22

Slide 22 text

実行画面 Push!

Slide 23

Slide 23 text

実行画面

Slide 24

Slide 24 text

bl_info register() unregister() if __name__ == "__main__": Operator Class アドオンの構成 import文

Slide 25

Slide 25 text

bl_info アドオンの情報 (名前、作者、バージョン ) register() unregister() if __name__ == "__main__": Operator Class 実際の機能を記述するクラス エントリポイント ※便宜上、register()を呼び出すことが多い コールバック アドオン追加/削除時にBlenderから呼び出される。 ※便宜上、Operetor Classを登録することが多い

Slide 26

Slide 26 text

bl_info bl_info = { "name": "2oth F0x Builder", "author": "kamera25", "version": (1, 0), "blender": (2, 80, 0), "location": "F3 > 2oFox", "description": "Add like a 2oth F0x Model.", "warning": "", "doc_url": "https://kamera25.hatenadiary.jp/f0xdoc", "category": "Add Mesh", } アドオンの情報を書きこむ

Slide 27

Slide 27 text

bl_info インストールをして、 プリファレンス > アドオン > アドオン名を検索

Slide 28

Slide 28 text

Operator Class メンバ変数 このオペレータが呼ばれた時に 実行する処理を記述する。 bl_idname 一意な名前 bl_label 説明 bl_options 挙動の定義 execute() プロパティ オペレータ登録時の情報を記述 オペレータが呼び出された時に、 利用者が入力できる項目 を生成および定義 等 々

Slide 29

Slide 29 text

Operator Class class OBJECT_OT_2othFox_object(bpy.types.Operator): bl_idname = 'object.add_2ofox' bl_label = "2oth Foxぽいオブジェクトを作る" bl_options = { 'REGISTER', 'UNDO'} string_1st : bpy.props.StringProperty( name="一番上の文字") def execute(self, context): build_fox_base() return { 'FINISHED'}

Slide 30

Slide 30 text

Operator Class bl_idname = 'object.add_2ofox' bl_label = "2oth Foxぽいオブジェクトを作る"

Slide 31

Slide 31 text

Operator Class bl_options = { 'REGISTER', 'UNDO'}

Slide 32

Slide 32 text

Operator Class 変更 (一番下の文字2019→2020)

Slide 33

Slide 33 text

Operator Class アンドゥ execute() 虚無… 変更 (一番下の文字2019→2020)

Slide 34

Slide 34 text

Operator Class string_1st : bpy.props.StringProperty( name="一番上の文字") string_2nd : bpy.props.StringProperty( name="真ん中の文字") string_3rd : bpy.props.StringProperty( name="一番下の文字")

Slide 35

Slide 35 text

register() と unregister() 作ったオペレータークラスをBlenderに登録 register() unregister()

Slide 36

Slide 36 text

実行画面 登録(=register)したオペレーターはBlender上で直接実行できる Push!

Slide 37

Slide 37 text

実行画面

Slide 38

Slide 38 text

実行画面

Slide 39

Slide 39 text

https://github.com/kamera25/2oth-F0x-Builder

Slide 40

Slide 40 text

ご静聴 ありがとうございました

Slide 41

Slide 41 text

参考にした資料 How to iterate through all vertices of an object that contains multiple meshes? https://blender.stackexchange.com/questions/6139/how-to-iterate-through-all-vertices-of-a n-object-that-contains-multiple-meshes はじめてのBlenderアドオン開発 (Blender 2.8版) https://colorful-pico.net/introduction-to-addon-development-in-blender/2.8/ wm_keymap_utils.c (ソースコード) https://fossies.org/linux/blender/source/blender/windowmanager/intern/wm_keymap_utils.c

Slide 42

Slide 42 text

https://blendermarket.com/ ・AddonはBlender Market や Gumroadなどで販売可能。 ・ライセンス面にもかかわらず、購 入ケースも多い。