# NURBS

NURBS è un acronimo che sta per Non Uniform Rational Basis-Splines, traducibile in "Splines razionali non uniformi definite da una base", una classe di curve geometriche utilizzate in computer grafica per rappresentare curve e superfici.
Una NURBS è la rappresentazione matematica che i software, ad esempio i sistemi CAD, usano per creare gli oggetti geometrici, per definirne accuratamente la forma.
Le curve NURBS sono una generalizzazione delle curve B-Spline e delle curve di Bézier.

## Storia

Prima che fossero inventati i computer, i progetti venivano disegnati a mano su carta con vari strumenti da disegno. I righelli erano usati per le rette, i compassi per le circonferenze, e i goniometri per gli angoli. Ma molte forme, come la curva libera di un arco di nave, non potevano essere disegnate con questi strumenti. Sebbene queste curve potessero essere disegnate a mano libera sul foglio da disegno, i costruttori navali spesso necessitavano di una versione a grandezza naturale che non poteva essere fatta a mano. Tali grandi disegni erano eseguiti con l'aiuto di strisce a spessore variabile di legno (di limone) o altro materiale elastico, chiamate flessibili (in inglese spline). I flessibili (spline) erano tenuti in posizione in un certo numero di punti dai pesi (in inglese "ducks"); fra i pesi (ducks), il flessibile assumeva una forma "avviata" (cioè senza discontinuità né punti angolosi né variazioni brusche di curvatura); scegliendo il tipo di flessibile con la distribuzione di spessore più opportuna si potevano ottenere le curve migliori di caso in caso.
Nel 1946, i matematici cominciarono a studiare la forma della spline e derivarono la formula polinomiale conosciuta come curva spline o funzione spline. I. J. Schoenberg diede il nome di funzione spline data la sua somiglianza alla spline meccanica utilizzata dai disegnatori.
Quando i computer vennero introdotti al processo di progettazione, le proprietà fisiche di tali spline furono studiate in modo che potessero essere modellate con precisione matematica e riprodotte quando necessario. Il lavoro pionieristico fu fatto in Francia dall'ingegnere Pierre Bézier della Renault, e dal fisico e matematico Paul de Casteljau della Citroën. Entrambi lavorarono quasi parallelamente, ma poiché Bézier pubblicò i risultati del proprio lavoro, le curve furono dette "di Bézier" mentre il nome di Casteljau è solo legato ai relativi algoritmi.
All'inizio le NURBS erano utilizzate solo nei pacchetti CAD proprietari delle compagnie automobilistiche. Più tardi sarebbero diventati parte standard dei pacchetti di computer grafica.
Il rendering interattivo e in tempo reale delle curve e delle superfici NURBS fu reso disponibile per fini commerciali per la prima volta sulle workstation della Silicon Graphics nel 1989. Nel 1993, il primo modellatore interattivo per le NURBS su PC, chiamato "NöRBS", venne sviluppato da CAS Berlin, una piccola startup che collaborava con Università Tecnica di Berlino. Oggi la maggior parte delle applicazioni grafiche professionali per computer, offrono la tecnologia NURBS, che è spesso realizzata per mezzo dell'integrazione di un motore NURBS proveniente da una azienda specializzata.

## Aspetti teorici

Le geometrie NURBS hanno cinque importanti caratteristiche che le rendono una scelta ideale per la modellazione assistita da computer.
* Esistono svariate soluzioni basate su standard industriali in grado di scambiare geometrie NURBS. Ciò consente ad un gran numero di utenti di poter intercambiare i loro modelli geometrici tra i vari programmi di modellazione, rendering, animazione ed analisi ingegneristica. Le informazioni memorizzate sulle geometrie possono essere riutilizzate in futuro.
* Le NURBS hanno una definizione precisa e ben nota. I principi matematici ed informatici delle geometrie NURBS vengono insegnati nelle maggiori università. Ciò significa che i produttori di software specialistici, i team ingegneristici, gli studi di design industriale e le case di animazione che hanno bisogno di realizzare delle applicazioni personalizzate possono trovare facilmente dei programmatori preparati in grado di lavorare con le geometrie NURBS.
* Le NURBS possono rappresentare accuratamente sia oggetti geometrici standard (come rette, circonferenze, ellissi, sfere o toroidi), che geometrie free-form, quali carrozzerie per automobili o corpi umani.
* La quantità di informazioni richiesta per la rappresentazione NURBS di un elemento geometrico è di gran lunga inferiore alla quantità di informazioni necessaria per rappresentare la stessa geometria tramite approssimazioni mesh.
* La regola di stima di una NURBS, discussa di seguito, può essere implementata su un computer in modo efficiente ed accurato.
Curve e superfici NURBS si comportano in modo analogo, per cui la terminologia tecnica ad esse relative è pressoché la stessa. Una curva NURBS è definita da quattro caratteristiche: il grado, i vertici di controllo, i nodi e la regola di stima.
Ci sono due tipologie di curve NURBS: le curve EP passano per i punti immessi dall'utente. Questi prendono il nome di punti finali (EP - End Points), mentre le curve CV invece si avvicinano solamente ai punti immessi. I punti immessi prendono il nome di vertici di controllo (CV - Control Vertices), chiamati in alcuni programmi punti di controllo.

