Kinetic Light Sculpture #1 is an exploration of light, sound, and movement, a music video in code. It envisions a near future in which our surroundings are animate, reacting to stimuli and correspondingly arousing, with its magical elegance, new feelings of excitement and wonder in us, the participants.
This piece utilizes Three.js's experimental WebGLDeferredRenderer class to perform deferred rendering. This rendering method primarily allows one to mimic Philip's Lumiblade OLEDs with area lights, which are currently unavailable in the official version of Three.js. However, it also allows for the use of a large number of dynamic lights; for example, this scene utilizes fourteen area lights and one hemisphere light.
Moving the camera around the scene in a pleasing, cinematic fashion was probably the most difficult aspect of this project, but the excellent Tween.js library was incredibly useful for smoothly interpolating along the paths that I defined. To translate the camera around the scene I spent a lot of time experimenting with both Euler and quaternion rotations until finally settling with Euler, largely because it appears that spherical linear interpolation using quaternions is limited to great circles around a sphere, making it impossible to retain full control over the camera's path. The camera's orientation, on the other hand, is set with quaternions since these rotations are much smoother than Euler and the "great circle" issue is not a problem in this realm.
Watch the demo, and view the source on Github. Note: This piece requires a good graphics card. My desktop Nvidia GeForce GTX 670 can maintain 60fps at a resolution of 2560x1440, but the Nvidia GeForce GT 650M inside my Fall 2012 Macbook Pro only achieves a maximum of about 30fps while in Retina resolution with the browser sized to one half of the screen (i.e., 720x450). Thus, if using a Retina display either resize your browser to half the screen size or adjust your resolution to its lowest setting.