Tecniche di Modellazione Digitale 3D Le curve di Bézier di Luciano

Commenti

Transcript

Tecniche di Modellazione Digitale 3D Le curve di Bézier di Luciano
Tecniche di Modellazione Digitale 3D
Le curve di Bézier
di Luciano Fabale
Uno dei primi concetti che deve apprendere il disegnatore industriale, al fine della corretta
gestione degli strumenti di rappresentazione delle proprie idee, è quello di conoscere la
differenza tra la grafica vettoriale e la grafica bitmap.
Le curve di Bézier vengono utilizzate nella grafica vettoriale. Gli oggetti: cerchi,
poligoni, rettangoli, triangoli, rette, punti, curve e testo vengono descritti sul foglio di lavoro
con le loro proprietà geometriche. Cioè il programma (vettoriale) utilizza dei vettori per
rappresentare gli oggetti, quindi per il rettangolo i vettori direzione base per altezza, per un
cerchio il vettore del raggio che traccia la circonferenza e così via.
La grafica vettoriale permette alle moderne stampanti, siano esse di tipo laser oppure a
getto d’inchiostro, di ridurre ed ingrandire la pagina senza che questo alteri la nitidezza dei
caratteri tipografici. Ciò significa che i caratteri stessi non sono memorizzati come immagini
definite per punti (bitmapped), ma piuttosto sono memorizzate le equazioni delle curve che
descrivono i caratteri stessi. Dunque la definizione del carattere dipende dalla qualità della
stampante usata, indipendentemente dal fattore di ingrandimento o riduzione della pagina.
La matematica che sta dietro a tutto ciò è relativamente semplice; la sua comprensione
richiede la conoscenza dei polinomi fino al terzo grado, ivi compresa la derivazione degli
stessi polinomi, ed anche la conoscenza dei rudimenti del calcolo vettoriale nel piano.
Riepilogando la grafica vettoriale dà il vantaggio di descrivere le immagini (sottoforma
di oggetti) con delle funzioni matematiche rendendole indipendenti dalla risoluzione (quindi
possono essere riprodotte su qualunque dispositivo ottenendo sempre la migliore qualità). Di
contro i programmi di grafica vettoriale sono meno intuitivi di quelli di grafica raster (che
funzionano in maniera molto simile al disegno manuale). Essi organizzano gli oggetti sul piano
di lavoro (il foglio) come entità indipendenti sovrapposte. Due oggetti non possono stare sulla
stessa (immaginaria) quota, per questo devono essere fusi tra loro. Non esiste lo strumento
gomma, essi possono solo essere eliminati.
Il programma di grafica vettoriale “CorelDraw” (molto conosciuto tra i disegnatori in
particolare quelli specializzati nella grafica editoriale) nella casella strumenti ha denominato
la punta con la quale si modellano le figure geometriche piane “Strumento Bézier”.
Chi utilizza o ha utilizzato questo programma prima o poi verrà a conoscenza della
storia dell’ingegnere francese e rimarrà piacevolmente colpito che il nome dello strumento,
utilizzato così tante volte, sia legato al nome di chi ha sviluppato questa tecnologia più che alla
tecnologia stessa. Non tutti i programmi di grafica e disegno industriale rendono questo
omaggio all’inventore delle “curve a controllo per punti”.
Dunque scopriamo che le curve che ci apprestiamo a descrivere traggono il loro nome
da Pierre Bézier (1910-1999), ingegnere meccanico presso la fabbrica Renault.
I problemi con cui Bézier aveva a che fare non erano di rappresentazione grafica, ma
riguardavano piuttosto la gestione delle macchine a controllo numerico che tranciavano i
pezzi di lamiera con cui fare le carrozzerie delle auto. Va detto che Bézier stesso, molto
onestamente, ammise che alle stesse curve era giunto anche il suo collega della Citroen Paul
De Casteljau, ma i vincoli di segretezza imposti da questa fabbrica hanno fatto sì che tali curve
restassero legate al suo nome.
Le curve furono realizzate nel 1959 usando l'algoritmo di de Casteljau. Bézier stabilì un
modo di realizzare le curve che partiva da due punti e una linea vettoriale appunto.
Algoritmo di De Casteljau
Bézier, partì dall’assunto che ogni punto della curva dovesse essere rappresentato dalla
seguente funzione parametrica:
n
B(t)=  (n/i)Pi(1- t)n-iti, t  [0, 1].
i=0
caratteristica delle curve di Bézier, conseguente alla formulazione parametrica, è quella di
permettere la definizione di curva chiuse (fig. 1)
Fig. 1 - curva chiusa di Bézier
Inoltre, come si evince dalla formulazione matematica, esse risultano interamente
gestibili attraverso, il cosiddetto, poligono di controllo.
In particolare, la curva risulta tangente all’estremità del poligono di controllo e il
controllo della forma della curva, si ottiene tramite la modifica della posizione dei punti di
controllo (fig. 2)
Fig. 2 - curva cubica di Bézier
Questa evenienza risulta molto comoda nell’implementazione di algoritmi di
modellazione, perché riduce drasticamente il numero di variabili necessarie per la gestione
dell’intera geometria.
Un osservazione va fatta a riguardo del grado della curva risultante.
La possibilità di controllo locale di una curva di Bézier, può essere notevolmente incrementata
dall’aumento del numero di punti di controllo.
L’aumento di questi, per contro, implica l’aumento del grado della curva con un
conseguente aumento della complessità di calcolo relativo.
Inoltre, lo spostamento di un punto di controllo produce un effetto globale, ovvero
implica la modifica della forma dell’intera curva (fig. 3)
Fig. 3 - effetto dello spostamento dei punti di controllo su una curva di Bézier
Ciò dipende dalla forma matematica di una curva di Bézier, dalla quale si evince che le
funzioni di miscelamento dipendono dall’intero insieme dei punti di controllo.
Questo costituisce, in effetti, il principale limite delle curve di Bézier che, in un ottica di
superamento del problema suddetto, trovano la loro naturale estensione nelle curve B-Spline.
Curve B-spline
Le curve B-spline costituiscono la naturale evoluzione dei modelli di Bézier.
La differenza principale tra i due tipi di curva sta, dal punto di vista pratico, nella
possibilità di gestione “locale” della forma della curva stessa.
In particolare, fissato il grado e il numero di punti di controllo, si calcola il numero
appropriato di componenti del vettore dei nodi tramite la seguente relazione:
m=n+p+1
m = numero appropriato componenti del vettore dei nodi
n = punti di controllo
p = grado della curva
Le curve B-spline, per quanto abbiano una forma matematica pressoché identica alle
curve di Bézier, si differenziano decisamente da queste ultime, nella formulazione delle
funzioni di miscelamento, le quali, in generale, hanno grado indipendente dal numero dei
punti di controllo.
Analisi dei casi
(tutte le illustrazioni che seguono sono state realizzate dall'autore)
Curve Bézier lineari
Dati i punti P0 e P1, una curva Bézier lineare è una linea retta che li attraversa.
La curva è data da:
B(t)= (1- t)P0 + tP1, t  [0, 1].
curva Bézier lineare
la stessa curva di I grado con punti di interpolazione
Curve Bézier quadratiche
Una curva Bézier quadratica è il percorso tracciato tramite la funzione B(t), dati i punti P0, P1,
e P2,
B(t)= (1- t)2P0 + 2t(1- t)P1+ t2P2, t  [0, 1].
curva di Bézier quadratica
la stessa curva di II grado con punti di interpolazione
I fonts TrueType usano le spline Bézier composte da curve Bézier quadratiche.
Curve Bézier cubiche
I quattro punti P0, P1, P2 e P3 nel piano o in uno spazio tridimensionale definiscono una curva
Bézier cubica. La curva ha inizio in P0 si dirige verso P1 e finisce in P3 arrivando dalla
direzione di P2. In generale, essa non passa dai punti P1 o P2; questi punti sono necessari solo
per dare alla curva informazioni direzionali. La distanza tra P0 e P1 determina quanto la curva
si muove nella direzione di P2 prima di dirigersi verso P3.
La forma parametrica della curva è:
B(t)= (1- t)3+ 3P1t(1- t)2 + 3P2 t2(1- t) + P3t3, t  [0, 1].
curva di Bézier cubica
la stessa curva di III grado con punti di interpolazione
Esempi di applicazione delle curve di Bézier
Voglio esporre la mia personale esperienza di disegnatore nell’uso delle curve di Bézier.
Ovviamente ritengo tale esperienza simile a quella della moltitudine di professionisti che
lavorano con la grafica e la modellazione vettoriale. Non ritengo che le seguenti esposizioni
abbiano un particolare valore tecnico o scientifico, ma sono solo un personale esempio di
applicazione pratica.
In particolare le curve di Bézier, ovvero le curve gestibili con delle maniglie di controllo
che non siano delle maniglie di interpolazione, sono particolarmente utili nel disegno
tridimensionale.
Premetto che molto raramente utilizzo delle curve superiori al quarto grado (con più di
cinque punti di controllo), cerco sempre di definire il mio disegno con delle curve di secondo e
terzo grado sul piano (fig. 4) e del terzo e quarto grado se devo modificarle nello spazio
tridimensionale.
Per ridurle ai minimi termini, ed anche per utilizzarle nella creazione di superfici con
quattro lati (le migliori), le spezzetto dandogli la continuità di tangenza (all’esigenza le
riunisco).
Se la curva l’ho generata dalla proiezione ortogonale nello spazio di due curve piane e
soddisfa le mie esigenze (quindi non la tocco più) la approssimo al numero minimo di punti
che non ne alteri la forma. Questo è il caso in cui mi servo di curve superiori al quarto grado
(fig. 11).
Fig. 4 - curve di Bézier di secondo e terzo grado
La scelta di gestire le curve con pochi punti di controllo è dettata dal fatto che una
curva di secondo o terzo grado è pulita, non ha cambiamenti di direzione che sporcano il
disegno ed è molto più gestibile nelle inevitabili modifiche alla quali verrà sottoposta
nell'ulteriore fase di progettazione. In particolare nell’ambito della modellazione 3D le curve
vengono utilizzate per generare delle superfici sulle quali le imperfezioni delle curve verranno
amplificate (fig.5 e 6).
Fig. 5 - curve di Bézier di grado differente a confronto
Fig. 6 – superfici generate da curve di Bézier di grado differente
Alcune volte imposto le curve con molti punti di controllo, ma poi comincio a muoverli,
ad eliminarli o ad aggiungerli fino ad arrivare al disegno desiderato, e questo è uno dei grandi
vantaggi che le curve di Bézier danno al disegnatore, poter cambiare il grado della curva in
ogni momento (fig. 7).
Fig. 7 – curva sopra impostata con molti punti di controllo e sotto ridotta ai punti essenziali soddisfacendo lo stesso
disegno iniziale
Disegno di una curva nello spazio tridimensionale
Le curve le imposto quasi sempre su un piano, quindi se desidero formare una curva che abbia
più direzioni nello spazio disegno prima due curve sul piano x,y, quindi una delle due la
ribalto sul piano y,z e dalla proiezione ortogonale delle due curve genero una curva
tridimensionale (fig. 8, 9 e 10).
Fig. 8 – due curve disegnate sul piano x,y
Fig. 9 – ribaltamento di una delle due curve sul piano z,y
Fig. 10 – curva risultante 3D generata dalla proiezione ortogonale nello spazio delle due curve piane
La curva così creata avrà un numero eccessivo di punti di controllo, per facilitarmene la
gestione la approssimo al numero minimo di punti che mi permette di mantenerne il disegno
abbastanza simile alla curva originaria (fig. 11).
Fig. 11 – curva risultante 3D approssimata a un numero inferiore di punti di controllo
Ora questa curva può essere utilizzata per costruire uno schienale di una sedia tipo
Thonet.
Sarà la spina sulla quale ruota la superficie. Per differenziare gli spessori della
superficie inserisco tre cerchi con diametro differente. Essi saranno le sezioni della superficie
nei punti di minima e massima espansione (fig. 12 e 13).
Fig. 12– inserimento di cerchi sulla curva ortogonalmente alla stessa spostando il piano di lavoro sulla curva
Fig. 13– costruzione della superficie, specchiata e vista dall'alto
Thonet n. 8
Nelle catture seguenti (fig. 15) espongo come effettivamente ho disegnato la Thonet n. 8 con il
supporto delle proiezioni ortogonali originali del progettista della sedia (fig. 14).
Fig. 14 – disegno originale della sedia Thonet n. 8
Questo risultato non è un gioco puramente virtuale, ma con delle indicazioni specifiche è
possibile farlo realizzare a delle macchine a controllo numerico. Ed è questo che ha spinto
l'ing. Bézier a sviluppare le sue curve, le esigenze di poter comunicare alle tranciatrici
industriali della Renault come dovevano essere tagliate le lamiere che sarebbero divenute le
scocche dalle auto.
Fig. 15 – sequenza di modellazione della sedia Thonet n.8 con Thinkdesign 3D
Ovviamente le curve sono curve, e il sistema di punti di controllo (Bézier) o per punti di
interpolazione sono solo dei sistemi per poterle controllare (una curva di terzo grado avrà
quattro punti di controllo se si usa il sistema di Bézier e due punti di controllo se si usa
l’interpolazione ma rimarrà sempre la stessa curva di terzo grado), sta all’operatore decidere
di volta in volta come procedere in base alle esigenze che gli si pongono. Naturalmente la
stessa curva la posso generare e modellarla con le curve di Bézier e poi intersecarla ad altre
curve o modificarla con il sistema dei punti di interpolazione o viceversa.
Fa_B 112
Nei disegni che seguono mostro come ho realizzato la carrozzeria di una autovettura fa_B 112
(una mia personale nuova versione dell’Autobianchi 112) utilizzando solo curve disegnate con
punti di controllo (Bèzier), per punti di interpolazione e punti assoluti. Le rette che si vedono
sono solo i riferimenti delle tangenze delle curve, di taglio di superfici ed elementi di gestione
del disegno.
Fig. 16 – linee, curve e punti di costruzione del modello 3D della fa_B112, i punti che scorrono sulle curve sono punti
assoluti e sono stati inseriti a posteriori con funzione di snap per poter permettere le intersezioni fra le curve stesse
dove serviva
Fig. 17 – le superfici create dalle linee e punti della figura precedente
Fig. 18 – risultato finale, fa_B112 mia personale reinterpretazione della famosa Autobianchi 112
Di esempi sull'utilizzo delle curve di Bézier o delle curve in generale ogni disegnatore
potrebbe scriverci un libro, io ho ritenuto interessante spiegare come le uso quando devo
generare curve tridimensionali da curve bidimensionali (la base della mia tecnica di disegno).
Ogni disegnatore con l'esperienza avrà sviluppato delle tecniche che sono frutto del
particolare campo di applicazione della propria professionalità, della propria intelligenza e
della propria personale conoscenza della geometria.
Una buona conoscenza della matematica con cui i software di disegno generano le
curve sicuramente aiuterà a migliorare le prestazioni.
Ancora sulla matematica nella modellazione 3D
La rappresentazione parametrica di solidi e curve nello spazio è una pratica affermata da
decenni nel settore CAD per la resa di superfici particolarmente complesse come carrozzerie
di autoveicoli, fusoliere di aerei, pezzi meccanici, etc...
La più famosa tecnica di rappresentazione parametrica è la Bézier Patch (o
semplicemente curva di Bézier). Le successive evoluzioni (es: B-Spline, NURBS) hanno
apportato cambiamenti volti a risolvere situazioni particolari o a renderne l'uso più intuitivo
in specifici settori.
L'utilizzo di formule matematiche che descrivono la superficie invece di triangoli che la
approssimano rende la modellazione più accurata e semplice, oltre a portare con se molte più
informazioni di una semplice mesh occupando al contempo meno spazio.
Un esempio calzante può essere questo: con pochissimi valori (centro, raggio e una
formula) è possibile descrivere completamente una sfera nello spazio, tramite triangoli
avremo una rappresentazione comunque approssimata e molto ma molto più ingombrante.
Parametric Curved Surface tecniche di modellazione dei solidi che non si basano su di
un ammasso di triangoli per definire una superficie ma su formule matematiche.
Queste entità vengono indicate con il termine generico di High Order Surface.
Ciò sta ad indicare che la superficie è descritta da un polinomio di ordine superiore al
1° (tipicamente del 3° ordine, da cui il nome cubica o bi-cubica che caratterizza queste curve)
come per esempio il seguente: ax^3+bx^2+cx+d. Una equazione del primo ordine ci permette
di definire un piano (triangolo) mentre equazioni di ordine superiore definiscono superfici
curve.
Nel caso bidimensionale della classica curva di Bézier e della B-Spline, la formula che la
caratterizza utilizza 4 punti di controllo per definire la forma della curva. Nel passaggio da una
curva bidimensionale ad una curva tridimensionale (bi-cubica) i punti di controllo diventano
16 e si parla di patch a base quadrata (ma può essere anche a base triangolare).
Per effettuare un rendering della curva, questa dovrà però essere trasformata in
qualcosa di più primitivo ma tangibile, e qui fanno la loro apparizione i triangoli. Il processo di
trasformazione della curva in triangoli si chiama Tassellazione.
Utilizzando ancora l'esempio della sfera, prima di essere renderizzata dovrà essere
trasformata comunque in un insieme più o meno denso di triangoli su cui applicare le
classiche tecniche di rendering.
Il guadagno consiste nella facilità di manipolazione della formula matematica, nella
minore occupazione di memoria e nella scalabilità del rendering.
Facciamo un esempio pratico: prendiamo la famosa Utah Teapot (storico modello di
teiera universalmente usato in passato come benchmark), il modello è costituito da 32 Bézier
Patch, queste sono definite ciascuna da 16 punti di controllo ma siccome molti punti sono in
comune possiamo ottenere una descrizione completa con soli 306 punti di controllo.
Manipolare il modello significa quindi elaborare soltanto 306 punti di controllo, così come la
memorizzazione del modello occupa soli 3.7Kbyte (306 punti, 3 x 32bit per punto).
Convertiamo l'oggetto in quadrati, suddividendo le singole patch uniformemente in
8x8 sottoporzioni. L'oggetto risultante è solo una approssimazione della sua descrizione
tramite formule ma impiega ben 2048 punti appesantendo di ben 7 volte sia la manipolazione
del modello che l'occupazione di memoria.
Questo è quello che normalmente ci troviamo ad avere: un modello approssimato fatto
di triangoli che occupa molto spazio rispetto alla sua rappresentazione matematica originale.
Ovviamente non è sempre possibile e/o conveniente usare superfici curve, ad esempio
negli edifici o nel caso di oggetti con molte spigolature è ancora conveniente usare
direttamente i triangoli, ma negli oggetti organici e nelle forme armoniose l'uso delle superfici
curve nella rappresentazione logica dell'oggetto apporta notevoli vantaggi.
Indubbiamente in un contesto di modellazione geometrica è importante la facilità di
interazione con l'oggetto per poter eseguire modifiche interattive (pensate ad esempio alla
modellazione di un corpo 3D). Tuttavia nel caso del rendering 3D in tempo reale siamo
comunque costretti in fase finale a convertire il modello da patch in triangoli (perché solo
questi sono facilmente renderizzabili via hardware).
Bibliografia web
Le curve di Bézier
Giulio C. Barozzi – Università di Bologna
Curva Bézier
Wikipedia, l'enciclopedia libera
Corso di Grafica Computazionale Tecnica
KAEMaRT Group - Dipartimento di Meccanica Politecnico di Milano
Geometria computazionale;
La matematica delle Curve parametriche: dalle curve di Lagrange alle Nurbs
dispensa ad uso degli studenti del corso preparata e redatta dall’ Ing. Antonio Mancuso

Documenti analoghi