12.07.2015 Views

PDF - Percro

PDF - Percro

PDF - Percro

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Canale visivo: componentiAMBIENTE VIRTUALESW modules of visualmodelling & renderingCANALEVISIVOCANALE GraphicalACUSTICO FeedbackCANALEAPTICOHW devicesof visualizationCANALEINERZIALEUTENTESoftware per canale visivo


Moduli logiciSintesiModellazioneCampionamentoComportamentiProprietàAMBIENTE VIRTUALEManagementRendering InterazioneUTENTESoftware per canale visivo


Software per la grafica 3DObiettivi distinti ma collegati:‣ modellazione geometrica‣ animazione‣ modellazione fisica‣ renderinggenerazione di un immagine 2Dcorrispondente alla prospettivadella scena/modello a partire dalviewpoint- impostazione delle luci- definizione dei materiali- definizione delle inquadrature- calcolo del risultato- offline / real-timeSoftware per canale visivo


Software per la grafica 3D‣ grandissima varietà‣ in genere rispondono a molteplici esigenze‣ spesso a tutte ma a diversi livelli dicompletezza‣ in linea di massima possiamo distinguere:‣ “suite” complete‣ tool specifici (spesso plugin per le suite)‣ molti paradigmi diversi‣ interfacce molto dissimili‣ tendenza all'uniformitàSoftware per canale visivo


Modellazione‣ NURBS e simili– curve parametriche– uso tipico: CAD, design (es. automobili)‣ Poligonale– low poly per applicazioni interattive– strumenti specificiper ridurre il numerodi poligoni‣ Digital sculpting– diverso modo diinteragire conmesh poligonaliSoftware per canale visivo


Animazione‣ definizione percorsi– in genere curve parametriche‣ definizione deformazioni– tramite armature• tipico ad esempio per personaggi o strumentimeccanici– tramite interpolazione fra mesh modificate(key frame animation)• tipico ad esempio per le espressioni facciali‣ gestione di azioni e interpolazioniSoftware per canale visivo


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 materialeaddirittura con del codice– sistemi RenderMan, shading a nodi, ecc.Software per canale visivo


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.Software per canale visivo


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 unaltro ambiente di sviluppo– necessitiamo dunque di un exporter per il formato:• leggere dal programma originale i dati che ciinteressano (serve dunque una API di interazione conquel particolare programma)• riorganizzarli e scriverli in un file secondo le nostreesigenzeSoftware per canale visivo


Software per modellazione e renderingSoftware per canale visivo


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/3dsmaxSoftware per canale visivo


Autodesk Maya‣ interfaccia raffinata (es. menù circolari)‣ scripting molto potente, anche Python‣ costo versione 8.5: $1999 o $6999 (unlim.)‣ www.autodesk.com/mayaSoftware per canale visivo


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 ecompositing‣ game engine‣ Wiki: wiki.blender.org‣ Forum:www.blenderartist.orgSoftware per canale visivo


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)Software per canale visivo


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 ExplorationSoftware per canale visivo


Renderer‣ Commerciali:– Maxwell– Mental Ray– RenderMan– Vray‣ Free:– Indigo, Yafray,POVray, WinOSI...Software per canale visivo


Software per rendering real-timeSoftware per canale visivo


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 hardwareSoftware per canale visivo


3D real-time engines‣ Le librerie di basso livello sono perfettamenteutilizzabili direttamente nelle applicazioni, ma unlivello 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 caricodi rendere trasparenti al programmatore molteoperazioni– Quake Engine (ID Software)– Unreal Engine– Ogre 3D– etcSoftware per canale visivo


Complessità di un sistema VRNetworkManager(~ 10 Hz)Simulazione(Fisica, …)AMBIENTE VIRTUALE(~ 200 Hz)MainApplicationCANALE VisualRenderingVISIVO(~ 60 Hz)CANALE AudioRenderingACUSTICO(~ 60 Hz)CANALE HapticRenderingAPTICO(~ 1 KHz)MotionCANALERenderingINERZIALE(~ 1 KHz)TrackingMoCap(~ 30 Hz)UTENTEInteractionManager(~ 30 Hz)Software per canale visivo


