View Full Version : VJing with Milkdrop - methods/ideas
ShadowHarlequin
1st March 2010, 14:07
Obviously alot of stuff could be put into Milkdrop to make it more VJ 'friendly' such as custom variables, midi control, more control of the preset transitions, queing presets etc which would make Milkdrop itself infinetly more awesome but alas these arn't going to happen any time soon
So with that in mind I thought it'd be a good idea to start a thread about methods of VJing with Milkdrop
I've been trying to come up with ideas to blend presets better, for example you have two presets with the same waves/shapes but radically different shaders (or shaders that dont blend well)
So you duplicate the first and insert it between the two and add in the second presets shader code (but store it in a differnt float3 'retB' for example)
create a variablel that stores the time value when you switch to that 'transition' preset ('startTime' for example), then use something like ret = lerp(ret,retB,(time - startTime) * .01);
This (I think) would give you a a smooth blend to the next effect with a speed depending on the multiplier at the end, basically you would be able to switch to the next preset without a crappy screen wipe transition effect (I've noticed this happens alot with shader heavy presets where as older simpler ones tend to blend alot better)
In theory if you coded your presets shader code with certain comment tags (//FX1start & //FX1end) for instance you could write an app that would do this for you for a whole folder of presets, inserting the transition ones between each other preset in the folder
With an app as well in theory you could do this on the fly after coding a shader during a set, while the first preset is on, create the 2nd preset, run the app and you have a transition all done in seconds
Stuff like this doesn't sound that great but I think its small stuff like this which makes MD more of a slideshow rather than a VJ tool (with regards to performing live)
I'd be really interested to know if anyone has any ideas on how to control custom variables (with a method similar to using midi) be it with an app or winamp plugin to inject values into MD (would that be possible?)
ShadowHarlequin
1st March 2010, 14:11
Another thought, you could infact cue up specific shader effects within the shaders an use a method similar to above to 'turn on' and blend them into the current shader when for instance 10000 < time > 20000
Can someone post the two kinds of if statements (the per frame and shader ones are different right?) with a short explanation, I can't ever rememeber how to use them
Nitorami
1st March 2010, 20:57
I agree that the simple presets used to blend a lot better. I don't know how milkdrop internally handles the transition but it seems to me that it tries to run at least parts of both preset codes simultaneously, which may be a bit much for the video card to handle, when the shader codes are complicated.
Some presets won't blend over at all but would be interrupted by a crappy pattern which looks like a random memory dump and a newly introduced bug to me.
I've thought about your idea but find it difficult to understand. Sounds rather hypothetic, and I think it is just not generally feasible, due to the shader architecture used by milkdrop. I've been sitting here for the past hour trying to explain why this cannot work in general but gave up - recommend you provide a simple example to show how you actually meant it.
On the custom variables - even a simple keyboard input would be nice - I guess it WOULD not be a technical problem to implement it, but it just isn't implemented. I guess it is possible to write a third party app which intercepts the messages exchanged between MD and winamp but so what ? You can probably insert midi messages to MD but as it is, it is not programmed to react to it.
ShadowHarlequin
1st March 2010, 21:31
Well what I've found is any shader that varies dramatically to the previous preset just cant be blended
If you see the attached example (it doesn't work mind but I think it 'should' and you'll understand what I meant
So you want to blend preset 1 with preset 3, if you put them in order and hit space you'll notice the screen wipe (because it can't blend the shaders I'm guessing)
(Note this is ignoring most of preset 3's shader code, its going for the purple slightly pixelated effect)
So preset 2 has q1 set to time in the preset initialisation code (which should store the value right?)
Then in the comp code it checks if the current time is ten seconds after the preset was initialised, if so it blends the original ret, with reta (the new effect) according to the difference * .1
As you'll see it doesn't work yet, and I have no idea why, I'm assuming the preset init code iis run when the preset loads, time is read only so you can read the value, and q1-8 are writable, allowing you to store the value and compare it with the current time
Hopefully you might get it working and see what I mean
It's a shame about the input, the wiimote work with midi if I remember right, and it'd be great to do something like "ret *= (knobvalue * .1)" and do some knob wanking like the djs do ;) haha
I just think it sucks we can't have MD 2 source and see how other guys like yourself, flexi, redi jedi and others might improve on it and add more useful stuff
Arturro K.
2nd March 2010, 14:26
as for me (future dj) those things are very important and I would be very happy if see them one day available in milkdrop:
1) direct text input via vj console
I would like to have a option in vj console like "press T to type any msg" and when pressing T or any other combination I can type my message and when pressed enter it,s displayed. one important thing is that such option should be compatibile with different languages - so as for me, living in poland my native language is polish and when I click alt+s I get ś, alt+z = ż etc. so it would be nice to have such possibilities.
2) nice blend when clicking enter on the next preset listed in vj console. I organize my presets like:
Sam Sharp - Roundabout (Sander van Doorn Remix) - 1 (start)
Sam Sharp - Roundabout (Sander van Doorn Remix) - 2 (middle)
Sam Sharp - Roundabout (Sander van Doorn Remix) - 3 (end)
etc. so I have 1 visual named - Sam Sharp..... - 1, next one is - 2 and last one for this track is - 3 and when I click enter on specified preset I would like to have a nice blend to it, not just jump to it like now... or maybe Im wrong and dont know something important in this case ? :) I mean - maybe it is available now ?
ShadowHarlequin
2nd March 2010, 15:42
press 'R' (sets to sequential order) and press space to go to the next preset with a blend, backspace goes back one but doesnt blend
there was a tool for custom messages too but i think you had to save them before hand
Nitorami
2nd March 2010, 17:54
You made two mistakes:-
1.
The q variables are not remembered over frames. Therefore you need to define a permanent variable in the frame init section first, say
start = time;
In the frame equations, you can then store start in q1:
q1 = start;
That will make sure that q1 is assigned the start time at every frame. Note there may be another possibility I never tried - the "progress" variable also contains the preset running time.
2. The lerp statement does awful things when its third argument is outside [0;1]. Use "saturate" to limit to this range.
Then it will work, but only for the comp shader section, and it requires the shader code to be duplicated in preset #2, which is very inefficient and won't work reasonably for more complicated codes.
P.S: I don't think we should blame milkdrop for poor blending. It uses a number of different blending schemes, some of which can at times produce awesome effects. With presets which push the video card to its limits we cannot expect this to work ideally. I must also say that many of my themed presets just by their nature wouldn't blend very well; they are meant as long runners rather than being played in a queue with 4 seconds default playing time.
vBulletin® v3.8.6, Copyright ©2000-2013, Jelsoft Enterprises Ltd.