The 3D browser medium may have just gotten its first breakthrough work – though even that is not nearly as exciting as the thought of what may yet come. Instead of waiting for those new developments, Google and the video’s creators share liberally the toolset they used, with code and skills that could be applied to an unimaginable range of projects.
In a dreamlike world of mixed video and 3D, the music video for Rome’s “3 Dreams of Black” goes far beyond the world of most music videos available today. The 3D graphics alone allow for a higher-fidelity visuals, which race across the screen in real-time bursts of geometry that give the video a sense of pleasant hallucination. There’s some interactivity, to be sure, though I know I and a random sampling of audiovisual enthusiasts found the visuals so compelling that we wanted to lean back and let the experience wash over us. It’s the ability to generate what’s seen on the screen in real-time inside the browser that’s compelling. It’s immediately apparent as eye candy, and it’s likely to spark the imagination of artists and designers to wonder what else these browsers can now do.
If you somehow haven’t seen the video yet, start there:
http://www.ro.me/
But if you’re interested in how this was done, you can go further. The film itself, a collaboration between director Chris Milk and a team at Google led by artist Aaron Koblin, leaves with it an entire, open source project full of code. It’s not just a code dump, either: find an illustrative example model viewer with which you can interact in the browser, demos that illustrate sophisticated WebGL techniques, and useful libraries with still more demos.
http://www.ro.me/tech/
And libraries/more:
Processing.js [JavaScript port of Processing]
mrdoob’s Three.js repository [principle JS library for the music video on GitHub]
WebGL @ Chrome Experiments [yet more JS+browser 3D goodness]
Sharing code alone may not guarantee better art, but it opens a door.
To me, there’s an unfortunate focus in digital media on novelty, when the commoditization of technique may be just the prerequisite needed for a cultural revolution led by artists on screens. Consider the way in which techniques in painting and illustration gave rise to modern Western arts: these arts were commoditized into mass industries, and artists not only acquired skills by apprenticing with masters, but routinely copied techniques through studious observation and copying. Unlike a painting, the separation of code and output obfuscates the underlying structure. But with shared code, fundamental techniques in code are as accessible as the surface of a canvas. If the basics are a commodity, the opportunity for breakthroughs and mastery becomes greater, not less.
Looking at the WebGL examples in Google’s Rome tech page, key techniques like glow shaders, normal mapping, and depth of field are just as essential. The code examples here might as well be a class in 3D programming, and because of the similarity of OpenGL APIs, you can start in the browser, then move to desktop or mobile code.
As if that weren’t enough, Google has also shared video from its IO conference last week. That includes, for instance, a superb session on optimizing WebGL performance.
WebGL Techniques and Performance | Gregg Tavares [Google IO]
http://www.google.com/events/io/2011/sessions.html
I wonder, will other artists be equally open about sharing their techniques? And, for that matter, will artists step up and experiment with code to do new things?
At the same time, given the new sets of challenges making a music video work in a browser can present, how might we jump-start a critical discourse about this work, as well?
If you’re interested, I’d love to hear your ideas and questions. I hope to be talking to Aaron Koblin soon about his practice, so let us know what you’d want to hear.
(I just hope Google adds to society and humanity with this stuff what they took away with allowing us to open Angry Birds … in … any … browser … tab. Uh… maybe it’s good to think about all those parabolas to unwind from writing shader code.)