アニメーションが作れるぞ!
アニメーションの世界へ
いやー、良い世の中になってきたもので、いろいろな制作活動に対してハードルが下がってきていることを実感します。アニメーション作成に対してもそれが当てはまります。
今回は、(今更ですが)Processingでアニメーション作成をしてみました。
まずはインストール
ここから無料でダウンロードできます。
macOS/Winの他に、LinuxやRaspberry Pi向けにも対応しているのが良いですね。ちなみに私の環境ですが、
MacBook Air (Retina, 13-inch, 2018)
Ver. 11.6.6 Big Sur
です。
早速起動
スプラッシュ画面が表示され…、
その後にコーディングするエディタ画面が表示されます。
色味こそ違いますが、Arduino IDEにそっくりですね。
そして、コーディングのやり方もArduino IDEに似ていて、 setup()
関数内で初期化を行い、その後繰り返し実行される draw()
関数内で描画を行う形です。
とりあえずアニメーションを作ってみました
Processingでコーディングをして、それをPNGでパラパラと1コマずつ出力し、ProcessingでMP4ファイルに変換をかけてみました。まず出来たのもはこちら。
推しのビアバーの動画を勝手に #processing で作ってみた。(営業妨害) pic.twitter.com/8j3VXLi2xw
— ポキオ (@pokiiio) 2023年2月26日
ビールの絵文字が画面中央から溢れ出てくるという動画です。(最後に推しのビアバーのロゴも表示)
やっつけで書いたコードはこちら。(色々と間違ってたらごめんなさい)
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サイズになります。
frameRate()
frameRate() / Reference / Processing.org
文字通り、フレームレートをFPSで設定可能。
smooth()
smooth() / Reference / Processing.org
アンチエイリアシングの設定っぽいけど、よくわからない。
background()
背景色の設定。すでに何かが描画されていても、その上から塗りつぶしも可能。
noLoop()
noLoop() / Reference / Processing.org
描画を止めるための関数。再開する場合は loop()
を呼ぶ。
saveFrame()
saveFrame() / Reference / Processing.org
現在表示中のフレームをファイル出力する。 saveFrame("frames/######.png");
のように指定すると、複数枚出力時に連番で出力してくれる。連番で出力した画像をあとからまとめて動画ファイルに変換してくれるMovie Maker機能もある。
というわけで
こんな感じで、Arduino IDEを触ったことがあるひとなら、なんとなく動画を作成することができそうなIDEでした。マウスやキー入力を受け付けたりすることもできるので、ユーザー操作に対してインタラクティブな映像表現ができそうです。私も一通りの関数・クラスをおいおい試してみようと思います。