Blender スクリプト例
【サイト内の関連情報】
前準備
Blenderは,3次元コンピュータグラフィックス・アニメーションソフトウェアである.3次元モデルの編集,レンダリング,光源やカメラ等の設定による3次元コンピュータグラフィックス・アニメーション作成機能がある.
メニューの日本語化を行っておくと使いやすい.「編集(Edit)→プリファレンス(Preferences)→インターフェイス(Interface)→翻訳(Translation)」で設定できる.
スクリプトの実行
-
Python スクリプトを指定して実行する.
blenderコマンドが使えない場合は,Blender実行ファイルへのフルパスを使う.必要なモジュールが別ディレクトリにある場合は,スクリプト内で Python の検索パスに追加する.実行結果は,起動したコマンドプロンプトまたはターミナルに表示される.blender --python hoge.pyimport sys sys.path.append('/path/to/dir') -
プログラムを動かしてみる.初期シーン(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 モディファイアが追加され,コンソールにオブジェクト名と厚みが表示される.
-
バックグラウンド(batch)モードでの実行手順例
blender -b --python hoge.py -
対話(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)