« スクリプトを書いてみた | Main | Cylinders on the Bones(Blender スクリプト) »

September 09, 2013

スクリプトを書いてみた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のキーを左にずらすと同期します。

うーむむ、なかなか簡単には行きませんね~(^.^;

|

« スクリプトを書いてみた | Main | Cylinders on the Bones(Blender スクリプト) »

Comments

The comments to this entry are closed.