Multi-Frame Rendering in AE — After Effects SDK Guide 22.0.0 documentation

After Effects 2022以降では、より多くのCPUコアとスレッドを持つ最新のハードウェアを活用するため、Multi-Frame Renderingに対応しました。マルチフレームレンダリング(MFR)は、複数のフレームを同時にレンダリングすることで、AEコンポジションのレンダリングや書き出しを高速化することができます。

サードパーティ製エフェクトは、以下の PF_OutFlag設定することで、AE Effects SDK を通じて Multi-Frame Rendering のサポートを有効にすることができます。

PF_OutFlag2_SUPPORTS_THREADED_RENDERING

このフラグは、エフェクトが複数のスレッドでの同時レンダリングをサポートしていることを示します。レイヤー上のこのエフェクトの単一または複数のアプリケーションは、複数のスレッドで同時にレンダリングするために呼び出すことができます。このフラグが設定される前に、エフェクトはスレッドセーフである必要があります。詳しくは、以下の「エフェクトがスレッドセーフであることの意味」を参照してください。

<aside> 💡 After Effectsでマルチフレームレンダリングを使用する場合、スレッドセーフでなく、このフラグを設定していないエフェクトは、各レンダースレッドが一度にエフェクトコードを入力および終了することを強制します。これにより、MFRによるパフォーマンスの向上が著しく低下するため、エフェクトのコントロールウィンドウに警告アイコンが表示され、パフォーマンスへの影響をユーザーに警告することができます。

</aside>

各レンダリングスレッドは、他のレンダリングスレッドと共有も同期もされないsequence_dataの独自のインスタンスを持つことになる。sequence_dataに格納されているデータの計算に時間がかかる場合は、新しいCompute Cache For Multi-Frame Renderingを利用する必要があります。

<aside> 💡 PF_OutFlag2_MUTABLE_RENDER_SEQUENCE_DATA_SLOWERフラグを使用するには、2021年3月以降のSDKに対してコンパイルする必要があります。

</aside>

2021年3月SDKでマルチフレームレンダリングエフェクトがアップデート

2021年3月SDKは、AEベータビルド22.0x6(2021年6月29日リリース)から有効になる新しいsequence_dataの動作を導入しています。2020年6月のSDKでコンパイルされたエフェクトは、Multi-Frame Renderingをサポートするために2021年3月のSDKで再コンパイルする必要があります。また、エフェクトは、少なくともバージョン 13.25 でコンパイルされたことを AE に報告する必要がありますが、SDK 定数 PF_AE_PLUG_IN_VERSION および PF_AE_PLUG_IN_SUBVERS を使用して関連 SDK を自動的に設定することが推奨されています。

以下の表は、新しい動作をサポートするためにエフェクトが行う必要のある変更の概要を示しています。

MFR & Sequence Data Usage Changes Needed with March 2021 SDK
プラグインがPF_OutFlag2_SUPPORTS_THREADED_RENDERINGを設定していない。 変更は必要ありません。Effectとsequence_dataは、従来通り動作します。
プラグインがPF_OutFlag2_SUPPORTS_THREADED_RENDERINGを設定しているが、レンダリング中にsequence_dataへの読み込みも書き込みもしない。 2021年3月のSDKでプラグインを再コンパイルすることで、他のコードの変更は必要ありません。
プラグインが2021年3月SDKでコンパイルされていない場合、AE 22.0x6からプラグインがMFRを利用しなくなります。
プラグインがPF_OutFlag2_SUPPORTS_THREADED_RENDERINGを設定しているが、レンダリング時にsequence_dataを読むだけである 2021年3月のSDKでプラグインを再コンパイルし、スレッドセーフなアクセスのためにPF_EffectSequenceDataSuite1経由でsequence_dataを読むことを更新します。詳細は「マルチフレームレンダリングでレンダー時にsequence_dataにアクセスする」を参照してください。
レンダリング中にPF_OutFlag2_SUPPORTS_THREADED_RENDERINGを設定し、sequence_dataに読み書きをするプラグイン。 2021年3月SDKでプラグインを再コンパイルし、プラグインを修正する。
1.sequence_dataに直接読み書きするのではなく、スレッドセーフなキャッシュアクセスのためにCompute Cache APIを活用する。詳しくは「マルチフレームレンダリングのためのCompute Cache」をご覧ください。
AND / OR
2.PF_OutFlag2_MUTABLE_RENDER_SEQUENCE_DATA_SLOWERを効果に追加し、sequence_dataへの直接の読み書きのアクセスを回復します。

<aside> 💡 2021年3月のSDKでコンパイルされ、PF_OutFlag2_SUPPORTS_THREADED_RENDERINGフラグと、オプションでPF_OutFlag2_MUTABLE_RENDER_SEQUENCE_DATA_SLOWERフラグを使用しているエフェクトは、PF_EffectSequeceDataSuite1が登場した18.0以降のAfter Effectsベータ版で動作します。両方のsequence_dataの動作をサポートする必要がある場合は、このスイートの存在を確認してください。

</aside>

マルチフレームレンダリングによるコマンドセレクターの意味合い

UIセレクタはメインスレッドで送信されますが、PF_Cmd_SEQUENCE_SETUP、PF_Cmd_SEQUENCE_RESETUPPF_Cmd_SEQUENCE_SETDOWNPF_Cmd_SMART_PRE_RENDERPF_Cmd_RENDERおよびPF_Cmd_SMART_RENDERはUI セレクタ処理と同時に複数スレッドの送信もありえるので、これらのセレクタは全てスレッドセーフでなければならない。

PF_Cmd_GLOBAL_SETUPおよびPF_Cmd_GLOBAL_SETDOWNセレクタは、メインスレッドでのみ送信され、他のセレクタと同時に送信されることはない。

マルチフレームレンダリングにおけるシーケンスデータ

sequence_dataオブジェクトと関連するSequence Selectorsは、エフェクトのライフタイム中にデータを保存する方法を提供するために、長年にわたって使用されています。マルチフレームレンダリングでは、注意すべきいくつかの変更点があります。

2020年6月時点の変更点