アニメーションスクリプトを改造させていただきました

諸事情ありまして、今回はアニメーションスクリプトの改造をしてみました。

改造したスクリプトのソースコードは以下の通りです。メモ帳等のテキストエディタを開き、以下の内容をコピーして貼付け、適当なファイル名を付けて任意の場所に保存してください。ファイル名は何でも良いと思いますが改造した本人は「AllFlameMorphRender.asc」としています。

{
  ---------------------------------------------------------------------------------------------------------
  All Flame Morph Render for Apophysis
  MUZU 2011/01/23
  ---------------------------------------------------------------------------------------------------------

  このスクリプトを作るに当たっては、以下のスクリプトを参考にさせていただきました。

  tw_morphPrvRen v 1.01
  http://apophysis.wikispaces.com/file/detail/tw_morphPrvRen.asc

  Animation Render Script for Apophysis
  http://clairejones.deviantart.com/art/CJ-Animation-Rendering-Script-54250035

  特に「tw_morphPrvRen」を大きく参考にさせていただき、作者の Thomas Williams さんには大変感謝致しております。

  ---------------------------------------------------------------------------------------------------------

  このスクリプトは、二つから九つのフレームデータを順番にモーフィングさせながらレンダリングするスクリプトです。

  このスクリプトは、プレビューとレンダリングの機能があります。

  プレビューでは、もちろんレンダリングはされません。
  最初のフレームから順番にモーフィングした結果が表示されます。
  最後のフレームからは最初のフレームにモーフィングし、止めるまでループします。
  プレビュー中は、スペースキーを押すことでループが停止します。

  レンダリングでも、最後のフレームから最初のフレームへモーフィングします。

  フレームデータが九つまでは正常にモーフィングしますが、それ以上だと不具合が出るので注意してください。
  なので、ファイル中のフレームが九つ以下になるように編集した上でスクリプトを実行してください。

  最後になりますが、このスクリプトを実行することによって損失や損害が発生したとしても、
  当方では責任を追いかねますのでご了承ください。

  tw_morphPrvRen v 1.01 との違いは以下の通りです。
      ・レンダリングの時に flam3 を使わない
      ・flam3 を使わないので、レンダリングが遅い(はず)
      ・最後のキーフレームから最初のキーフレームにモーフィングする(プレでもレンダーでも)
      ・同じレンダリング結果が重複することがなくなった(はず…)
}

// ********** 初期情報の準備 **********
KeyDuration := 50;           // キーフレーム間の分割数
Prv := 1;                    // プレビューなのかレンダリングなのかの判定用

FileLocation := 'J:\temp\';  // レンダリング画像を保存する場所
RenderPrefix := 'ApoRend_';  // レンダリングファイル名の最初の文字列
RenderFiletype := 'png';     // レンダリングのファイルタイプ
fc := 0;                     // レンダリング画像ファイルの連番カウンター

Pq := 1;                     // プレビューの画質

RenderWidth := 200;          // レンダリング画像の幅
RenderHeight := 100;         // レンダリング画像の高さ
RenderQuality := 500;        // レンダリング画質
FilterRadius := 0.6;         // フィルターラディウス
RenderOversample := 2;       // オーバーサンプル

// ========== 情報の入力 ==========
if not InputQuery('AllFlameMorphRender', 'Preview? or Render? (「1」ならPreview、「0」ならRenderです):', Prv) then exit;
if not InputQuery('AllFlameMorphRender', 'キーフレーム分割数:', KeyDuration) then exit;
// ================================

timeDur := KeyDuration*1;    // キーフレーム間の分割数を代入する
numFlames := filecount;      // 総フレーム数を代入する

// ********** 各フレームの情報をメモリーに記録するループ処理 **********
for f := 0 to numFlames do
begin
    LoadFlame(f);
    Flame.Time := f*timeDur;
    StoreFlame(f);
end;

