評価・Preview・Render Time#
評価はCNLプログラムとその入力から結果を求める処理です。Nodeの配置やウィンドウの位置は計算入力ではありません。
何を変えると評価が必要か#
| 変更 | 計算内容 | 保存・表示 |
|---|---|---|
| 値、接続、Operation、意味のある型指定、入力ファイル | 変更する | 新しい内容に一致する結果を要求 |
| ノードの移動、折り畳み、パン、ズーム、ウィンドウ配置 | 変更しない | 配置だけ保存。結果と直近時間を維持 |
| 名前やウィジェットの見た目 | 原則変更しない | UI記述を更新 |
| AEに公開したUIの名前・範囲・形 | 計算意味は変更しない | 選択中エフェクトのUI同期が必要 |
| AEP切り替え | 別の寿命・入力環境 | 同名・同じCodeでも元AEPの実行状態を持ち越さない |
AEP共有ワークスペースでは配置を共有保存へ反映し、それだけを理由に各エフェクトの描画用コピーを書き換えません。AE自身が要求する再描画と、プラグインが不必要に要求する再評価は区別します。CPU/GPUのキャッシュがあっても、レイアウトを計算変更として送る設計にはしません。
評価の段階#
構文・型の解決、入力の取得、実行可否の検証、実行計画、CPU/GPU処理、結果の受け渡しを区別します。入力待ちの下書きと最後に成功したプログラムは同一ではありません。古い画像を現在の下書きの結果として見せません。
Nodeの通常編集とCodeのApplyでは、下書きの保存と実行可能なプログラムの公開を分離します。保存後に単一のworkerで構文・型・意味検証、実行計画、shader準備を行い、待機中の要求は最新のものへ集約します。CNL表示の生成もこのworkerで行います。準備完了時は操作がなくても表示を更新します。
準備中、成功、失敗は別の状態です。保存版が変わった、Undo/ロード/AEP切替が起きた、別の実行可能プログラムが先に公開された場合、古い完了結果を現在のものとして採用しません。検証失敗でも修正可能な下書きを保持し、前の成功を新しい下書きの成功とは表示しません。AE APIはこのworkerから呼びません。
現行の非同期化は検証・公開の主経路です。構造変更、接続候補の局所検査、表示モデルの構築、一部のCode変換・Function操作、ホストのロード・保存経路まで完全に非同期化したものではありません。
Evaluation Domainは、評価するサンプルの範囲と座標規約です。型、Shape、Dimensionとは役割が異なります。内部にPixel2DやFrequency2Dなどがあっても、公開Socket Typeの追加ではありません。FFTの周波数軸は、観測するFieldのDimensionとCoordinateで意味を明示する必要があります。
Preview#
Previewは実際のCNL評価結果を表示します。実行中の一枚と、置き換え可能な最新要求一枚を持ちます。時刻だけが連続して変わる場合は完成した画像を順に表示し、最後は最新時刻へ追従します。プログラム・入力の割当て・GPU・AEPが変わった場合は旧要求を失効させます。AEから借りた一時画像の寿命を超えて保持せず、所有する入力スナップショットで評価します。
Preview内の入力選択では、現在のワークスペースを使っているComp・レイヤー・エフェクトを区別できます。同じmainを使っていても各エフェクトのSource Layer接続と公開パラメータは混ざりません。選択したエフェクトが削除された場合、別の画像へ無言で切り替えず入力が必要と表示します。
プログラム・入力世代・エフェクトが一致し、編集中の一時値がなければ、実際にAEへ渡した描画結果を再利用します。この場合、Previewのために再描画しません。値を動かしている間は選んだエフェクトの所有入力を使って独立にVulkan評価し、AEの更新待ちを避けます。AEと入力・時刻・Scaleが一致しない古い画像を、現在の結果として再利用しません。
ImageはShapeとX/Yを使って表示し、Pixel Aspectと表示領域を解釈します。不明な色空間を既知と仮定しません。Gridや数値はVisualizeで表示方法を指定します。SpectrumはFFTの観測表示で、元の複素値を破壊しません。
FileのVideoモードは現在時刻のImageを返します。Video DataなどのVideoを画像処理やOutputへ接続した場合も、既定では評価時刻のフレームを観測します。明示的なSample/Time選択はその指定を維持します。準備・転送待ちには前の画像を残し、計算できないと判定した場合に理由を表示します。動画処理を参照してください。
Previewの低解像度表示と最終AE出力は区別します。現行のローカル試写は長辺960のドラフトを使う場合があります。時間補間、独立した再生・scrub操作、すべてのAE環境での同時再生・MFRの受入は完了していません。
Show Values#
Output/VisualizeのShow Valuesは、AEのCustom Comp/Layer UIによる、触れない情報ギズモです。エフェクトのコントロールが選択表示される間だけ見え、レンダー画像・書き出し・Preview画像には文字を焼き込みません。Geist Regularの白文字と黒縁取りを使い、日本語は同梱のNoto Sans JP Regularで表示します。
Floatは明るさ、Vector2はRG、Vector3はRGB、Vector4はRGBAへ写像します。情報ギズモには型名と数値を表示します。Imageと他のField型は実際の可視化と型名を表示し、実際に存在するAttributesがあれば淡い青で加えます。無関係な画像の属性や既定値を補いません。Stringは型名の下に文字列を表示し、引用符や文字数は加えません。RGB Hexは情報の表示形式で、元データや色空間は変えません。
DRAW中は完成済みの表示を描くだけで、計算・コンパイル・画像転送・ファイル読み込みを待ちません。情報表示のための画像GPU readbackも追加しません。表示上限による省略は元データを変更しません。自分で画像に文字を描きたい場合の明示的なCNL演算と、Show Valuesは別です。詳細は情報ギズモを参照してください。
Render Time#
右下には直近の成功した評価に要した時間をミリ秒で表示します。計測対象のプログラム・入力・エフェクトの識別を伴い、別のエフェクトの時間を流用しません。ソースを変更したのに前の時間を現在値として表示しません。未評価は未評価、失敗は失敗として区別します。
現行のAE測定は実行要求を処理するホスト側の経過時間です。純粋なGPUカーネルの時間、パネル描画の時間、AE全体のフレーム合成時間ではありません。転送・準備・キャッシュの使用が影響します。ローカルPreviewの計測を表示する場合も対象の意味を混同しません。
キャッシュ済みでも、実際の要求で計測した時間を表示します。「0msとする」「未測定を0msとする」規則は設けません。将来のノード別・CPU・GPU・転送時間は区分を持つ観測項目として追加し、現在値の意味を変えません。
性能目標と保証#
全処理1ms以内(従来20ms以内)は開発目標です。任意次元、巨大な係数、任意の動画codec、未知のハードウェアのすべてについて保証できる上限ではありません。測定は解像度、グラフ、入力、GPU、初回/継続、転送を含むかを記録して比較します。GPU処理、実行要求と待機を含む経過時間、パネルへの表示完了までの時間、初回の検証・shader準備を分けます。一つのカーネルだけが1ms以下でも製品全体の1ms達成とは扱いません。