Tecnica

Il processo di realizzazione

Renewable Rhythms nasce con un'idea precisa: prendere i dati Terna e incasellarli in un canva digitale, una tela dove i dati possono essere visualizzati e con cui l’utente può interagire.

Il team di The “What If” Project nasce tre anni fa dall’incontro professionale di tre programmatori con la passione per l’arte, mentre il processo per Renewable Rhythms inizia un anno fa ed è fatto di esperimenti e perfezionamenti continui per arrivare al risultato finale.

Com’è stato creato?

Tutto parte dall’estrazione dei dati Terna sulla produzione di energia da fonti rinnovabili, dal 2019 fino a oggi.

Il canvas finale si aggiorna continuamente tramite un collegamento API diretto con i dati che Terna mette a disposizione. Tuttavia l’utilizzo di questi dati ha innescato dei ragionamenti di sintesi e ottimizzazione finalizzati all’esperienza utente. Il Transparency Report mette a disposizione qualsiasi tipo di dato, sia sulla produzione con le rinnovabili sia sulla produzione nel fossile.

Il team ha quindi deciso di estrapolare solo una parte dei dati e aggregare le informazioni orarie in giornaliere. Nella prima realizzazione del progetto, infatti, con i dati orari non si aveva un effetto visivo e comunicativo al pari del risultato attuale. La premessa era non snaturare i dati e fare sì che il risultato finale fosse il più fedele possibile ai numeri di Terna, ma anche il più adeguato all’esperienza utente.

Un pentagono che rappresenta i tipi di energia di Terna: Geotermica, Idroelettrica, Biomassa, Fotovoltaica e Eolica.Un pentagono che rappresenta i tipi di energia di Terna: Geotermica, Idroelettrica, Biomassa, Fotovoltaica e Eolica.

Il risultato? Ogni tipo di energia prodotta - fotovoltaica, geotermica, idroelettrica, eolica e da biomasse - è rappresentata da una particella di energia. Le particelle variano in velocità, dimensione, sfocatura e intensità del colore in base alla quantità di energia prodotta giornalmente. Maggiore è la produzione di energia, più rapidi saranno i movimenti delle particelle, fornendo una rappresentazione visiva dei livelli di produzione di energia.

Possiamo riassumere questa intensità di movimento attraverso questa funzione:

v(t) = F(p(t))

Particle position
La posizione della particella nel tempo t.
Velocity (through time)
La velocità con cui la particella si muove al tempo t.
Flow field (through positions (through time))
Un insieme di forze o direzioni che influenzano il movimento della particella.

Algoritmo Perlin Noise, cos’è?

L'algoritmo di Perlin Noise è un metodo per generare texture e immagini che sembrano naturali e realistiche.

È stato creato da Ken Perlin nel 1983 mentre lavorava agli effetti speciali per il film "Tron". Durante questo progetto, Perlin si rese conto che le tecniche di generazione di texture disponibili all'epoca non erano sufficienti per ottenere l'aspetto organico desiderato. Voleva un metodo che producesse variazioni morbide e naturali piuttosto che brusche e artificiali. Così ideò il famoso algoritmo, che da allora è diventato uno standard nella computer grafica.

Ogni componente dell'algoritmo può essere visto come un'onda geometrica a una frequenza specifica. Queste onde sono regolate dalla funzione fi(x, y), che determina la scala dell'onda. Alcune onde sono più "lunghe" e lisce (bassa frequenza), mentre altre sono più "corte" e dettagliate (alta frequenza).

Ogni componente dell'algoritmo può essere visto come un'onda geometrica a una frequenza specifica. Queste onde sono regolate dalla funzione fi(x, y), che determina la scala dell'onda. Alcune onde sono più "lunghe" e lisce (bassa frequenza), mentre altre sono più "corte" e dettagliate (alta frequenza).

Ogni onda ha un'ampiezza diversa, rappresentata da ai. Alcune onde sono più pronunciate, con picchi e valli più evidenti, mentre altre sono più piccole, contribuendo solo con piccole variazioni. L'ampiezza determina quanto ogni onda incide sulla forma finale del pattern.

Ogni onda ha un'ampiezza diversa, rappresentata da ai. Alcune onde sono più pronunciate, con picchi e valli più evidenti, mentre altre sono più piccole, contribuendo solo con piccole variazioni. L'ampiezza determina quanto ogni onda incide sulla forma finale del pattern.

La somma di tutte queste onde produce un pattern complesso, fatto di oscillazioni continue che si intrecciano tra loro. Alcune onde contribuiscono di più al pattern complessivo, altre meno, ma la loro combinazione genera una superficie continua e variegata, simile a un terreno fatto di onde geometriche interconnesse.

