Concept
Respiration II est l'evolution de Respiration. Elle reprend le meme concept — le reseau STIB transforme en sculpture lumineuse vivante — mais avec une difference fondamentale : les vehicules sont maintenant positionnes a leur emplacement reel sur le trace de la route, pas simplement a l'arret le plus proche.
Le resultat : une representation fidele du reseau en temps reel. Les vehicules glissent le long des fibres optiques entre les arrets. La nuit, quand le reseau s'arrete, les lumieres s'eteignent veritablement. L'aube voit les premiers metros s'allumer. L'oeuvre respire au rythme reel de Bruxelles.
Difference avec Respiration (v1)
Dans la premiere version, chaque vehicule etait positionne a l'arret le plus proche (pointId). Cela signifie que les ~600 vehicules etaient visuellement colles aux ~2500 arrets, comme des particules aimantees. Les vehicules sautaient d'arret en arret au rythme des mises a jour API.
Dans Respiration II, chaque vehicule est projete sur le trace GeoJSON de sa ligne, puis decale par distanceFromPoint metres le long de ce trace. Le resultat est une position GPS reelle, interpolee entre les mises a jour pour un mouvement fluide et continu.
Les trois couches visuelles
Couche 1 Le Squelette — les traces
89 lignes STIB transformees en fibres lumineuses suspendues dans le vide. Chaque type de transport occupe une altitude differente : metro au fond (Y=0), tram au milieu (Y=20), bus en altitude (Y=50).
Couche 2 Le Sang — les vehicules
Des points de lumiere qui glissent le long des fibres a des vitesses realistes — metro ~30 km/h, tram ~20 km/h, bus ~15 km/h. Chaque point pulse, laisse une trainee ephemere, et emet un halo de sa couleur de ligne via le bloom. Aux heures de pointe, les fibres sont saturees. La nuit, rien ne circule — l'organisme dort.
Couche 3 Les Synapses — les arrets
~2500 micro-spheres translucides qui flashent brievement quand un vehicule les traverse. Les hubs majeurs (De Brouckere, Gare du Midi, Simonis) sont plus gros et clignotent quasi en permanence.
Positionnement des vehicules
Le probleme
L'API STIB ne fournit pas de coordonnees GPS par vehicule. Elle donne un pointId (arret le plus proche) et un distanceFromPoint (distance en metres depuis cet arret).
La solution
Chaque ligne STIB a un trace GeoJSON complet (geometrie du parcours). Le systeme :
- Pre-traite chaque trace en un chemin indexe avec distances cumulees
- Projette la position GPS de l'arret sur le chemin de la route
- Ajoute le
distanceFromPointcomme offset le long du chemin - Interpole la position a 60fps avec des vitesses realistes entre les mises a jour API
Stack technique
| Technologie | Role |
|---|---|
| Three.js r162 | Moteur 3D WebGL |
| ES Module importmap | Chargement natif sans bundler |
| UnrealBloomPass | Post-processing bloom |
| Route Animator | Projection + interpolation vehicules sur GeoJSON |
| STIB BMC API | Donnees temps reel (Belgian Mobility Company) |
| PHP daemon | Cache des positions vehicules (10s) |
Credits
Donnees : Belgian Mobility Open Data — STIB-MIVB.
Moteur 3D : Three.js par Ricardo Cabello (Mr.doob) et contributeurs.
Concept et realisation : STIB Data Art.