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は、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_RESETUP
、PF_Cmd_SEQUENCE_SETDOWN
、PF_Cmd_SMART_PRE_RENDER
、PF_Cmd_RENDER
およびPF_Cmd_SMART_RENDER
はUI セレクタ処理と同時に複数スレッドの送信もありえるので、これらのセレクタは全てスレッドセーフでなければならない。
PF_Cmd_GLOBAL_SETUP
およびPF_Cmd_GLOBAL_SETDOWN
セレクタは、メインスレッドでのみ送信され、他のセレクタと同時に送信されることはない。
sequence_dataオブジェクトと関連するSequence Selectorsは、エフェクトのライフタイム中にデータを保存する方法を提供するために、長年にわたって使用されています。マルチフレームレンダリングでは、注意すべきいくつかの変更点があります。