Shader(.hlsl)ファイルを読み込む
これから自作エフェクトを作るなら、Fx Editor(.srfx) を使ってください。 ブラウザでGLSLを書いて
.srfxを書き出すと、Windows・Mac の両方で動くエフェクトノードになります。 このページで説明する.hlsl直置きは、それより前からある別の仕組みです。
.hlsl ファイルは映像素材のひとつとして扱われます。ノードではなく、動画や画像と同じように
MediaBrowser に並び、レイヤーに置いて再生します。
2つの仕組みの違い
.hlsl(このページ) | .srfx(Fx Editor) | |
|---|---|---|
| 何になるか | レイヤーで再生する素材 | エフェクトノード(映像を受けて加工する) |
| 書く言語 | HLSL | GLSL(Shadertoy方言) |
| 動くOS | Windowsのみ | Windows / Mac |
| 置き場所 | Source/Shader | CustomFx |
| パラメータ | 増やせない | uniform を書くとノードのポートになる |
.hlslはWindows版でのみ動きます。 実行中にHLSLをコンパイルする仕組みがWindows専用のため、macOS版では.hlsl素材は再生できません。
置き場所
<Source Directory>/SainaWorks/SynapseRack/Source/Shader/<任意のフォルダ名>/○○.hlsl
Windowsの既定では C:/SainaWorks/SynapseRack/Source/Shader/ です。
親フォルダの位置は VJ素材を読み込むパス(Source Directory)を指定する で変えられます。
フォルダを1つ挟んでください。
Source/Shader/○○.hlslのように直下に置いたファイルは対象外です。Source/Shader/MyShaders/○○.hlslのように、必ずフォルダの中に入れます。 挟んだフォルダの中はさらに入れ子にしても構いません。
新しい
.hlslを取り込む手段は、現行バージョンには用意されていません。 かつてメニューにあった一括読み込み(Source → Load Source Files)は無くなっており、 MediaBrowser へのドラッグ&ドロップも.hlslについては取り込めません。 以前のバージョンで取り込み済みの.hlslは、そのまま MediaBrowser に残って再生できます。 新しく書くなら.srfxを使ってください。
書き方
ファイルの中身はフラグメントシェーダーの関数1つです。全体を囲むシェーダー宣言は書きません。
cbuffer Params : register(b0)
{
float2 resolution; // 描画先の幅・高さ(ピクセル)
float time; // アプリ起動からの経過秒
float globalBPM; // Global Tempo のBPM
float param0;
float param1;
float param2;
float param3;
};
float4 Frag(VsOutput input) : SV_TARGET
{
float2 uv = input.uv;
float v = sin(uv.x * 20.0 + time * 3.0) * 0.5 + 0.5;
return float4(v, uv.y, 1.0 - v, 1.0);
}
決まりごと
| 項目 | 内容 |
|---|---|
| 関数名 | Frag、戻り値 float4、セマンティクス SV_TARGET |
| 引数の型 | VsOutput(自分で定義しません。pos(SV_POSITION)と uv(TEXCOORD0)を持ちます) |
| UV | input.uv が 0〜1 |
| 定数バッファ | register(b0) に上表の並びで渡ってきます。順番を変えると値がずれます |
#include | StreamingAssets フォルダを基準に展開されます |
param0〜param3は予約枠です。 現行のUIには、この4つを操作する場所がありません。並びを合わせるために宣言はしておいてください。
入力テクスチャはありません。
.hlsl素材は「自分で絵を作る」側です。映像を受け取って加工したい場合は Fx Editor(.srfx) のエフェクトノードを使ってください。
コンパイルに失敗したとき
画面がマゼンタ(ピンク)の単色になります。真っ黒ではなくマゼンタなら、シェーダーの文法エラーです。
使う
MediaBrowser に、動画や画像と同じサムネイル付きのクリップとして並びます。 レイヤーへドラッグするか、レイヤーを選んでクリックすれば再生が始まります。
resolution にはそのレイヤーの解像度が入るので、出力解像度を変えるとシェーダー側の描画サイズも追従します。
globalBPM は Global Tempo の値がそのまま入るので、拍に同期した動きを書けます。
関連
- Fx Editor(カスタムエフェクト .srfx) — 現在の推奨経路。両OSで動くエフェクトノードを自作する
- VJ素材を読み込むパス(Source Directory)を指定する —
Source/Shaderの親フォルダを変える - 映像・画像ファイルを読み込む — 動画・画像素材の取り込み
- Global Tempo —
globalBPMに入る値







