金子邦彦研究室3次元,地図BlenderBlender で Python スクリプトを実行

Blender で Python スクリプトを実行

BlenderでPythonスクリプトを実行する手順の説明である.Blenderは3Dコンピュータグラフィックス・アニメーションソフトウェアであり,Pythonコンソールを使用してプログラムを実行できる.Blenderの公式ページからインストールし,スクリプト作成ワークスペースに切り替えるとPythonコンソールが利用できる.コンソール内ではIPythonシェルが動作し,Blenderオブジェクトや画面の情報を表示できる.さらに,レンダリングやライト・カメラの設定もPythonスクリプトで行える.データアクセスやオブジェクトの一覧表示に関する情報も提供されている.

Blenderは,3次元コンピュータグラフィックス・アニメーションソフトウェア. 立体の編集,レンダリング、ライト(ランプ)やカメラ等を設定しての3次元コンピュータグラフィックス・アニメーション作成機能がある.

目次

サイト内の関連ページ

関連する外部ページ

前準備

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

Blender の Python コンソール (Blender Python console)

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

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

  1. Blender を起動
  2. Blender Python コンソールを開きたいので, Blender のワークスペースを「スクリプト作成」に変える

    [image]
  3. コンソール画面が開くので確認する

    コンソール画面の中では, IPython シェルが動いている.

    [image]
  4. 試しにBlender オブジェクトの一覧表示を行ってみる.

    コンソール画面で次を実行

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

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

    [image]
  5. 試しに立体(タイプが「MESH」であるオブジェクト)の一覧表示を行ってみる.

    コンソール画面で次を実行

    D = bpy.data
    for i in D.objects:
        if i.type == "MESH":
            print(i.name)
    

    [image]
  6. 今度は,Blender 画面の一覧表示を行ってみる.

    コンソール画面で次を実行

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

    画面名が確認できる

    [image]
  7. 自動補完(Auto comlete) を試してみる

    コンソール画面で「bpy.data.」と入力したあとで、「オートコンプリート (Autocomplete)」をクリック

    [image]

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

    [image]

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')

[image]

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

[image]

ライトの設定

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' } 
# 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"] 

bpy.ops.render.render()
D.images['Render Result'].save_render(filepath = os.environ['HOMEPATH'] + '/hoge.png')

[image]

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

[image]

カメラの設定

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"]
scene.camera.data.angle = camera["angle"]

bpy.ops.render.render()
D.images['Render Result'].save_render(filepath = os.environ['HOMEPATH'] + '/hoge.png')

[image]

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

[image]

データアクセスを行う 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)

[image]

シーン名の一覧

D = bpy.data
print(D.scenes.keys())

[image]

立体のメッシュの取得

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)

[image]