Fx Editor(カスタムエフェクト .srfx)
GLSLのシェーダーを書いて、SynapseRackのエフェクトノードを自作できます。 流れは3手です。
- Webエディタ Fx Editor でシェーダーを書く
- Export して
.srfxファイルをダウンロードする .srfxを CustomFx フォルダに入れる → ノード一覧の 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リクエストのレート制限があり、超えるとその旨が表示されます。
書き出した .srfx は Windowsでも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 はランタイムが渡します。
iChannel0 がFXチェーンから流れてきた映像です。
アプリ側がこれらに入れている値は次の通りです。
| 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ノードと同じ形です。
| ポート | 役割 |
|---|---|
In(FxIn) | チェーンの入力 |
| Enable | エフェクトのON/OFF |
Out(FxOut) | チェーンの出力 |
| パラメータごとの入力 | uniform から生えた float/int/bool の行 |
組み込みのFxShaderノードと同じチェーンに混ぜられます。 FxIn / FxOut を数珠つなぎにして、順番も自由です。チェーンの組み方はエフェクトの使い方を参照してください。
ノードの中央にはプレビューが出ます。テスト画像にエフェクトをかけたもので、約15fpsで更新されます。FxShaderノードのプレビュー表示トグルと共通なので、まとめて消せます。
Enable を OFF にすると、自分だけでなくチェーンの先のFxスロットごと無効になります。 「自分だけ素通し」ではなく、FxShaderノードと同じスロット単位の意味論です。
同じ名前のエフェクトが複数あるときは、表示名にサブフォルダ名が付きます。 例:
自作/Glitch.srfxともらい物/Glitch.srfxを入れるとGlitchとGlitch (もらい物)のように区別されます。それでも衝突する場合は末尾に連番が付きます。
ホットリロード(書きながら直す)
アプリは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も一緒に渡してください。
関連
- エフェクトの使い方(FxShader) — FxIn / FxOut チェーンの組み方
- VJ素材を読み込むパス(Source Directory)を指定する — CustomFx フォルダの親を変える
- Shader(.hlsl)ファイルを読み込む — HLSLを直接置く旧来の仕組み(別機能です)

