.wp-block-jetpack-rating-star span.screen-reader-text { border: 0; clip: rect(1px, 1px, 1px, 1px); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; word-wrap: normal; }

サイトアイコン NegativeMindException

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


スポンサーリンク

関連記事

ZBrushの作業環境を見直す

2012 昨日のクローズアップ現代を見た

OpenVDB:3Dボリュームデータ処理ライブラリ

3Dスキャンに基づくプロシージャルフェイシャルアニメーション

SIGGRAPH ASIAのマスコット

AnacondaとTensorFlowをインストールしてVisual Studio 2015で使う

Kubric:機械学習用アノテーション付き動画生成パイプライン

トランスフォーマー :リベンジのメイキング (デジタルドメイン)

ブログの復旧が難航してた話

オープンソースの取引プラットフォーム

オープンソースの顔認識フレームワーク『OpenBR』

Unityで画面タッチ・ジェスチャ入力を扱う無料Asset『TouchScript』

ZBrushで仮面ライダー3号を造る 仮面編 PolyGroupを分割する

UnityでPoint Cloudを表示する方法

オープンソースのテクスチャマッピングシステム『Ptex』

ZBrushでアヴァン・ガメラを作ってみる 甲羅のバランス調整

ゴジラ(2014)のディティール制作の舞台裏

白組による『シン・ゴジラ』CGメイキング映像が公開された!

ManimML:機械学習の概念を視覚的に説明するためのライブラリ

ラクガキの立体化 反省

MeshLab:3Dオブジェクトの確認・変換に便利なフリーウェア

ブラウザ操作自動化ツール『Selenium』を試す

MB-Lab:Blenderの人体モデリングアドオン

PolyPaint

ポリ男からMetaHumanを作る

openMVG:複数視点画像から3次元形状を復元するライブラリ

映画『ゴジラ-1.0』 メイキング情報まとめ

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

Autodesk CompositeとAutodesk MatchMoverが無料

Python for Unity:UnityEditorでPythonを使えるパッケージ

OpenCVのfindEssentialMat関数を使ったサンプルを読んでみる

映画『ミュータント・タートルズ』を観てきた

ジュラシック・パークの続編『ジュラシック・ワールド』

TensorSpace.js:ニューラルネットワークの構造を可視化するフレームワーク

Adobe Photoshop CS4 Extendedの3Dモデル編集機能

Zbrushでメカ物を作るチュートリアル動画

ジュラシック・パークのメイキング

Konashiを買った

iPhone・iPod touchで動作する知育ロボット『ROMO』

ZBrushでアヴァン・ガメラを作ってみる おでこ(?)のバランス調整

BSDF: (Bidirectional scattering distribution funct...

ZBrushでUndo Historyを動画に書き出す

モバイルバージョンを終了