tAAt 2016 new year demo breakdown writeup

Back at the beginning of 2016, I posted on my blog that I had not done a writeup and asked if anyone is interested.

Well, it's 2017 now, and nobody asked for it, but here we go..

Technically, this is just about as OpenGL 1.0 as you can get. Three textures: the font, the logo and the background color ramp. I guess I could have made the background gradient with good old Gouraud, but this was easier to do. If I recall correctly, I actually took the background ramp from some photo of a sunset, blurred the heck out of it and made just a vertical strip of it. The texture itself is wider than one pixel just because some ancient hardware this MIGHT run on might not like the huge aspect ratio. The logo is tAAt with some font, radial blurred, quantized to very few colors with ordered dither.


I felt like playing with springs again, and figured I'll toss a tAAt logo down a cliff. The original vision made the tAAt logo more complex (i.e, not a rectangle), but I didn't end up doing that. Anyway, springs being what they are, that would probably have messed the logo up after the second bounce or so.

Further ideas that were eventually tossed was automatic generation of the cliff. I pretty much hate making content, and prefer to generate it if possible (or have it made by people who are good at, and like making content).

(..here I am, making content for my website..) (..without anyone forcing me..) (..or even asking..) (..so yeah..).

Instead, I painstakingly made the cliff manually, having the physics simulation run until a beat in the music and then adjusting the cliff, watching the result, adjusting the cliff, running simulation again, etc. I re-did some segments completely after having tweaked the cliff quite a bit, which meant re-doing everything downhill again.

Let's just say it wasn't as much fun as I'd have hoped.

You'll notice when watching it that I didn't exactly hit all the beats, and after the greetings started I pretty much gave up altogether and just let the logo bounce down the hill. On the other hand, the music asked for more movement at that point so I guess it's okay.

Editing the hill did benefit from the slightly-higher-level functions I had done for the automated generation though, so the code looks like this:

hill_bump(35, 6500, 45);
hill_drop(170, 2000);
hill_bump(315, 11450, 25);
hill_bump(1040, 29700, 20);
hill_drop(1060, 1000);
hill_bump(1160, 32500, 30);

I'll leave the parameters and the functions' functions up to your imagination.

Having the logo land right-side up was surprisingly difficult. I had to tweak the downhill several times to make it spin just right.

You may recognize the colors for the hill itself; I took them off some side scrolling platformer screenshot.

There are particles. Plenty. I originally had the collision particles bounce off the hill as well, but that looked silly, so I removed the hill collision and rendered the hill on top of the particles. The collision particles take their energy from the collision penetration depth, so a really strong collision makes the particles spray all around, while a slight touch just makes a little spray.

At some places in the demo the logo is flying down without anything really showing the movement, so I added little particle emitters at the corners too. They look pretty nice when the logo is spinning. I guess there was some thought about texturing the particles too, but they looked nice enough as rectangles, so who cares.

As for the springs... there's a lot of them. I guess I could have gone with just six (sides plus diagonals), but instead I split the logo to smaller pieces to make it more wobbly and connected every vertex with every other vertex. So there's over 10000 springs in there. I also could not change the springs or their parameters once I started making the hill, as even the smallest change would completely change how the logo bounced.

The camera tracks the center of the logo, zooming out whenever the center is moving fast. With a lot of low pass filtering on the movement, and some sanity limits (so we don't zoom too much in or too much out).

That's about covers it, I think. Quite a lot of memories from a tiny project from over a year go.

Comments, questions, etc. appreciated.