5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Blender で Python スクリプト:オブジェクトを操作する

Last updated at Posted at 2023-06-14

Blender で Python スクリプト:オブジェクトを操作する

こんにちは、@studio_meowtoon です。今回は、Windows 11 環境の Blender のオブジェクトを、VS Code に記述した Python スクリプトから操作する方法を紹介します。
python_in_blender.png

Blender と VS Code のセットアップ

Blender をインストールする手順と VS Code からデバッグする方法は、以前のこちらの記事を参照して頂けます。

Blender には Python スクリプトを記述するテキストエディタの機能を備えていますが、VS Code と連携するとさらに快適にコードが記述できます😋

Blender と VS Code の連携について

Blender 側の記述

Blender のテキストエディタ
import importlib
import debug
importlib.reload(debug)

image.png

VS Code 側の記述
※ debug.py というファイル名は任意です。※モジュール名になります

VS Code のテキストエディタ (debug.py)
import ptvsd
ptvsd.enable_attach()
ptvsd.wait_for_attach()

# ここに確認したいコードを記述します。

hoge = "hoge" # 例) ※デバッグ ブレークに使います。

image.png

Blender から debug.py ファイル(モジュール)を import します。debug.py では 5678 ポートで実行中の Blender プロセスにアタッチします。

オブジェクトの情報を表示する

Blender オブジェクトの一覧を表示してみます。

VS Code (debug.py の一部)
import bpy

for ob in bpy.data.objects:
    print(ob.name)

出力結果

VS Code デバッグコンソール
Camera
Cube
Light

カメラ、キューブ、ライトオブジェクトが存在することが分かります。

次に、実体があるオブジェクトを一覧表示してみます。
※タイプが MESH のものを指定します。

VS Code (debug.py の一部)
import bpy

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

出力結果

VS Code デバッグコンソール
Cube

メッシュオブジェクトは Cube だけだと分かります。

Blender 画面の一覧を表示してみます。

VS Code (debug.py の一部)
import bpy

for ob in bpy.data.screens:
    print(ob.name)

出力結果

VS Code デバッグコンソール
Animation
Compositing
Layout
Modeling
Rendering
Scripting
Sculpting
Shading
Texture Paint
UV Editing

画面の一覧が表示されます。
※設定状況によって内容は異なります。

ここまでの手順で、Blender プロセスに VS Code からアタッチし、オブジェクトの情報を取得、表示することができました😋

オブジェクトを操作する

VS Code から Blender の Cube を操作してみます。

この先、VS Code でのデバッグ動作が特に必要でない場合には、ptvsd ライブラリのデバッグアタッチを無効にすることもできます。具体的には以下のようにコードをコメントアウトします。

:VS Code (debug.py の一部)
# import bpy
# import ptvsd
# ptvsd.enable_attach()
# ptvsd.wait_for_attach()

Blender でのオブジェクト表示
image.png
Cube を取得して移動します。

VS Code (debug.py の一部)
import bpy

ob = bpy.data.objects['Cube']
ob.location = (3, -2, 0)

Blender でのオブジェクト表示
image.png
Blender の Cube オブジェクトが移動しました。

Cube を回転してみます。

VS Code (debug.py の一部)
import math
import bpy

ob = bpy.data.objects['Cube']
ob.rotation_euler = (math.radians(45.0), 0, 0)

Blender でのオブジェクト表示
image.png
Blender の Cube オブジェクトが回転しました。

Cube を拡縮してみます。

VS Code (debug.py の一部)
import bpy

ob = bpy.data.objects['Cube']
ob.scale = (2.0, 0.5, 3.0)

Blender でのオブジェクト表示
image.png
Blender の Cube オブジェクトが拡縮されました。

Cube の色を変えてみます。

VS Code (debug.py の一部)
import bpy

ob = bpy.data.objects['Cube']
ob.data.materials[0].node_tree.nodes["Principled BSDF"].inputs[0].default_value = (0, 1, 0, 1)

Blender でのオブジェクト表示
image.png
Blender の Cube オブジェクトの色が変わりました。

Cube を元に戻します。

VS Code (debug.py の一部)
import math
import bpy

ob = bpy.data.objects['Cube']
ob.location = (0, 0, 0)
ob.rotation_euler = (0, 0, 0)
ob.scale = (1.0, 1.0, 1.0)
ob.data.materials[0].node_tree.nodes["Principled BSDF"].inputs[0].default_value = (1, 1, 1, 1)

