Fx Editor(カスタムエフェクト .srfx)

AIと読む
全ドキュメントを1ファイルで(llms-full.txt)

GLSLのシェーダーを書いて、SynapseRackのエフェクトノードを自作できます。 流れは3手です。

  1. Webエディタ Fx Editor でシェーダーを書く
  2. Export して .srfx ファイルをダウンロードする
  3. .srfxCustomFx フォルダに入れる → ノード一覧の Custom FX カテゴリに出てくる

Fx Editor(Webエディタ)

https://fx-editor.synapserack.com/ をブラウザで開くだけで使えます。インストールもログインも要りません。

編集画面は3枚のパネルで構成されています。

パネル中身
コードエディタShadertoy方言のGLSL(mainImage)を書きます。コンパイルエラーは自分の書いた行番号に合わせて表示されます
ライブプレビューWebGL2でその場で実行。テストパターン/動画ファイル(ドラッグ&ドロップまたは選択)/Webカメラを入力に切り替えられます
ノードプレビューそのシェーダーがSynapseRackでどんなノードになるかを表示します。ここのスライダーを動かすとプレビューにも反映されます

トップページにはサンプルが並んでいて、クリックするとその場で開けます。 編集した作品はブラウザ内(localStorage)に自動保存され、トップページの「あなたの作品」に残ります(最大100件、古いものから落ちます)。

その他のボタン:

ボタン動き
共有シェーダーをURLに埋め込んだリンクをコピーします。開くとその場で復元されます
ISF読み込みISF(Interactive Shader Format)の .fs を読み込んでこのエディタの形式に変換します。トップページからは一括変換ページ.fs をまとめてドロップ→.srfx が返る)にも行けます
Export変換サービス(fxconv)に送って .srfx をダウンロードします

Export だけはネット接続と変換サービスが必要です。 プレビューとノードプレビューは完全にブラウザ内で動きますが、書き出しは HLSL(Windows用)と Metal(Mac用)へのクロスコンパイルを伴うため、変換サービスに送信されます。 変換サービスには1分あたり10リクエストのレート制限があり、超えるとその旨が表示されます。

書き出した .srfxWindowsでもMacでもそのまま動きます。1ファイルで配布でき、Fx Editor で開き直して編集を続けることもできます。

シェーダーの書き方

Shadertoy方言の mainImage を書きます。

uniform float uIntensity; // 0 1 0.5

void mainImage(out vec4 fragColor, in vec2 fragCoord) {
    vec2 uv = fragCoord / iResolution.xy;
    vec3 col = texture(iChannel0, uv).rgb;
    fragColor = vec4(col * uIntensity, 1.0);
}

提供されるuniform(宣言しない)

iResolution / iTime / iTimeDelta / iFrame / iMouse / iChannel0 はランタイムが渡します。 iChannel0FXチェーンから流れてきた映像です。

アプリ側がこれらに入れている値は次の通りです。

uniform中身
iResolution描画先の幅・高さ
iTime経過時間
iTimeDelta前フレームからの経過秒
iFrameフレーム番号
iMouseマウス座標(zw は左ボタンを押している間だけ座標が入ります)

パラメータ = uniform宣言

uniform を1行足すと、それがノードの入力ポートになります。

uniform float uZoom;          // レンジ 0〜1、初期値 0
uniform float uZoom; // 1 4 2 // レンジ 1〜4、初期値 2

末尾のコメント // min max default はレンジのヒントです(default は省略可)。

宣言ノード側
uniform float / uniform intスライダー付きの入力ポート(ヒントのmin/maxがそのままレンジになります)
uniform boolトグル付きの入力ポート
uniform vec2 / vec3 / vec4ポートは作られません(値はシェーダー内の既定値のまま)

ノードのポートになるのは float / int / bool だけです。 vec2/vec3/vec4 のパラメータは、宣言した既定値のまま固定になり、ノード上に行が出ないので操作できません。色や座標を触りたい場合は、いまのところ float を複数本に分けて宣言するのが確実です。

入力テクスチャは iChannel0 の1枚だけです。 アプリ側のランタイムがシェーダーに渡すテクスチャは、FXチェーンから来た映像1枚だけです。追加の sampler2D(マスク画像など)を宣言しても、アプリ側にそれを配線する経路はありません。

