$30 off During Our Annual Pro Sale. View Details »

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

NAKAOKU Takahiro
October 10, 2020

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

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

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

NAKAOKU Takahiro

October 10, 2020
Tweet

More Decks by NAKAOKU Takahiro

Other Decks in Design

Transcript

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

    View Slide

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

    View Slide

  3. 3

    View Slide

  4. Blender とは
    1

    View Slide

  5. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. Addon とは
    2

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. View Slide

  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で選択している物、存在している物
    データ
    プロパティで操作可能なもの (オブジェクト名、原点など )

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. Addon を
    作ってみよう
    4

    View Slide

  22. 実行画面
    Push!

    View Slide

  23. 実行画面

    View Slide

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

    View Slide

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

    View Slide

  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",
    }
    アドオンの情報を書きこむ

    View Slide

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

    View Slide

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


    View Slide

  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'}

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  37. 実行画面

    View Slide

  38. 実行画面

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide