2016年5月30日月曜日

アニメカーブからタイムレンジを復元させる

中間ファイル、ま、FBXの事なんですけど、アニメの入っているファイルをインポートしても
タイムレンジがプリファレンスのまま変化しない。
そもそも、アニメーションを中間ファイルで管理しようとするのが問題なんですけど・・・。

地味に面倒です。


そこで、アニメーションカーブを調べて、タイムレンジを復元するスクリプトを作成してみました。


tryRestoreTimeRange.mel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
global proc string tryRestoreTimeRange()
{
    float $min;
    float $max;
     
    string $aniCrvs[]=`ls -typ "animCurve"`;
    if(!`size $aniCrvs`) return "";
     
    int $isFirst=1;
    for( $aniCrv in $aniCrvs )
    {
        int $kc=`keyframe -q -kc $aniCrv`;
         
        float $tmpMin[]=`keyframe -in 0 -q $aniCrv`;
        float $tmpMax[]=`keyframe -in ($kc-1) -q $aniCrv`;
         
        if( $isFirst )
        {
            $isFirst=0;
            $min=$tmpMin[0];
            $max=$tmpMax[0];
             
        }
         
         
        if( $tmpMin[0]<$min ) $min=$tmpMin[0];
        if( $max<$tmpMax[0] ) $max=$tmpMax[0];
         
    }
     
    eval("playbackOptions -min "+$min+" -max "+$max+" -ast "+$min+" -aet "+$max);
     
    return ($min+":"+$max);
     
}


アニメカーブノードをリストアップしてキーフレームの先頭と末尾の最小、最大を取るだけ。

もう少し賢くしたい感じはする。


0 件のコメント:

コメントを投稿