
After Effectsでフィードバックループをコネる
フィードバックループとは
出力が入力に影響を与えるシステムで生じるループのこと。卑近な例だとハウリングなどがあり、映像においては「前フレームの結果を参照した現フレームへの処理」を指す場合が多いと思います。いわゆるビデオフィードバックですね。
モニターに繋いだビデオカメラでモニター自体を映すと合わせ鏡的な現象が起こりますが、これがビジュアルとして分かりやすいです。
出力を入力と繋げただけの簡単なフィードバックループ pic.twitter.com/gwZhHR4oqW
— suleiman.jp (@suleiman_jp) December 26, 2023
拙作においても頻繁にフィードバックループを用いており、Such×KBSNK「supernova」のビジュアライザーでは左右の画面を参照しあいながらフィードバック処理を行っています。
After Effectsでビデオフィードバックを再現する
CC Time Blend FXについて
After Effectsで直前のフレームを参照した逐次処理を行うことは基本的にできませんが、CC Time Blend FXというエフェクトを使うことで例外的にキャッシュから前フレームを呼び出すことができます。今回はこのエフェクトを使ってフィードバックループを行います。
CC Time Blend FXはCC 2014以前のAfter Effectsに存在していたエフェクトで、現在はエフェクトメニューから削除されているものの実装自体は残っており、アニメーションプリセットを介して使用できます。プリセットはCycore FXの公式サイトからダウンロード可能です(下から2番目)。
使い方
使い方についてはチュートリアルやCycore FXのマニュアルが詳しいのですが、基礎的な部分にだけ触れておきます。
このエフェクトには「Copy」と「Paste」という2つのモードがあり、「Copy」に入力された前フレームの結果を「Paste」が出力します。

つまり、フィードバックの開始点に「Paste」、終了点に「Copy」を置くことで間に挟んだエフェクトが増幅され、毎フレーム再帰的に処理が行われます。

```mermaid
%%{init:{'theme':'neutral'}}%%
graph TD;
source(フッテージ)-->paste("CC Time Blend FX (Paste)");
paste-->pros(エフェクト処理);
pros-->copy("CC Time Blend FX (Copy)");
copy-->paste
```
間に何も挟まないと前フレームの結果をそのまま合成することになるのでEchoと近い挙動になります。また、Paste側はオリジナルのフッテージに対して合成モードを指定できます。
わかりやすい例として、Turbulent Displaceを挟んでみましょう。

キーフレームは打っていませんが、歪みが増幅されています。これを様々なエフェクト・変形等で試すことで意外なルックにたどり着けたりします。
ブラーとシャープネスをループさせればチューリングパターンが表れますし

Pasteされたフレームをマップに使って歪ませたり

前フレームの結果を参照している
Pixel Sortingを試しても一味違ったルックになって面白いです。

4方向に処理している
エセライフゲームみたいなものも作れます。

重要な点として、これらの処理はプレビューのキャッシュを利用して行われます。そのため、エフェクトのスピードがフレームレートに依存したり、プレビューが映った順に処理されるため頭から順番にキャッシュを生成しないといけない点には注意が必要です。
キャッシュを利用する性質上、結果の再生成にはディスクキャッシュの削除が必要になります。頻繁にキャッシュを消すことになるので、手頃なショートカットに登録しておくと便利でしょう。
(現バージョンでエフェクトへのアクセスが塞がれた理由も恐らくこのあたりの仕様が原因で、時間に対する返り値が一意に定まらないためだと思われます。実際マニュアルにもAfter Effectsの設計と矛盾する旨に注意書きがあり、スクラブすると結果が変わるような仕様はノンリニア編集において好まれなかったのでしょう)
CC Time Blend FXの注意点
CC Time Blend FXは先述の通りプレビューのキャッシュを利用した処理を行うため、レンダリング結果が安定しません。そのため、いくつか使用にあたって注意点があります。
基本はプリセットに同梱されているreadmeに従えば問題ありませんが、扱うコツを列挙してみました。
マルチフレームレンダリングをオフにする
キャッシュが未生成のフレームは先頭から順番にプレビューする
スクラブ時はCaps Lockをオンにしてリフレッシュを無効にする
キャッシュを消す際はPasteのAccumulationを0%にする
ルックが固まったらレンダリングしてプロキシを作成しておく
レンダリング設定は最高設定ではなく現在の設定で行う
このあたりに気を配ると生成結果がガタガタになってしまうことが少なくなるかと思います。
終わりに
見慣れたエフェクトであっても、フィードバックに挟むことで再帰処理でしか得られないルックを作ることが出来ます。
フィードバックループはビデオアートにおける基本的な手法にも関わらず、After Effectsの設計上試しづらくルックの死角になりがちです。既存の手法を異なったアプローチの中で扱うという選択肢は、知っておくだけでも意外な死角の存在に気づけるかと思います。
おまけ
フィードバック用に使っているテンプレートです。自由に流用してください。