bpy モジュールのオーバビュー【第 2 回 Python × Blender】

Blenderユーザーインターフェースの動作は全て BlenderPython 関数の結果です。



それゆえに Blender のユーザーは Python スクリプトやコンソールによって、インターフェースの動作を制御することが可能となっています。



今回オーバービューする BlenderPython APIbpyというモジュールです。



そこで今回はこのbpyモジュールの主要なサブモジュールについてオーバービューしていきます(それぞれのサブモジュールの詳しい記事もこれから別々に書く予定です。リンクも後から追加していきます)。



今回の記事は Blender バージョン 2.78cでの説明となります。このバージョンの公式のドキュメンテーションは以下で見ることができます。
docs.blender.org

bpy.ops

このbpy.opsサブモジュールはオペレーターを含んでいます。これらのオペレーターは、デフォルトのインターフェースでオブジェクトを操作するように、オブジェクトを操作する主要な関数です。このbpy.opsサブモジュールはさらに、3D Viewport・レンダリング・テキストなども操作できます。
docs.blender.org




3D オブジェクトを操作する際に最も重要な 2 つのクラスはbpy.ops.objectbpy.ops.meshです。



objectクラスは同時に複数選択されたオブジェクトを操作するための関数や、多くのユーティリティを備えています。
docs.blender.org




meshクラスは Edit Mode などで用いられるオブジェクトの頂点・辺・面を操作するための関数を備えています。
docs.blender.org




バージョン 2.78c の時点では、bpy.opsサブモジュールには 71 のクラスがあります。


bpy.context

このbpy.contextサブモジュールは様々な条件によってオブジェクトや Blender のエリアにアクセスするのに用いられます。
docs.blender.org



このbpy.contextサブモジュールの主な関数は、ユーザーが扱っている current なデータにアクセスするする方法を提供することです。



例えば選択された全てのオブジェクトを並び替えるボタンを作った時には、自分の思いのままオブジェクトを選択することが可能です。そしてその選択した全てのオブジェクトをbpy.context.select_objectsで並び替えることができます。



アドオンを製作する際にはbpy.context.sceceを頻繁に用います。これらはある種の Blender オブジェクトの必須のインプットとなっているからです。



またbpy.contextは active なオブジェクトにアクセスする時、Object Mode と Edit Mode を切り替える時、Grease Pencil からのデータを受け取る時にも用いられます。


bpy.data

このbpy.dataサブモジュールは Blender の内部データにアクセスする際に用いられます。
docs.blender.org
このサブモジュールのドキュメンテーションを理解するのは困難ではありますが、よく使うサブモジュールです。



bpy.data.objectsクラスはオブジェクトの形や位置を決定する全てのデータを持ちます。



前述のようにbpy.contextサブモジュールでオブジェクト群を指定する際には、bpy.contextクラスはbpy.dataクラスのデータブロックへの参照を生成します。


bpy.app

このbpy.appサブモジュールはまだ全てドキュメンテーションされていませんが、Python スクリプティングやアドオン開発において重要です。
docs.blender.org



bpy.app.handlersサブモジュールは Blender イベントに対するカスタム関数を呼ぶ特殊な関数を含みます。最もよく用いられるのが 3D Viewport がアップデート(フレームチェンジ)される毎に関数を実行する frame change handle です。


bpy.types, bpy.utils, bpy.props

これらのサブモジュールはアドオン開発の際に用いられます。
docs.blender.org
docs.blender.org
docs.blender.org


bpy.path

このbpy.pathサブモジュールは本質的にはos.pathサブモジュールと同じです。
docs.blender.org
Blender のコア開発チーム以外の Python デベロッパには、稀に便利となるサブモジュールです。