ゆうは

わかりたいことを深堀り

BlenderのPythonの移動・回転・スケール

BlenderではPythonが使えるんだ!」と感動して、2年くらい前に勉強していたことがありました。

当時はPythonBlenderも超初心者で、あまりにもやることやできないことが多すぎてギブアップしてしまいました。

Blender Python完全ガイド

それからもずっと興味はあって「またやろう」とずっと思っていました。

そんな時、アマゾンで『Blender Python完全ガイド』という書籍を発見しました。
ずっと気にしていたのですが最近購入してみたところ、すごくわかりやすくて改めて勉強を始めました。

Pythonコンソール

特によかったのは書籍の前半部分のPythonコンソールを使う部分です。「なるほど、こうやって使うと便利だな」とPythonを使う意味が理解できました。

2年前に思っていたのは、Pythonを使えば「複雑なデザインや複雑なオブジェクト配置ができる」という感じの認識でした。

確認や移動など

Pythonコンソールを利用してオブジェクトの確認や移動ができます。

例えば、以下の位置の確認です。

bpy.context.active_object.location
# Vector((0.0, 0.0, 0.0))

また、以下のように移動もできます。

bpy.context.active_object.location.x = 1.0

確認や移動はできるのですが、確認や移動はPythonを使わなくてもできますし、上の例のような1行だけならPythonを使わないほうがいいくらいです。

大量のオブジェクトの場合

しかし、オブジェクトが大量にある場合はPythonを使ったほうが楽になります。

例えば、画面上にあるオブジェクトのタイプを調べることが可能です。

for o in bpy.data.objects:
    o.type

# 'CAMERA'
# 'MESH'
# 'MESH'
# 'LIGHT'
# 'META'
# 'FONT'

そして、以下のようにオブジェクトのxをゼロに揃えたりできます。

for o in bpy.data.objects:
    if o.type=='MESH':
        o.location.x=0

このようにデザインや複雑な配置だけではなく便利な使い方があることを知れました。一気に楽しくなりました。

移動・スケール・回転のまとめ

移動

bpy.context.active_object.location
# Vector((0.0, 0.0, 0.0))

bpy.context.active_object.location.x
bpy.context.active_object.location.y
bpy.context.active_object.location.z

スケール

bpy.context.active_object.scale
# Vector((1.0, 1.0, 1.0))

bpy.context.active_object.scale.x
bpy.context.active_object.scale.y
bpy.context.active_object.scale.z

回転・角度

bpy.context.active_object.rotation_euler
# Euler((0.0, 0.0, 0.0), 'XYZ')

bpy.context.active_object.rotation_euler.x
bpy.context.active_object.rotation_euler.y
bpy.context.active_object.rotation_euler.z