Magic

Music Visuals
https://magicmusicvisuals.com/forums/

Can't get ShaderToy shaders to work with Magic Performer

https://magicmusicvisuals.com/forums/viewtopic.php?f=2&t=2643

Page 1 of 1

Can't get ShaderToy shaders to work with Magic Performer

Posted: Sun Aug 22, 2021 12:52 am
by KPL
Hi,

I have recently installed Magic Performer v2.31 64bit.
I am trying to get this 2D EQ ShaderToy working..

https://www.shadertoy.com/view/Mlj3WV

ShaderToy shaders implement the mainImage function.
void mainImage( out vec4 fragColor, in vec2 fragCoord )

From reading the forums I know to add the following to the end of cut-paste from ShaderToy.

void main(void) {
mainImage(gl_FragColor, gl_FragCoord.xy);
}

But I still just get black screen. I have tried other shaders from ShaderToy with same result. The Shaders that come with Magic work ok. (have main())
I'm not sure what I might be missing. If someone can get a ShaderToy working with Magic Performer., and input is welcomed. Thank you. Kevin

2D_EQ.txt

uniform vec3 iResolution; // viewport resolution (in pixels)
uniform float iTime; // shader playback time (in seconds)
uniform float iTimeDelta; // render time (in seconds)
uniform int iFrame; // shader playback frame
uniform float iChannelTime[4]; // channel playback time (in seconds)
uniform vec3 iChannelResolution[4]; // channel resolution (in pixels)
uniform vec4 iMouse; // mouse pixel coords. xy: current (if MLB down), zw: click
uniform samplerXX iChannel0..3; // input channel. XX = 2D/Cube
uniform vec4 iDate; // (year, month, day, time in seconds)
uniform float iSampleRate; // sound sample rate (i.e., 44100)


// ...paste the shadertoy code here...

/*
2D LED Spectrum - Visualiser
Based on Led Spectrum Analyser by: simesgreen - 27th February, 2013 https://www.shadertoy.com/view/Msl3zr
2D LED Spectrum by: uNiversal - 27th May, 2015
Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
*/




void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
// create pixel coordinates
vec2 uv = fragCoord.xy / iResolution.xy;

// quantize coordinates
const float bands = 30.0;
const float segs = 40.0;
vec2 p;
p.x = floor(uv.x*bands)/bands;
p.y = floor(uv.y*segs)/segs;

// read frequency data from first row of texture
float fft = texture( iChannel0, vec2(p.x,0.0) ).x;

// led color
vec3 color = mix(vec3(0.0, 2.0, 0.0), vec3(2.0, 0.0, 0.0), sqrt(uv.y));

// mask for bar graph
float mask = (p.y < fft) ? 1.0 : 0.1;

// led shape
vec2 d = fract((uv - p) *vec2(bands, segs)) - 0.5;
float led = smoothstep(0.5, 0.35, abs(d.x)) *
smoothstep(0.5, 0.35, abs(d.y));
vec3 ledColor = led*color*mask;

// output final color
fragColor = vec4(ledColor, 1.0);
}

// ...end paste the shadertoy code

// Add main to work with Magic, but still get black screen.
void main(void) {
mainImage(gl_FragColor, gl_FragCoord.xy);
}

Re: Can't get ShaderToy shaders to work with Magic Performer

Posted: Sun Aug 22, 2021 2:48 pm
by Eric
Seems like you have added a lot of unnecessary variables to the beginning…

Re: Can't get ShaderToy shaders to work with Magic Performer

Posted: Sun Aug 22, 2021 3:34 pm
by Terry Payman
Not being skilled at GLSL I can't spot errors and almost always need to use an automated conversion.

I find it easiest and most flexible to convert ShaderToy shaders to ISF format, which for me has several major advantages over using the GLSLShader module. With the VIDVOX ISF editor https://isf.vidvox.net/desktop-editor/ it's easy to syntax check, add extra parameters and specify meaningful names for the shader itself and all the parameters.

One way to convert is to use Eric & Syd's Shadertoy to ISF script https://magicmusicvisuals.com/forums/viewtopic.php?f=3&t=495. That link lists further advantages of the ISF format.

The VIDVOX ISF editor can import directly from ShaderToy, also from GLSLSandbox. It has built-in syntax checking and simple means of adding parameters. It has a few oddities though - I always try to Save any edits before adding or changing Inputs (parameters), else the edits may be discarded.

nb Not all ShaderToy shaders can be converted automatically, also (by default) they are not licensed for commercial use.

Remember that you need to use the AudioToImage module as the source for your converted shader. I find it useful to follow AudioToImage with the Contrast module.

Re: Can't get ShaderToy shaders to work with Magic Performer

Posted: Sun Aug 22, 2021 7:32 pm
by KPL
Thanks.

This flow below has the shader running in Magic.

1. https://isf.vidvox.net/desktop-editor/
> Install.
> ISFEditor -> File -> Import from ShaderToy
> Paste URL: https://www.shadertoy.com/view/Mlj3WV

2. ISF Editor will save the above converted shader to:
> /Users/KPL/Library/Graphics/ISF/2D_LED_Spectrum-Visualiser_Mlj3WV.fs

3. Launch Magic
> Help -- Add Additonal Module folders. (specify path above)

4. Then I restart Magic, and can get the basic shader running.
(Other ShaderToys came over ok also). Just FYI. Thank you.

Re: Can't get ShaderToy shaders to work with Magic Performer

Posted: Sun Aug 22, 2021 9:52 pm
by Terry Payman
I'm glad that got you going so quickly. Thanks for showing your detailed flow - very helpful to others. Some further points - sorry I didn't detail these in my rather hurried previous post:

1) AudioToImage module: Deselect the "Waveform" option. Use the "Spectrum" option alone if you want a pure spectrum display.

2) Contrast module: Brightness adjusts offset, Contrast adjusts gain of the spectrum.

3) The Contrast module is perhaps more useful when working with shaders that display waveforms. eg https://www.shadertoy.com/view/XlcXDs.
Although designed to show both spectrum and waveform, IMO that shader works very nicely with just a waveform feed. With a waveform image a further neat technique is to follow the Contrast module with a blur, eg Multi Pass Gaussian Blur, which acts as a spatial low-pass filter. As it is operating on an image of the audio, it has a similar effect to an audio low-pass filter and removes the high frequencies from the waveform display. This gives a much cleaner image with bass-heavy music.

Re: Can't get ShaderToy shaders to work with Magic Performer

Posted: Sat Sep 18, 2021 6:10 pm
by KPL
Yes, the Add->ISF->Blur->Multi Pass Gaussian Blur has nice effect. Thanks,

Re: Can't get ShaderToy shaders to work with Magic Performer

Posted: Sat Oct 09, 2021 3:52 am
by riptide76
Very cool, thank you for the show how! :mrgreen: :mrgreen:

All times are UTC
Page 1 of 1