Blender で Python スクリプトを実行
BlenderでPythonスクリプトを実行する手順の説明である.Blenderは3Dコンピュータグラフィックス・アニメーションソフトウェアであり,Pythonコンソールを使用してプログラムを実行できる.Blenderの公式ページからインストールし,スクリプト作成ワークスペースに切り替えるとPythonコンソールが利用できる.コンソール内ではIPythonシェルが動作し,Blenderオブジェクトや画面の情報を表示できる.さらに,レンダリングやライト・カメラの設定もPythonスクリプトで行える.データアクセスやオブジェクトの一覧表示に関する情報も提供されている.
Blenderは,3次元コンピュータグラフィックス・アニメーションソフトウェア. 立体の編集,レンダリング、ライト(ランプ)やカメラ等を設定しての3次元コンピュータグラフィックス・アニメーション作成機能がある.
【目次】
【サイト内の関連ページ】
- Blender の機能の説明,実演など: 別ページ »にまとめ
- Windows での Blender 4 のインストール: 別ページ »で説明
- Ubuntu での Blender 3 のインストールは,別ページ »で説明
【関連する外部ページ】
- Blender の公式ページ: https://www.blender.org/
前準備
前準備として,Blender のインストールが終わっていること.
Blender の Python コンソール (Blender Python console)
Blender での画面ワークスペースの切り替え
- Blender のワークスペース(作業目的に特化した画面レイアウト)を「スクリプト作成」(Blender 4では「Scripting」)に変える操作
画面ワークスペースとして「スクリプト作成」(Blender 4では「Scripting」)を選択する.
- Blender の画面ワークスペースを元に戻す操作
画面ワークスペースとして「レイアウト」(Layout)を選択する.
Blender Python コンソール (Blender Python console) で Python スクリプトを実行してみる
- Blender を起動する
-
Blender Python コンソール(Blenderに組み込まれたPythonプログラミング環境)を開くために,
Blender のワークスペースを「スクリプト作成」(Blender 4では「Scripting」)に変更する
- コンソール画面が開くので確認する
コンソール画面の中では, IPython シェル(対話的にPythonコードを実行できる環境)が動作している.
- 試しにBlender オブジェクト(シーン内の3Dモデルやカメラ,ライトなどの要素)の一覧表示を行ってみる.
コンソール画面で次のコードを実行する.
D = bpy.data for i in D.objects: print(i.name)
Blender オブジェクトが確認できる(下の実行結果例では Camera,Cube,Light の 3つ).
- 試しに立体(タイプが「MESH」であるオブジェクト)(メッシュ:頂点,辺,面で構成される3Dオブジェクト)の一覧表示を行ってみる.
コンソール画面で次のコードを実行する.
D = bpy.data for i in D.objects: if i.type == "MESH": print(i.name)
- 今度は,Blender 画面の一覧表示を行ってみる.
コンソール画面で次のコードを実行する.
D = bpy.data for i in D.screens: print(i.name)
画面名が確認できる.
- 自動補完(Auto complete)を試してみる
コンソール画面で「bpy.data.」(BlenderのPython APIのデータアクセスモジュール)と入力したあとで,「オートコンプリート (Autocomplete)」をクリックする.
補完の候補が表示される.
Blender で Python を使ってみる
レンダリング
Windows の場合は,環境変数 HOMEPATH を使用する.
* Linux の場合は,「HOMEPATH」の代わりに「HOME」を使用する.
import os
bpy.ops.render.render()
D = bpy.data
D.images['Render Result'].save_render(filepath = os.environ['HOMEPATH'] + '/hoge.png')

できあがった画像ファイル hoge.png は次の通りである.

ライトの設定
Pythonスクリプトでライト(光源)を設定する.
import os
pi = 3.141592
lamp = { "location" : (20, 0, 10), "rotation_euler" : (0, 0.2, 0.4), "falloff_type" : 'INVERSE_LINEAR', "shadow_method" : 'RAY_SHADOW' }
# Blender 4では shadow_methodの値が異なる場合がある
# lamp = { "location" : (20, 20, 10), "rotation_euler" : (0, 0.2, 0.4), "falloff_type" : 'INVERSE_LINEAR', "shadow_method" : 'NOSHADOW' }
D = bpy.data
lamp_obj = D.objects['Light']
lamp_obj.location = lamp["location"]
lamp_obj.rotation_euler = lamp["rotation_euler"] # オブジェクトの回転角度(ラジアン単位)
lamp_obj.data.falloff_type = lamp["falloff_type"]
# Blender 4では以下のようにシャドウ設定が変更されている場合がある
# lamp_obj.data.shadow_method = lamp["shadow_method"]
bpy.ops.render.render()
D.images['Render Result'].save_render(filepath = os.environ['HOMEPATH'] + '/hoge.png')

できあがった画像ファイル hoge.png は次の通りである.

カメラの設定
Pythonスクリプトでカメラ(シーン撮影用の視点)を設定する.
pi = 3.141592
camera = { "location" : (15, 0, 15), "rotation_euler" : (0, 1, 0), "type" : 'PERSP', "angle" : 50.0 * (pi/180.0) }
D = bpy.data
scene = D.scenes["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"] # カメラの画角(ラジアン単位)
bpy.ops.render.render()
D.images['Render Result'].save_render(filepath = os.environ['HOMEPATH'] + '/hoge.png')

できあがった画像ファイル hoge.png は次の通りである.

データアクセスを行う Python プログラム
【関連する外部ページ】 https://docs.blender.org/api/blender_python_api_2_63_release/bpy.data.html
https://docs.blender.org/api/blender_python_api_2_63_release/bmesh.html
オブジェクトの一覧
D = bpy.data
for i in D.objects:
print(i.name)

シーン名の一覧
D = bpy.data
print(D.scenes.keys())

立体のメッシュの取得
D = bpy.data
if "Cube" in D.meshes:
mesh = bpy.data.meshes["Cube"]
for i in mesh.edges:
print(i)
for i in mesh.vertices:
print(i)
for i in mesh.polygons:
print(i)
