OneonetのPyBE

Python,Blender,Excelのいろいろ

Blender x Python でカメラをカーブに沿わせて常に被写体を狙うサンプル

カメラの調整がなかなか難しいBlenderですが、オブジェクトコンストレイントのパラメタ”パスに追従”によって、カーブや円に沿って動かす設定が可能です。ただそれだけですとカメラが明後日の方向を向いてしまうので、重ねて"トラック"の設定を行うことで、常に指定したオブジェクトの方向を向くことができます。これによって、太陽を常に捉える衛星のようなイメージでアニメーションを作成することができます。

文章で説明するだけでややこしい印象ですが、画面を添えて手順を説明するとなるともっとややこしい感じになります。ということで、ただただpythonスクリプトをコピペするだけで↑の説明を皆様のPCで再生できるようにしてあります。Blenderの凄さを味わってください。念のためですが、Blenderのバージョンは3.0.0で確認しております。

1点ご注意頂きたい点としては、日本語化してあるBlenderを利用しているため、"ベジェ円"とか"円錐"とかベタな日本語表現となっております。blenderを日本語化せずご利用になられている方は日本語部分を変更頂き実行してみてください。

#blender 3.0.0 で 動作確認済
import bpy

#主役のコーン
bpy.ops.mesh.primitive_cone_add(radius1=1, radius2=0, depth=2, enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(1, 1, 1))

#2か所に光源設置。回転が分かりやすいようドキツイ2色
bpy.ops.object.light_add(type='POINT', align='WORLD', location=(3, 3, 3), scale=(1, 1, 1))
bpy.context.object.data.color = (0, 1, 0)
bpy.context.object.data.energy = 3000
bpy.ops.object.light_add(type='POINT', align='WORLD', location=(-5, -5, -5), scale=(1, 1, 1))
bpy.context.object.data.color = (1, 0, 0)
bpy.context.object.data.energy = 3000

#カメラの軌道となる楕円カーブ
bpy.ops.curve.primitive_bezier_circle_add(enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(10, 8, 3))
bpy.ops.transform.resize(value=(10, 5, 3))
bpy.context.object.rotation_euler[1] = 0.523599

#カメラの設置
bpy.ops.object.camera_add(enter_editmode=False, align='VIEW', location=(0, 0, 0), rotation=(0, 0, 0), scale=(1, 1, 1))

#カメラがベジェ円に追従するよう設定
bpy.ops.object.constraint_add(type='FOLLOW_PATH')
bpy.context.object.constraints["パスに追従"].target = bpy.data.objects["ベジエ円"]
bpy.ops.constraint.followpath_path_animate(constraint="パスに追従", owner='OBJECT')

#カメラが常に円錐を狙うよう設定
bpy.ops.object.constraint_add(type='TRACK_TO')
bpy.context.object.constraints["トラック"].target = bpy.data.objects["円錐"]

f:id:oneonet:20220316155736p:plain

是非動画をミラーサイトでご覧になってください。
oneonet-blog.blogspot.com