VR frameworks‣ I 3D engines sono solo uno dei componenti di un sistema diRV‣ Per gestire efficamente l’interazione e il rendering su tuttii 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 questicomponenti -> programmer’s nightmare‣ Approccio auspicabile: utilizzo di un framework che sifaccia carico di tutta la gestione dell’infrastruttura (es.comunicazione fra librerie, networking, supporto adhardware di diverso tipo, etc.)Software per canale visivo


VR frameworksApplicazioneFisicaNetworkingVRFramework3D GraphicsEngine3D Audio Engine3D Haptics EngineOpenGLOpenAL OpenHapticsHW Visual HW Audio HW Haptic HW TrackingSoftware per canale visivo


Workflow (canale visivo)3D ModelingSoftwaremodellazioneGeometriaMaterialiTextureesportazioneFilegeometriaTexturesimportazioneAmbienteVirtualeApplicazioneprogrammazioneVRFrameworkSoftware per canale visivo


VR framework: Virtools‣ Commerciale‣ Suite di strumenti di sviluppo‣ Separa gli “oggetti” dai “comportamenti”‣ Le applicazioni nascono dall’assemblaggio di oggetti ecomportamenti‣ GUI visuale per assemblareblocchi precostituiti‣ Linguaggio di scripting perspecificare comportamentipiù articolati‣ Supporta molti dispositivi direndering (dallo schermosemplice al CAVE)‣ http://www.virtools.comSoftware per canale visivo


VR framework: VR Toolkit‣ Supporto a– Tecnologie di visualizzazione stereoscopica– Guanti (data gloves)– Dispositivi aptici– Gamepads e joystick– Suono 3D– Networking‣ Linguaggio di scriptbasato su Python‣ http://www.worldviz.comSoftware per canale visivo


VR framework: XVRSoftware per canale visivo


XVRSoftware per canale visivo


XVR stack di sviluppoVR SystemDevelopmentXVR Scripting LanguageVirtual MachineScene GraphCore Libraries3d GraphicsEngine3d SoundEnginePhysicsEngineHapticsEngineCluster RendererHardware Abstraction LayerVR System HardwareSoftware per canale visivo


XVR Loops3 Callback principaliOnFrame()OnTimer()~ 60 Hz 100-1000 HzTutte le variabili sono condiviseVR_EVENT_1VR_EVENT_3OnEvent()VR_EVENT_2VR_EVENT_4Software per canale visivo


XVR featuresUser interactionmanagementPhoto-realistic renderingMulti-channel visual stereoscopic display (CAVEs)Hardware interfaces supportAdvanced content authoring and managementSoftware per canale visivo


XVR Cluster Renderer• Possibilità di usare più PC “slave” per renderizzareuna singola scena (o più viste di una singola scena)Software per canale visivo


Dove avviene la sincronizzazione ?User InputSort FirstScript LanguageUser InputScene GraphSort EarlyC++ LanguageScene GraphOpenGLcommandsSort LateOpenGLOpenGLcommandsFramebuffer imageSort LastRaster imagesFramebuffer imageSoftware per canale visivo


XVR Cluster RendererL’XVR Network Driver permette il networkrendering su un cluster di nodi slaveSlavesMasterIl nodo Master usa uno speciale driver per intercettare lechiamate OpenGL e inoltrarle agli slave usandopacchetti UDPSoftware per canale visivo


XVR Cluster RendererSoftware per canale visivo


XVR Cluster Renderer (CAVE)Software per canale visivo


XVRE’ 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 aggiungeremoduli addizionali pergestire features extraSoftware per canale visivo


XVR Virtual machineVirtual Machine‣ La XVR-VM contiene:- Un set di istruzioni bytecode- Un set di registri- Uno stack- Un area per i metodi‣ Il comportamento delle applicazioniviene specificato tramite un linguaggiodi scripting (S3D)‣ Lo script S3D viene compilato in unbytecode che viene processato edeseguito dalla XVR-VMOP1 OP2 OP3SPBSIPFunctionbytecodeClass LibClass declSTACKConstGLOBALVARFunctionSoftware per canale visivo


