MEL FF のボスが倒されて消えるときみたいなエフェクトを作る | puarts.com
映像・CG・画像処理関連の技術情報、個人作品の創作記録、メモなど
Category

MEL FF のボスが倒されて消えるときみたいなエフェクトを作る

公開日: 2016/06/12 21:46 | カテゴリ: Maya | タグ:

昨日作った指数関数的に上昇するアニメーションのエクスプレッションを生成する MEL スクリプトを応用して、ファイナルファンタジーのボスを倒した時みたいに上から順番にポリゴンが上昇してゆくアニメーションを作成する MEL スクリプトを作成しましたので載せておきます。

やっていることはただ単に上にあるトランスフォームノードから順番に、上昇するアニメーション用のエクスプレッションを作成しているだけです。

global proc CreateExpresionForRiseAnimation(
    string $targets[],
    float $exponential_start_x,
    float $speed, float $speed_rand_range,
    float $time_offset, float $time_offset_rand_range)
{
    string $expName = "RiseAnim";
    string $exp = "float $start_frame="+$exponential_start_x+";\n";
    for ($target in $targets)
    {
        float $actual_speed = $speed + rand(-$speed_rand_range / 2.0, $speed_rand_range / 2.0);
        float $actual_time_offset = $time_offset + rand(0.0, $time_offset_rand_range);
        $exp += "{\n    float $speed = "+$actual_speed+";\n    float $frame_delay = "+$actual_time_offset+";\n    float $frame = frame + $start_frame - $frame_delay;\n    if ($frame < $start_frame)\n    {\n        $frame = $start_frame;\n    }\n    "+$target+".translateY = exp($frame * $speed) - exp($start_frame * $speed);\n}";
    }
    expression -s $exp -n $expName;
}

global proc MovePivotToBottomCenter(string $target)
{
    float $bb[] = `polyEvaluate -boundingBox $target`;
    float $pivot_x = ($bb[0] + $bb[1]) * 0.5;
    float $pivot_y = $bb[2];
    float $pivot_z = ($bb[4] + $bb[5]) * 0.5;
    move -a $pivot_x  $pivot_y $pivot_z ($target+".scalePivot") ($target+".rotatePivot");
}

global proc CreateExpressionForRisingFromTop(
    string $targets[],
    float $start_frame,
    float $delay_frame_rand_range,
    float $merge_expression_tolerance_y)
{
    for ($target in $targets)
    {
        MovePivotToBottomCenter($target);
    }
    
    while(size($targets) != 0)
    {
        print("Creating Expression..\n");
        float $max_y = GetMaximumTranslateY($targets);
        print("Translate Y for Creating Expression: " + $max_y + "\n");
        string $current_targets[];
        string $rest_of_targets[];
        clear $current_targets;
        clear $rest_of_targets;
        int $target_index = 0;
        int $rest_index = 0;
        for ($obj in $targets)
        {
            vector $pos = `xform -q -ws -rp $obj`;
            float $diff = abs($pos.y - $max_y);
            if ($diff < $merge_expression_tolerance_y)
            {
                $current_targets[$target_index] = $obj;
                ++$target_index;
            }
            else
            {
                $rest_of_targets[$rest_index] = $obj;
                ++$rest_index;
            }
        }
        CreateExpresionForRiseAnimation(
            $current_targets,
            -30.0,
            1.0 / 30.0, 1.0 / 30.0,
            $start_frame, $delay_frame_rand_range);
        $targets = $rest_of_targets;
        $start_frame += $delay_frame_rand_range;
    }
    
    print("Completed!\n");
}

使い方

  1. 適用したいポリゴンモデルをばらばらにする
  2. ばらばらにしたポリゴンのトランスフォームノードに対してこのスクリプトを実行

使用例

string $targets[]=`ls -sl -type transform`;
float $start_frame = `currentTime -q`;
float $delay_frame_rand_range = 30;
float $tolerance = 0.1;
CreateExpressionForRisingFromTop(
    $targets,
    $start_frame,
    $delay_frame_rand_range,
    $tolerance);

  このエントリーをはてなブックマークに追加  


にほんブログ村 デザインブログ グラフィックアートへ
Links

参考になりそうなブログやサイトを見つけたら勝手にリンクを貼らせてもらっています。
リンク削除を希望の場合はお手数ですがメールにてご一報下さい。
Ke-Sen Huang's Home Page        Disney Research        VIDEO COPILOT        AbandonedArt.org
ryoji ikeda        チームラボ        トルク with AR三兄弟        DAITO MANABE

Copyright(C)2006-2017 wsp All Rights Reserved