Blender でのオブジェクト表示
image.png
Blender の Cube オブジェクトが最初の状態に戻りました。

ここまでの手順で、Blender のオブジェクトを VS Code に記述したコードから操作することができました😋

アニメーションを作成する

これまでに紹介した操作を応用して、Blender の Cube オブジェクトを VS Code の Python から操作して内容をキーフレームに登録し、アニメーションを作成します。

VS Code (debug.py の一部)
import math
import bpy

ob = bpy.data.objects['Cube']
mat = ob.data.materials[0].node_tree.nodes["Principled BSDF"].inputs[0]

# 0f
ob.location = (0, 0, 0)
ob.rotation_euler = (0, 0, 0)
ob.scale = (1, 1, 1)
ob.keyframe_insert('location', frame = 0)
ob.keyframe_insert('rotation_euler', frame = 0)
ob.keyframe_insert('scale', frame = 0)
mat.default_value = (1, 1, 1, 1) # white
mat.keyframe_insert('default_value', frame = 0)

# 12f
ob.location = (2, -3, 4)
ob.rotation_euler = (math.radians(45.0), 0, 0)
ob.scale = (1.5, 2, 3)
ob.keyframe_insert('location', frame = 12)
ob.keyframe_insert('rotation_euler', frame = 12)
ob.keyframe_insert('scale', frame = 12)
mat.default_value = (0, 1, 0, 1) # green
mat.keyframe_insert('default_value', frame = 12)

# 24f
ob.location = (-2, 2, -1)
ob.rotation_euler = (0, math.radians(45.0), 0)
ob.scale = (0.75, 1, 0.5)
ob.keyframe_insert('location', frame = 24)
ob.keyframe_insert('rotation_euler', frame = 24)
ob.keyframe_insert('scale', frame = 24)
mat.default_value = (1, 0, 0, 1) # red
mat.keyframe_insert('default_value', frame = 24)

# 36f
ob.location = (3, -2, 3)
ob.rotation_euler = (0, 0, math.radians(45.0))
ob.scale = (3, -2, 5)
ob.keyframe_insert('location', frame = 36)
ob.keyframe_insert('rotation_euler', frame = 36)
ob.keyframe_insert('scale', frame = 36)
mat.default_value = (0, 0, 1, 1) # blue
mat.keyframe_insert('default_value', frame = 36)

# 48f
ob.location = (0, 0, 0)
ob.rotation_euler = (0, 0, 0)
ob.scale = (1, 1, 1)
ob.keyframe_insert('location', frame = 48)
ob.keyframe_insert('rotation_euler', frame = 48)
ob.keyframe_insert('scale', frame = 48)
mat.default_value = (1, 1, 1, 1)
mat.keyframe_insert('default_value', frame = 48)

# frame end
bpy.context.scene.frame_preview_end = 49
bpy.data.scenes['Scene'].frame_end = 49

VS Code から Python スクリプトでアニメーションを作成したのち、Blender の 「Animation」タブを選択し、下部ペインの再生ボタンからアニメーションを再生できます。
image.png
cube_anime_001.gif

ここまでの手順で、Blender のオブジェクトを VS Code に記述したコードから操作してアニメーションを作成することができました😋

アニメーションをレンダリングする

さらに、アニメーションをレンダリングして動画ファイルとして出力してみます。

VS Code (debug.py の一部)
import bpy

# render settings
bpy.context.scene.render.filepath = 'C:\\tmp\\cube_anime.mp4'
bpy.context.scene.render.image_settings.file_format = 'FFMPEG'
bpy.context.scene.render.ffmpeg.format = 'MPEG4'
bpy.context.scene.render.ffmpeg.codec = 'H264'

# animation settings
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = 49

# render execution
bpy.ops.render.render(animation=True)

出力した動画
cube_anime_002.gif

ここまでの手順で、VS Code に記述したコードから、Brender のアニメーションをレンダリングして動画ファイルとして出力する操作することができました😋

まとめ

  • VS Code で記述した Python コードから、Blender のオブジェクトを操作することができました。
  • また、スクリプトから Blender アニメーションをレンダリングして動画ファイルとして出力することができました。

どうでしたか? Window 11 の VS Code で、Blender の Python スクリプトを開発する環境を手軽に構築することができます、ぜひお試しください。今後も Python / Blender の開発環境などを紹介していきますので、ぜひお楽しみにしてください。

5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?