Androidのメモとか

ポキオの日記です。今日も遅延してない。

Processingことはじめ

アニメーションが作れるぞ!

ポキオ Processing ことはじめ

アニメーションの世界へ

いやー、良い世の中になってきたもので、いろいろな制作活動に対してハードルが下がってきていることを実感します。アニメーション作成に対してもそれが当てはまります。

processing.org

今回は、(今更ですが)Processingでアニメーション作成をしてみました。

まずはインストール

ここから無料でダウンロードできます。

processing.org

macOS/Winの他に、LinuxRaspberry Pi向けにも対応しているのが良いですね。ちなみに私の環境ですが、

MacBook Air (Retina, 13-inch, 2018)

Ver. 11.6.6 Big Sur

Processing 4.2 (macOSIntel 64-bit)

です。

早速起動

スプラッシュ画面が表示され…、

ポキオ Processing ことはじめ

その後にコーディングするエディタ画面が表示されます。

ポキオ Processing ことはじめ

色味こそ違いますが、Arduino IDEにそっくりですね。

processing.org

そして、コーディングのやり方もArduino IDEに似ていて、 setup() 関数内で初期化を行い、その後繰り返し実行される draw() 関数内で描画を行う形です。

とりあえずアニメーションを作ってみました

Processingでコーディングをして、それをPNGでパラパラと1コマずつ出力し、ProcessingでMP4ファイルに変換をかけてみました。まず出来たのもはこちら。

ビールの絵文字が画面中央から溢れ出てくるという動画です。(最後に推しのビアバーのロゴも表示)

やっつけで書いたコードはこちら。(色々と間違ってたらごめんなさい)

PImage image, logo;

int arrayNum = 100;
int[] array = new int[arrayNum];

int fps = 30;
int beerLengthSec = 5;
int logoLengthSec = 3;

void setup() {
  size(720, 720);
  frameRate(fps);
  smooth(8);

  image = loadImage("beer.png");
  logo = loadImage("kakurenbo.jpg");
}

void draw() {
  background(191);

  if (frameCount < beerLengthSec * fps) {
    array[0] = (int) random(1, 360);
  } else if (frameCount < beerLengthSec * fps + arrayNum + logoLengthSec * fps) {
    array[0] = 0;
    showLogo((int) (frameCount - beerLengthSec * fps));
  } else {
    showLogo((int) (frameCount - beerLengthSec * fps));
    noLoop();
    return;
  }

  for (int i = 0; i < arrayNum; i++) {
    showImage(array[i], i);
  }

  for (int i = arrayNum - 1; i > 0; i--) {
    array[i] = array[i-1];
  }

  saveFrame("frames/######.png");
}

void showImage(int angle, int time) {
  if (angle == 0) {
    return;
  }

  float distance = pow(time, 1.4);
  float size = pow(time, 1.25);

  image(image, width/2 + distance * cos(radians(angle)) - size/2, height/2 + distance * sin(radians(angle)) - size/2, size, size);
}

void showLogo(int time) {
  float size = pow(time, 1.4);

  if (size > width) {
    size = width;
  }

  image(logo, width/2 - size/2, height/2 - size/2, size, size);
}

Arduino IDE同様に、CやJavaに近いコーディングで実装が出来ます。リファレンスを見ながら実際に使ったクラス・関数はこちら。

PImageクラス

PImage / Reference / Processing.org

外部の画像ファイルを取り込んで使えるクラス。loadImage()で外部ファイルを取り込み、image()で表示が可能。

size()

size() / Reference / Processing.org

ディスプレイサイズの設定。ここで設定したサイズが、Processing実行時のWindowサイズになります。

ポキオ Processing ことはじめ

frameRate()

frameRate() / Reference / Processing.org

文字通り、フレームレートをFPSで設定可能。

smooth()

smooth() / Reference / Processing.org

アンチエイリアシングの設定っぽいけど、よくわからない。

background()

processing.org

背景色の設定。すでに何かが描画されていても、その上から塗りつぶしも可能。

noLoop()

noLoop() / Reference / Processing.org

描画を止めるための関数。再開する場合は loop() を呼ぶ。

saveFrame()

saveFrame() / Reference / Processing.org

現在表示中のフレームをファイル出力する。 saveFrame("frames/######.png"); のように指定すると、複数枚出力時に連番で出力してくれる。連番で出力した画像をあとからまとめて動画ファイルに変換してくれるMovie Maker機能もある。

Tools / Processing.org

というわけで

こんな感じで、Arduino IDEを触ったことがあるひとなら、なんとなく動画を作成することができそうなIDEでした。マウスやキー入力を受け付けたりすることもできるので、ユーザー操作に対してインタラクティブな映像表現ができそうです。私も一通りの関数・クラスをおいおい試してみようと思います。

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。