Cinder for AE

概要

Processing for AEにおいては、HTML5 PanelでProcessing.jsを用いることによって、Processingのようなフォワード的なものとAEのようなランダムアクセス的なものを組み合わせることを試みた。 ただこれだと実行できることに制限があるので、Processing.jsの代わりにCinderを用いて同様のものを構築することを試みる(openFrameworksでもいいと思うが、Cinderの方が楽だったので)。

Particle

ParticleApp

基本的なパーティクル。

Camera

CameraApp

カメラを用いた例。

Compute Shader

ParticleCS

Compute Shaderで遊ぶ。

AfterEffects-Cinder

AfterEffects-Cinder

AE側からCinderアプリケーションを制御するためのパネル。

Folder

連番ファイルを保存するフォルダを決める。

File

連番ファイルのプリフィクスを決める。

Comp

Setupした際に、選択レイヤーが存在するコンポジションの名前が代入される。

Layer

Setupした際に、選択レイヤーの名前が代入される。

Cache

レンダリングの際に、事前処理として対象レイヤーのエクスプレッション制御エフェクトの値がOSC経由でCinderアプリケーション側に送信されるわけであるが、毎回送信する必要性がない場合にキャッシュの値を使用するようにする。

Write

実際に連番ファイルに書き出す。

FBO

オフスクリーンでレンダリングする。Windowsの場合アプリケーションのスクリーンのサイズの上限がモニタの解像度に制限されるのでそれ用に。

Setup

対象レイヤーの選択及び、Cinderアプリケーションと交信し必要なエクスプレッション制御エフェクトを生成する。

Render

レンダリングを開始する。

Quit

レンダリングを中止する。

Cinder-AfterEffects

Cinder-AfterEffects

AEと連携するCinderアプリケーションを構築する(以下Cinder 0.9.0で説明)。

atarabi::AppAE

通常Cinderアプリケーションを構築する際はcinder::app::Appクラスを継承するわけであるが、その代わりにatarabi::AppAEクラスを継承する。 後は、通常とは違いサフィクスとしてAEがついた、setupAE()、drawAE()等々の関数をオーバーライドすれば良い。

AppAppAE説明
-initializeAEアプリケーション初期化後に一度だけ呼ばれる。通常のsetup()に同じ。
setupsetupAEレンダリング開始時に毎回呼ばれる。
updateupdateAE通常と同じ。
drawdrawAE通常と同じ。
mouseDownmouseDownAE通常と同じ。
mouseUpmouseUpAE通常と同じ。
mouseWheelmouseWheelAE通常と同じ。
mouseMovemouseMoveAE通常と同じ。
mouseDragmouseDragAE通常と同じ。
timelinetimelineAE通常と同じ。
getElapsedFramesgetCurrentFrame現在のフレーム数を取得する。
getElapsedSecondsgetCurrentTime現在の時間を取得する。
-getFpsフレームレートを取得する。
-getDurationデュレーションを取得する。
-getWidth幅を取得する。
-getHeight高さを取得する。
-getSizeサイズを取得する。
-getSourcePath対象レイヤーが静止画や映像だった場合にそのソースのパスを取得する。
-getSourceTime上記ソースの再生位置。

パラメータ

initializeAE()内でaddParameter()を呼び出すことでパラメータを追加できる。このパラメータの値はAEからエクスプレッション制御エフェクトを用いて制御することとなる。

エクスプレッション制御
boolチェックボックス制御
floatスライダー制御
cinder::vec2ポイント制御
cinder::vec33D ポイント制御
cinder::Colorカラー制御

addParameter()

initializeAE()内で呼び出すことでパラメータを追加する。

//Onという名前のチェックボックス制御エフェクトを初期値オフで追加する。 addParameter("On", false); //Intensityという名前のスライダー制御エフェクトを初期値100で追加する。 addParameter("Intensity", 100.f); //Centerという名前のポイント制御エフェクトを初期値をレイヤーの中央の位置として追加する。 addParameter("Center", cinder::vec2{0.5f, 0.5f}); //Positionという名前のポイント制御エフェクトを初期値をレイヤーの左上の位置として追加する。 addParameter("Position", cinder::vec3{0.f, 0.f, 0.f}); //Fillという名前のカラー制御エフェクトを初期値を赤として追加する。 addParameter("Fill", cinder::Color{1.f, 0.f, 0.f});

gerParameter()

パラメータの値を取得する。

//現在のフレームにおけるOnの値を取得する。 bool on = getParameter("On"); //30フレーム目のFillの値を取得する。 cinder::Color fill = getParameter("Fill", 30);

setParameter()

Cinder側からAE側に値を送りたい場合に用いる。Writeがチェックされており、またレンダリングが中止されることなく終了した場合に実際にベイクされる。

setParameter("My Color", cinder::Color{1.f, 1.f, 0.f});

addCameraParameter()

カメラパラメータを追加することによってAE側のカメラの情報を取得出来るようにする(別途、CameraAEプラグインが必要)。

getCameraParameter()

カメラパラメータの値を取得する。カメラはatarabi::CameraAEクラスを用いる必要がある。

atarabi::CameraAE camera; camera.setPerspective(60.f, static_cast(getWidth()) / static_cast(getHeight()), 5.f, 5000.f); camera.setParameter(getCameraParameter());

setCameraParameter()

Cinder側からAE側にカメラの情報を送りたい場合に用いる。Writeがチェックされており、またレンダリングが中止されることなく終了した場合に実際にカメラが生成される。

atarabi::AppAEdev

atarabi::AppAEの代わりにatarabi::AppAEdevを継承するとAEを起動する必要はなくまたパラメータ等もCinder上で色々弄ることが出来る。

基本

テンプレートを用意してあるのでTinderBoxから選択して利用。

ヘッダ関係。CinderAfterEffects.hをインクルードする。名前空間関連は適当に。

#include "CinderAfterEffects.h" #include "cinder/app/RendererGl.h" #include "cinder/gl/gl.h" using namespace ci; using namespace ci::app; using namespace std; using namespace atarabi;

必要な関数をオーバーライド。

class BasicAppAE : public AppAE { public: void initializeAE() override; void setupAE() override; void updateAE() override; void drawAE() override; private: Color color_; float radius_; vec2 center_; };

パラメータの追加はinitializeAE()内で行う。

void BasicAppAE::initializeAE() { addParameter("Color", Color{ 1.f, 0.f, 0.f }); addParameter("Radius", 10.0f); addParameter("Center", vec2{ 0.5f, 0.5f }); }

レンダリングごとの初期化はsetupAE()で行う。例えば、std::vectorを使用している際はclear()を呼ぶなど。

void BasicAppAE::setupAE() { //pass }

パラメータの取得。必ずしもupdateAE()内でやる必要はない。

void BasicAppAE::updateAE() { color_ = getParameter("Color"); radius_ = getParameter("Radius"); center_ = getParameter("Center"); }

パラメータに基いて描写。

void BasicAppAE::drawAE() { gl::clear(ColorA{ 0.f, 0.f, 0.f, 0.f }); gl::color(color_); gl::drawSolidCircle(center_, radius_); }

Cinderは0.9.0からアンチエイリアスがデフォルトでオフとなっており、またprepareSettings()も廃止されて以下のように渡すようになった。

CINDER_APP(BasicAppAE, RendererGl(RendererGl::Options().msaa(16)), [](App::Settings* settings) { settings->setWindowSize(1280, 720); settings->setFrameRate(30.0f); settings->setResizable(false); settings->setFullScreen(false); })

AppAEの代わりにAppAEdevを継承。