BlenderでPythonスクリプトを実行

概要

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

目次

関連する外部ページ

サイト内の関連情報

第1章:前準備

Blenderは,3次元コンピュータグラフィックス・アニメーションソフトウェアである.3次元モデルの編集,レンダリング,光源やカメラ等の設定による3次元コンピュータグラフィックス・アニメーション作成機能がある.

メニューの日本語化を行っておくと使いやすい.「編集(Edit)→プリファレンス(Preferences)→インターフェイス(Interface)→翻訳(Translation)」で設定できる.

第2章:BlenderのPythonコンソール

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

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

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

    Pythonコンソールは、Blenderに組み込まれた対話型Python実行環境である。短いコードはPythonコンソールに入力してEnterキーで実行できる。複数行のコードは、スクリプティングワークスペースのテキストエディターに貼り付け、「スクリプト実行」またはAlt+Pで実行できる。

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

    コンソール画面またはテキストエディターで次のコードを実行する。

    import bpy
    
    for obj in bpy.data.objects:
        print(obj.name)
    

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

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

    コンソール画面またはテキストエディターで次のコードを実行する。

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

    コンソール画面またはテキストエディターで次のコードを実行する。

    import bpy
    
    for screen in bpy.data.screens:
        print(screen.name)
    

    画面名が確認できる。

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

    コンソール画面で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)
メッシュデータの取得結果