OpenSceneGraph & OSG4Web Parte 1 OpenSceneGraph Introduzione alla creazione di una Applicazione 3D e OpenGL Basi di OpenSceneGraph Demo e prove pratiche Parte 2 Navigazione e Virtual Worlds su larga scala Si estendono i concetti a Virtual Worlds di larga scala (keyword "large") Navigazione e ombre scalabili multi-risoluzione Tecniche di organizzazione scena e paginazione (osgdem) Parte 3 OSG4WEB Plugin OSG4WEB illustrato dentro il Virtual World di Montegrotto Pipeline di generazione contenuti, Organizzazione scena e tecniche di ottimizzazione per il web Fruizione e interazioni
Open Source OpenSource Il codice sorgente viene messo a disposizione e puo essere liberamente modificato, compreso e studiato (ES: Firefox) Free Viene messo a disposizione l'eseguibile (programma) in modo gratuito, ma senza codice sorgente. Non Free L'azienda che lo sviluppa ne detiene la proprieta' e di solito vende la licenza (ES: Adobe Photoshop) (ES: Google Earth)
Applicazioni 3D Come produrre Applicazioni 3D opensource? Obiettivi: efficiente, portabile scalabile, intuitiva Necessita' di solide basi (es. OpenGL) Valutazione dei requisiti del progetto e spesso considerare sviluppi futuri
OpenGL Cosa sono le OpenGL in breve Libreria Grafica: consiste in una serie di comandi distinti che rappresentano una interfaccia software verso l'hardware grafico Macchina a stati: esempio con scena banale (7 sfere, rosse e gialle)
OpenGL Disegna 3 sfere di colore rosso Disegna 4 sfere di colore giallo
OpenGL: Primitive e Stati Primitive (cosa) Linee Punti Poligoni Etc.. Stati (come) Materiale Lighting Texturing Etc...
OpenGL: Primitive
Frame Cosa e' un frame In questo contesto, e' il tempo impiegato per aggiornare e disegnare la scena a video. Da' una misura sulla qualità dell'applicazione 3D real-time e possibili punti deboli (tramite statistiche) FPS: Quanti frames vengono prodotti in un secondo (Frames Per Second)
OpenGL Sono sufficienti per creare Applicazioni 3D complesse? No. Abbiamo bisogno di qualcosa di piu potente Motivi: Limiti sulla visualizzazione di ambienti 3D complessi Limiti sulla gestione della scena, scalabilita' e organizzazione Soluzione possibile: E' necessario ricorrere a strutture/meccanismi di alto livello per gestire al meglio la realta' simulata Scene Graph Lo SceneGraph e' una rappresentazione organizzata della scena. Esempio casa
OpenSceneGraph OpenSceneGraph (OSG) Insieme di librerie opensource basate sulle OpenGL Orientate alla simulazione e visualizzazione 3D real-time di ambienti anche complessi (simulazioni di volo, citta', etc...) Portabili (Windows, MacOS, Linux e altri) Efficienti e scalabili Nuovo strato tra OpenGL e Applicazione 3D Forniti alcuni strumenti base: osgviewer (visualizzatore) osgconv (conversioni tra modelli)...
OpenSceneGraph Scena organizzata Gerarchia La scena è organizzata sotto forma di un grafo (diretto aciclico) Uno scene graph possiede un nodo Root con uno o più figli ognuno a sua volta contenente zero o più nodi figli Maneggevolezza: ad esempio dato l'oggetto Casa, contenente Cucina e Sala : è sufficiente traslare il nodo Casa e lasciare che tutto il sottografo segua la trasformazione automaticamente Ottimizzazione del carico di lavoro: se il nodo cucina non e' presente nella piramide di visualizzazione, tutto il sotto-grafo dell'oggetto cucina viene scartato (culling)
Scena (esempio)
Scena (culling)
Formati 3D OpenSceneGraph permette di caricare nel grafo di scena modelli 3D come nodi Supporta un buon numero di formati: alcuni in sola lettura, altri anche in scrittura 3DS (3D Studio) - RW OBJ (Alias WaveFront) - RW DAE (Collada) - RW DXF (Autodesk) - R WRL (VRML) - R SHP (ESRI ShapeFile) - R... (lista completa: http://www.openscenegraph.org/projects/osg/wiki/support/userguides/plugins) OSG (Nativo ASCII) IVE (Nativo binario)
Tipologie di Nodi Nodi Gruppo: Possono avere figli e permettono all'applicazione 3D di organizzare logicamente i dati di geometria e stati Geode: nodi finali (foglie) contenenti geometria da renderizzare (Geometry + Node) Transform: nodi di trasformazione (traslazione, rotazione e scala) del sotto-grafo Light: nodo luce Switch, LOD, etc etc... StateSet Insieme di stati OpenGL associati al nodo (Materiali, Textures, Depth Test, Fog,...) Vengono ereditati
Esempio Transform Nodes
Esempio Instancing
Come viene generato un Frame In OpenSceneGraph possiamo suddividere la generazione di un frame in 3 fasi principali, ripetute ciclicamente: Update Durante questa fase, vengono effettuati aggiornamenti e modifiche del grafo (es. animazioni) Cull Durante questa fase, vengono selezionati tutti i nodi visibili nella piramide di vista e scartati quelli non visibili. Tutti i nodi terminali (Geodes) selezionati vengono ordinati e inseriti in una lista finale per la fase Draw Draw Durante questa fase, viene concretamente disegnata a schermo la lista creata nella fase Cull ESEMPIO osgviewer cow.osg
Livelli di Dettaglio Come vengono gestiti in OpenSceneGraph diversi livelli di dettaglio? Vengono utilizzati nodi LOD I figli rappresentano lo stesso oggetto ma con diverso dettaglio geometrico In base alla posizione dell'utente nello spazio, il nodo LOD seleziona il singolo figlio da visualizzare in base al range [min,max] assegnato Quando usarli: spesso oggetti 3D complessi da grandi distanze possono essere rappresentati con meno poligoni, sgravando l'hardware grafico
Livelli di Dettaglio
DEMO e osgconv osgviewer e statistiche: osgviewer.exe cow.osg opzioni (es: --stereo) osgshaders, osgparticle, esempi osgconv <opzioni> <A> <B> <A> Input: percorso a modello supportato da OSG (es: "modello.obj") <B> Output: "nomefile-finale" (es -o "modello-convertito.osg") -t X,Y,Z (Traslazione di X,Y,Z es: -t 2,0,0) -o ANG-X,Y,Z (Rotazione di ANG attorno a asse X,Y,Z es: -o 90-0,0,1)
osgconv osgviewer.exe models/horse.3ds osgconv.exe models/horse.3ds models/horse.ive osgconv.exe --smooth models/horse.3ds models/horse.ive