// ********** プレビューの場合の処理 **********
if Prv=1 then
begin
    // ========== 情報の入力 ==========
    if not InputQuery('AllFlameMorphRender', 'プレビュー画質(小さめの値にしてね):', Pq) then exit;
    // ================================
    while not Stopped do
    begin
        // 通常のモーフ処理
        for m := 0 to numFlames-2 do                  // キーフレーム数分のループ処理処理
        begin
            For i := m*timeDur to (m+1)*timeDur-1 do    // キーフレーム間の分割数分のループ処理
            begin
                Morph(m, m+1, i);
                Flame.SampleDensity := Pq;
                If Stopped then Exit;
                Preview;
            end;
        end;
        // 最後のキーフレームから最初のキーフレームへモーフさせるためのメモリ内容書き換え
        LoadFlame(m+1);          // 最後のキーフレーム用データ
        Flame.Time := 0;
        StoreFlame(m+1);
        LoadFlame(0);            // 最初のキーフレーム用データ
        Flame.Time := timeDur-1;
        StoreFlame(0)
        // 最後のキーフレームから最初のキーフレームへモーフ処理
        For i := 0 to timeDur do
        begin
            Morph(m+1, 0, i);
            Flame.SampleDensity := Pq;
            If Stopped then exit;
            Preview;
        end;
        // ループ処理に備えてメモリを基に戻す
        LoadFlame(0);                        // 最初のキーフレーム用データ
        Flame.Time := 0;
        StoreFlame(0)
        LoadFlame(m+1);                      // 最後のキーフレーム用データ
        Flame.Time := numFlames*timeDur-1;
        StoreFlame(m+1);
    end;
    updateFlame := false;
end;

// ********** レンダリングの場合の処理 **********
if Prv<>1 then
begin
    // ========== 情報の入力 ==========
    if not InputQuery('AllFlameMorphRender', 'レンダリング画像の幅:', RenderWidth) then exit;
    if not InputQuery('AllFlameMorphRender', 'レンダリング画像の高さ:', RenderHeight) then exit;
    if not InputQuery('AllFlameMorphRender', 'レンダリング画質:', RenderQuality) then exit;
    if not InputQuery('AllFlameMorphRender', 'フィルターラディウス(0.2 ~ 0.8 ぐらいで):', FilterRadius) then exit;
    if not InputQuery('AllFlameMorphRender', 'オーバーサンプル(おおむね2でOK):', RenderOversample) then exit;
    if not InputQuery('AllFlameMorphRender', 'ファイル名の最初の文字列:', RenderPrefix) then exit;
    if not InputQuery('AllFlameMorphRender', 'ファイルタイプ(JPG, PNG, GIF, BMP):', RenderFiletype) then exit;
    if not InputQuery('AllFlameMorphRender', 'ファイルの保存場所:', FileLocation) then exit;
    // ================================
    while not Stopped do
    begin
        // 通常のモーフ処理
        for m := 0 to numFlames-2 do                  // キーフレーム数分の繰り返し処理
        begin
            For i := m*timeDur to (m+1)*timeDur-1 do    // キーフレーム間の分割数分の繰り返し処理
            begin
                Morph(m, m+1, i);
                Flame.SampleDensity := RenderQuality;
                If Stopped then Exit;
                Renderer.Filename := FileLocation + RenderPrefix + Format('_%.4d', [fc]) + '.' + RenderFiletype;
                Render;
                fc := fc + 1;
            end;
        end;
        // 最後のキーフレームから最初のキーフレームへモーフさせるためのメモリ内容書き換え
        LoadFlame(m+1);          // 最後のキーフレーム用データ
        Flame.Time := 0;
        StoreFlame(m+1);
        LoadFlame(0);            // 最初のキーフレーム用データ
        Flame.Time := timeDur-1;
        StoreFlame(0)
        // 最後のキーフレームから最初のキーフレームへモーフ処理
        For i := 0 to timeDur do
        begin
            Morph(m+1, 0, i);
            Flame.SampleDensity := RenderQuality;
            If Stopped then exit;
            Renderer.Filename := FileLocation + RenderPrefix + Format('_%.4d', [fc]) + '.' + RenderFiletype;
            Render;
            fc := fc + 1;
        end;
        Exit;
    end;
end;

今回の記事は、最低でも「目的のスクリプトを開く」「スクリプトを実行する」という知識が必要になります。

「そもそもスクリプトの使い方がわかりません」という方は、私もうまく説明出来ないと思いますので、今回の記事は無視してください。

スクリプトの動作確認は Apophysis 7x.15 で行っています。

超簡単な機能説明等はスクリプト内部(上記)で書いているのでサラッと眺めてください(汗

投稿日: 2011/01/23 カテゴリー: Animation, Apophysis, Apophysis 7X, Fractal, Script タグ: , , , | パーマリンク 2件のコメント.

  1. Apophysisのスクリプトは日本語の情報がほとんどないのでとても参考になります。

  2. これはこれは、pixivのsoar13065さんがコメントをくださるとは思ってませんでしたw

    いつもアニメーションを拝見させていただいております。
    とても素敵な作品ですね。これからもがんばってくださいませ!

    日本語のスクリプトの情報は少ないですよねぇ。soar13065さんの方で良いスクリプトの情報があったら、是非教えてください(汗

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。