Apophysisスクリプトメモ その52 モーフィング

 また間が空いてしまいました。 今回はモーフィングについて解説します。モーフィングとはある形状から別の形状へスムーズに変形させることで、Apophysisでは"Morph(n1 , n2 , n3 );"を使ってTransformのパラメータを連続的に変化させた図形を作ることで実現でき、例えばこのような動画を作ることができます。



(この動画はMorphコマンドを使わずに作成いたしました



早速コードの例を示します。
{Morph}
{メモリーにフレームを読み込む}

LoadFlame(0); //フレームリストの一番上のフレームを選択する
Flame.Time := 0; //"Flame.Time"プロパティに0を設定する
StoreFlame(0); //選択されたフレームを0番目のメモリーに読み込む

LoadFlame(1); //フレームリストの二番目のフレームを選択する
Flame.Time := 1; //"Flame.Time"プロパティに1を設定する
StoreFlame(1); //選択されたフレームを1番目のメモリーに読み込む

{1番目と2番目のフレームの中間のフレームを作成する}
Morph(0, 1, 0.5 );



 "Morph"コマンドはメモリー内に読み込まれた二つのフレームの間を補間するフレームを作成いたします。 したがって"Morph"コマンドを使う前にメモリーにフレームを読み込む必要があります。
 フレームをメモリーに読み込むにはまず"LoadFlame(n)"を用いてフレームリストからフレームを選択します。そして、"Flame.Time"プロパティに値を設定しておきます。 その後に"StoreFlame(n)"を使いメモリにフレームを読み込みます。 このパラメーター n はメモリー内の何番目に読み込むかを設定します。 "Morph"は二つのフレームの補間するので少なくとも二つのフレームをメモリーに読み込んでおく必要があります。
 メモリーにフレームを読み込んだあと"Morph(n1 , n2 , n3 );"で補間フレームを作成します。 n1 は1番目のフレームのメモリー番号、n2 は2番目のフレームのメモリー番号、n3 は作成する補間フレームの進捗となります。 最初のフレームで"Flaem.Time"に0を二番目のフレームの"Flame.Time"に1を設定しておいた場合、n3 を0.5 とすると二つのフレームの中間のフレームが作成されます。 0.1 とすると最初のフレームから10分の1だけ進んだフレームが作成されます。

 次のコードは任意の二つのフレームを補間するフレームリストを作成するスクリプトです。二つのモードがあり、普通に等分に分割した補間フレームを作成するモードと動き出しと動き終わりをスムーズに分割するモードです。

{補間フレームの作成}
Flame1 := 0;
Flame2 := 1;

fPath := INSTALLPATH;
fName := DateCode;
Divide := Options.BatchSize - 1;
Smooth := 0;

if not InputQuery('Morph', 'ファイルパスを入力してください', fPath) then exit;
if not InputQuery('Morph', 'ファイル名を入力してください', fName) then exit;
if not InputQuery('Morph', '一番目のフレーム番号を入力してください', Flame1) then exit;
if Flame1 >= FileCount then exit;
if not InputQuery('Morph', '二番目のフレーム番号を入力してください', Flame2) then exit;
if Flame2 >= FileCount then exit;
if not InputQuery('Morph', '分割数を入力してください', Divide) then exit;
if not InputQuery('Morph', '開始と終了をスムーズに動かしますか? Yes→1', Smooth) then exit;

if FileExists(fPath + fName + '.flame') then
begin
   DelFN := fPath + fName + '.flame';
   if InputQuery('Delete',DelFN + 'は存在します。消去してもよろしいですか',DelFN) then
      DeleteFile(DelFN);
   else
      exit;
end;
{メモリーにフレームを読み込む}
LoadFlame(Flame1);
Flame.Time := 0;
StoreFlame(0);

LoadFlame(Flame2);
Flame.Time := 1;
StoreFlame(1);
{補間フレームの進捗度}
for i := 0 to Divide do
begin
   clear;
   j := i / Divide
   if Smooth = 1 then begin
   {スムーズ}
      if j <= 0.5 then
         j := 2 * j^2;
      else
         j := -2 * (j -1)^2 +1;
   end;
   else
   {等分割の場合}
      j := j;

   Morph(0, 1, j ); //補間フレームの作成
   Flame.Name := DateCode + '_' + Format('%.3d', [i]);
   SaveFlame(fPath + fName + '.flame');
   ShowStatus('Processing '+ IntToStr(i + 1) + ' of ' + IntToStr(Divide));
   BatchIndex := BatchIndex + 1;
end;

ListFile(fPath + fName + '.flame');


 このスクリプトを実行すると最初に読み込まれているフレームリストは消えますので注意してください。

120304.png


   モーフィング
 Morph(n1 , n2 , n3 );
  n1 :1番目のフレームのメモリー番号
  n2 :2番目のフレームのメモリー番号
  n3 :作成する補間フレームの進捗
 補間フレームを作成する
 Flame.Time 各フレームの進捗値を設定する
 LoadFlame(n) , n : 整数 リストボックス内のn番目のFlameを選択する。
 StoreFlame(n) , n : 整数 n番目のメモリーにFlameを読み込む。

BACK.jpgTOP.jpgNEXT.jpg
スポンサーサイト



テーマ : グラフィック作成
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

soar13065

Author:soar13065
Apophysis使って動画等を作成しております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR