BlenderのPython環境に色んなパッケージをインストールする方法を知ってからすでに1年以上経っておりますが
重い腰を上げて、BlenderのAdd-onの作り方をちゃんと学ぼう。
とっかかりとしてはやはり公式ドキュメントのチュートリアルが1番わかりやすい↓
https://docs.blender.org/manual/en/latest/advanced/scripting/addon_tutorial.html
チュートリアルによると、Blender Add-onの最小構成は以下のようになるらしい↓
bl_info = { "name": "My Test Add-on", "blender": (2, 80, 0), "category": "Object", } def register(): print("Hello World") def unregister(): print("Goodbye World")
最低限この3つの要素が記述されていれば、(機能は別として)BlenderのAdd-onの体は成すようだ。Mayaのプラグインと似たお作法だな。
bl_info
BlenderのPreferencesのadd-onリストに表示されるadd-on名、バージョン、作者の情報などのメタデータを記述したdictionary。このAdd-onの実行に必要なBlenderの最低バージョンの指定もこの
bl_info
に記述する。ここに記載のバージョンより古いBlenderではこのAdd-onがリストに表示されない。register
このAdd-onを有効にした際に実行される関数。
unregister
register
でセットアップされたものをアンロードする関数。この関数はAdd-onが無効された時に実行される。※実際にAdd-onでBlenderの諸々を操作をするには、別途bpyモジュールをimportする必要がある。
Add-onの体裁はいったん抜きにして、Blenderの各種操作をPython script経由で呼び出してみよう。
以下のコードを↓
import bpy scene = bpy.context.scene for obj in scene.objects: obj.location.x += 1.0
BlenderのScripting workspaceでTextエディタにコピペして
実行ボタンを押してみると、選択中のオブジェクトがX軸方向に1.0移動する。
同様の処理をAdd-onとしてまとめると以下のようなコードになる↓
スポンサーリンク
bl_info = { "name": "Move X Axis", "blender": (2, 80, 0), "category": "Object", } import bpy class ObjectMoveX(bpy.types.Operator): """My Object Moving Script""" # Use this as a tooltip for menu items and buttons. bl_idname = "object.move_x" # Unique identifier for buttons and menu items to reference. bl_label = "Move X by One" # Display name in the interface. bl_options = {'REGISTER', 'UNDO'} # Enable undo for the operator. def execute(self, context): # execute() is called when running the operator. # The original script scene = context.scene for obj in scene.objects: obj.location.x += 1.0 return {'FINISHED'} # Lets Blender know the operator finished successfully. def register(): bpy.utils.register_class(ObjectMoveX) def unregister(): bpy.utils.unregister_class(ObjectMoveX) # This allows you to run the script directly from Blender's Text editor # to test the add-on without having to install it. if __name__ == "__main__": register()
bpy.types.Operator
クラスを継承したObjectMoveX
クラスを作成して、bl_idname
, bl_label
, bl_options
に各種情報の記述、execute
関数にさっきの処理を記述している。
register
関数でObjectMoveX
クラスのロード、unregister
関数でアンロードしている。
このコードをBlenderのTextエディタにコピペして実行ボタンを押すと、今回は処理が実行されず、このOperator Add-onの登録だけが行われる。
処理を実行するには、Operator Searchメニューで“Move X by One”(bl_label
に記述した名前)と入力してEnterキーを押す。すると先ほどと同様の処理が実行される。
このAdd-onコードを拡張子.pyのファイルに保存して、BlenderのPreferencesからAdd-ons→Install…で指定すればAdd-onとしてインストールできる。
BlenderのAPI
コード中にbpy
と書いていたBlenderのAPIは、公式のドキュメントにオーバービュー、クイックスタートもあるし、各モジュールの詳細も載っている。
だけど、BlenderNationにあったこちらの動画で紹介されているように、Blender上で各種操作を行って、その操作のコマンドをコピペして把握する方が習得が速そう↓
操作が全部コマンドとして出力されるのはMayaのMELと似ていますね。
またBlenderのtextエディタから各種Add-onのテンプレートが呼び出せるようです。
スポンサーリンク