Blender で Python スクリプトを実行

【概要】Blenderは3次元コンピュータグラフィックス・アニメーションソフトウェアであり、Pythonスクリプトを使用してオブジェクト操作やレンダリングを自動化できる。本記事では、Blenderの起動からPythonコンソールの使用方法、オブジェクトやライト、カメラの設定、レンダリング実行までの基本的な操作手順を解説する。

  1. 前準備
  2. Blender の Python コンソール
  3. Blender で Python を使ってみる

【サイト内の関連ページ】

【関連する外部ページ】

前準備

前準備として、Blender のインストールが終わっていること。

Blender の Python コンソール

Blender での画面ワークスペースの切り替え

Blender Python コンソールで Python スクリプトを実行してみる

  1. Blender を起動する
  2. Blender Python コンソール(Blenderに組み込まれたPythonプログラミング環境)を開くために、Blender のワークスペースを「スクリプト作成」(Blender 4では「Scripting」)に変更する
    スクリプト作成ワークスペースの選択
  3. コンソール画面が開くので確認する

    コンソール画面の中では、IPython シェル(対話的にPythonコードを実行できる環境)が動作している。

    Pythonコンソール画面
  4. 試しにBlender オブジェクト(シーン内の3Dモデルやカメラ、ライトなどの要素)の一覧表示を行ってみる。

    コンソール画面で次のコードを実行する。

    D = bpy.data
    for i in D.objects:
        print(i.name)
    

    Blender オブジェクトが確認できる(下の実行結果例では Camera、Cube、Light の 3つ)。

    オブジェクト一覧の表示結果
  5. 試しに立体(タイプが「MESH」であるオブジェクト)(メッシュ:頂点、辺、面で構成される3Dオブジェクト)の一覧表示を行ってみる。

    コンソール画面で次のコードを実行する。

    D = bpy.data
    for i in D.objects:
        if i.type == "MESH":
            print(i.name)
    
    メッシュオブジェクトの一覧表示結果
  6. 今度は、Blender 画面の一覧表示を行ってみる。

    コンソール画面で次のコードを実行する。

    D = bpy.data
    for i in D.screens:
        print(i.name)
    

    画面名が確認できる。

    画面一覧の表示結果
  7. 自動補完を試してみる

    コンソール画面で「bpy.data.」(BlenderのPython APIのデータアクセスモジュール)と入力したあとで、「オートコンプリート」をクリックする。

    オートコンプリート機能の使用

    補完の候補が表示される。

    補完候補の表示

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)