XVR WorkflowDedicated scriptinglanguageOutputBinaryByteCodeCompilerInterpreter(Virtual Machine)Software per canale visivo


Web embedding‣ Il bytecode prodotto (.bin) può essere eseguito dalla VM conun’applicazione ad hoc o inserito in una pagina HTML‣ Quando si accede, in locale o in remoto, alla pagina HTMLche ospita l’applicazione XVR:– Viene controllata la versione dell’XVR engine e, se localmente èassente quella specificata nella pagina HTML, viene scaricata dallarete 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-VMSoftware per canale visivo


Web embedding: codice HTMLSoftware per canale visivo


“Engine version”• Un solo controllo ActiveX control for versionimultiple dell’Engine• Ogni Engine è autosufficiente• Di tanto in tanto vengono rilasciate nuoveversioni dell’Engine (auto-update da web)• The sequence was 0100, 0101, … , 0142Convenzione di namingEngine Family(sempre la stessa)0142Progressivo all’internodella famigliaCompiler Generation NumberSoftware per canale visivo


XVR scripting language (.S3D)• Sintassi simile a JAVA e BASIC• Byte code – virtual machinemodel• Type less• Object oriented• Costrutti dedicati alla VRSoftware per canale visivo


Loop negli ambienti virtualiNetworkManager(~ 10 Hz)VIRTUAL ENVIRONMENTPhysics(> 100 Hz)MainApplicationVisual Audio Haptic MotionVISUAL ACOUSTIC HAPTICRendering Rendering Rendering Rendering INERTIAL(~ 60 Hz)(~ 60 Hz)(~ 1 KHz)(~ 1 KHz)TrackingMoCap(~ 30 Hz)USERInteractionManager(~ 30 Hz)Software per canale visivo


L’approccio XVR3 Main Call-backs (+ 3 special ones)OnFrame()OnTimer()~ 60 Hz 100-1000 HzTutte le variabili sono condiviseVR_EVENT_1VR_EVENT_3OnEvent()VR_EVENT_2VR_EVENT_4Software per canale visivo


Struttura di uno script S3D‣ Ogni script S3D è basato su 6 funzioni predefinite:– OnDownload()– OnInit()– OnFrame()– OnTimer()– OnEvent()– OnExit()‣ Queste funzioni vengono automaticamente invocateal verificarsi di determinati eventiSoftware per canale visivo


OnDownload()• E’ la prima funzione ad essereinvocata• Ogni volta che uno script XVR vieneeseguito, viene creata una cartella dilavoro nella temp di sistema• Nella OnDownload i files usatidall’applicazione dalla locazioneoriginale (server o locale) vengonospostati nella cartella di lavoro• Gli archivi ZIP vengono decompressiautomaticamente• Nella OnDownload si può inserireanche codice genericoSoftware per canale visivo


OnInit()• Viene chiamata all’iniziodell’applicazione, subito dopo laOnDownload()• E’ il posto per gestire il caricamentodei data-files scaricati etutte le inizializzazioni.•Può ricevere parametri diingresso specificati nella paginaHTML con il tag Software per canale visivo


OnFrame()• E’ la funzione dedicata alrendering. Di default viene chiamataad una frequenza pari al refresh rate(60 Hz).• Il target frame-rate può esserecambiato usandoSetFramerate(Value);• E’ la sola funzione ad accedere alframe buffer OpenGL• Il massimo frame-rate possibile è100 HzSoftware per canale visivo


OnTimer()• E’ la funzione normalmentededicata alla gestione di loop ad altavelocità (fisica, collision detection,etc.) Di default viene chiamata a 100Hz.• Il time-step può essere cambiatousando:SetTimestep(Value);• Minimo time-step = 1ms• Independente dal framerate (ameno che il sistema non siasovraccarico)• Non ha accesso al framebufferSoftware per canale visivo


OnEvent()• Funzione “prevista” per la gestione di eventi (event-drivenprogramming)• OnEvent (EventID, param1, param2);• Gli eventi possono essere generati da XVR, dalprogrammatore XVR (GenerateEvent(ID, param)) oall’esterno di XVR (eventi Win32)• Un esempio di evento XVR è quello generato quandotermina un download eseguito con la funzioneFileDownload(); [ che però è gestita dalla callbackspecifica OnDownloadReady() ]Software per canale visivo