min と max が同じ値だとスライダーが死んでしまうので、アプリ側が自動的に max = min + 1 に広げます。

.srfx をアプリに読み込ませる

置き場所

<Source Directory>/SainaWorks/SynapseRack/CustomFx/
  • Windows 既定: C:/SainaWorks/SynapseRack/CustomFx
  • Mac 既定: ~/SainaWorks/SynapseRack/CustomFx(ユーザーフォルダ直下)

このフォルダは起動時に自動で作られます。親フォルダの位置は Settings.json の parentPath で変えられます(VJ素材を読み込むパス(Source Directory)を指定する と同じ設定です)。

サブフォルダを作って整理して構いません。 CustomFx フォルダは再帰的に走査されるので、CustomFx/自作/glitch.srfx のように入れ子にしても読み込まれます。

ファイルの扱い

.srfx上書きすればエフェクトが更新され、消せばアンインストールです。ファイル1つの出し入れだけで完結します。

ノードとして使う

Node Editor でノードを追加すると、Custom FX カテゴリに自作エフェクトが並びます。 ノードの表示名は Fx Editor で付けたエフェクト名です。

ポートの構成は組み込みのFxShaderノードと同じ形です。

ポート役割
InFxInチェーンの入力
EnableエフェクトのON/OFF
OutFxOutチェーンの出力
パラメータごとの入力uniform から生えた float/int/bool の行

組み込みのFxShaderノードと同じチェーンに混ぜられます。 FxIn / FxOut を数珠つなぎにして、順番も自由です。チェーンの組み方はエフェクトの使い方を参照してください。

ノードの中央にはプレビューが出ます。テスト画像にエフェクトをかけたもので、約15fpsで更新されます。FxShaderノードのプレビュー表示トグルと共通なので、まとめて消せます。

Enable を OFF にすると、自分だけでなくチェーンの先のFxスロットごと無効になります。 「自分だけ素通し」ではなく、FxShaderノードと同じスロット単位の意味論です。

同じ名前のエフェクトが複数あるときは、表示名にサブフォルダ名が付きます。 例: 自作/Glitch.srfxもらい物/Glitch.srfx を入れると GlitchGlitch (もらい物) のように区別されます。それでも衝突する場合は末尾に連番が付きます。

ホットリロード(書きながら直す)

アプリはCustomFxフォルダを監視しているので、多くの場合再起動なしで反映されます。

したこと起きること
新しい .srfx を入れるノード一覧に追加されます(再起動不要)
既に置いてあるノードのバンドルを上書きする約0.4秒待ってから、その場でコンパイルし直します。配線とパラメータの値は保たれます
.srfx を消す展開キャッシュも消え、置いてあるノードは素通しになります。ノード一覧から消えるのは次回起動時です

パラメータの構成(本数・名前)を変えた場合は、ノードを置き直してください。 ポートは1つのノードにつき1回だけ作られるので、上書きリロードでは既存のポートがそのまま使われます。中身だけを直した場合(式の調整など)は置き直し不要です。

保存されたパラメータの値は「名前」で復元されます。 uniform の並び順を入れ替えても、値が別のパラメータに移ってしまうことはありません。

エラーの見え方

読み込みやコンパイルに失敗したノードは、映像を素通ししつつ壊れていることを表示します。真っ黒にはなりません。

  • ノードのタイトルに が付く
  • ノード内に1行の要約が出る(例: shader compile failed
  • その行にマウスを乗せると、コンパイラのメッセージ全文がツールチップで出る

直したバンドルを保存し直すと、ホットリロードが走って⚠が消えます。

制約・注意点

Windows は Direct3D11 のみです。 Direct3D12 では読み込みが明示的に拒否され、ノードは⚠付きの素通しになります。Mac は Metal で動きます。

パラメータの総量には上限があります。 uniform は float 換算で32個分まで。超えると読み込み時に拒否されます。

プロジェクトは .srfx の場所を絶対パスで覚えます。 別のPCやドライブ構成が違う環境でプロジェクトを開くと、CustomFx フォルダの位置が違えばエフェクトが見つからず⚠になります。 ただし保存済みのパラメータ値と配線はそのまま残るので、同じ構成で .srfx を入れ直せば復帰します。プロジェクトを人に渡すときは .srfx も一緒に渡してください。

関連

このページへのリンク

同じページを参照しているページ