bpy モジュールのオーバビュー【第 2 回 Python × Blender】
Blender のユーザーインターフェースの動作は全て Blender の Python 関数の結果です。
それゆえに Blender のユーザーは Python スクリプトやコンソールによって、インターフェースの動作を制御することが可能となっています。
今回オーバービューする Blender の Python API はbpy
というモジュールです。
そこで今回はこのbpy
モジュールの主要なサブモジュールについてオーバービューしていきます(それぞれのサブモジュールの詳しい記事もこれから別々に書く予定です。リンクも後から追加していきます)。
今回の記事は Blender バージョン 2.78cでの説明となります。このバージョンの公式のドキュメンテーションは以下で見ることができます。
docs.blender.org
bpy.ops
このbpy.ops
サブモジュールはオペレーターを含んでいます。これらのオペレーターは、デフォルトのインターフェースでオブジェクトを操作するように、オブジェクトを操作する主要な関数です。このbpy.ops
サブモジュールはさらに、3D Viewport・レンダリング・テキストなども操作できます。
docs.blender.org
3D オブジェクトを操作する際に最も重要な 2 つのクラスはbpy.ops.object
とbpy.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 デベロッパには、稀に便利となるサブモジュールです。