# Marching cubes

Marching cubes (tradotto letteralmente: cubi marcianti) è un algoritmo di computer grafica, pubblicato al SIGGRAPH del 1987 da Lorensen e Cline per estrarre la mesh poligonale di una isosuperficie da un campo scalare discreto tridimensionale (gli elementi del quale sono talvolta chiamati voxel). L'algoritmo è principalmente utilizzato nel campo della radiologia attraverso la diagnostica per immagini, ad esempio la CT e l'MRI, nella visualizzazione scientifica per analizzare un dato volumetrico, ma anche nella creazione di effetti speciali nell'ambito della modellazione 3D, con le metaball o metasuperfici. Un metodo analogo a due dimensioni è chiamato marching squares.

## Storia

L'algoritmo è stato sviluppato da William E. Lorensen e Harvey E. Cline come risultato della loro ricerca presso la General Electric. Alla General Electric hanno lavorato in modo da visualizzare in modo efficiente dati da dispositivi CT e MRI.
La premessa dell'algoritmo è di dividere il volume di input in un insieme discreto di cubi. Assumendo una conversione lineare, ogni cubo, che contiene una porzione dell'isosuperficie, può essere facilmente identificato, poiché i valori campionati ai vertici del cubo devono coprire il valore dell'isosuperficie in questione. Per ogni cubo viene generata una mesh che approssima il comportamento dell'interpolante trilineare all'interno del cubo. La loro prima versione pubblicata sfruttava una simmetria rotazionale e speculare, e anche cambi di segno, per costruire una tabella con 15 configurazioni univoche. Tuttavia, nell'elaborazione delle facce, si possono presentare casi ambigui dovuti al comportamento dell'interpolante. Questi generavano discontinuità e difetti topologici. Il problema si viene a creare in presenza di segni alterni, dove si riscontrano almeno due scelte corrette per il quale il profilo è valido. La scelta reale non è importante, ma deve essere topologicamente coerente. Un segno diverso agli estremi della diagonale, o ai vertici dei cubi, può comportare diverse configurazioni. Le ambiguità sono state migliorate con lo sviluppo di nuovi algoritmi, come nel 1991 quando venne proposto un test, l'asymptotic decider, di Nielson e Hamann, il quale corresse solo in parte queste anomalie. Un ulteriore miglioramento è dovuto a Chernyaev, che portò la tabella delle configurazioni a 33 elementi. Diverse altre problematiche topologiche hanno trovato un parziale soluzione negli anni successivi, fino al lavoro di Custodio & al., del 2019.

## Descrizione dell'algoritmo

L'algoritmo procede attraverso il campo scalare, prendendo otto locazioni vicine per volta (formando così un cubo immaginario), determinando quindi il poligono o i poligoni necessari per rappresentare la parte della isosuperficie che passa attraverso questo cubo. I poligoni individuali sono quindi fusi nella superficie desiderata.
Questo viene fatto creando un indice in un array precalcolato di 256 configurazioni di poligoni possibili ($2^{8}=256$) all'interno del cubo, trattando ciascuno degli 8 valori scalari come un bit in un intero di 8-bit. Se il valore dello scalare è più alto dell'iso-valore (cioè è all'interno della superficie) allora il bit appropriato viene posto a uno, mentre se è più basso (esterno) è impostato a zero. Il valore finale dopo che tutti gli 8 scalari sono controllati, è l'indice nell'array della configurazione del poligono.
Infine ciascun vertice dei poligoni generati è messo nella posizione appropriata lungo il lato del cubo interpolando linearmente i valori dei due scalari che sono connessi da quel lato.
L'array precalcolato delle 256 configurazioni può essere ottenuto per riflessione e rotazioni simmetriche dei 15 casi unici.
Il gradiente del campo scalare ad ogni punto della griglia è anche il vettore normale di una ipotetica isosuperficie passante per quel punto. Quindi, dovremmo interpolare queste normali lungo i cardini di ciascun cubo per trovare le normali dei vertici generati che sono essenziali per ombreggiare la mesh risultante con un qualche modello di illuminazione.

## Questioni relative ai brevetti

L'algoritmo marching cubes algorithm è ritenuto dai sostenitori del software libero come un caso principale nel campo della computer grafica dei mali del software proprietario. Essi sostengono che l'implementazione brevettata (United States Patent 4,710,876) sia ovvia relativamente al problema della generazione di superfici. È stato sviluppato un algoritmo similare chiamato marching tetrahedra, al fine di aggirare il brevetto, oltre a risolvere alcuni casi di ambiguità con qualche configurazione del cubo. La licenza dell'algoritmo marching cubes è scaduta nel 2005, ed è ora legale per la comunità nel campo della computer grafica usare l'algoritmo senza diritti d'autore da più di 18 anni dalla sua data di emissione (December 1, 1987).