Popcorn Enters the Demoscene


There has existed a a subculture inside computing and programming since the personal computer became relatively popular whose sole purpose is to basically show off: the demoscene. Its focus is primarily “demos” that programmers and artists work together to create as expressions of their artistic and technical talent. Some excellent examples are Future Crew’s Second Reality, and Farbrausch’s Masagin.

For the most part, demos need to be deterministic, meaning (roughly) that there is a planned progression from the beginning of a demo to the end from which any instance of the demo deviates very little, if at all. This is by far the most confusing part of the demoscene to newcomers, because there is a general failure to understand why demos aren’t simply rendered videos. I believe the best way to think about them is to consider what you’re seeing as a demonstration of what will be possible on mass in interactive video games in the next 2 or 3 years; if you’re watching an effect in a demo, imagine the possibility to control it in an interactive environment, and realize that everything presented to you is rendered in real time.

#audio demo 3The progression of a demo depends on programmatic object creation, event coordination, and many other ostensibly simple things. So, very naturally, Popcorn fits right into the creation of a demo: there is a need to sequence events, and popcorn does that perfectly well. Recent releases of popcorn have focused on making plugins a lot better, and allowing player plugins through use of basePlayer. So, in #audio’s latest demo, an invitation to Flameparty, we exploited the opportunity to write our own simple player, extended from basePlayer, which is drives the general coordination of sequences and events.

CubicVR is an incredible open source 3D engine with a featureful JavaScript port. It contains an animation library which can be used to tell an object to get from point A to point B in time X. From the perspective of a programmer using said library though, it’s far simpler to use a general purpose event timing library (like Popcorn) to “macromanage”, and an animation library (like CubicVR’s) to micromanage, mostly due to the respective scope of each library. Popcorn’s focus is on the long-running media presented to the user, while the CubicVR animation library’s focus is on, and should be used in, code pertaining to itself.

We’re always exploring interesting ways to use Popcorn, and this latest #audio demo is a great proof of concept with respect to Popcorn’s versatility. Its use was almost circuitous to convention in a way (certainly no HTML5 video, and audio was generated by jsmodplayer), but it certainly didn’t feel that way whilst we programmed. I encourage its use in a similar manner, and I know I’ll be continuing to use it in my demo-centric future.