PythonでBlenderのAdd-on開発

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のテンプレートが呼び出せるようです。

関連記事

Multi-View Environment:複数画像から3次元形状を再構築するライブラリ

ドットインストールのWordPress入門レッスン

ラクガキの立体化 モールドの追加

Google App Engine上のWordPressでFlickrの画像を貼る

Web経由でRaspberry PiのGPIOを操作したい

リメイク版ロボコップスーツのメイキング

プログラムによる景観の自動生成

ZBrushでアヴァン・ガメラを作ってみる 甲羅の修正・脚の作り込み

ポリゴンジオメトリ処理ライブラリ『pmp-library (Polygon Mesh Process...

Mayaのポリゴン分割ツールの進化

LuxCoreRender:オープンソースの物理ベースレンダラ

頭蓋骨からの顔復元と進化過程の可視化

C++ 標準テンプレートライブラリ (STL)

リアルタイム レイトレーシングAPI『DirectX Raytracing (DXR)』

クラスの基本

Blenderでよく使うaddon

Unreal Engine Tokyo MeetUp!へ行ってきた

UnityのTransformクラスについて調べてみた

AndroidもopenGLも初心者さ (でもJavaは知ってるよ)

動的なメモリの扱い

SVM (Support Vector Machine)

ニンテンドー3DSのGPU PICA200

オープンソースの物理ベースレンダラ『Mitsuba』をMayaで使う

OpenCVの超解像(SuperResolution)モジュールを試す

UnityのMonoBehaviourクラスをシングルトン化する

ZBrush 2018へのアップグレード

レンダラ制作はOpenGL とか DirectX を使わなくてもできるんだぜ

Python.NET:Pythonと.NETを連携させるパッケージ

ラクガキの立体化 進捗

WordPressの表示を高速化する

ZBrushでゴジラ2001を作ってみる 姿勢の変更

ZBrushで仮面ライダー3号を造る 仮面編 Dam Standardブラシでディティールを彫る

TVML (TV program Making language)

iPhone x ロボットハッカソン~RomoのiPhone用SDKで目覚ましアプリを作る~

OpenMayaRender

VCG Library:C++のポリゴン操作ライブラリ

iPhone欲しいなぁ

Cartographer:オープンソースのSLAMライブラリ

OpenFace:Deep Neural Networkによる顔の個人識別フレームワーク

CGALDotNet:計算幾何学ライブラリ CGALのC#ラッパー

Twitter APIのPythonラッパー『python-twitter』

タマムシっぽい質感

コメント