Canale visivo: componenti AMBIENTE VIRTUALE SW modules of visual modelling & rendering CANALE VISIVO CANALE Graphical ACUSTICO Feedback CANALE APTICO HW devices of visualization CANALE INERZIALE UTENTE
Moduli logici Sintesi Modellazione Campionamento Comportamenti Proprietà AMBIENTE VIRTUALE Management Rendering Interazione UTENTE
Software per la grafica 3D Obiettivi distinti ma collegati: modellazione geometrica animazione modellazione fisica rendering generazione di un immagine 2D corrispondente alla prospettiva della scena/modello a partire dal viewpoint - impostazione delle luci - definizione dei materiali - definizione delle inquadrature - calcolo del risultato - offline / real-time
Software per la grafica 3D grandissima varietà in genere rispondono a molteplici esigenze spesso a tutte ma a diversi livelli di completezza in linea di massima possiamo distinguere: suite complete tool specifici (spesso plugin per le suite) molti paradigmi diversi interfacce molto dissimili tendenza all'uniformità
Modellazione NURBS e simili curve parametriche uso tipico: CAD, design (es. automobili) Poligonale low poly per applicazioni interattive strumenti specifici per ridurre il numero di poligoni Digital sculpting diverso modo di interagire con mesh poligonali
Animazione definizione percorsi in genere curve parametriche definizione deformazioni tramite armature tipico ad esempio per personaggi o strumenti meccanici tramite interpolazione fra mesh modificate (key frame animation) tipico ad esempio per le espressioni facciali gestione di azioni e interpolazioni
Definizione dei materiali strettamente connessa all'uso previsto per applicazioni interattive fino a ieri poco più che definizione texture oggi software appositi per messa a punto shaders RenderMonkey per rendering offline modelli di interazione luminosa complessi possibilità di esprimere le proprietà del materiale addirittura con del codice sistemi RenderMan, shading a nodi, ecc.
Rendering gestione della telecamera piazzamento nella scena, inquadratura, lente, moto della camera, ecc. impostazione di parametri dimensioni finali numero di frame varie impostazioni di qualità grande varietà di tipi di renderer Non Photorealistic Rendering, biased/unbiased ( corretti o approssimati ) ecc.
Gestione del comportamento interattivo definirlo direttamente dentro il programma, impostando proprietà dei vari oggetti generalmente più facile ma meno potente esportare la geometria e gestire gli oggetti in un altro ambiente di sviluppo necessitiamo dunque di un exporter per il formato: leggere dal programma originale i dati che ci interessano (serve dunque una API di interazione con quel particolare programma) riorganizzarli e scriverli in un file secondo le nostre esigenze
Software per modellazione e rendering
Autodesk 3ds Max molto diffuso buon compromesso fra aspetti artistici e CAD Jurassic Park, Harry Potter, etc. modellazione, materiali, animazione, rendering integrazione con renderer esterni (Mental Ray, VRay, etc.) Scripting, SDK versione 9, costo $3.495 www.autodesk.com/3dsmax
Autodesk Maya interfaccia raffinata (es. menù circolari) scripting molto potente, anche Python costo versione 8.5: $1999 o $6999 (unlim.) www.autodesk.com/maya
Blender programma free e open source suite di tool per il 3D modellazione (supporta digital sculpting) animazione piuttosto avanzata rendering: non il punto forte video editing e compositing game engine Wiki: wiki.blender.org Forum: www.blenderartist.org
Altri software Cinema, videogiochi: Softimage XSI (es. FFXI, Half Life 2, etc.) www.softimage.com Lightwave 3d 09 - www.newtek.com/lightwave Modelli x Mappe 3D (e ormai molto altro...) Google SketchUp - www.sketchup.com CAD meccanici Pro-Engineer Solidworks Altri CAD AutoCAD (architettura, ingegneria) ArchiCAD (architettura) Rhino (NURBS, design)
Altri software Digital Sculpting: Pixologic Z-Brush 3.0 www.pixologic.com/zbrush/home Mudbox 1.0 www.mudbox3d.com Animazione di figure umane: Poser Generazione di scenari realistici Bryce Convertitori di formati Okino Polytrans Deep Exploration
Renderer Commerciali: Maxwell Mental Ray RenderMan Vray Free: Indigo, Yafray, POVray, WinOSI...
Software per rendering real-time
3D real-time libraries Librerie di basso livello : OpenGL Cross platform Non proprietaria Supportata da un Architectural Review Board Estensibile Usata soprattutto nei settori professionali/ricerca Direct3D Parte di DirectX Proprietaria (Microsoft) Windows only Diffusissima per giochi ENTRAMBE accelerate in hardware
3D real-time engines Le librerie di basso livello sono perfettamente utilizzabili direttamente nelle applicazioni, ma un livello più alto è spesso molto utile: Riutilizzo di codice Ottimizzazione delle funzionalità Implementazione di funzionalità di base non disponibili (es. caricamento di mesh) Nascono numerosi 3D Engine che si fanno carico di rendere trasparenti al programmatore molte operazioni Quake Engine (ID Software) Unreal Engine Ogre 3D etc
Complessità di un sistema VR Network Manager (~ 10 Hz) Simulazione (Fisica, ) AMBIENTE VIRTUALE (~ 200 Hz) Main Application CANALE Visual Rendering VISIVO (~ 60 Hz) CANALE Audio Rendering ACUSTICO (~ 60 Hz) CANALE Haptic Rendering APTICO (~ 1 KHz) Motion CANALE Rendering INERZIALE (~ 1 KHz) Tracking MoCap (~ 30 Hz) UTENTE Interaction Manager (~ 30 Hz)
VR frameworks I 3D engines sono solo uno dei componenti di un sistema di RV Per gestire efficamente l interazione e il rendering su tutti i canali sensoriali occorre integrare numerose librerie, engines, e driver Esempio: Canale visivo: OpenGL/Directx (o 3D Engines built-on-top) Canale acustico: OpenAL/DirectSound (o 3DAudio Engines - es. Fmod) Canale aptico: OpenHaptics/Chai (o Haptics Engines es. Hapticweb) Approccio bulldozer: applicazione C++ che usa tutti questi componenti -> programmer s nightmare Approccio auspicabile: utilizzo di un framework che si faccia carico di tutta la gestione dell infrastruttura (es. comunicazione fra librerie, networking, supporto ad hardware di diverso tipo, etc.)
VR frameworks Applicazione Fisica Networking VRFramework 3D Graphics Engine 3D Audio Engine 3D Haptics Engine OpenGL OpenAL OpenHaptics HW Visual HW Audio HW Haptic HW Tracking
Workflow (canale visivo) 3D Modeling Software modellazione Geometria Materiali Texture esportazione File geometria Textures importazione Ambiente Virtuale Applicazione programmazione VR Framework
VR framework: Virtools Commerciale Suite di strumenti di sviluppo Separa gli oggetti dai comportamenti Le applicazioni nascono dall assemblaggio di oggetti e comportamenti GUI visuale per assemblare blocchi precostituiti Linguaggio di scripting per specificare comportamenti più articolati Supporta molti dispositivi di rendering (dallo schermo semplice al CAVE) http://www.virtools.com
VR framework: VR Toolkit Supporto a Tecnologie di visualizzazione stereoscopica Guanti (data gloves) Dispositivi aptici Gamepads e joystick Suono 3D Networking Linguaggio di script basato su Python http://www.worldviz.com
VR framework: XVR
XVR
XVR stack di sviluppo VR System Development XVR Scripting Language Virtual Machine Scene Graph Core Libraries 3d Graphics Engine 3d Sound Engine Physics Engine Haptics Engine Cluster Renderer Hardware Abstraction Layer VR System Hardware
XVR Loops 3 Callback principali OnFrame() OnTimer() ~ 60 Hz 100-1000 Hz Tutte le variabili sono condivise VR_EVENT_1 VR_EVENT_3 OnEvent() VR_EVENT_2 VR_EVENT_4
XVR features User interaction management Photo-realistic rendering Multi-channel visual stereoscopic display (CAVEs) Hardware interfaces support Advanced content authoring and management
XVR Cluster Renderer Possibilità di usare più PC slave per renderizzare una singola scena (o più viste di una singola scena)
Dove avviene la sincronizzazione? User Input Sort First Script Language User Input Scene Graph Sort Early C++ Language Scene Graph OpenGL commands Sort Late OpenGL OpenGL commands Frame buffer image Sort Last Raster images Frame buffer image
XVR Cluster Renderer L XVR Network Driver permette il network rendering su un cluster di nodi slave Slaves Master Il nodo Master usa uno speciale driver per intercettare le chiamate OpenGL e inoltrarle agli slave usando pacchetti UDP
XVR Cluster Renderer
XVR Cluster Renderer (CAVE)
XVR E suddiviso in due moduli principali: XVR Virtual Machine: contiene il core della tecnologia (engine grafico, engine multimediale etc.) XVR ActiveX Control: realizza l interfaccia web Opzionalmente è possibile aggiungere moduli addizionali per gestire features extra
XVR Virtual machine Virtual Machine La XVR-VM contiene: - Un set di istruzioni bytecode - Un set di registri - Uno stack - Un area per i metodi Il comportamento delle applicazioni viene specificato tramite un linguaggio di scripting (S3D) Lo script S3D viene compilato in un bytecode che viene processato ed eseguito dalla XVR-VM OP1 OP2 OP3 SP BS IP Function bytecode Class Lib Class decl STACK Const GLOBAL VAR Function
XVR Workflow Dedicated scripting language Output Binary ByteCode Compiler Interpreter (Virtual Machine)
Web embedding Il bytecode prodotto (.bin) può essere eseguito dalla VM con un applicazione ad hoc o inserito in una pagina HTML Quando si accede, in locale o in remoto, alla pagina HTML che ospita l applicazione XVR: Viene controllata la versione dell XVR engine e, se localmente è assente quella specificata nella pagina HTML, viene scaricata dalla rete la versione giusta Viene scaricato il bytecode dell applicazione Vengono scaricati i file di dati associati all applicazione (modelli3d, textures, file multimediali etc.) Viene eseguito il bytecode sulla XVR-VM
Web embedding: codice HTML <OBJECT ID= AppName WIDTH = 800 HEIGHT = 800 CLASSID = "CLSID:5D589287-1496-4223-AE64-65FA078B5EAB" TYPE = "application/x-oleobject" align="left" border="2" CODEBASE = "http://client.vrmedia.it/xvrplayer.cab#version=1,0,0,900 > <PARAM NAME="ScriptName" VALUE=" AppName.s3d.bin"> <PARAM NAME="EngineVersion" VALUE="0136"> <PARAM NAME="BackgroundColor" VALUE="#000066"> <PARAM NAME="Params" VALUE "DEPTH=24"> <PARAM NAME= UserParams" VALUE " "> </OBJECT>
Engine version Un solo controllo ActiveX control for versioni multiple dell Engine Ogni Engine è autosufficiente Di tanto in tanto vengono rilasciate nuove versioni dell Engine (auto-update da web) The sequence was 0100, 0101,, 0142 Convenzione di naming Engine Family (sempre la stessa) 0142 Progressivo all interno della famiglia Compiler Generation Number
XVR scripting language (.S3D) Sintassi simile a JAVA e BASIC Byte code virtual machine model Type less Object oriented Costrutti dedicati alla VR
Loop negli ambienti virtuali Network Manager (~ 10 Hz) VIRTUAL ENVIRONMENT Physics (> 100 Hz) Main Application Visual Audio Haptic Motion VISUAL ACOUSTIC HAPTIC Rendering Rendering Rendering Rendering INERTIAL (~ 60 Hz) (~ 60 Hz) (~ 1 KHz) (~ 1 KHz) Tracking MoCap (~ 30 Hz) USER Interaction Manager (~ 30 Hz)
L approccio XVR 3 Main Call-backs (+ 3 special ones) OnFrame() OnTimer() ~ 60 Hz 100-1000 Hz Tutte le variabili sono condivise VR_EVENT_1 VR_EVENT_3 OnEvent() VR_EVENT_2 VR_EVENT_4
Struttura di uno script S3D Ogni script S3D è basato su 6 funzioni predefinite: OnDownload() OnInit() OnFrame() OnTimer() OnEvent() OnExit() Queste funzioni vengono automaticamente invocate al verificarsi di determinati eventi
OnDownload() E la prima funzione ad essere invocata Ogni volta che uno script XVR viene eseguito, viene creata una cartella di lavoro nella temp di sistema Nella OnDownload i files usati dall applicazione dalla locazione originale (server o locale) vengono spostati nella cartella di lavoro Gli archivi ZIP vengono decompressi automaticamente Nella OnDownload si può inserire anche codice generico
OnInit() Viene chiamata all inizio dell applicazione, subito dopo la OnDownload() E il posto per gestire il caricamento dei data-files scaricati e tutte le inizializzazioni. Può ricevere parametri di ingresso specificati nella pagina HTML con il tag <UserParams>
OnFrame() E la funzione dedicata al rendering. Di default viene chiamata ad una frequenza pari al refresh rate (60 Hz). Il target frame-rate può essere cambiato usando SetFramerate(Value); E la sola funzione ad accedere al frame buffer OpenGL Il massimo frame-rate possibile è 100 Hz
OnTimer() E la funzione normalmente dedicata alla gestione di loop ad alta velocità (fisica, collision detection, etc.) Di default viene chiamata a 100 Hz. Il time-step può essere cambiato usando: SetTimestep(Value); Minimo time-step = 1ms Independente dal framerate (a meno che il sistema non sia sovraccarico) Non ha accesso al framebuffer
OnEvent() Funzione prevista per la gestione di eventi (event-driven programming) OnEvent (EventID, param1, param2); Gli eventi possono essere generati da XVR, dal programmatore XVR (GenerateEvent(ID, param)) o all esterno di XVR (eventi Win32) Un esempio di evento XVR è quello generato quando termina un download eseguito con la funzione FileDownload(); [ che però è gestita dalla callback specifica OnDownloadReady() ]
OnExit() OnExit() Viene eseguita all uscita dell applicazione. L uscita può avvenire esplicitamente o in seguito alla chiusura della pagina HTML contenitore.
S3D: Statements e preprocessore IF..ELSE WHILE DO..WHILE FOR BREAK CONTINUE SWITCH..CASE SET SCENE_FOV SCENE_NEAR SCENE_FAR AUDIO_MODE Field of view Near clipping plane distance Far clipping plane distance 3d Audio Setup mode #DEFINE #IFDEF #ENDIF #ELSE #INCLUDE #PRAGMA
Funzioni Il tipo di parametri non viene specificato Il tipo del valore di ritorno non viene specificato
S3D: Tipi di dato La dichiarazione delle variabili non specifica il tipo. Il tipo viene specificato con l assegnamento o l inizializzazione: VAR i; VAR j,k; VAR x = 2; VAR y = 3.1; VAR s = Don t panic!!! k = 4.3; i = 8; i = 9.2; VAR v = [0.0, 1.0, 0.0];
S3D: Tipi di dato predefiniti INT, FLOAT, BOOLEAN (non sono dichiarabili) STRING (non è dichiarabile) ARRAY: è un set di elementi a cui si può accedere tramite un indice. Gli elementi possono essere di tipo diverso. Var1 = { 1, true, { 12, 3 }}; // Array made of different types Var2 = Array(12); // Creates an array of 12 elements Var3 = Var1[0]; // Var3 equals 1 Var4 = Var1[2][0]; // Var4 equals 12 Var1[1] = true; VECTOR: è un array di float Var1 = [ 0.2, 2, 3.33, 4 ]; Var2 = Vector(16); // creates a 16-elements vector Var3 = Var1[0]; // Var3 equals 0.2
S3D: Tipi di dato predefiniti OGGETTI Gli oggetti possono essere dichiarati come istanze di: - Classi predefinite - Classi definite dall utente Obj1 = CVmLight(); Obj1.SetPosition( 10,10,20);
S3D: Dichiarazioni di classi Class Playlist { var id; var name; var elements; Add(el); Start(); Stop(); }; // Identificativo unico della playlist // Nome della playlist // Array di id che compongono la playlist // Aggiunge un elemento // Avvia la playlist // Stop della playlist function Playlist::Playlist(i,n,) { id = i; name = n; elements = {}; } // Il costruttore è dichiarato di default function Playlist::Add(song) { aadd(elements,song); }
S3D: Ereditarietà multipla Class Vehicle: Engine, Bodywork { var m_desc; var m_numweels; var m_maxvel; Info(); }; Multiple inheritance, comma separated function Vehicle::Vehicle( Desc, Weels, MaxVel, EngineFuel, EngineHP, BodyColor, BodyStuff ) { } m_desc = Desc; m_numweels = Weels; m_maxvel = MaxVel; Engine::this.Init( EngineFuel, EngineHP ); Bodywork::this.Init( BodyColor, BodyStuff ); Calling a base class method
Importare funzioni esterne (1/2) XVR consente di implementare funzionalità non disponibili nell engine embedded attraverso dll esterne Dichiarare una variabile di tipo CVmExternDLL var mylib = CVmExternDLL( mylib.dll"); Chiamare AddFunction per ogni funzione da importare dalla dll mylib. AddFunction(C_VOID, lib_initialize ); mylib. AddFunction(C_VOID, lib_obj_get_mat, C_INT, C_PFLOAT); Non è necessario importare tutte le funzioni esportate dalla dll
Importare funzioni esterne (2/2) Si scarica la DLL in FileDownload FileDownload( mylib.dll ); E necessario scaricare anche tutte le dll da cui dipende la nostra, se non già presenti nel sistema FileDownload( msvcr71d.dll ); Le funzioni importate diventeranno metodi dell oggetto CVmExternDLL mylib.lib_initialize(); var v = vector(16); mylib.lib_get_obj_mat(idx, &v);
XVR Tools
XVR Studio IDE
XVR built-in profiler
XVR AAM viewer
XVR Add-ons XVR Texture Converter
XVR Add-ons XVR State Machine Visual Editor
XVR Add-ons XVR Shader Editor
BREAKING news: XVR Debugger A new beta XVR compiler supports producing additional information needed for debugging Interaction with the debugger takes place either through a shell or a GUI GUI is made available by the Eclipse framework. An Eclipse plugin has been implemented supporting XVR code highlighting and communication with the debugger via a dedicated pipe Fully working version expected in May 2011
XVR Debugger Breakpoint Single step trace
XVR Debugger Workspace management Variables watch 70
XVR: Script precompilati Added the directive #import to support importing XVR libraries consisting of precompiled.bin files Compile ExternLib.s3d.bin Use 71