技能标识:vvvv-shaders
Helps write SDSL shaders for Stride and vvvv gamma — TextureFX, shader mixins, compute shaders, and ShaderFX composition. SDSL is a superset of HLSL, so use this skill when writing or debugging .sdsl shader files, GPU shaders, visual effects, HLSL code for vvvv, working with the Stride rendering pipeline, composing shader mixins, or any GPU/compute work. Trigger even if the user says 'HLSL', 'shader', 'GPU effect', 'render pass', or 'compute' in a vvvv context.
SDSL(Stride着色语言)是Stride的着色器语言——它是HLSL的超集,增加了四个关键特性:支持继承的shader类、多重继承(混入)、用于自动阶段间数据流的streams系统,以及用于干净方法替换的override。着色器定义在.sdsl文件中。
Streams取代了手动定义的VSINPUT/VSOUTPUT结构体。只需声明一次,即可随处访问:
hlsl
stream float4 MyData : TEXCOORD5; // 声明自定义流变量
// 在顶点着色器中:
streams.MyData = float4(1, 0, 0, 1); // 写入
// 在像素着色器中:
float4 d = streams.MyData; // 读取(自动插值)
关键内置流:
| 着色器 | 提供内容 |
|---|---|
| ShaderBase | VSMain/PSMain入口点 |
| Texturing |
| 着色器 | 继承自 | 用途 |
|---|---|---|
| VSPSBase | ShaderBase、PositionStream4、NormalStream、Transformation | DrawFX基础 |
| FilterBase |
重要:VSPSBase已包含Transformation、NormalStream和PositionStream4。请勿重复继承它们。
vvvv根据文件名后缀自动从着色器创建节点:
| 后缀 | 节点类型 | 描述 |
|---|---|---|
| TextureFX.sdsl | TextureFX | 图像处理效果 |
| DrawFX.sdsl |
示例:MyBlur_TextureFX.sdsl会自动创建一个MyBlur TextureFX节点。
hlsl
shader MyEffect_TextureFX : FilterBase
{
float Intensity = 1.0;
float4 Filter(float4 tex0col)
{
return tex0col * Intensity;
}
};
注意右大括号后的分号——这是必需的。
关于关键的SDSL语法规则(static const作用域、分号、override、变量初始化、常见错误、分支发散),请参见syntax-rules.md。
| 关键字 | 用途 |
|---|---|
| shader | 定义着色器类 |
| override |
hlsl
// 单继承
shader Child : Parent
{
override float4 Filter(float4 tex0col)
{
return base.Filter(tex0col) * 0.5;
}
};
// 多重继承(混入)
shader MyShader : FilterBase, ColorUtils, MathUtils
{
float4 Filter(float4 tex0col)
{
float3 linear = ColorUtils.GammaToLinear(tex0col.rgb);
return float4(linear, tex0col.a);
}
};
// 静态函数调用(无需继承)
float3 result = ColorUtils.LinearToGamma(col.rgb);
在着色器(.sdsl)中:
hlsl
[EnumType(MyNamespace.BlendMode, MyAssembly)]
int Mode = 0;
在C#(.cs)中:
csharp
namespace MyNamespace;
public enum BlendMode
{
Normal = 0,
Add = 1,
Multiply = 2,
Screen = 3
}
要求:
hlsl
float3 safeLog = log2(max(x, 1e-10)); // 避免log2(0)
float3 safe = x / max(y, 0.0001); // 避免除以零
float3 safePow = pow(max(x, 0.0), gamma); // 避免pow(负数)
hlsl
// 在TextureFX中,tex0col已从Texture0采样
float4 Filter(float4 tex0col)
{
// 采样额外纹理:
float4 tex1 = Texture1.Sample(Texturex1Sampler, streams.TexCoord);
return lerp(tex0col, tex1, 0.5);
}
使用compose关键字的可组合着色器节点:
hlsl
shader MyTonemap_ShaderFX : ComputeColor, TonemapOperators
{
compose ComputeColor ColorIn;
[EnumType(MyNamespace.TonemapOp, MyAssembly)]
int Operator = 1;
float Exposure = 0.0;
override float4 Compute()
{
float4 color = ColorIn.Compute();
color.rgb *= exp2(Exposure);
color.rgb = ApplyTonemap(color.rgb, Operator);
return color;
}
};
在vvvv连线中,将ShaderFX节点连接到TextureFX的compose输入以链式处理。
带有虚方法的基础着色器,由动态组合的混入重写:
hlsl
// 基础着色器声明虚方法
shader ColorProcessorBase
{
float4 ProcessColor(float4 inPixel) { return inPixel; }
};
// 宿主着色器使用组合
shader ColorTransform_TextureFX : TextureFX
{
stage compose ColorProcessorBase Processor;
stage override float4 Shading()
{
float4 col = Texture0.SampleLevel(PointSampler, streams.TexCoord, 0);
return Processor.ProcessColor(col);
}
};
hlsl
// 带类型参数的声明
shader ComputeColorWave
{
override float4 Compute()
{
return float4(sin(streams.TexCoord.x * Frequency), 0, 0, 1);
}
};
// 通过继承实例化
shader MyEffect : ComputeColorWave<2.0f> { };
支持的模板参数类型:float、int、float2、float3、float4、Texture2D、SamplerState。
多个相同类型的组合着色器:
hlsl
compose ComputeColor lights[];
override float4 Compute()
{
float4 total = 0;
foreach (var light in lights)
total += light.Compute();
return total;
}
定义一次,在发射/模拟/绘制管线中使用:
hlsl
以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:
帮我安装 SkillHub 和 vvvv-shaders-1776205285 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 vvvv-shaders-1776205285 技能
skillhub install vvvv-shaders-1776205285
文件大小: 5.71 KB | 发布时间: 2026-4-15 11:11