Blenderアドオン開発|Python API(bpy):全体像ガイド

はじめに

Blenderを触っていると一度は耳にする「Pythonでの自動化」。その中核を担うのが bpy(Blender Python API) です。 アドオン開発、大量のオブジェクト処理、プロシージャルな造形。これらすべてを実現するための強力なツールである bpy ですが、その構造は非常に広大です。

この記事では、bpyの全モジュール・サブモジュール・クラス階層を網羅的に解説し、「どこに何があるのか?」「何ができるのか?」を体系的に見える化します。


bpyとは何ですか?

bpyとは、BlenderをPythonから操作するための公式APIです。 Blender内部のデータ(メッシュやマテリアル等)へのアクセスから、GUI上のボタン操作の実行、独自のメニュー追加まで、Blenderで行うほぼすべての作業をコードで制御できるようになります。 「手作業で数時間かかる作業を、一瞬で終わらせる」ための便利な道具だと考えてください。


bpy 全体マップ

bpyの核心は主に以下の12セクションで構成されています。この階層図が頭に入れば、APIリファレンスの海で迷子になることはありません。

bpy
├── bpy.data      # 【データ】内部資産の管理
├── bpy.ops       # 【操作】ユーザーが行うコマンド
├── bpy.context   # 【状態】現在の選択やモード
├── bpy.types     # 【定義】クラスや型の構造
├── bpy.utils     # 【補助】登録・便利ツール
├── bpy.props     # 【UI】カスタム変数の定義
├── bpy.app       # 【本体】アプリ情報・イベント
│   ├── handlers  # イベントフック
│   ├── timers    # タイマー処理
│   └── translations # 翻訳
├── bpy.path      # 【パス】ファイル管理
├── bpy_extras    # 【拡張】補助ユーティリティ
└── bpy.msgbus    # 【通知】値の変化監視

1. bpy.data ― 内部データへのダイレクトアクセス

Blenderのデータブロックへ直接アクセスする最重要モジュールです。ファイル内に存在する「実体」はすべてここにあります。

種類アクセス例説明
Objectbpy.data.objects全オブジェクトの一覧
Meshbpy.data.meshes頂点・辺・面などのメッシュデータ
Materialbpy.data.materials質感・シェーダー情報
Imagebpy.data.images外部テクスチャ等の画像データ
Scenebpy.data.scenesレンダリング設定やワールド情報
Collectionbpy.data.collectionsグループ管理

⚠️ Grease Pencilに関する注意 Blender 4.3以降、グリースペンシルは新構造(GPv3)へ移行しています。旧来の grease_pencils ではなく、新しい gpencil_v3 などのAPIを確認する必要があるため、バージョンによる差異に注意しましょう。

💡 実践的なコツ data 経由は「選択状態」に依存しないため、自動化ではもっとも安定します。ただし、不要なデータも残りやすいため、bpy.data.orphans_purge()(ゴミ掃除)とセットで覚えるのがおすすめです。


2. bpy.ops ― ユーザー操作の再現(オペレーター)

BlenderのUI上の操作と同じ挙動をPythonから実行できます。

# 【基本例】UI操作(ボタンクリック等)と同じ挙動をPythonから実行
result = bpy.ops.mesh.primitive_cube_add()
print(result) # -> {'FINISHED'} が実行結果として返る
  • 戻り値の性質
    オペレーターの戻り値はオブジェクトそのものではなく、{'FINISHED'}{'CANCELLED'} といった**実行結果の状態(セット)**が返ります。
  • 注意点
    非常に「Context依存」が強く、特定のエリア(3Dビューポート等)にマウスがないとエラーを吐くことがあります。

3. bpy.context ― 現在の「状況」を把握する

アドオン開発で最も参照される情報源です。「今、誰が選択されているか?」を特定します。

  • bpy.context.object
    アクティブなオブジェクト(主役)
  • bpy.context.selected_objects
    現在選択中の全オブジェクト
  • bpy.context.mode
    現在のモード(’OBJECT’, ‘EDIT’等)

地域依存(Area/Region)問題 bpy.context.area.type'VIEW_3D' でないと動作しないオペレーターが多く存在します。背景スクリプトなどで失敗する場合は、このコンテキストが原因であることがほとんどです。


4. bpy.types ― すべての型の定義(心臓部)

UIやオペレーターの「設計図」はすべてここにあります。アドオン開発で自作のパネルやボタンを作る際のベースクラス(Operator, Panel など)を提供します。


5. bpy.props ― UI用プロパティ定義

アドオンの設定項目(スライダーやチェックボックス)を作るための特殊な変数です。

  • BoolProperty, IntProperty, FloatProperty, StringProperty
  • EnumProperty
    ドロップダウンリスト
  • PointerProperty
    他のデータへの参照

6. bpy.app ― Blenderアプリそのものの制御

  • handlers
    「保存直前」や「レンダリング完了後」に処理を差し込む。
  • timers
    数秒おきに特定の関数を走らせる。
  • translations
    アドオンの多言語対応(i18n)。

7. サブモジュール(path / extras / msgbus)

  • bpy.path
    //(相対パス)を絶対パスに変換するなど、ファイル操作に必須。
  • bpy_extras
    3D座標を2D画面上の座標に変換する計算など、数学的な補助ツールが満載。
  • bpy.msgbus
    プロパティが書き換わった瞬間に通知を受け取る「購読」システム。

まとめ:bpy習得のロードマップ

  1. データ操作に強くなるbpy.data
  2. 状況管理を理解するbpy.context
  3. UI作成 & アドオン化bpy.types + bpy.props
  4. 自動化の仕上げhandlers / timers / msgbus

🚀 まずは最初の一歩から!

まずはBlender内のスクリプトエディタを開き、以下の1行を実行してみるだけでもOKです。

import bpy
print(bpy.context.object.name)  # 選択中オブジェクトの名前を取得してコンソールに表示

Blender Python APIは広大ですが、構造さえ掴めばあとは組み合わせるだけ。 あなたの制作を、Pythonがもっと便利に変えてくれます。

>KOJI REPORTへようこそ

KOJI REPORTへようこそ

当ブログでは日々起きた出来事や料理系の記事を面白可笑しく記載しています。日記がてら「Magic book diary(魔導書日記)」と称してるカテゴリも用意していますので是非みてくださいね♪では、当ブログを心行くままお過ごしください★

CTR IMG