Blender アドオン編 #1 -アドオン開発勉強記録 第1回-
どうも蒼水です。
先月からBlenderでアドオンを開発すべく、こちらのページを参考にしつつ勉強を進めております。
いつかTA(テクニカルアーティスト)のような何かになりたい(願望)
最高なので興味ある方は是非読みましょう...!
https://colorful-pico.net/introduction-to-addon-development-in-blender/2.8/index.html
今回の目的
Blenderアドオン編では復習がてら自分で咀嚼したものを個人的にまとめなおして理解を深める目的で進めていきます。
序盤ではその通り上記で紹介した記事を参考に自分が勉強した内容を自分なりに咀嚼して書いていきます。
一通り学び終え、中盤以降では改造から始め自分のオリジナルでアドオンを開発するまでに至れればなと思っております。
そもそもアドオンとは?
BlenderにおけるアドオンとはBlenderのデフォルトではない機能を拡張して使うためのもの、という感じでしょうか。
BlenderはPythonで開発されており、また各種APIも公開されているためこれらを利用してアドオンを開発することができるようになっています。
docs.blender.org
とはいえ全部英語であること&物量が半端ない、という感じで全部見ていくのは結構キツイですね...。
ので、先ほどのようなページを用意してくださっている方には感謝極まりないです。ありがたい...。
こんな感じで【編集->プリファレンス->アドオン】からON/OFFできます。
インストール方法は直接アドオンのフォルダにぶち込む方法と、Zipからインストールする方法がありますがこれに関しては割愛します。
アドオン開発の準備
前述の通りBlenderのアドオン開発にはPythonを使ってコーディングしていく必要があります。
そのために開発環境が必要になるわけですが、Blender公式でしっかりコーディング用の機能を用意してくれています。
上部のタブの中にあるScriptingというものがあるのでこれを選択するとこのような画面になります。開発に必要なテキストエディタ、コンソール、オートコンプリートの機能も備わっており開発するには十分かと思いますのでこれを使用していくため特に準備は不要です。
▼オートコンプリート(自動補完機能)に関して
Visual Studioを普段使っているのでインテリセンスが欲しくてたまらないんですよね....
Blenderにも一応それに近い機能があるのですが、自動では表示してくれないので上部【メニュー->編集->オートコンプリート】をしてやる必要があります。
ショートカットは【Ctrl+Space】なので基本これを使っていくことで快適にコーディングが行えるようになります。
一点注意点としては、どうもこのオートコンプリート、VSのようにモジュールが全て読み込まれていてそこから候補を出してくれるというものではないらしく自分が今書いているスクリプト内で使われた関数や変数を候補として出してくれる機能らしいです。そこまでで出てこなかったモノ、インポートしたbpyモジュールなどからの候補は上げてくれないらしいです。
そこは少し不便ですが最初一回書けば後は補完してくれるのでないよりマシかな、というくらいですかね。
そこまで気にならなければこのエディタで、いやインテリセンス欲しい!ってなったらVS使うのがいいかな~くらいに自分は思っております。
Blenderアドオンのおまじない要素
アドオンを開発していくにあたって必ず必要になる要素に関して書いていきます。
bl_info
これはアドオンを認識させるために基本的な情報を辞書型で列挙しておくためのものですね。
主にプリファレンスに表示されるために必要になる部分です。
こんな感じで列挙します。
bl_info = { "name": "サンプル", "author": "Yui_Aomi", "version": (1, 0), "blender": (2, 80, 0), "location": "追加→メッシュ", "description": "サンプルアドオン", "warning": "機能はありません", "support": "TESTING", "wiki_url": "sample", "tracker_url": "sanmple", "category": "Object" }
それぞれが以下のように対応します。
なお、blenderは対応するblenderのバージョン
supportはプリファレンス上部にある【公式】【コミュニティ】【テスト中】のどれかを認識するためにそれぞれ
【公式】→OFFICIAL
【コミュニティ】→COMMUNITY
【テスト中】→TESTING
と指定すればそれぞれで認識されます。
開発中はTESTINGに、完成したらCOMMUNITYにする感じの運用になるかなと思います。
register
これはプリファレンスからアドオンを有効にするために必ず必要になる関数になります。
アドオンを有効化する際に呼ばれアドオンの登録やコンソールへの出力などを行います。
def register(): print("サンプルアドオンが有効になりました")
今回はメニューや実際実行される関数はないためコンソールに文字列を表示させるためだけのものです。
今回はありませんが機能が追加してclass等が出てきた場合それらを登録していくのがこの部分になります。
unregister
これは逆にアドオンを無効にするために必ず必要になる関数です。
こちらも同様に今回は文字列の表示のみになります
def unregister(): print("サンプルアドオンが無効になりました")
コード全体
bl_info = { "name": "サンプル", "author": "Yui_Aomi", "version": (1, 0), "blender": (2, 80, 0), "location": "追加→メッシュ", "description": "サンプルアドオン", "warning": "機能はありません", "support": "TESTING", "wiki_url": "sample", "tracker_url": "sanmple", "category": "Object" } def register(): print("サンプルアドオンが有効になりました") def unregister(): print("サンプルアドオンが無効になりました") if __name__ == "__main__": register()
このコードで最低限アドオンのON/OFFができるだけのものが出来上がります。機能はありません。
他にも必ず必要になるオペレータークラスとexecuteやmenu_fnなどがありますが、これらは次回に回します。
まとめ
最低限【bl_info】【register】【unregister】とメイン処理部分があればアドオンのような何かをBlenderで動作させることができるようになるらしい。
次回はこのON/OFFだけできるようになったコードに機能を追加していき、もう少しアドオンっぽい何かにして行きます。