### Grado

Il grado è un numero intero positivo. Di solito vale 1, 2, 3, 4 o 5, anche se può essere qualunque numero intero.
Di solito, le rette e le polilinee NURBS hanno grado 1, le circonferenze NURBS hanno grado 2 e la maggior parte delle curve free-form ha grado 3 o 5. Invece di indicare il grado della curva con il rispettivo numero, si possono usare i termini lineare, quadratico, cubico e quintico. Lineare significa di grado 1, quadratico significa di grado 2, cubico significa di grado 3 e quintico significa di grado 5. Le curve cubiche sono quelle più utilizzate. Curve del quinto e del sesto ordine sono a volte utili, ma curve di ordini maggiori non vengono praticamente mai usate perché portano a problemi numerici interni e tendono a richiedere tempi di calcolo sproporzionati. Il grado 1 crea delle poligonali spezzate; maggiore è il grado, maggiore è la loro malleabilità (capacità di effettuare curve molto strette).
A volte, si può far riferimento all'ordine di una curva NURBS. L'ordine di una curva NURBS è un numero intero positivo uguale a ${\text{grado}}+1$. Di conseguenza, il grado corrisponde a ${\text{ordine}}-1$. L'ordine di una curva NURBS definisce il numero di vertici di controllo vicini che influenzano ogni punto della curva.
È possibile aumentare il grado di una curva NURBS senza cambiarne la forma. In genere, non è invece possibile ridurre il grado di una curva NURBS senza modificarne la forma.

### Vertici di controllo

I vertici di controllo sono una fila di punti in numero almeno uguale a ${\text{grado}}+1$.
Uno dei modi più semplici per modificare la forma di una curva NURBS consiste nel variare la posizione dei suoi vertici di controllo.
Ad ogni vertice di controllo è associato un peso (ossia la sua capacità di attrarre la curva). Tranne che per alcune eccezioni, i pesi sono numeri positivi. Quando i vertici di controllo di una curva hanno tutti lo stesso peso (di solito 1), la curva viene denominata "non razionale". In caso contrario, è detta razionale. La lettera R dell'acronimo NURBS sta per "razionale" e indica che una curva NURBS può essere razionale. Nella pratica, la maggior parte delle curve NURBS sono non razionali. Alcune curve NURBS (circonferenze ed ellissi ne sono un chiaro esempio) sono sempre razionali.

### Nodi

I nodi (knots) sono una fila di ${\text{grado}}+N+1$ numeri, ove $N$ rappresenta il numero di vertici di controllo. Questa sequenza di numeri che precisa la definizione parametrica della curva è detta anche "vettore dei nodi". In questo contesto, il termine vettore non sta a significare una direzione 3D.
La sequenza di numeri dei nodi deve soddisfare diverse condizioni tecniche. Di norma, per assicurarsi che queste condizioni tecniche siano soddisfatte, si richiede che i numeri siano gli stessi o maggiori man mano che si procede verso la fine della lista e si limita il numero di valori ripetuti ad un numero non maggiore del grado. Per esempio, per una curva NURBS di grado 3 con 11 vertici di controllo, la sequenza 0,0,0,1,2,2,2,3,7,7,9,9,9 è una sequenza di nodi soddisfacente. La sequenza 0,0,0,1,2,2,2,2,7,7,9,9,9 non è invece accettabile perché sono presenti quattro numeri "2" e "4" è maggiore del grado della curva in esame (3).
Il numero di volte in cui il valore di un nodo si ripete è detto "molteplicità del nodo". Nella sequenza di nodi soddisfacente riportata in precedenza (0,0,0,1,2,2,2,3,7,7,9,9,9), il valore del nodo 0 ha molteplicità 3, il valore del nodo 1 ha molteplicità 1, il valore del nodo 2 ha molteplicità 3, il valore del nodo 7 ha molteplicità 2 ed il valore del nodo 9 ha molteplicità 3. Si dice che un nodo ha molteplicità piena se il suo valore si ripete tante volte quante il grado. Nell'esempio, i valori dei nodi 0, 2 e 9 hanno molteplicità piena. Il valore di un nodo che figura una volta sola è detto nodo semplice. Nell'esempio, i valori dei nodi 1 e 3 sono nodi semplici.
Se una sequenza di nodi inizia con un nodo a molteplicità piena, segue con dei nodi semplici, termina con un nodo a molteplicità piena e tutti i valori sono ugualmente spaziati, i suoi nodi sono detti uniformi. Per esempio, se una curva NURBS di grado 3 con 7 punti di controllo ha una sequenza 0,0,0,1,2,3,4,4,4, i suoi nodi saranno uniformi. I nodi della sequenza 0,0,0,1,2,5,6,6,6, per esempio, non saranno invece uniformi. I nodi senza uniformità si dicono appunto non uniformi. Le lettere N ed U dell'acronimo NURBS stanno per "non uniformi" ed indicano che i nodi di una curva NURBS possono essere non uniformi.
Valori di nodo ripetuti all'interno di una sequenza di nodi rendono la curva NURBS meno smussata. Un nodo a molteplicità piena nel mezzo di una sequenza di nodi indica che c'è una zona nella curva NURBS che può essere associata ad una discontinuità. Per questa ragione, alcuni designer preferiscono aggiungere e rimuovere i nodi e quindi regolare i vertici di controllo per ottenere delle curve dalle forme più smussate o più spigolose. Poiché il numero dei nodi è pari a ${\text{grado}}+N-1$, in cui $N$ è il numero di punti di controllo, l'aggiunta di nodi comporta l'aggiunta di punti di controllo, così come la loro rimozione implica la rimozione di punti di controllo. È possibile inserire dei nodi in una curva NURBS senza cambiarne la forma. La rimozione di nodi, in genere, cambia invece la forma di una curva.

