BlenderでPythonスクリプトを実行
【概要】
Blenderは3次元コンピュータグラフィックス・アニメーションソフトウェアであり、Pythonスクリプトを使用してオブジェクト操作やレンダリングを自動化できる。本記事では、Blenderの起動からPythonコンソールの使用方法、オブジェクトやライト、カメラの設定、レンダリング実行までの基本的な操作手順を解説する。
【目次】
【関連する外部ページ】
- Blenderの公式ページ: https://www.blender.org/
- Blender Python API(bpy.data): https://docs.blender.org/api/current/bpy.types.BlendData.html
【サイト内の関連情報】
第1章:前準備
Blenderは,3次元コンピュータグラフィックス・アニメーションソフトウェアである.3次元モデルの編集,レンダリング,光源やカメラ等の設定による3次元コンピュータグラフィックス・アニメーション作成機能がある.
メニューの日本語化を行っておくと使いやすい.「編集(Edit)→プリファレンス(Preferences)→インターフェイス(Interface)→翻訳(Translation)」で設定できる.
第2章:BlenderのPythonコンソール
Blenderでの画面ワークスペースの切り替え
- Blenderのワークスペース(作業目的に特化した画面レイアウト)を「スクリプティング」に変える操作
画面ワークスペースとして「スクリプティング」を選択する。
- Blenderの画面ワークスペースを元に戻す操作
画面ワークスペースとして「レイアウト」を選択する。
Blender PythonコンソールでPythonスクリプトを実行してみる
- Blenderを起動する
- Blender Pythonコンソール(Blenderに組み込まれたPythonプログラミング環境)を開くために、Blenderのワークスペースを「スクリプティング」に変更する
- コンソール画面が開くので確認する
Pythonコンソールは、Blenderに組み込まれた対話型Python実行環境である。短いコードはPythonコンソールに入力してEnterキーで実行できる。複数行のコードは、スクリプティングワークスペースのテキストエディターに貼り付け、「スクリプト実行」またはAlt+Pで実行できる。
- 試しにBlenderオブジェクト(シーン内の3Dモデルやカメラ、ライトなどの要素)の一覧表示を行ってみる。
コンソール画面またはテキストエディターで次のコードを実行する。
import bpy for obj in bpy.data.objects: print(obj.name)Blenderオブジェクトが確認できる(下の実行結果例ではCamera、Cube、Lightの3つ)。
- 試しにメッシュオブジェクト(タイプが「MESH」であるオブジェクトで、頂点、辺、面で構成される3Dオブジェクト)の一覧表示を行ってみる。
コンソール画面またはテキストエディターで次のコードを実行する。
import bpy for obj in bpy.data.objects: if obj.type == "MESH": print(obj.name)
- 今度は、Blender画面の一覧表示を行ってみる。
コンソール画面またはテキストエディターで次のコードを実行する。
import bpy for screen in bpy.data.screens: print(screen.name)画面名が確認できる。
- 自動補完を試してみる
コンソール画面で
import bpyを実行したあと、「bpy.data.」(BlenderのPython APIのデータアクセスモジュール)と入力し、「オートコンプリート」をクリックする。
補完の候補が表示される。
第3章:BlenderでPythonを使ってみる
レンダリング
次の例では、レンダリング結果をホームディレクトリのhoge.pngに保存し、保存先を表示する。
import bpy
from pathlib import Path
output_path = Path.home() / "hoge.png"
bpy.ops.render.render()
bpy.data.images["Render Result"].save_render(filepath=str(output_path))
print(f"saved: {output_path}")
表示された保存先にhoge.pngが作成される。できあがった画像ファイルの例は次の通りである。
ライトの設定
Pythonスクリプトでライト(光源)の位置と明るさを設定する。
import bpy
from pathlib import Path
light = {"location": (20, 0, 10), "energy": 800.0}
light_obj = bpy.data.objects["Light"]
light_obj.location = light["location"]
light_obj.data.energy = light["energy"]
output_path = Path.home() / "hoge.png"
bpy.ops.render.render()
bpy.data.images["Render Result"].save_render(filepath=str(output_path))
print(f"saved: {output_path}")
表示された保存先に、ライト設定後のレンダリング画像が保存される。
カメラの設定
Pythonスクリプトでカメラ(シーン撮影用の視点)を設定する。
import math
from pathlib import Path
import bpy
camera = {
"location": (15, 0, 15),
"rotation_euler": (0, 1, 0),
"type": "PERSP",
"angle": 50.0 * (math.pi / 180.0),
}
scene = bpy.context.scene
scene.camera.location = camera["location"]
scene.camera.rotation_euler = camera["rotation_euler"]
scene.camera.data.type = camera["type"] # "PERSP"(透視投影)または"ORTHO"(平行投影)
scene.camera.data.angle = camera["angle"] # カメラの画角(ラジアン単位)
output_path = Path.home() / "hoge.png"
bpy.ops.render.render()
bpy.data.images["Render Result"].save_render(filepath=str(output_path))
print(f"saved: {output_path}")
表示された保存先に、カメラ設定後のレンダリング画像が保存される。できあがった画像ファイルの例は次の通りである。
第4章:データアクセスを行うPythonプログラム
【関連する外部ページ】https://docs.blender.org/api/current/bpy.types.BlendData.html
https://docs.blender.org/api/current/bmesh.html
オブジェクトの一覧
import bpy
for obj in bpy.data.objects:
print(obj.name)
シーン名の一覧
import bpy
print(bpy.data.scenes.keys())
メッシュオブジェクトのメッシュデータの取得
import bpy
mesh = bpy.data.objects["Cube"].data
for edge in mesh.edges:
print(edge)
for vertex in mesh.vertices:
print(vertex)
for polygon in mesh.polygons:
print(polygon)