I formati nella Computer Grafica Daniele Marini, Maurizio Rossi Marco Ronchetti, Davide Selmo, Davide Gadia
Struttura di ambiente 3D Abbiamo una struttura in cui gli oggetti possono essere classificati in: Ambiente della scena Oggetti nella scena Luci Camere
Problema della descrizione Come visualizziamo e memorizziamo gli oggetti presenti in una scena? Dobbiamo analizzare la struttura delle varie componenti presenti nella scena 3D, e capire quale migliore rappresentazione si adatta alla loro descrizione.
Approcci differenti Scrittura a mano della struttura in un formato di file Uso di programmi modellatori 3D (Maya, 3DStudio, ecc..) Uso di Linguaggi dedicati (VRML, X3D,…)
Cosa devo salvare o memorizzare? Cosa e come devo salvare? Quale tipo di informazioni mi servono per ricostruire una scena 3D? E per archiviare una immagine? Sintassi e Semantica per: -descrizione delle scene 3D -memorizzazione delle immagini di rendering
Problema della compatibilità Diversi programmi Diversi parser di lettura Diversi approci alla memorizzione -Faccio un formato unico, standard? Ogni modifica deve essere concordata -Oppure lascio la libertà a formati proprietari Facili cambiamenti, problemi di compatibilità.
La filosofia Opensource Formato leggibile e comune a tutti e quindi Standard In questo genere di file la caratteristica principale è l’interscambiabilità delle informazioni, infatti avendo un codice aperto, tipicamente sono stringhe di caratteri ASCII facilmente interpretabili, è possibile scrivere e leggere sullo stesso file.
Come devo costruire un ambiente 3D? Uso di Linguaggi di Programmazione. Mettono a disposizione un linguaggio semplice e potente in modo da poter ricostruire situazione complesse in scenari 3D. Uso di programmi modellatori 3D.
Linguaggi di programmazione (Open Source) volti alla costruzione di scene 3D -VRML -X3D (xml + vrml+ altro.....)
Memorizzazione delle informazioni Differenti formati commerciali: 3ds (3d studio format) Obj (AliasWavefront) 3DS (3D StudioMax format) Iges (Initial Graphics Exchange Specification ) DXF (Drawing Interchange file format)
Formati di interscambio Seguono generalmente la filosofia OpenSource Usati per far comunicare differenti programmi di modellazione. Utilissimi nel caso di grosse produzioni e cooperazione in un team di persone. Formati usati: Obj 3ds Rib DXF
VRML 1.0 L’idea primordiale del VRML arriva da Tim Berners-Lee e Dave Raggett per discutere l’interfaccia di realtà virtuale per il WWW, durante la prima conferenza annuale sul World Wide Web tenutasi a Ginevra nella primavera del 1994.
VRML97 - Feature Noto anche come VRML 2 È uno standard riconosciuto: ISO/IEC 14772-1:1997 È un Linguaggio che consente la simulazione di mondi virtuali tridimensionali. Descrizione: -Ambienti virtuali contenenti oggetti, sorgenti luminose, immagini, suoni, filmati. -Animazioni e interattività -Impiego di link 3D a URL remoti e naturalmente a qualunque altro file di tipo .wrl (formato files VRML ).
VRML97 - Il formato File di testo che utilizza caratteri ASCII (come l’HTML ad esempio) Estensione file: *.wrl. Eventualmente compresso con Gzip *.wrz. Pro: VRML comparabile a quello che fanno i numerosi programmi di modellazione tridimensionale. Linguaggio di scripting. Contro: gli esiti raggiungibili da un programma di rendering sono in confronto decisamente superiori sia a livello di qualità sia di velocità. Il file contiene:: - Nodes: il mondo è fatto di nodi che sono tipi di oggetti - Fields: descrivono le proprietà dei nodi
Esempio VRML97 Node Field (uses default values) #VRML V2.0 utf8 WorldInfo { title "Example 1" } DEF FBOX Shape { appearance Appearance { material Material { diffuseColor 0 0.5 0 geometry Box { Field (uses default values)
VRML97 - Strumenti per la creazione del file -Tools di authoring 3D (export in vrml) Maya, Blender, Caligari TrueSpace ecc… -Tools di authoring VRML97 visuali Cosmo World 2.0, 3D Studio Max, Internet Space Builder, Internet Character Animator Editors VRML97 testuali SitePad, VRMLPad, Vorlon, X3D-Edit
VRML - Come lo si usa Il file VRML, viene interpretato e mostrato sul display da player freeware disponibili su web come. Plug-in per Internet Explorer o Netscape: Cosmo Player 2.0 (http://www.cosmosoftware.com/ ) Cortona 4.2 (http://www.parallelgraphics.com/products/cortona/) Player autonomi: FreeWRL GLView Blaxxun Contact – 3D (http://www.blaxxun.com) Quesi tool leggono il codice contenuto nel file .wrl e lo traducono in ambienti 3D visualizzabili in real-time
VRML - Specifiche e link VRML Consortium/Web3D http://www.vrml.org/ VRML repository: http://vrml.sdsc.edu/ VRML97 Specification http://www.web3d.org/Specifications/VRML97/ /
X3D (eXtensible 3D) Sviluppato dal Web3D consortium: www.web3D.org Si basa su XML (eXtensible Markup Language) Standard: ISO/IEC 19775:2004 Nasce per migliorare la specifica VRML97 Limiti principali di VRML97: Peso del Plug-in nel browser Non sfrutta le estensioni 3D delle nuove GPU Non consente estensioni al suo standard
Architettura di X3D Si basa su: Componenti Profili Livelli di servizio Lo sviluppo di X3D è stato fatto in collaborazione con ISO, W3C e MPEG-4 Rispetto a VRML: Aggiunge nuove caratteristiche Aggiunge nuovi metodi di codifica dei dati Presenta migliori API Presenta una architettura modulare È facilmente estendibile Si conforma ad XML
I “Componenti” di X3D Sono gruppi di funzionalità correlate
I “Profili” di X3D (1) VRML97 Base. Full. Interchange Definiscono raggruppamenti di Componenti: VRML97 Base. Questo è il profilo che consente la compatibilità all'indietro verso lo standard VRML 2.0, implementandone tutte le funzionalità immersive per la navigazione e interazione in mondi virtuali nell'architettura X3D. Full. Questo è il profilo che include tutti i componenti dello standard X3D nella versione attuale. Come tale è anche quello che fornisce il maggiore numero di funzionalità ma richiede lo sviluppo di applicazioni più pesanti. Interchange Questo profilo è indirizzato allo scambio di dati di geometrie e animazioni tra differenti sistemi autore. Si presta bene per una implementazione run-time leggera, che non richiede interazione, e può essere realizzata tramite applet Java o piccoli plug-in per browser. Presenta comunque delle possibilità di rendering più limitate rispetto alla specifica completa di X3D di cui non utilizza tutte le possibilità in termini di modelli di illuminazione.
I “Profili” di X3D (2) Interactive Extensibility. Definiscono raggruppamenti di Componenti: Interactive Questo profilo è finalizzato allo sviluppo di player leggeri in grado di gestire e mostrare animazioni, grafica e interazione. In definitiva presenta le funzionalità del profilo Interchange a cui aggiunge le possibilità di picking, altre geometrie e modelli di illuminazione. È un punto di congiunzione con lo standard MPEG-4 cui si allinea. Extensibility. Questo profilo definisce l'insieme di caratteristiche che gli sviluppatori possono utilizzare per creare nuovi nodi e componenti per costruire nuove applicazioni. Presenta un insieme di caratteristiche base che possono essere composte per gestire la grafica, i comportamenti e l'interazione. Definisce anche le possibilità di scripting e le API che consentono agli sviluppatori di creare nuovi nodi e componenti che utilizzano le caratteristiche base. Ciò significa che tramite queste caratteristiche e API uno sviluppatore può ricreare qualsiasi nodo X3D standard non presente in questo profilo.
I “Livelli di Servizio”X3D Tutte le specifiche (componenti) di X3D possono essere implementate in modo variabile per fornire vari livelli di servizio. Questi consentono di definire gradi variabili di supporto delle specifiche, da parte delle applicazioni e dell’HW. Il livello di conformità è strettamente definito per ogni livello di servizio, e i profili specificano il grado di supporto dei livelli di componenti.
Il formato Obj Creato da AliasWavefront SGI Le info sono organizzate in un file ASCII Posso definire all’interno: -colore -geometria 3D -non posso comprimere -contiene la definizione di uno o più oggetti
OBJ - La sua struttura Ecco la descrizione di un file obj Mtllib Definisco il meteriale (*.mtl) (optional) # a comment line V x y z Elenco dei vertici vt u v [w] Elenco delle coordinate u,v (texture) vn x y z Vettore normale G Gruppo di appartennenza dell’oggetto (optional) F n0 n1 n2 n3 Elenco faccie Usemtl Colorazione (se esiste il materiale) V -> vertici F -> faccie G-> gruppi
OBJ - Esempi di file mtllib colors.mtl v -0.500000 -0.500000 0.500000 g cube usemtl Color1 f 1 2 4 3 f 3 4 6 5 f 5 6 8 7 usemtl Color2 f 7 8 2 1 f 2 8 6 4 f 7 1 3 5
Formato 3DS Costituito da una serie di chunks. Ognuno ha una struttura simile: short chunk_id; long chunk_len; Id indica un codice unico il quale identifica il tipo di dato in questo chunk e può indicare inoltre l’esistenza di chunk subordinati. len indica la lunghezza dei dati associato allo chunk. I chunk subordinati possono anche essi stessi avere subordiati chunks.
Altri formati Formato IGES usato per memorizzazione di superfici parametriche Formato DXF usato per la struttura di modelli architettonici (CAD)
RIB files Ideato dalla Pixar come supporto della RenderMan interface Modello per strutturare una scena 3D È quello usato per spiegare RenderMan Argomento di discussione durante la trattazione delle RenderMan interface
Formati di immagine Bitmap Tipi di file immagine .bmp .tif .gif .jpg ……… Il formato .bmp non è compresso, La compressione di immagine LZW usata in .tif e .gif è simmetrica e non degrada le immagini, ma comprime meno i file, Il formato .jpg (JPEG) comprime molto ma ha una compressione non simmetrica di tipo lossy, con degrado dell’immagine compressa, La grafica raster: fotografie e illustrazioni pittoriche. Vantaggi: si lavora sui pixel, effetti molto realistici, simili a quelli della pittura e grafica tradizionale (pennello, aerografo, matita, carboncino). SW di fotoritocco funzionano con immagini a punti. Operazioni sui punti. Contro: ingrandimento (su monitor o in stampa) solo ingrandendo la dimensione del pixel, che può diventare visibile, fino a creare effetti sgradevoli (pixelizzazione). Per elaborare (spostare, modificare, cancellare) una parte dell’immagine occorre letteralmente selezionare alcuni pixel e spostarli