
With a project of this scale implemented with experimental technologies, we most certainly found our share of technical problems. Since the whole engine was custom-built, bugs cropped up everywhere – visual glitches with the cars and track, overlay elements that malfunctioned, buggy event processing resulting in incorrect result lists…to name a few.

We accidentally the wrong axis. Team had a lot of fun watching tires tumbling in front of the car that is accelerating sideways. The headlights are a bit off too.
The protocol of the race messages created a few problems that we couldn’t account for. For example, the positions of the cars could not be determined before a race started: this meant that at the start of the race, the cars were hidden. Many of the messages provided by the server only provided delta information, which forced the visualisation to keep track of the state of, for example, the turbos of the cars. Thus showing the valid state would be almost impossible if the visualizer joined mid-race, as it would not be able to initialize the state of the race from the events that had occurred prior to joining.

Sometimes the start lights forgot to go away. Shoo!
One of the last-minute changes we did was adding a CSS background-image that would be displayed on connection-screen between races. When the race started, the WebGL canvas would be drawn full screen on top of the background-image, hiding it. However, to our surprise, this single CSS background-image – while not visible during the race – caused perhaps one of the biggest performance drops we had seen thus far: the frame-rate dropped from 60 to 30. We decided to revert this change.


With the hard deadline and limited time we had to work with, we had to drop a lot of features that would have been nice to have. We pushed our last feature (nicer start grid lights) just two hours before the finals started, and there were lots of items on the backlog that didn’t make it at all. Those included things like larger height differences in the terrain as well as bridges for the track, additional geometry surrounding the track, more particle effects like car trails and dust, more camera options such as trailing cameras and more impressive race finish effects.

For all the problems we had, we received a hefty reward. Seeing everything we’d worked so hard for on the big screen, along with the competitors, commentators, press members and audience, made us incredibly proud. For us, the story of Hello World Open was concluded at that moment.
We want to extend our heartfelt thanks to everyone who participated in Hello World Open, both the organizers and the competitors alike. The entire event was a huge undertaking, at times even overwhelming. Thanks to all of you, we had a lot of fun working on it. The legacy of Hello World Open lives on, and there have been rumors that the visualisation engine has been adapted to work on an Oculus Rift VR-set and manual slot-car controllers. You may hear more from this later on in a new blog post.
Other parts of Hello World Open – A Story in the Visuals series
- The History
- New Dimensions
- Art and Assets
- Lights, Camera, Action!
- In Retrospective
Credits
2D and 3D engine
- Niklas von Hertzen
- Harri Salokorpi
- Juha Paananen
3D overlays and audio engine
- Teijo Laine
Textures, visuals and skyboxes
- Antero Päärni
Music and sound effects
- Tuomas Nikkinen
Cameras
- Tuomas Hakkarainen
3D model processing
- Timo Yliräisänen, Shader Oy
- Mikko Kunnari, Shader Oy
These blog posts and proof-reading
- Harri Salokorpi
- Niklas von Hertzen
- Teijo Laine
- Tuomas Hakkarainen
- Eero Säynätkari
The Hello World Open Visualisation technology stack
Runtime environment
- Chrome browser
- Windows 8, Linux, Mac OS X
Javascript libraries
2D-visualisation
3D-visualisation
- Three.js
- KineticJS (for texture generation)
- dat.gui.js (for creating cameras)
Audio server