Animation nodesでアニメーション(FCurve)を取得する場合、チャンネルを指定して取得はできませんが、FCurves from ObjectノードでFCurveのリストを簡単に取得可能です。ただしリストのインデックスは位置・回転・スケールそれぞれ固定されたものとはなりません。位置のアニメーションが無い場合はリストの先頭はオイラー回転xから始まりますし、Insert Single Keyframeで各軸ごとにキーを打つ事も考えられます。AN2_SimpleSplineTrail

Animation nodesと名付けられた割にはちょい残念なところですが、Scriptを通して特定のFCurveを得ることはできます。

上はアニメーションの軌跡をスプラインオブジェクトにする例です。位置アニメーションを取得し過去の位置をリストにしスプラインとして出力します。ローカル位置をスプラインにするだけでペアレントしたオブジェクトでは期待通りには動かないので、今のところあまり実用性はありませんが、位置アニメーションが無いオブジェクトを入力しても問題無いようにしたかったので確実に位置アニメーションのFCurveを得られるようにしました。

で、そのスクリプトノードの内容が以下です。

if Object.animation_data is None:
    return

FCurveList = [f for f in Object.animation_data.action.fcurves if f.data_path == 'location']
for f in FCurveList:
    if(f.array_index == 0):
        FCurve_x = f
    if(f.array_index == 1):
        FCurve_y = f
    if(f.array_index == 2):
        FCurve_z = f

オブジェクトのFCurveから「location」というデータパスを取得して後はarray_indexを見てX/Y/Zどの情報なのかを評価しています。array_indexはちょっと勘違いしそうですが、配列のインデックスという意味ではなく、rna_array_indexと呼ばれるものです。この場合Xなら0、Yなら1といった具合の定数になっているようです。

AN2_SimpleSplineTrail.zip(Blender2.87c+Animation nodes2)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です