Interactive LED basketball court

For the 2024 All-Star weekend, NBA commissioned ASB GlassFloor to create a series of interactive games for game stars to play on their game-certified LED floor at the Indiana Pacers' Gainbridge Fieldhouse.

Players carried multiple tracking beacons including BlackTrax and Kinexon, all of which transmitted position data to be collected and aggregated in close-to-real time, and streamed over the network to an Unreal Engine app which would compute and render the game graphics for the huge display.

I was asked to design and implement a data system to handle all the incoming tracking data via various UDP app protocols, aggregating it into a common data format, storing it for fast time-based retrieval, providing access, recording and playback APIs for use by game logic apps to enable dynamic instant replays.

After some initial proof-of-concept work, prototyping and benchmarking, I settled on "the simplest possible architecture that would work": a Redis pub-sub server and client and a MariaDB (MySQL) database, with node.js as a data-fusing & routing engine.

The node.js app received BlackTrax, Kinexon, Unreal and Mixon data over various RTTrPM and OSC connections, packaging and publishing them to a Redis channel, providing a constant stream of current player positions. Two separate subscribed clients fetched new data on the channel, the first forwarding directly to game logic code, the second storing position frames to the database as part of specified game segments when requested.

A PlaybackEngine  provided a mechanism for game logic to look up, select and request specific segments to be played back, at which point the engine would fetch the relevant data frames and re-transmit them via the live channel, so that app code could integrate instant replays into gameplay.

As the project was on a tight deadline and there were a lot of unknowns relating to game content, much of the work needed to be done in parallel, and as close to the actual live environment as possible. Significant differences in behaviour between some of the data-stream simulator software and the real streaming hardware also meant that we needed to be testing code against the production rig as much as possible. This in turn meant firstly going to the ASB HQ near Munich, and then to a colossal warehouse outside Indiana where the full system was installed for development and testing in the weeks leading up to the game - both of which were in at least -5ºC temperatures!

I wrapped up and handed over my work on the data service engine a week or two prior to the event, at which point the rest of the team pressed ahead finishing and polishing the game components for a successful and much-lauded display in Indianapolis on the live weekend.