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_infoBlenderの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で仮面ライダー3号を造る 仮面編 横顔のシルエッ...
ブログの復旧が難航してた話
ZBrushでゴジラ2001を作ってみる 側頭部のボリューム...
WebGL開発に関する情報が充実してきている
Kubric:機械学習用アノテーション付き動画生成パイプライ...
TensorSpace.js:ニューラルネットワークの構造を...
MFnMeshクラスのsplit関数
AmazonEC2のインスタンスをt1.microからt2....
HTML5・WebGLベースのグラフィックスエンジン『Goo...
adskShaderSDK
Oculus Goを購入!
DensePose:画像中の人物表面のUV座標を推定する
サンプルコードにも間違いはある?
UnityからROSを利用できる『ROS#』
ZBrushでアヴァン・ガメラを作ってみる 下アゴと頭部を作...
立体視を試してみた
R-CNN (Regions with CNN featur...
Gource:バージョン管理の履歴を可視化するツール
Zibra Liquids:Unity向け流体シミュレーショ...
オープンソースのネットワーク可視化ソフトウェアプラットフォー...
UnityのMonoBehaviourクラスをシングルトン化...
マジョーラ
ZBrushで仮面ライダー3号を造る 仮面編
Maya には3 種類のシェーダSDKがある?
Google Earth用の建物を簡単に作れるツール Goo...
SONY製のニューラルネットワークライブラリ『NNabla』
MeshLab:3Dオブジェクトの確認・変換に便利なフリーウ...
ZBrushでメカ物を作るチュートリアル動画
OpenMesh:オープンソースの3Dメッシュデータライブラ...
池袋パルコで3Dのバーチャルフィッティング『ウェアラブル ク...
機械学習で遊ぶ
Houdiniのライセンスの種類
Multi-View Environment:複数画像から3...
オープンソースのロボットアプリケーションフレームワーク『RO...
openMVG:複数視点画像から3次元形状を復元するライブラ...
プログラムによる景観の自動生成
『パシフィック・リム: アップライジング』のVFXブレイクダ...
ROMOハッカソンに行ってきた
2D→3D復元技術で使われる用語まとめ
オープンソースの物理ベースGIレンダラ『appleseed』
Raspberry Pi 2のGPIOピン配置
ZBrushCore


コメント