Approximate: Making of Gaia Machina
Written by cryptic & velo
The beginning (by cryptic)
The work on Gaia Machina started shortly after the release of our 64k intro Ephemera that was released at Sundown 2009 and finished in 1st place in the combined 64k/4k compo. The intro was the result of several improvements to our 64k system but the thing it lacked was design and a good feeling of flow.
Therefore, one of the main goals for our next 64k was to improve on this. The first step was to come up with a story connecting all the scenes together. We also wanted a design that set it apart from the competition. At the time most 64k intros featured industrial and/or space settings or were completely abstract. But “realistic” nature scenes were mostly missing. Historically, one really nice exception was Paradise by RGBA. It was a big inspiration.
I had the idea of exploring the interaction between nature and technology, and that evolved into the concept of having nature and technology mixed together, like fruits and flowers with mechanical parts. There are a lot of examples where technology is shown as a negative influence on nature. I thought therefore that it would be interesting to explore the opposite with a more positive view where nature and technology work in symbiosis. A theme where nature slowly starts interacting and even gets intertwined with technology. The intro would be divided into two major parts. The first part would be slow paced, showing the nature scenery, and the second half would be showing the influence of technology on nature and would be the more effect intense part with a small transfer scene in between.
Development (by cryptic)
The first step in implementing the nature/technology based story was to explore which natural shapes we could do with our current code for producing content. I started out with some simple things like apples and strawberries which worked without any problems with the current code.
I then started to implement some close up scenes like strawberry fields which also worked without any problems with the current engine design.
Taking the step from close ups to full scale nature scenes required some additions to the code. I added a rather versatile tree based system in order to generate a variety of trees and plants based on branching rules and some simplistic physical properties. In the end, we just ended up generating a few trees and plants with it and reused them in the various scenes though.
Other additions to the code that was added during this stage included support for instancing and splash maps for foliage as well as an upgrade to our shader system to be more versatile and modular in order to be able to handle all the different effects we wanted. This, without bloating the code and data. I created several nature scenes, about half of them made it into the final product. When I had a set of basic scenes, I started to add the effects for the second part. We were at this point quite close to the Revision deadline so I chose to focus on effects that did not require any additions to the code but could be done with our current animation and shader systems. Such as animating the emission output, simple mesh displacement and instance based animations. It set a lot of limitations, but limits and deadlines are a good combination!
I managed to complete most of the effects and set up some basic timeline/syncing before it was time to go to Revision. At this time I still had not received any music and I was a bit stressed about the fact that all the syncing had to be done at the party, as well as a great bit nervous about how the music would turn out. I also had some issues with some scenes, mostly the two last ones (particle effect in the amphi theater scene and the whole unfinished feel of the windmill scene) but I hoped that I would have time to fix them at the party as well. Basically everything was set up perfectly for a terrible “no sleep chaotic party deadline crunch”!
Music (by velo)
One week before Revision the new version of our synth Mapprox 4 that Meaty had been working on was handed to me. And the week was spent mostly hunting for bugs, or rather, avoiding them and learning the synth itself of course. This didn't leave much time for the actual song as I had to redo the instruments a couple of times between the fixes. Besides sounding absolutely amazing, the new version featured a GUI which the old one lacked. Knobs instead of a long row of renoise sliders that just kills creativity helps a tremendous amount, especially when not knowing exactly what something does to a sound. Not knowing more than the basics of sound synthesis I think helps. For example, there were times when Meaty would say: “Why are you doing that string or lead in that way? It’s not meant to be used like that!” For the most part, he was of course right, but I did make some sounds Meaty didn't know were possible, even though I'm unsure if we used any of them in Gaia Machina. And it did help me come to terms with the synth not knowing its limitations from the get go.
I hadn't seen more than a few early random scenes and print screens from the intro when I started making the music, but I had a rough idea of what Cryptics vision was. Although, at the very start we had planned on making the music more industrial sounding, especially for the second half of the intro, which is more machine themed. That was still the plan arriving at the party. Lack of time and the fact that it did actually work fairly ok moodwise when playing the song on top of the uncut scenes made us rethink. I don't remember if I had any influences in general. But the middle, evil sounding part is more or less inspired by Shuki Levy Les dieux des Incas from the most excellent 80’s cartoonshow Mysterious cities of gold (someone do a demo about it already), I wanted to get that haunting vibe when the robotic tentacles appear.
Cryptic was given a rough cut of the music just two days before the party, which of course is not recommended. Just to be on the safe side of things, we decided that Meaty would make a song as well, and we would then choose which one to use. His song, although showing off the capabilities of the synth in a much better way than mine, did not fit the actual vibe of the intro and we decided to use mine. His song, called Alternature, was entered into the newschool executable music compo and ended up in fourth place. A feat I could not have achieved with my soundtrack as it depends too much on the visuals to make it work, just as with most demos not working without music, something would feel lacking. A perfect example of how something becomes more than the sum of its parts I think. In fact, I would even go so far as to say that if the music would have worked more as a standalone piece, the intro would not have done as well as it did.
I finished the music on my laptop with a pair of cheap headphones (again, not recommended) at the party. Anyone trying to make music at a party like Revision knows what I’m talking about. It might be ok if you are composing something less subtle. But for Gaia Machina it was basically hopeless during daytime, which meant long nights with hopefully quiet enough partying. I even sat down in the tunnel at one point just to get some work done.
It was added to the intro at the very end and Cryptic and I spent the last few hours syncing the intro to the music. I was mostly moral supporter at this point however, bringing him coffee and beer and doing my best not to find more bugs for Meaty to fix, he was after all a bit stressed about his annual quiz. One of my favorite memories from that year was sitting next to Cryptic in the middle of the night, almost no one awake. All of a sudden he takes of his headphones, looks at me and holds up his arm. He had goosebumps. I put on the headphones and he played the scene he was working on. I got the exact same reaction! It might have been caused by severe sleep deprivation, but, if you get goosebumps from your own creations, you know you might be on to something. The scene he was working on was the one with the strawberries lighting up.
Revision 2012 (by cryptic)
This part is pretty much a blur for me. It was three days with a total of about two hours of sleep and a lot of bugs, beer, coffee, syncing, more bugs, much more coffee (thankfully the coffee was free at the party). It is the most intensive crunch I have ever had and it is one of the reasons why the work on the final was not started right after the party. Some floating point optimizations in release mode caused a lot of problems both in the graphics code and in the synth and were quite a pain to get rid of. There was also some shader math that caused some troubles and then there were a lot of issues with design. A lot of time was spent on synchronizing the music and the graphics, adding camera paths and adjusting the scenes. Completely stressed out we handed in the production something like 5 minutes before the deadline. After having handed in the release we realized that there were still some bugs left. So I spent some more time fixing those and adding some fast speed optimization and then headed up to the organizer area to hand in the latest release and see if we could watch it on the actual hardware just to be sure. After having checked that the latest version ran as expected on the compo hardware we were finally done and I could get some rest, have some beers and nervously await the 64k compo.
Compo night (by velo)
Up until the deadline, we hadn't really had time to socialise with anyone and had only heard rumours about who our competition was. Sometime during the time leading up to the compo we met rez/razor1911 who we heard had been working on something. He introduces us to the the most excellent guys in Ctrl+alt+test who also had something ready. Somewhere in between we met Q^nonoil and Kioku^systemK who it turned out brought a 64k intro (scottie) all the way from Japan! (Well, I guess Zavie^cat did as well.) To be fair, at this point things turn blurry. I remember being really nervous, hoping most of all that my song would not put Meaty's synth to shame. The jingle started playing, Okkie did his thing and lights faded.
One of the worst things that can happen is that you put time and effort into a production and the competition doesn't have any entries, or any good entries. Well, this was certainly not the case! Even though the 64k category had been neglected for a few years, this year's compo actually, more or less, brought shame to the demo compo. There were so many good productions, Scotie by noniol and systemK, train control by brain control and alkorytmi by cubicle just to name a few. Then things got serious with the scene is dead by razor1911 with some very nice rezmagic and epic music by dubmood. I remember thinking to myself, please don't let ours be next. You don’t want to have your music compared to dubmood, you will lose. Luckily enough, yportne by fnuque was up next. A one-scene effect-driven intro that, while being a good intro, did not act as a threat.
Next up was us, heart was racing, palms sweaty. Throughout demoscene history, a loading bar has never felt so long. The reactions from the crowd when they saw the first scene calmed my nerves. And the music did not sound half bad even though I had only listen to it on headphones and some cheap speakers. People really seemed to enjoy it and even caused spontaneous ooohs and aaahs during some scenes. Thats when we noticed it. Grass clipping the wall of one of the windmills, how could we have missed such an obvious design flaw? Well it was too late now, maybe no one noticed?
I was interested to see if our “goosebump scene” would work on the bigscreen. And boy did it! I don't know how many times I've watched the live recording of the intro from the party on youtube just to hear the audience reaction, but its way too many times to be considered healthy. Being in my own bubble, I thought the compo would be over, I was wrong.
Up next was Ctrl+Alt+Test with F Felix’s Workshop. Uhoh! Lots of content, a coherent theme and story, all synced perfectly to cyborg jeff's music. A crowdpleaser for sure and a perfect ending to the compo. I don't remember the rest of the compos that night, or the rest of the night itself to be honest. But I bet I slept well.
Aftermath (by velo)
Well, we won the compo and the intro itself was very well received. Not only within the demoscene but thanks to getting mentioned on slashdot and reddit, we got a huge amount of views in just over a few weeks. We were also featured in a German computer magazine (again), and got our 1.5 seconds of fame on German TV. We felt we (Cryptic and Meaty) deserved a break, so not much happened production wise that summer. The plan was always to make a final, however more important things got in the way. Meaty kept working on the synth as there were things he wanted to improve and he had big plans. Autumn crept closer and we decided to visit Meaty in his London flat, as we had always done to prepare for the sundown demoparty. When we got there Meaty was very ill, and could unfortunately not join us at the party. We didn't know it then, but it was the last time we would see him. We kept in touch the following weeks, and he was feeling better and was soon back to his own self. A month later I got a phonecall, Meaty had unexpectedly passed away. We had lost a third of our group, an amazing human being and a close friend. They played Gaia Machina at his funeral. Both Cryptic and I felt it was more important than ever to finish the final to honour Meaty and that we would continue on. We felt it was what he would have wanted.
Final (by cryptic)
The intensive crunch before the deadline and Meaty's death resulted in that it took a while before I could even look at the demo code again, but after a while I started going through the intro, fixing bugs and improving the design. I started by fixing the most obvious ones like the grass intersection. I redid the entire windmill scene from scratch two times before I came up with a design that I found good enough. I was not really satisfied with the background however, which was one big heightmap mesh that did not look like a real landscape at all, but still, it was a step up from the party version where the whole background was just one weird looking color gradient. I then fixed a couple of issues that I found really annoying with the closeup scenes. Firstly I changed the grass which were simple planes with alpha masked textures. It looked terribly buggy up close, with blobs of grass hanging in the air. I replaced them with proper meshes which also improved the lighting a lot.
I also tried to get rid of all the cases of blurry close up textures that were really apparent on the ground, especially in the strawberry scene. The apple scene was another scene that also saw a lot of improvement. The branches were replaced with proper meshes that used the same tree based system as the plants and trees. I also improved the leaf texture with small veins and other details, which produced a much nicer interaction with the lighting.
The final version of the apple scene has much more detailed leaf textures. It also uses the same system for producing the branches as is being used for the trees and plants instead of a simple path extrude that was used in the party version.
I then redid the particle effect in the amphi theater scene, replacing the fast made party version with a new one that had a better feeling of flow in it. After having done these and several other fixes so that we felt comfortable with the result I started size optimizing the code, since the addition of the new content (meshes, textures, scenes, shader code) had made the size go beyond the 64k limit. It was quite a lot of work trying to push the size down under 64k again. I reordered the intro data several times and went through the code and tried to clean it up as much as possible. I finally managed to get it below the size limit. Now that we had a complete final I wanted to make sure that the intro was as bug free as I could make it by testing it through Valgrind, a really nice memory debug tool for Linux. I already do most of the development in Linux so I already had a X11 based port up and running. I made sure that the intro ran without any Valgrind warnings. There were a couple of them, mostly innocent but I went through them and fixed them. However, by doing this I found something really embarrassing... Deep within our code was the following statement:
Enigma sequence was an intro that we released in 2009 at Breakpoint. Apparently the song data from that intro had been lying around in our code ever since even though I have gone through the code several times. Doh! I removed it and all of a sudden the intro size went from 64k to 59k. After all the time I had spent trying to size optimize the final. This bug has been named the Demosthenes bug in our group after the ancient Greek orator named Demosthenes who among other things improved his stutter by making it even harder for himself by putting rocks in his mouth when practicing his speech. So now we suddenly had an extra 5kb. I used this opportunity to add a proper raymarched landscape to the windmill scene, it made a big difference and I was finally happy with it!
After this was done the final felt complete and all that was left was to try it on several different hardware configurations. We found some problems when we ran it on AMD hardware. Mostly our fault. There were also some older hardware could not handle the GPU memory requirements so I also added the texture compression option at this stage. A surprise was that the intro worked perfectly the first time that we tried it on Intel GMA hardware. Apparently their drivers have improved quite a lot the last couple of years. Finally, almost 2 years after the party version was released, the final was completed in March 2014! It’s a really nice feeling to at long last have released the final. And it feels like we are now ready to start working on new demoscene projects! On to bigger things! or smaller? Who knows?
One of the shortcuts taken in the party version that still remains in the final version. The windmill reuses the tech arms pattern.