Files
hms-mediaengine/plugins/examples/com.hms.fx.gaussian_blur/shaders/d3d11/vertical.hlsl
T

51 lines
1.4 KiB
HLSL
Raw Normal View History

// HMS MediaEngine Gaussian Blur, vertikaler Pass (separable)
// Identisch zu horizontal.hlsl mit texel = (0, 1).
Texture2D u_input_texture : register(t0);
SamplerState u_sampler : register(s0);
cbuffer hms_params : register(b0)
{
float4 u_resolution;
float u_time_seconds;
float u_delta_seconds;
float u_frame_index;
float u_layer_opacity;
float u_audio_rms;
float u_audio_peak;
float u_audio_bass;
float u_audio_mid;
float u_audio_treble;
float u_audio_beat;
float param_radius;
float u_quality_samples;
float _pad0;
float _pad1;
};
float4 mainPS(float4 pos : SV_POSITION, float2 uv : TEXCOORD0) : SV_Target
{
float radius = max(param_radius, 0.0);
float4 src = u_input_texture.Sample(u_sampler, uv);
if (radius < 0.01)
{
return src;
}
float samples = clamp(u_quality_samples, 1.0, 17.0);
float stepSize = radius / max(samples - 1.0, 1.0);
float2 texel = float2(0.0, 1.0) / u_resolution.xy;
float4 acc = float4(0.0, 0.0, 0.0, 0.0);
float total = 0.0;
[loop]
for (float i = 0.0; i < samples; i += 1.0)
{
float t = i - (samples - 1.0) * 0.5;
float w = exp(-(t * t) / (samples * 0.5));
acc += u_input_texture.Sample(u_sampler, uv + texel * (t * stepSize)) * w;
total += w;
}
return acc / total;
}