So, after much thought and some good feedback, we’re moving towards a set set of curated FRACT Synths in the studio. These synths connect more appropriately the world & narrative and are easier to use. The synths have a curated set of controls, but offer a wide variety of sound with little intimidation (the Wall of Knob fear). We drew inspiration from tools like Propellerhead’s Figure, which impart tons of user expression, freedom, and playfulness with a few well thought out controls.
Don’t worry though Synthheads, for those that still want the Wall Of Knobs – that’s still totally an option and just a few clicks away. And trust me when I say the control is quite comprehensive (multiple envelopes, envelope polarity, multiple filters, vibrato, LFO, sub oscillators, variable wave shapes and more!)
So in the past (very busy) week we’ve implemented some near final features to the synth engine (and by we, I mean Henk). First big one (which I’ll demo later) is our new High Pass Filter. This actually required us to re-evaluate our Low Pass Filter and how the Envelopes control both filters. So, we’ve got newer, more flexible Envelope control too. This allows for some truly wacky stuff!
Next up is Note Painting, and man is it awesome. Our old sequencers required the player to click on individual cells to write sequences, the new tech allows them to click-drag to ‘paint’ the notes. This sound like a minor change (perhaps why we put it off for so long), but it is super fun, playful, improvisational and intuitive.
Here’s a quick clip of me fildding with some of the new Envelopes while doing some improvisational Note Painting:
Thought I’d sneak one in before the day was done – testing out some of the new CRT fog, some tweaking to be done, but on the right track.
Today I’m working on some pattern sequencer stuff (the sequencers that sequence the smaller sequences – wow, that is not any clearer). We have three primary synths in the game; Lead, Bass and Pad. The Lead and Bass synths are monophonic (1 voice/note played at a time) and the Pad is polyphonic (currently set around 4-5 voice/notes at a time). The pattern sequencers I’m toying with today are the for the Pad synths, thus they’ll be juggling a bunch of voices.
What’s tricky about the pads (and kind of cool, it was Henk’s idea) is that the Pad sequencers will progressively steal voices as the patterns ask for new notes. This behaviour is a bit like the classic Yamaha CS poly synths (CS-50, CS-80 etc), and with a bit of modulation trickery, we could treat each voice like an individual (and slightly different) oscillator. Long story short, it should SOUND REEL GUD. I’ve posted this sample before, but it illustrates this nicely:
Our current voice budget is 10 realtime voices spread accross the various synths – which in software like Live, Reason, Cubase etc is peanuts (especially when you consider that our synths are agruably ‘lower’ quality). But they aren’t rendering a 3D world with things like physics, laser-beams and fun-emulators. With 6-7 musical voices being used up, it would be fair to ask what the rest are for, and while I’ll save the nitty-gritty for another post, we do a lot of the sound effects (especially the reactive/interactive ones) with synth voices.
A little late on this annoucement as our year-end was crazy busy, but we’re super proud/excited/slightly nervous about the fact that we’ll be presenting some talks at the Games Developer’s Conference this year!
Achieving Real-time Synthesis in the Musical World of FRACT
Henk’s going to be going into detail about how we’re doing our synth-magic behind the scenes:
FRACT is a first-person, puzzle adventure game set in a world inspired by electronic music, and the winner of an IGF Award in 2011. The newest iteration, FRACT OSC, is inspired by synthesizers, and allows players to shape sound and compose music within the game. This talk will discuss the approach taken in implementing a dynamic, user-controlled audio system. It will also discuss the advantages and disadvantages of using real-time synthesis alongside samples, the challenges encountered while using Pure Data, and the key decisions that were made when a custom sound engine was created for the game.
Taking the Leap from Student to Studio: The Story About Making FRACT
I’m going to be presenting Quynh’s and my story of just how we ‘decided’ to throw caution to wind and make FRACT:
Winning the IGF for Best Student Game was a dream come true – but then what? This talk details the ups and downs, circuitous paths, and the lessons learned along the way while developing the student game FRACT into a commercial release. Learning on the job is challenging enough, and the talk shares what happens when life throws something unexpected your way. It discusses the reality of taking risks, running an indie studio out of your home with a pregnant wife as your producer, and putting out your first game in the midst of juggling big decisions, deadlines, and diapers.
Hope to see you there!
- Richard, Quynh & Henk
So, today I’m trucking along on some more optimization tasks. Not entirely sexy, but I seem to have crossed some magical boundary of drawcalls that has made the game quite playable in the editor. This magical number is still too embarrassingly high for me to share publicly (it’s an open-world game, so cut us some slack, right?) but I’m feeling much better about getting FRACT OSC playable on a wider variety of systems. As far as I understand it (which is limited, that’s what Henk’s for), OpenGL based systems will require slightly different approaches, but we’ll cross that bridge eventually. Either way, it’s nice to feel progress!
Today I’m refining some massive architecture in the world of FRACT OSC. I’m not sure my workflow is conventional, or even remotely ideal, but by building spaces through varying degrees of parametric control it allows for some flexible (if very inefficient) creations. I won’t spoil just what/where this is just yet, perhaps we need to put together some new trailers for you guys?
Working on some reactive sound design elements today (sample-less dynamic synths that interact with the player) and I continue to be amazed by our sound engine. I was setting up a series of these synths, and a typo on one delivered some lovely results.
More exciting optimization today (actually, it is kind of exciting, or at least satisfying). Henk’s “blame prefabs for renderers” script is turning out useful as I tackle the some of the worst offenders in the game.
I’m working on some assets today that have been in prototype mode for way too long. Initial testing really brought some legibility problems to the forefront (we were expecting them), and today I’m going to try to address them.
It’s interesting just how varied some of the conventions for communicating inputs and outputs can be, even within a specific field (in this case I’m drawing some inspiration from audio gear).