夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

BlenderでPythonを使用して現在選択しているすべてのオブジェクトに対して重力を設定する

本日はBlenderモデリング枠です。

筆者は今年に入り本格的にPythonを使用したBlenderの効率化を試していますが、今回は3Dビューポートで選択しているすべてのオブジェクトに対して重力を設定するスクリプトを書きます。

〇重力の設定

Blenderでオブジェクトに重力を設定してシュミレーションする方法は以下でまとめています。

redhologerbera.hatenablog.com

〇現在選択しているオブジェクトに対して重力を設定する

現在選択しているすべてのオブジェクトに対して重力を設定するのは次のようになります。

# Blenderのライブラリ
import bpy

# 現在のシーンを取得
scene = bpy.context.scene

# 選択されているすべてのオブジェクトに対して処理を行う
for obj in bpy.context.selected_objects:
    # オブジェクトをアクティブにする
    bpy.context.view_layer.objects.active = obj

    # リジッドボディを追加する
    bpy.ops.rigidbody.object_add()

    # リジッドボディの設定を行う
    obj.rigid_body.type = 'ACTIVE'  # リジッドボディのタイプをアクティブに設定
    obj.rigid_body.collision_shape = 'MESH'  # 衝突形状をメッシュに設定(必要に応じて変更可能)
    obj.rigid_body.mass = 1.0  # マスを設定(必要に応じて変更可能)


# オブジェクト選択をクリア
bpy.ops.object.select_all(action='DESELECT')

コメントを付けていますが、要点を開設するとfor文のループ処理内で、bpy.ops.rigidbody.object_add()でリジッドボディを追加しています。

bpy.opsBlender内でオペレータ呼ばれる機能を提供するモジュールです

docs.blender.org

これによって選択しているオブジェクトすべてにリジッドボディを追加しています。

使い方はBlenderで重力を加えたいオブジェクトを1つ以上選択し、スクリプトウィンドウで新しいPythonファイルを作成し、コードを実行するだけです。

これによって選択中のオブジェクトすべてに重力が設定されます。

もしかしたらデフォルトで同様の効果を実現する方法があるかもしれませんが今回は学習の一環としてスクリプトで実装を行いました。