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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for NAKAOKU Takahiro NAKAOKU Takahiro
October 10, 2020

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

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

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

Avatar for NAKAOKU Takahiro

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