Multi-pass shaders and persistent shader buffers
  • jasonbeyers
    activ8 member
    Posts: 58
    Joined: Mon Oct 08, 2018 7:16 am

    Multi-pass shaders and persistent shader buffers

    by jasonbeyers » Sun Oct 11, 2020 5:10 am

    After 3 years of working with Madmapper, I continue to find cool new ways to do things with the tool. However, there is one broad category of media that has never been playable in Madmapper: shaders with multiple passes or persistent shader buffers.

    Madmapper is really good with generative content, thanks to the unique Material shader type (which provides smooth changes in speed) and the auto-generated sliders for shader inputs - including for ISFs. Madmapper's audio controls are also very impressive, and these complex audio controls are only possible when Madmapper is running the generative content.

    There is a whole world of multi-pass shaders on shadertoy that is untapped here. Things like reaction diffusion, motion detection, and trail effects are out of reach, requiring external tools with different control mechanisms. The MIDI-out and OSC-out modules help bridge this gap, to leverage MM's awesome cue system, but it would be better if MM could play this kind of content natively.

    With that said, *some* shaders with shader buffers miraculously do work within MM, but it is rare. I've sampled a few hundred of these kinds of shaders in MM and maybe 10% work as expected. I've also noticed that these buffered shaders (in MM) introduce GPU load even when they are applied to surfaces that are disabled (unlike regular shaders), and content can "bleed" between shaders if multiple ISFs use a buffer of the same name.

    And aside from buffers: shaders with multiple passes may display an output in MM today, but typically only from the first pass. And typically filter/FX shaders are very sensitive to the type of texture input -- syphon input sources don't seem to work, even for that first functional pass, within MM.

    Yes, it is possible to split an existing multi-pass shaders into multiple single-pass ones, and pass textures between them using syphon/spout. I've had some limited success with this, but I have not found such a workaround for persistent shader buffers.

    Some of the most impressive multi-pass or buffered shaders happen to be FX/filter types. Imagine the possibilities if we had support for these kinds of shaders, combined with custom FX support ( The possibilities are endless!

    Also, I recall that MM does not support these shaders due to the performance implications (ex. GPU) with many surfaces. All visual software has these considerations (ex. Touchdesigner, Resolume, etc), and it would be better if we at least had the option for these performance-heavy graphics. People could then determine what is too much for their projects & hardware before FPS drops too much.

    Additional notes:

    When using an eGPU on Mac, syphon doesn't always use the eGPU even if Madmapper does. This introduces an unexpected bottleneck when the internal GPU is underpowered. Multi-pass shaders would eliminate the need for syphon in some cases -- either because the external software (like TouchDesigner) OR internal syphon routing within MM would not be needed for those scenarios anymore. So this is an added opportunity for folks running on Mac with an eGPU.

    For reference, I've been using Magic Music Visuals and Touchdesigner for these kinds of shaders, where Magic is far simpler to use. But I sorely miss Madmapper's audio controls with attack-decay-release filters.

    Thanks for your consideration!
  • franz
    madMapper master
    Posts: 889
    Joined: Fri Feb 18, 2005 7:05 pm
    Location: Paris, France

    Re: Multi-pass shaders and persistent shader buffers

    by franz » Wed Oct 14, 2020 2:44 pm

    I've always wanted multi pass materials, as you said, for these reaction diffusion processes..

Who is online

Users browsing this forum: No registered users and 6 guests