見出し画像

[Blender×Python] アニメーションのつくりかた


Pythonをつかったアニメーション制作の方法をまとめていきます。

0.アニメーションの諸操作

0-1.アニメーションの作成

Scriptingを開く

~.pyというふうに名前をつける

コードを書いて実行ボタンを押す

画像1

0-2.アニメーションの実行

animationに移動し再生ボタンを押す

※スペースキーでも再生と停止が可能

画像2

0-3.アニメーションの削除

3Dviewportで、Nキーを押す

キー挿入箇所(緑色)で右クリックする

clear keyframeを押す

Nキーを押してタブをしまう

画像3


0-4.新規スクリプトの作成

Textボタンを押す

Newボタンを押す

~.pyのように名前をつける

0-5.スクリプトを選択する

書類のような絵柄のボタンを押す

スクリプトを選択する

画像4


1.指定した座標に物体を移動する

画像5


※自分がアニメーションさせたいオブジェクトは自分で3D viewportに追加してください。
``bpy.ops.mesh.~~~_add()``のように1文追加するだけです。もちろんshift + Aから選んで追加しても大丈夫です。

anim01.py


import bpy
#目標の座標を指定する
positions = (0,3,2),(4,1,6),(3,-5,1),(3,10,1),(1,8,1)
#開始時の座標を指定する
start_pos = (0,0,0)
#変数obに3D viewportにあるオブジェクトを代入する
#ob = bpy.data.objects["Cube"]のようにして特定のものを動かすことも可能
ob = bpy.context.object
#開始のフレームを指定する
frame_num = 0
#目標の座標に移動する処理を繰り返す
for p in positions:
   #開始のフレームを設定する
   bpy.context.scene.frame_set(frame_num)
   #変数locationに目標の座標の値を代入する
   ob.location = p
   #キーフレームの挿入を行う
   ob.keyframe_insert(data_path = "location",index = -1)
   #フレームを20ずらす
   frame_num += 20

○Point : keyframe_insert
キーフレームの挿入を行う関数。引数には使用する情報(data_path)、配列の形式(index)等を使用する。
indexは、

-1→ x,y,z全て
0 → x
1 → y
2 → z

のようになっており特定の軸を基準にして操作することもできる。

2.ランダムな座標に物体を移動する

画像6

anim02.py

import bpy
#ランダムライブラリの中のrandint関数を使用する
from random import randint

#3Dviewportにあるオブジェクトを使用する(今回はSphere)
ob = bpy.data.objects["Sphere"]
frame_number = 0

#処理を50回繰り返す
for i in range(0,50):
   
   #第一引数から第二引数までの範囲の中からランダムに整数を選択する
   x = randint(-20,20)
   y = randint(-40,20)
   z = randint(-20,60)
   
   bpy.context.scene.frame_set(frame_number)
   ob.location = (x,y,z)
   ob.keyframe_insert(data_path = "location",index = -1)
   frame_number += 5

3.三角関数を使ってオブジェクトを動かす

画像7

anim03.py

 

import bpy
#mathライブラリのsin関数を用意する
from math import sin
start_pos = (0,0,0)
ob = bpy.context.object
frame_num = 0
for i in range(0,50):
   bpy.context.scene.frame_set(frame_num)
   #変数locationに座標を指定する
   ob.location = (0,i,sin(i))
   ob.keyframe_insert(data_path = "location",index = -1)
   frame_num += 10


4.物体の大きさを変化させる

画像8


anim04.py


import bpy
scales = (1,3,2),(4,1,6),(3,5,1),(3,10,1),(1,8,1)
start_pos = (0,0,0)
ob = bpy.context.object
frame_num = 0
for s in scales:
   bpy.context.scene.frame_set(frame_num)
   ob.scale = s
   #大きさの情報を元にしてキーを挿入する
   ob.keyframe_insert(data_path = "scale",index = -1)
   frame_num += 20


5.物体の位置と大きさを同時に変化させる

画像9


anim05.py


import bpy
from math import sin
start_pos = (0,0,0)
ob = bpy.context.object
frame_num = 0
for i in range(0,100):
   bpy.context.scene.frame_set(frame_num)
   ob.location = (0,-i,sin(i) * 3)
   ob.scale = (1,1,1 + sin(i))
   ob.keyframe_insert(data_path = "location",index = -1)
   ob.keyframe_insert(data_path = "scale",index = -1)
   frame_num += 5

最後に

読んでいただきありがとうございました。
修正点等ありましたらお気軽にご連絡ください!!

この記事が気に入ったらサポートをしてみませんか?