部分実装

外部コードとノードライブラリ#

外部コードの取り込みとCNLからの呼び出しを実装しています。ビルド・GPU検証の結果と、対応していない実行方式は別途追跡します。現在の対応範囲は下表を参照してください。

ファイルの役割#

Workspaceの主ファイルは一つの .cnl です。再利用する関数は .cnlf(.cnlF も可)へ分け、export した関数を import で使います。ライブラリやシェーダーを読み込んでも、Workspaceは増えません。

Fileの Import Source Module… でCNL、GLSL、HLSL、Slangのファイルを選ぶと、同じフォルダー内の依存ソースと一緒にWorkspaceへ取り込みます。取り込んだ内容はプロジェクトに保存します。元ファイルを変更しても、自動で別の処理へ置き換わりません。

// main.cnl
import * as gain from "./nodes/gain.cnlf";
function main(source: Image<Color,2>): Image<Color,2> {
  return gain.apply(source, 1.5);
}

// nodes/gain.cnlf
export function apply(source: Image<Color,2>, amount: Float): Image<Color,2>
  = glsl("./gain.glsl", "gain_pixel");

CNLで入出力を決める方式#

CNLで型と引数を定義し、GLSLには画像処理の関数を書きます。

vec4 gain_pixel(CnlPixel p, sampler2D source, CnlImageFrame frame, float amount) {
    vec4 color = cnl_sample(source, frame, p.uv);
    return vec4(color.rgb * amount, color.a);
}

画像引数には、大きさ・切り出し位置・サンプリング間隔を持つ CnlImageFrame が続きます。p.uv は出力画像の相対座標、p.position は元の解像度でのピクセル中心です。AEのコンポ座標とは区別します。異なるレイヤーで同じWorkspaceを使っても、それぞれの画像情報を使います。

HLSL・Slangは hlsl(...)・slang(...) として参照します。関数は float4、Texture2D<float4> など、その言語の型で書きます。CompNodeAEが受け渡しコードを内部で生成します。

既存のCompute Shaderを使う方式#

既存シェーダーのファイルを直接 import すると、コンパイラーの情報から画像・数値の入出力とデータ配置を読み取ります。元のコードは変更しません。

import * as effect from "./nodes/existing.comp";
adapt effect.main {
  rename settings.gain as amount;
  label settings.gain = "Amount";
  default settings.gain = 1.0;
}

自動の受け渡しコードはCodeに書き出されません。adapt で明示した項目だけが、自動で読み取った名前や既定値より優先されます。元の処理と型・配置が合わなくなる変更はエラーになります。名前から時刻や解像度の意味を推測して、値を勝手に補うことはしません。

入力補完には .cnlf の公開関数、参照パス、読み取った引数名・型を使います。ノードの追加メニューのLibrariesから呼び出しを選べます。入力情報はOutputへつなぐ前から表示します。

現在の対応範囲#

対象 初期の対応範囲
GLSL / HLSL / Slang Vulkan Compute、2D RGBA32f画像、単純な数値・Boolean入力
CNLで定義する画像関数 Image入力、数値・ベクトル・Color入力、一つのImage出力
配列・行列・SSBOなど 元の宣言と配置を保持。一部はCNLの型付き呼び出しに未対応で理由を表示
GPU間の受け渡し 外部処理の境界で転送が発生。転送をなくす最適化は未完了
ライブラリ編集 保存されたソースの参照と補完。複数ファイルの編集・再読み込み画面は今後の対応

どんな既存シェーダーでも無条件に動く仕様ではありません。必要な画像形式や機能に対応できない場合は、元の宣言を保持して理由を表示します。

OpenFXを使う#

Import OpenFX Plugin… でコンパイル済みOpenFXファイルを選びます。プラグイン自身が宣言する画像入力・パラメータ・既定値をCNLへ対応させます。Choiceは選択肢を持つEnum、チェックはBoolean、文字はStringです。

初期の対応範囲はFloat RGBA・ストレートAlpha・正方形ピクセルの全画面CPU処理です。半分などのプレビュー解像度も元の解像度と区別します。時刻は cnl_time、フレームレートは cnl_frame_rate で指定します。

タイル、別時刻のフレーム要求、Alpha専用クリップ、独自GPU機能などは現在の接続方式では利用できません。メニューは一つのエフェクトを含むバイナリを対象にします。各PCで明示的に登録した同じ内容のプラグインを使い、OpenFXの実行ファイルはAEPへ埋め込みません。

OpenFX公式仕様、レンダリング仕様も参照してください。

このページを編集GitHubへのアクセス権が必要です。

CompNode Guide · 日本語製品ドキュメント仕様と実装範囲は各項目で区別しています。

ドキュメントを検索

検索語を入力してください。

    ↑ ↓ で結果を移動、Enter で開く · 検索はこの端末内だけで実行されます。