2016年5月30日月曜日

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

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

地味に面倒です。


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


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 件のコメント:

コメントを投稿