OnExit()‣ OnExit()Viene eseguita all’uscita dell’applicazione.L’uscita può avvenireesplicitamente o in seguito allachiusura della pagina HTMLcontenitore.Software per canale visivo


Funzioni• Il tipo di parametri non viene specificato• Il tipo del valore di ritorno non viene specificatoSoftware per canale visivo


S3D: Tipi di dato‣ La dichiarazione delle variabili non specifica iltipo.Il tipo viene specificato con l’assegnamento ol’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];Software per canale visivo


S3D: Tipi di dato predefiniti‣ INT, FLOAT, BOOLEAN (non sono dichiarabili)‣ STRING (non è dichiarabile)‣ ARRAY: è un set di elementi a cui si può accedere tramiteun indice. Gli elementi possono essere di tipo diverso.Var1 = { 1, true, { 12, 3 }}; // Array made of different typesVar2 = Array(12);// Creates an array of 12 elementsVar3 = Var1[0]; // Var3 equals 1Var4 = Var1[2][0]; // Var4 equals 12Var1[1] = true;‣ VECTOR: è un array di floatVar1 = [ 0.2 , 2 , 3.33 , 4 ];Var2 = Vector(16); // creates a 16-elements vectorVar3 = Var1[0]; // Var3 equals 0.2Software per canale visivo


S3D: Tipi di dato predefiniti‣ OGGETTIGli oggetti possono essere dichiarati come istanze di:- Classi predefinite- Classi definite dall’utenteObj1 = CVmLight();Obj1.SetPosition( 10,10,20);Software per canale visivo


S3D: Dichiarazioni di classiClass 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 playlistfunction Playlist::Playlist(i,n,){id = i;name = n;elements = {};}// Il costruttore è dichiarato di defaultfunction Playlist::Add(song){aadd(elements,song);}Software per canale visivo


S3D: Ereditarietà multiplaClass Vehicle: Engine, Bodywork{var m_Desc;var m_NumWeels;var m_MaxVel;Info();};Multiple inheritance, commaseparatedfunction 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 methodSoftware per canale visivo


Importare funzioni esterne (1/2)XVR consente di implementare funzionalità non disponibilinell’engine embedded attraverso dll esterneDichiarare una variabile di tipo CVmExternDLLvar mylib = CVmExternDLL(“mylib.dll");Chiamare “__AddFunction” per ogni funzione da importare dalla dllmylib.__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 dllSoftware per canale visivo


Importare funzioni esterne (2/2)Si scarica la DLL in FileDownloadFileDownload(“mylib.dll”);E’ necessario scaricare anche tutte le dll da cui dipende la “nostra”, senon già presenti nel sistemaFileDownload(“msvcr71d.dll”);Le funzioni importate diventeranno metodi dell’oggetto CVmExternDLLmylib.lib_initialize();var v = vector(16);mylib.lib_get_obj_mat(idx, &v);Software per canale visivo


XVR ToolsSoftware per canale visivo


XVR Studio IDESoftware per canale visivo


XVR built-in profilerSoftware per canale visivo


XVR AAM viewerSoftware per canale visivo


XVR Add-onsXVR Texture ConverterSoftware per canale visivo


XVR Add-onsXVR State Machine Visual EditorSoftware per canale visivo


XVR Add-onsXVR Shader EditorSoftware per canale visivo


BREAKING news: XVR Debugger‣ A new beta XVR compiler supports producingadditional information needed for debugging‣ Interaction with the debugger takes place eitherthrough a shell or a GUI‣ GUI is made available by the Eclipse framework.An Eclipse plugin has been implementedsupporting XVR code highlighting andcommunication with the debugger via a dedicatedpipe‣ Fully working version expected in May 2011Software per canale visivo


XVR Debugger• Breakpoint• Single steptraceSoftware per canale visivo


XVR Debugger• Workspacemanagement• Variables watch70Software per canale visivo


XVR: Script precompilati• Added the directive “#import” to support importing XVRlibraries consisting of precompiled .bin filesCompileExternLib.s3d.binUse71Software per canale visivo

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!