Blender初心者入門のPython編です。
スクリプトで制御できると、規則正しく配置するようにオブジェクトを生成したり、複数のオブジェクトを一気に変更するといったことができます。
BlenderでPython(コンソール)
コンソールを開く
Python入力用コンソールを開いて、実際に動くか試してみましょう。
上のバーから「Scripting」を押すと、スクリプト入力用画面となります。
コンソールはPythonが実行できるので、命令文を書いて動作を確認してみましょう。
print文は文字を出力するためのコマンドです。
print('my blender')
のようにかいて文字「blender」が返ってくればOKです。
通常のモデル作成画面に戻りたい場合には、ウィンドウメニューで「ワークスペース」を切り替えるとよいでしょう。
コンソールでオブジェクトを作る
コンソールから3Dの物体を作ることができます。
プログラムは「bpy.ops.物体.コマンド」のように書いていきます。
立方体は
bpy.ops.mesh.primitive_cube_add(location=(1, 2, -1), size=0.5, rotation=(0, 0, 0))
のように位置(location)、大きさ(size)、回転(rotation)の情報を渡して作ることができます。
実行後、ボックスがちゃんとできていればOKです。
BlenderでPython(エディター)
コンソールは短いスクリプトならいいですが、長いと不便です。
そこでつかうのが「エディター」です。
「新規」でファイルを作成します。
生成
直方体は「primitive_cube_add」、円柱は「primitive_cylinder_add」、ICO球は「primitive_ico_sphere_add」などで生成できます。
頂点からポリゴンをPythonで作ることができます。
以下にサンプルがあります。
BlenderとPythonで3Dモデルを動的生成してレンダリングする
オブジェクト操作
ファイルから読み込む
3Dファイルのインポートが行えます。多数の3Dファイルを読み込ませる場合はスクリプトで実行したほうが楽です。
import bpy
bpy.ops.import_scene.fbx(filepath='C:\\_work\\53392556_bldg_6677.fbx')
注意点としてはPythonでは「¥」がエスケープ扱いになるので「¥¥」のように書いたほうがいいようです。
フォルダ内読み込みは
import os
import glob
import bpyimportDir = 'C:\\Users\\akyip\\Downloads\\LOD1'
os.chdir(importDir)
paths = glob.glob("*.fbx")
for path in paths:
bpy.ops.import_scene.fbx(filepath=path, axis_forward="-Z", axis_up="Y")
でループできます。
[自分用メモ] Blender Python を使ったバッチ処理まとめ (zenn.dev)
すべてのオブジェクトを削除
次に以下のように書きます。
これは画面上の3Dデータをすべて削除するというものです。
import bpy
for item in bpy.data.meshes:
bpy.data.meshes.remove(item)
書き終えたら上の再生ボタンで実行しましょう。
特定のオブジェクトをリサイズ
まずオブジェクトを「Cube」に名前を変更しておきます。
次にエディターで以下のように書いて実行。
import bpy
obj = bpy.data.objects['Cube']
obj.scale.x = 2obj.location.x = 2
これでX軸の大きさが2倍に、X軸の位置が2となります。
Pythonでマイクラ風の世界を作る
BlenderのPythonの練習で、マイクラ風のワールド作成を試してみました。
厳密に作ると立方体がだいぶ増えるので、今回は1段のみです。
とりあえずボクセル
Pythonで「primitive_cube_add」を使えば立方体ができます。
ループで箱をランダムにでこぼこにしながらつくっていきます。
import bpy
import random
for i in range(-10, 10):
for j in range(-10,10):
h=1
hei = random.random()
if random.random() > 0.5 :h = 0
bpy.ops.mesh.primitive_cube_add(location=(i,j,h), size=1, rotation=(0,0,0))
これででこぼこっぽい土地ができます。
色付け
マテリアルを作って割り当てます。
また先にエンプティを作っておき、作ったボックスのペアレントにします。
これならアウトライナーもすっきり表示されます。
import bpy
import random
mat1 = bpy.data.materials.new('Brown')
mat1.diffuse_color = (0.5, 0.2, 0.1, 1.0)
mat2 = bpy.data.materials.new('Brown')
mat2.diffuse_color = (0,0.5,0, 1.0)
paobj = bpy.data.objects['PA']for i in range(-10, 10):
for j in range(-10,10):
h = 0
m = mat1
r = random.random()
if r > 0.5:
h = 1
m = mat2
bpy.ops.mesh.primitive_cube_add(location=(i,j,h), size=1, rotation=(0,0,0))
bpy.context.object.data.materials.append(m)
bpy.context.object.parent = paobj
これで上は緑、下は茶色に。
Blender操作の目次はこちら。