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