|
|
In the beginning, WinAmp supported "vis" plugins. These take whatever
waveform data WinAmp is spitting out of the sound card and visualise it
in some way.
A typical example is Nullsoft's own "tiny fullscreen vis" DLL. It gives
you a grainy 320x240 16-colour osciliscope trace, or a scrolling
spectrum print, in various combinations.
This was the level that most vis plugins aspired to. Low-res, low-colour
things that jiggle around vaguely in time to the music. But then, we are
talking about the days when a Pentium II was considered "high-end".
To be fair, there were a few simple 3D things out there, but without
hardware 3D acceleration, they were unusable. (They ran, but at multiple
seconds per frame rather than the other way around.) As with everything
WinAmp-related, a lot of them were quite buggy.
After a while, along came another Nullsoft plugin. I forget what it was
called, but it opened up a little (dockable) window and drew a
configurable combination of osciliscope lines and circles, in
configurable colours. The difference was that the previous frame stayed
in the frame buffer, and would fade to black and/or blur, according to
configurable settings.
One neat trick was to set the osciliscope to draw in white. Set the blue
channel to fade fastest, the green next, and your osciliscope trace
starts brilliant white, quickly fades to yellow, slowly fades through
orange to red, and gradually fades to pure black.
It wasn't much, but it was the least cheap-and-nasty looking plugin
around for a long old time.
And then, a ground-breaking plugin called Geiss appeared. Geiss was a
sophisticated system for utterly crippling your CPU and making it cry
it's little heart out like a 4 year old girl. The visual result was
astonishing though: jaw-dropping full-screen technicolour heaven.
Swirling masses of cloud. If only you could find a combination of
settings that didn't destroy your PC.
The technology is pretty simple in concept. You render one of several
kinds of osciliscope trace into the frame buffer. You fade it, you blur
it, and you transform it. The simplest transformation is to simply zoom
in or zoom out; this creates a kind of infinite tunnel effect. You can
also rotate it a little bit. But Geiss also featured stacks of
non-linear transformations; spirals and swirls, bumps and bubbles,
ripples, orbs, wirlpools and so on.
Geiss was strictly non-programmable; you could change the combination of
options used to draw the image, but that is all. But it had a really
quite large selection of hand-picked transformation maps, some of them
quite complicated.
Another innovation was that it used 8-bit indexed colours. So instead of
simply white fading to yellow fading to red fading to black, the colours
could change in arbitrary ways. They could fade and then GET BRIGHTER.
You could have a mostly green image with the central waveform in creamy
yellow. Or a red image with the wave in deep purple. All the colour maps
were hand-picked. There were even "solarised" ones that contained many
alternating red/green transitions, for example.
Geiss was a simple concept, executed skillfully. Shortly after, a
bazillion and one clones of the idea popped up. But none of them
compared to Geiss. The colour schemes were carefully designed to look
good, the transformation maps were varied and interesting. They included
perspective effects, running ink effects, rippling water effects, motion
blur effects, even one which was dithered to make the image
simultaneously zoom in and out at the same time.
(Geiss also crashed a lot less than the cheap clones - i.e., never.)
The innar looks in Geiss were reputedly hand-coded in assembly for
maximum speed. (Pentium II, remember?) Even so, it was cripplingly slow
at any kind of high-res. (The cheap clones were drastically slower still
though.)
Interestingly, Geiss *had* a 24-bit mode, but aside from being 3 times
slower, it just wasn't as pretty. The waveform rendered in
randomly-chosen colours, and then just blurred and faded. The result was
a nausiating McFlurry of random colours clashing with each other.
Incomparable to the subtly-chosen colour maps of the 8-bit mode that
everybody actually *used*.
Over time, several updates to Geiss were released. Each one added new
transofmation maps or new colour maps. One added the ability to "steer"
the zoom by moving the mouse. Another used primitive beat detection to
do the same automatically. All were worth-while updates.
And then Nullsoft came up with the Advanced Visualisation System (AVS).
It's basically a fully programmable system for doing... exactly what
Geiss does. You program in the shape of the waveform plot, the formulas
for the transformation map, select how much blur you want, and off you go.
Over time, they added more and more features to it. The osciliscope
became so programmable that it was basically an arbitrary line drawing
system. You could load and save bitmaps from multiple buffers to
generate live textures. You could combine bitmaps in several ways.
And then came the rise of the AVS packs. Rather than spend 6 months
learning how to use DirectX, people would just fire up AVS and start
hacking away. No compilers, no DLL issues, no DirectX hiccups, AVS does
it all for you. It's the ultimate RAD solution for visualisation! Except
that what it lets you do is still pretty limited.
Even so, people came up with AVS presents should *should* be completely
impossible. AVS has absolutely no 3D primitives of any kind, and yet
people continually come up with impressive real-time 3D visuals with
complex camera motion, depth fog, reflections and so forth. But even the
purely 2D stuff can be very intricate and impressive.
(It goes without saying that the vast *majorty* of AVS stuff utterly
sucks. But if you dig through the trash, mixed in you'll find some
absolute gems...)
The other problem with AVS is that it's insanely slow. It takes strings
such as "x = x^2; y = y^3" and turns them into runnable code, used to
process every pixel on the display. I'm sure there's probably a degree
of precompute going on there, but even so, without a fast CPU it's
pretty glacial. (Today it's less of a problem, but back when AVS was new...)
As an aside, some time ago I myself realised that AVS can be programmed
to draw both quadratic Julia sets and linear 2D IFS.
The quadratic Julia sets are easy enough to realise. Simply implement a
transformation map using the quadratic formula, and you're done.
The surprising part is that it works; AVS has two transform map types.
The static one, and a dynamic one. The dynamic one calculates the
transform at a handful of points only and then linearly interpolates
between them. The result looks downright horrid. But - interestingly -
for the quadratic Julia, the crude approximation has no visible effect
on the set thus produced.
AVS can also draw linear IFS. This is at first a surprising result. IFS
is usually drawn using the Chaos Game. This involves producing a random
stream of points and producing a histogram of them; AVS cannot do
anything like this. (It could produce a histogram of points, but you
can't compute the points in the first place.)
However, there is another way to draw IFS: the Copy Game. AVS can do
this easily. Take the framebuffer, transform it, stick the result into a
seperate buffer. Repeat for all the transforms in the IFS. Merge all the
buffers back into the framebuffer using a suitible blend mode. Instant
IFS. And since the transforms are linear anyway, it's no problem to make
them dynamic...
And now, I have discovered Milk Drop. Written by Ryan Geiss, the author
of the original Geiss plugin (didn't see THAT comming!), it's so good
that it's included with WinAmp by default, and is the default vis plugin
on installation.
Milk Drop does exactly what Geiss does, but using the GPU instead of the
CPU. The result is an astronomical increase in speed (and hence render
complexity) with almost zero CPU load.
So Milk Drop draws blurry zooming swirly osciliscopes. (And I have to
say, the average quality of a Milk Drop preset doesn't compare
favourably to Geiss.) But it's more than that. Milk Drop sometimes draws
things which defy explanation.
First there are the trivial "emboss" effects. These are presumably just
a simple post-processing step. Quite effective though.
First there are the "glow" effects. Again presumably a post-blur step,
but again very effective.
Then there are the strange "gel" effects, where it looks like a layer of
lumpy gel is sitting on top of the picture. Presumably this is some
simple post-processing displacement trick when blending two buffers to
make it look like refraction. Still, the result is impressive.
Then we get to weird shapes that seem to magically "grow" in highly
complex ways. I'm only guessing, but I think it's some kind of
reaction-diffusion system. I recognise some of the shapes as being
characteristic of that sort of thing.
And finally, there are the impossible paint effects. Colours are drawn
onto the screen, and then they are squished around like wet paint on
glass, but with appearntly richly 3D detail. To see the still images is
impressive; to watch it move is jaw-dropping. I cannot begin to
comprehend how in hell this effect is physically possible...
Milk Drop, then, appears to be the next step in the evolution of vis
plugins. (Even if it is only a minority of the presets that are actually
any good, which is a pitty.)
Post a reply to this message
|
|