Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. ナカオク タカヒロ Follow me! Github/FB @kamera25 Twitter @csc_kamera25 仕事 :

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

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

    レンダリング Python プログラミング** ゲームエンジン* *2.7系まで搭載 **アドオン作成で利用可能 スカルプト モデリング リギング
  4. おことわり ・本資料にはWebから引用をしている、画像や資料などがあります。  引用元はURLで示しているので、正しい情報についてはそちらをご確認ください。 ・引用以外の情報は クリエイティブコモンズ -表示 4.0 国際 (CC BY

    4.0)でご利用いただけます。 ・この情報は2020年10月10日(最新版リリースはBlender 2.90.1)時点の情報となります。 ・以後の説明では、Blender 2.83.6 LTS の環境を想定しています。
  5. >>> 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で選択している物、存在している物 データ プロパティで操作可能なもの (オブジェクト名、原点など )
  6. bl_info アドオンの情報 (名前、作者、バージョン ) register() unregister() if __name__ == "__main__":

    Operator Class 実際の機能を記述するクラス エントリポイント ※便宜上、register()を呼び出すことが多い コールバック アドオン追加/削除時にBlenderから呼び出される。 ※便宜上、Operetor Classを登録することが多い
  7. 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", } アドオンの情報を書きこむ
  8. Operator Class メンバ変数 このオペレータが呼ばれた時に 実行する処理を記述する。 bl_idname 一意な名前 bl_label 説明 bl_options

    挙動の定義 execute() プロパティ オペレータ登録時の情報を記述 オペレータが呼び出された時に、 利用者が入力できる項目 を生成および定義 等 々
  9. 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'}
  10. 参考にした資料 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