La somma di tutte queste onde produce un pattern complesso, fatto di oscillazioni continue che si intrecciano tra loro. Alcune onde contribuiscono di più al pattern complessivo, altre meno, ma la loro combinazione genera una superficie continua e variegata, simile a un terreno fatto di onde geometriche interconnesse.

Il Perlin noise funziona creando una griglia di punti casuali e poi calcolando i valori tra questi punti in modo morbido. Immagina di collegare i punti su una rete con curve graduali invece di linee rette. Questo genera un rumore che appare naturale, utile per creare texture come montagne o nuvole nei videogiochi e nei film.

AI Coding

Presi i dati Terna e definito lo sviluppo di Renewable Rhythms doveva essere stabilito il codice con cui programmare. Il team non era specializzato nell’utilizzo di framework specifici di creative coding per costruire la visualizzazione desiderata, quindi è stata utilizzata l’Intelligenza Artificiale. Il team ha realizzato una piccola variante di Chat GPT - l’applicazione più nota nell’ambito dell’intelligenza artificiale generativa - specializzata in una delle principali librerie di creative coding javascript: p5.js.

Una volta sviluppato il codice questo è stato reso disponibile a tutti attraverso le piattaforme di condivisione Github e Reddit.

E proprio su queste piattaforme il progetto si è espanso diventando quello che è ora. Renewable Rhythms è quindi un grande processo collaborativo che nel tempo è stato migliorato proprio grazie ai feedback della community: velocità e dimensionamento delle particelle, effetti di glow e varianti di colorazione nel tempo sono stati evoluti attraverso gli spunti offerti proprio dalla rete. La transizione cromatica dello sfondo nella visualizzazione, basata su una sinusoide, rappresenta il ciclo naturale del giorno e della notte, simbolizzando il passare del tempo e l’alternarsi della luce e dell’oscurità, elementi fondamentali per il ciclo dell’energia, in cui il picco di produzione si registra di giorno e il riposo di notte.

Un altro aspetto da sottolineare è che all’intelligenza artificiale è stata attribuita una funzione puramente collaborativa ed esecutiva, mai propositiva: Giannini e il suo team hanno limitato il contributo dell’AI all’elaborazione del codice di programmazione in un linguaggio specifico, non demandandole mai iniziative che avrebbero potuto modificare la logica e/o il contenuto del progetto, stretta prerogativa degli esseri umani. 

Sound System

L’ultima fase è quella dedicata al suono: un componente del gruppo appassionato di audio active ha proposto di campionare diversi suoni e legarli in un’armonia naturale. Sono stati registrati i suoni del vento, dell’acqua, del gorgoglìo che ricorda il suono dell’aria calda nel geotermico, e così via.

Ogni componente del team ha portato la registrazione dei luoghi del cuore: la spiaggia preferita, la campagna del proprio paese di origine.

Una volta presi tutti i suoni sono stati mixati insieme: ogni qualvolta una quantità di energia è maggiore o minore il volume si alza e si abbassa gradualmente. Questo, come gli altri passaggi, sono stati possibili grazie allo sviluppo di algoritmi per gestire il suono.

volume = minVolume + (maxVolume - minVolume) * (energyValue / maxEnergyValue)

volume = minVolume + (maxVolume - minVolume) * (energyValue / maxEnergyValue)

minVolume
Il volume minimo che il suono può avere
maxVolume
Il volume massimo che il suono può avere.
energyValue
Il valore attuale dell'energia prodotta dalla sorgente.
maxEnergyValue
Il valore massimo dell'energia che la sorgente può produrre.

L'idea è che il volume del suono vari in modo proporzionale rispetto al valore dell'energia. Quando l'energia è al massimo (energyValue = maxEnergyValue), il volume sarà al massimo (volume = maxVolume). Quando l'energia è al minimo (energyValue = 0), il volume sarà al minimo (volume = minVolume).

pitch = minPitch + (maxPitch - minPitch) * (energyValue / maxEnergyValue)

pitch = minPitch + (maxPitch - minPitch) * (energyValue / maxEnergyValue)

minPitch
Il pitch minimo che il suono può avere.
maxPitch
Il pitch massimo che il suono può avere.
energyValue
Il valore attuale dell'energia prodotta dalla sorgente.
maxEnergyValue
Il valore massimo dell'energia che la sorgente può produrre.

Analogamente alla formula del volume, il pitch varia in modo proporzionale al valore dell'energia. Quando l'energia è al massimo,il pitch sarà al massimo. Quando l'energia è al minimo, il pitch sarà al minimo.