#### Nodi e punti di controllo

Un comune malinteso è dato dal fatto di accoppiare ciascun nodo con un vertice di controllo. Ciò è vero solo per le NURBS di grado 1 (polilinee). Per NURBS di grado maggiore, sono presenti gruppi di $2\times {\text{grado}}$ nodi che corrispondono a gruppi di ${\text{grado}}+1$ vertici di controllo. Per esempio, si supponga di avere una NURBS di grado 3 con 7 punti di controllo e nodi 0,0,0,1,2,5,8,8,8. I primi quattro vertici di controllo sono raggruppati con i primi sei nodi. I vertici di controllo dal secondo al quinto sono raggruppati con i nodi 0,0,1,2,5,8. I vertici di controllo dal terzo al sesto sono raggruppati con i nodi 0,1,2,5,8,8. Gli ultimi quattro vertici di controllo sono raggruppati con gli ultimi sei nodi.
Alcuni modellatori usano obsoleti algoritmi per la stima di una NURBS e richiedono due ulteriori valori di nodo per un totale di ${\text{grado}}+N+1$ nodi. Il numero di punti finali $nEP$, di vertici di controllo $nCV$ e il grado della curva sono legati dalle formule (equivalenti):
    $nCV=nEP+{\text{grado}}-1;$
    $nEP=nCV-{\text{grado}}+1.$

### Regola di stima

La regola di stima di una curva è una formula matematica che assegna un numero a un punto.
La regola di stima NURBS è una formula che riguarda il grado, i punti di controllo e i nodi. Essa calcola le cosiddette funzioni base B-spline. Le lettere BS nell'acronimo NURBS stanno per “basis spline”. Il numero con il quale si avvia la regola di stima è detto "parametro". Possiamo pensare alla regola di stima come ad una "scatola nera" che riceve un parametro e genera la posizione di un punto. Il grado, i nodi e i vertici di controllo determinano il modo in cui lavora questa "scatola nera".

### Superfici NURBS

Oltre che per descrivere le curve, le NURBS possono essere estese anche al caso bidimensionale per descrivere le superfici. In questo caso si parla di vertici di controllo, surface patch, grado e parametri u e v. Dal momento che si tratta di superfici bidimensionali, le coordinate dei punti che vi appartengono vengono determinate da due parametri, chiamati $u$ e $v$. I pezzi di superficie (surface patch) sono in un certo senso l'equivalente degli EP per una superficie NURBS. Il numero di surface patch ($nSP$) è legato al numero di CV in modo analogo agli EP:
    $nSPu\times nSPv=(nCVu-{\text{grado}})\times (nCVv-{\text{grado}}).$
Tutte le superfici NURBS derivano da una deformazione spaziale di una griglia di superfici quadrate (le surface patch) affiancate.

## Nel cinema di animazione

Le superfici NURBS sono state alla base della serie televisiva Rolie Polie Olie del 1999. I personaggi della serie sono un buon esempio delle possibilità espressive di questa famiglia di superfici.