Pythonで始める、Blenderアドオン制作入門

 Pythonで始める、Blenderアドオン制作入門

PyCon mini Hiroshima 2020 で発表した資料です。

イベント詳細 : https://hiroshima.pycon.jp/2020/
コード : https://github.com/kamera25/2oth-F0x-Builder

611d5744afc7a95add674225bc6b19b7?s=128

Takahiro Nakaoku

October 10, 2020
Tweet

Transcript

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

  2. ナカオク タカヒロ Follow me! Github/FB @kamera25 Twitter @csc_kamera25 仕事 :

    NWの保守運用@広島 趣味 : ゲーム制作 所属コミュニティ : 2
  3. 3

  4. Blender とは 1

  5. None
  6. OSS の3DCGソフトウェア

  7. Blenderについて Blender ポリゴン モデリング ビデオ編集 VFX アニメーション 2Dアニメ (グリースペンシル) デジタル合成

    レンダリング Python プログラミング** ゲームエンジン* *2.7系まで搭載 **アドオン作成で利用可能 スカルプト モデリング リギング
  8. https://www.blender.org/ https://www.youtube.com/watch?v=R7TLwKwixZA

  9. Addon とは 2

  10. おことわり ・本資料にはWebから引用をしている、画像や資料などがあります。  引用元はURLで示しているので、正しい情報についてはそちらをご確認ください。 ・引用以外の情報は クリエイティブコモンズ -表示 4.0 国際 (CC BY

    4.0)でご利用いただけます。 ・この情報は2020年10月10日(最新版リリースはBlender 2.90.1)時点の情報となります。 ・以後の説明では、Blender 2.83.6 LTS の環境を想定しています。
  11. Addonとは ・Blenderの機能を拡張するプログラム 例 : LoopTools、AutoMirror、Rigfyなど ・アドオンはほぼ全てPython製 ・Python 3.7系が利用できる(v2.80以上)   書式化文字リテラルなども利用できます。

  12. Python で 動かしてみよう 3

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

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

    入力 & Enter
  15. None
  16. >>> 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で選択している物、存在している物 データ プロパティで操作可能なもの (オブジェクト名、原点など )
  17. bpy.ops と bpy.data 編集 > プリファレンス から Pythonツールチップを表示 をチェック

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

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

    bpy.ops bpy.data
  20. 操作履歴 操作から、対応するコード確認。

  21. Addon を 作ってみよう 4

  22. 実行画面 Push!

  23. 実行画面

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

    import文
  25. bl_info アドオンの情報 (名前、作者、バージョン ) register() unregister() if __name__ == "__main__":

    Operator Class 実際の機能を記述するクラス エントリポイント ※便宜上、register()を呼び出すことが多い コールバック アドオン追加/削除時にBlenderから呼び出される。 ※便宜上、Operetor Classを登録することが多い
  26. 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", } アドオンの情報を書きこむ
  27. bl_info インストールをして、 プリファレンス > アドオン > アドオン名を検索

  28. Operator Class メンバ変数 このオペレータが呼ばれた時に 実行する処理を記述する。 bl_idname 一意な名前 bl_label 説明 bl_options

    挙動の定義 execute() プロパティ オペレータ登録時の情報を記述 オペレータが呼び出された時に、 利用者が入力できる項目 を生成および定義 等 々
  29. 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'}
  30. Operator Class bl_idname = 'object.add_2ofox' bl_label = "2oth Foxぽいオブジェクトを作る"

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

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

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

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

    string_3rd : bpy.props.StringProperty( name="一番下の文字")
  35. register() と unregister() 作ったオペレータークラスをBlenderに登録 register() unregister()

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

  37. 実行画面

  38. 実行画面

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

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

  41. 参考にした資料 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
  42. https://blendermarket.com/ ・AddonはBlender Market や Gumroadなどで販売可能。 ・ライセンス面にもかかわらず、購 入ケースも多い。