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のデータブロックへ直接アクセスする最重要モジュールです。ファイル内に存在する「実体」はすべてここにあります。
| 種類 | アクセス例 | 説明 |
|---|---|---|
| Object | bpy.data.objects | 全オブジェクトの一覧 |
| Mesh | bpy.data.meshes | 頂点・辺・面などのメッシュデータ |
| Material | bpy.data.materials | 質感・シェーダー情報 |
| Image | bpy.data.images | 外部テクスチャ等の画像データ |
| Scene | bpy.data.scenes | レンダリング設定やワールド情報 |
| Collection | bpy.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習得のロードマップ
- データ操作に強くなる →
bpy.data - 状況管理を理解する →
bpy.context - UI作成 & アドオン化 →
bpy.types+bpy.props - 自動化の仕上げ →
handlers/timers/msgbus
🚀 まずは最初の一歩から!
まずはBlender内のスクリプトエディタを開き、以下の1行を実行してみるだけでもOKです。
import bpy
print(bpy.context.object.name) # 選択中オブジェクトの名前を取得してコンソールに表示
Blender Python APIは広大ですが、構造さえ掴めばあとは組み合わせるだけ。 あなたの制作を、Pythonがもっと便利に変えてくれます。