Files
hms-mediaengine/plugins/builtin/generators/com.hms.generator.plasma/shaders/d3d11/plasma.hlsl
T
HMS MediaEngine Agent 75ca88ddbe Phase 3: Alle 24 Pflicht-Plugins (10 Generatoren + 14 Filter, §15.1/§15.2)
- 10 Generatoren mit Manifest + HLSL + GLSL + GLES je Plugin:
  solid, gradient, checker_grid, stripes_chaser, noise_clouds
  (AQ Octaves 2/3/5), plasma, wave_bars, shapes, drops_ripples,
  starfield (AQ 32/128/512 Partikel)
- 14 Filter mit Manifest + Shader je Backend:
  transform2d (keine AQ-Geometriereduktion), color_adjust,
  gradient_map, blur_sharpen (separabel 2-Pass, AQ 5/9/17 Samples),
  pixelate_quantize, mirror_tile, kaleidoscope, wave_displace
  (Noise adaptiv, Amount unverändert), rgb_split, glow_bloom
  (Kaskade 2/4/8), edge_emboss, vignette, strobe_pulse (Safety
  clamp 2 Hz, nie durch DMX allein freischaltbar), feedback_trails
  (Double-Buffer, Clear-Trigger, §15.3)
- Uniform-Vertrag §14.4 in allen 75 Shadern; Generatoren sampeln nie
  u_input_texture; alle Filter mit mix-0-Bypass (§15.3)
- 195 parametrisierte Plugin-Tests: Manifest/Backends/DMX-Slots<=8/
  AQ>=3 Varianten/Uniform-Satz/Vollstaendigkeit exakt 10+14
- Nachtraegliche Manifest-Fixes: AQ-Bloecke fuer 4 1-Pass-Filter,
  mix-Parameter fuer feedback_trails (Slot-Overlap vermieden)
- Gesamtsuite 506 gruen, Ruff gruen
2026-09-11 01:53:48 +02:00

67 lines
2.0 KiB
HLSL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Plasma Generator
// HMS MediaEngine Generator (kein Eingangstextur-Bezug, cbuffer identisch §14.4)
// D3D11-Pixelshader (PS_5_0). Semantik identisch zu GL/GLES (§12.6, §15.1).
Texture2D u_input_texture : register(t0);
SamplerState u_sampler : register(s0);
cbuffer hms_params : register(b0)
{
float4 u_resolution; // xy = Auflösung in Pixeln
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;
float4 param_color_a;
float4 param_color_b;
float param_scale;
float param_stretch_x;
float param_stretch_y;
float param_distance;
float param_phase;
float param_speed;
float param_seed;
float u_quality_samples; // AQ-Variante (Backend-Bindung)
float _pad0; // 16-Byte-Alignment
float _pad1; // 16-Byte-Alignment
};
float hash21(float2 p)
{
p = frac(p * float2(123.34, 456.21));
p += dot(p, p + 45.32);
return frac(p.x * p.y);
}
float4 mainPS(float4 pos : SV_POSITION, float2 uv : TEXCOORD0) : SV_Target
{
float2 p = (uv - 0.5) * param_scale;
p.x *= param_stretch_x;
p.y *= param_stretch_y;
float t = u_time_seconds * param_speed + param_phase;
float terms = clamp(u_quality_samples, 1.0, 8.0);
float v = 0.0;
[loop]
for (int i = 0; i < 8; i++)
{
if (float(i) >= terms) { break; }
float fi = float(i + 1);
v += sin(p.x * fi + t * fi * 0.5 + param_seed)
* sin(p.y * fi * 1.3 - t * fi * 0.3 + param_seed * 2.0);
v += sin(length(p) * fi * 0.7 + t * 0.8 + param_seed);
}
v /= terms;
v = v * 0.5 + 0.5;
float d = length(p) * param_distance;
v += 0.5 + 0.5 * sin(d * 3.0 - t * 1.5 + param_seed);
v = saturate(v);
float3 col = lerp(param_color_a.rgb, param_color_b.rgb, v);
return float4(col * u_layer_opacity, u_layer_opacity);
}