Let’s Talk Optimization!
This is going to be a short post, as we’re in the thick of preparing to take CAVE to SIGGRAPH 2018 in a week. Super exciting stuff, but hasn’t left me with much time for blog post writing!
We’re in the quality assurance stages of CAVE – content is pretty much finished, the last cave paintings being painted as we speak. Most of our work now is testing, improving, and optimizing, both for the content itself and for the on-site experience too. Marcus, Susie, Mia, and Andrea have been absolute rockstars, previewing CAVE to literally 100s of people (and if you’re reading this, and you’ve already seen CAVE, thank you so much for helping us test and improve!). Our goal is to have the CAVE experience at SIGGRAPH be a technological success – we hope that what those that experience it remember is the story, and the tech is a well polished afterthought.
There’s one optimization I want to write about today – making the audience in the experience graphically “optimal”. When rendering an object in a scene, we have to render it twice – one for each eye. Now, this is a fine and necessary, but once you start having hundreds of objects in a scene, the numbers really do start adding up. There are some objects that are extremely easy to “combine” into one, such as the set – it’s not going to move or change throughout the experience, so it might as well be combined. The audience, however, each have to move correctly with where each audience headset is looking; on top of that, we have two parts to each audience member. Once you multiply the 30 audience members, by the two parts to each, by the two eyes, you get up to 120 render passes (a.k.a. batches)! For reference, before optimizing, the whole of CAVE only had 400 batches, meaning the audience alone was taking almost a 1/3rd of all batches!
We came up with a pretty awesome way to optimize the audience. Each mesh for the audience members were merged into 1, while keeping the humanoid rig driving them separated. This turned the audience members into one solid object, while keeping parts of the object manipulable and movable! This reduced the render passes from 120 to 2 – kind of shows how important optimization really is!
It’s pretty weird though, thinking of the audience as one single gargantuan object. I like to think there’s a giant, 30 armed octopus under the cave, telling itself a story using 30 finger puppets!