Blender スクリプト例

サイト内の関連情報

前準備

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

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

スクリプトの実行

  1. Python スクリプトを指定して実行する.blender コマンドが使えない場合は,Blender実行ファイルへのフルパスを使う.必要なモジュールが別ディレクトリにある場合は,スクリプト内で Python の検索パスに追加する.実行結果は,起動したコマンドプロンプトまたはターミナルに表示される.

    blender --python hoge.py
    
    import sys
    sys.path.append('/path/to/dir')
    
  2. プログラムを動かしてみる.初期シーン(Cube がある状態)で実行すると,すべてのメッシュオブジェクトに Solidify モディファイアを追加し,設定した厚みをコンソールに表示する.

    関連する外部ページhttps://github.com/vvoovv/blender-osm/wiki/Import-OpenStreetMap-%28.osm%29

    import bpy
    import random
    
    for obj in bpy.data.objects:
        if obj.type == 'MESH':
            modifier = obj.modifiers.new(name=obj.name + '_solidify', type='SOLIDIFY')
            modifier.thickness = random.random() * 200
            print(obj.name, modifier.thickness)
    

    実行後,メッシュオブジェクトのモディファイア一覧に Solidify モディファイアが追加され,コンソールにオブジェクト名と厚みが表示される.

  3. バックグラウンド(batch)モードでの実行手順例

    blender -b --python hoge.py
    
  4. 対話(interactive)モードでの実行手順例

    blender --python-console
    

別のプログラム例.オブジェクトを1つ選択した状態で実行する.

import bpy

obj = bpy.context.selected_objects[0]
print('Selected object:', obj.name)

別のプログラム例.Bash が使える環境で Python スクリプトを作成し,Blender のバックグラウンドモードで実行する.

#!/bin/bash
cat > /tmp/hoge.py <<-BPY
import bpy

print(dir(bpy))
BPY
blender -b --python /tmp/hoge.py

別のプログラム例.Bash が使える環境で実行する.

#!/bin/bash
cat > /tmp/hoge.py <<-BPY
import bpy

print(bpy.__doc__)
BPY
blender -b --python /tmp/hoge.py

別のプログラム例.Bash が使える環境で実行する.

#!/bin/bash
cat > /tmp/hoge.py <<-BPY
import bpy

print(bpy.context.selected_objects)
print(bpy.context.active_object)
BPY
blender -b --python /tmp/hoge.py

別のプログラム例.Bash が使える環境で実行する.

#!/bin/bash
cat > /tmp/hoge.py <<-BPY
import bpy

for obj in bpy.data.objects:
    print(obj)
BPY
blender -b --python /tmp/hoge.py

関連する外部ページhttps://kinjo.github.io/ojag-blender/#slide43

次の例は,初期シーンの Cube メッシュを対象にして実行する.

import bpy

mesh = bpy.data.meshes['Cube']
print(mesh.vertices[0].co)
print(mesh.vertices[0].co.y)

次の例は,初期シーンの Cube を選択し,面を三角形に変換して,各頂点座標を表示する.オブジェクトモードで実行する.

import bpy

obj = bpy.data.objects['Cube']
bpy.ops.object.select_all(action='DESELECT')
obj.select_set(True)
bpy.context.view_layer.objects.active = obj

bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
print(bpy.ops.mesh.quads_convert_to_tris())
bpy.ops.object.mode_set(mode='OBJECT')

mesh = obj.data
for polygon in mesh.polygons:
    for vertex_index in polygon.vertices:
        print(mesh.vertices[vertex_index].co)

関連する外部ページhttp://www.wakayama-u.ac.jp/~tokoi/lecture/shori1/15.html

現在のシーン内の MESH オブジェクトと,ファイル内のオブジェクト,メッシュ,材質データを表示するプログラム

import bpy

for obj in bpy.context.scene.objects:
    if obj.type == 'MESH':
        print(obj)
for obj in bpy.data.objects:
    if obj.type == 'MESH':
        print(obj)
for mesh in bpy.data.meshes:
    print(mesh)
for material in bpy.data.materials:
    print(material)