View online: wc26.bogachev.fr
Credit: Alexander Bogachev | Source Reddit / threejs
The build
Built in three.js from ~1,500 real logged events per match (FotMob + WhoScored / Opta). Every ridge, flood and peak is a real event, procedural from data, not AI. Custom GLSL handles the displacement, the woven-fabric shading and the flood waves, and playback is time-warped to dwell on the goals. Live and interactive for every match at
The goal
The goal was never to chart stats. It was to make you feel a match: its momentum, the swings, the moment it tips. Each game becomes an animated 3D terrain. Two “territory blankets,” one per team, meet along a moving front driven by momentum and possession. Every shot raises a peak scaled by its xG, a goal floods the whole pitch in the scoring team’s kit colour, and a seismograph along the bottom traces the momentum minute by minute. Penalty shootouts render as a row of pen-hills.
The challenge
It looks simple. It wasn’t. Making the terrain actually behave like the match that was played took almost the entire World Cup. The rendering was the easy part. The hard part was the balances: how much a single shot should bend the front, when momentum should overpower territory, how a goal should ripple out and reset. I tuned it match after match until you can look at the shape and recognise the real game. Months of nudging that logic, the weights and the visuals into something that feels alive.
