スクリプトを書いてみた2
というわけで、昨日書いた中にあった、任意の間隔でVisualLocモードでクロスシミュの動きに合わせた
Boneにキーフレームを一発で打つスクリプトを書いてみたんですが…
↓スクリプトここから
############################
#!BPY
import bpy
fstep = 4
sn = bpy.data.scenes["Scene"]
fs = sn.frame_start
fe = sn.frame_end
fc = int((fe - fs) / fstep) + 4
frm = fs
for i in range(fc):
sn.frame_current = frm
bpy.ops.anim.keyframe_insert_menu(type='BUILTIN_KSI_VisualLoc')
frm += fstep
#### main script end ########
###################### for test ################################
bpy.context.scene.objects.active = bpy.data.objects['Empty.059']
bpy.data.objects['Empty.059'].select = True
objg = bpy.ops.object.select_grouped(type='TYPE')
bpy.ops.object.delete()
###################### test end ################################
(for testからtest endまでは今回のファイル専用のテスト用です)
クロスシミュのオブジェクトを必ずBakeしたあと、キーを打ちたいBoneを選択して実行する必要
があります。最初のfstep=で何フレームごとにキーを打つか指定します。
で、とりあえず動作はするんですが(^^;なぜか先頭から2つ同じキーが打たれて、その分ずれると
いう結果になってしまいます。このせいで結局2xfstep分、ずれてしまうわけです。
うーん、これはbpy.ops.anim.keyframe_insert_menu(type='BUILTIN_KSI_VisualLoc')の仕様なのかなぁ…
色々試したんですが、回避方法もわからず…
まあ、Bakeするフレーム数に余裕をもたせてからスクリプトを実行して、手作業で2 x fstep分ずらして
やれば良いので、手作業で等間隔のフレームを打つことを考えたらずっと楽なんですが・・・
↓上掲動画のblendファイル(blender 2.68aで作成)
visualKey_Loc_to_bone02b.blend (1.23MB)
このファイルを起動してテキストエディタのRun Script ボタンを押すと、Boneにキーが打たれ、間で動きを
仲介していたEmptyが削除されるのでもとのクロスシミュで動いているスカートの影響が無くなります。
(Boneは自身のArmatureアニメーション駆動になります)
再生するとスカートはクロスシミュ(Bakeしたもの)のまま動いているので、Boneが遅れることがわかります:-)
fstepは4にしてあるので、DopeSheetEditor上で2x4で合計8フレーム、Boneのキーを左にずらすと同期します。
うーむむ、なかなか簡単には行きませんね~(^.^;
The comments to this entry are closed.
Comments