Canale visivo: componenti
Transcript
Canale visivo: componenti
Canale visivo: componenti AMBIENTE AMBIENTE VIRTUALE VIRTUALE SW SWmodules modulesof ofvisual visual modelling & rendering modelling & rendering CANALE CANALE VISIVO VISIVO CANALE CANALE Graphical Graphical ACUSTICO ACUSTICO Feedback Feedback CANALE CANALE APTICO APTICO CANALE CANALE INERZIALE INERZIALE HW HWdevices devices of visualization of visualization UTENTE UTENTE Rendering Moduli logici Campionamento Campionamento Sintesi Sintesi Modellazione Comportamenti Comportamenti Proprietà à Propriet Proprietà AMBIENTE VIRTUALE Management Management Rendering Interazione UTENTE Rendering 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 Rendering 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à Rendering Modellazione Poligonale – low poly per applicazioni interattive – strumenti specifici per ridurre il numero di poligoni NURBS e simili – curve parametriche – uso tipico: CAD, design (es. automobili) Digital sculpting – diverso modo di interagire con mesh poligonali Rendering 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 Rendering 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, RenderMan, shading a nodi, ecc. Rendering 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. Rendering 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 Rendering Software per modellazione e rendering 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 Rendering Autodesk Maya interfaccia raffinata (es. menù circolari) scripting molto potente, anche Python costo versione 8.5: $1999 o $6999 (unlim.) www.autodesk.com/maya Rendering 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 Rendering 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 – Google SketchUp - www.sketchup.com CAD meccanici – Pro-Engineer – Solidworks Altri CAD – AutoCAD (architettura, ingegneria) – ArchiCAD (architettura) – Rhino (NURBS, design) Rendering 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 Rendering Renderer Commerciali: – – – – Maxwell Mental Ray RenderMan Vray Free: – Indigo, Yafray, POVray, WinOSI... Rendering Software per rendering real-time Rendering 3D real-time libraries Librerie di – OpenGL “basso livello”: 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 Rendering 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 Rendering Complessità di un sistema VR Simulazione (Fisica, …) (~ 200 Hz) AMBIENTE VIRTUALE AMBIENTE VIRTUALE Main Application Network Manager (~ 10 Hz) Visual CANALE CANALE Rendering VISIVO (~ 60 Hz) VISIVO Audio CANALE CANALE Rendering ACUSTICO ACUSTICO (~ 60 Hz) Haptic CANALE CANALE Rendering APTICO (~ 1 KHz) APTICO Motion CANALE CANALE Rendering INERZIALE (~ 1 KHz) INERZIALE Interaction Manager Tracking MoCap (~ 30 Hz) (~ 30 Hz) UTENTE UTENTE Rendering 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: Esempio: Canale visivo: visivo: OpenGL/Directx OpenGL/Directx (o 3D Engines builtbuilt-onon-top) Canale acustico: acustico: OpenAL/DirectSound OpenAL/DirectSound (o 3DAudio Engines - es. es. Fmod) Fmod) Canale aptico: OpenHaptics/Chai (o Haptics Engines – es. es. Hapticweb) 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.) Rendering VR frameworks Applicazione VRFramework Fisica Networking 3D Graphics Engine 3D Audio Engine 3D Haptics Engine OpenGL OpenGL OpenAL OpenAL OpenHaptics HW Visual HW Audio HW Haptic HW Tracking Rendering Workflow (canale visivo) 3D Modeling Software Geometria modellazione Materiali Texture esportazione File geometria Textures importazione Ambiente Virtuale Applicazione programmazione VR Framework Rendering 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 Rendering 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 Rendering VR framework: XVR Rendering XVR Rendering XVR stack di sviluppo VR VR System System Development Development XVR XVR Scripting Scripting Language Language Virtual Virtual Machine Machine Scene Scene Graph Graph Core Core Libraries Libraries 3d 3d Graphics Graphics Engine Engine 3d 3d Sound Sound Engine Engine Physics Physics Engine Engine Haptics Haptics Engine Engine Cluster Cluster Renderer Renderer Hardware Hardware Abstraction Abstraction Layer Layer VR VR System System Hardware Hardware Rendering XVR Loops 3 Callback principali OnFrame() OnTimer() ~ 60 Hz 100-1000 Hz Tutte le variabili sono condivise VR_EVENT_1 OnEvent() VR_EVENT_3 VR_EVENT_2 VR_EVENT_4 Rendering XVR features Photo--realistic rendering Photo User interaction management Multi--channel visual stereoscopic display (CAVEs Multi (CAVEs)) Hardware interfaces support Advanced content authoring and management Rendering XVR Cluster Renderer Sc r een Sc r een Sc ree n CRT pro jec t or VRl XVR ib Servers Slaves CRT pro jec t or CRT pr ojec tor Eth er net XVRibMaster VRl Cli ent Rendering XVR Cluster Renderer (CAVE) Rendering 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 Rendering XVR 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 Rendering XVR Workflow Dedicated scripting language Output Binary ByteCode Compiler Interpreter (Virtual Machine) Rendering 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’ dell’XVR engine e, se localmente è assente quella specificata nella pagina HTML, viene scaricata dalla dalla rete la versione giusta – Viene scaricato il bytecode dell’ dell’applicazione – Vengono scaricati i file di dati associati all’ all’applicazione (modelli3d, textures, textures, file multimediali etc.) – Viene eseguito il bytecode sulla XVRXVR-VM Rendering Web embedding: codice HTML <OBJECT ID=“ ID=“AppName“ AppName“ WIDTH = 800 HEIGHT = 800 CLASSID = "CLSID:5D589287"CLSID:5D589287-14961496-42234223-AE64AE64-65FA078B5EAB" TYPE = "application /x-oleobject" "application/ oleobject" align=" align="left" left" border="2" border="2" CODEBASE = "http://client.vrmedia.it /XVRPlayer.cab#Version=1,0,0,900“ “ "http://client.vrmedia.it/XVRPlayer.cab#Version=1,0,0,900 > <PARAM <PARAM <PARAM <PARAM <PARAM NAME=" NAME="ScriptName" ScriptName" VALUE=" VALUE=" AppName.s3d.bin"> NAME=" NAME="EngineVersion" EngineVersion" VALUE="0136"> VALUE="0136"> NAME=" NAME="BackgroundColor" BackgroundColor" VALUE="#000066"> VALUE="#000066"> NAME=" NAME="Params" Params" VALUE "DEPTH=24"> NAME=“ NAME=“UserParams" UserParams" VALUE "… "…"> </OBJECT> Rendering “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 Rendering XVR scripting language (.S3D) • Sintassi simile a JAVA e BASIC • Byte code – virtual machine model • Type less • Object oriented • Costrutti dedicati alla VR Rendering 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 Rendering OnDownload() • E’ la prima funzione ad essere invocata • Ogni volta che uno script XVR viene eseguito, eseguito, viene creata una cartella di lavoro nella temp di sistema • Nella OnDownload i files usati dall’ 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 Rendering OnInit() • Viene chiamata all’ all’inizio dell’ dell’applicazione, subito dopo la OnDownload() OnDownload() • E’ il posto per gestire il caricacaricamento dei datadata-files scaricati e tutte le inizializzazioni. •Può ricevere parametri di ingresso specificati nella pagina HTML con il tag <UserParams> UserParams> Rendering OnFrame() • E’ la funzione dedicata al rendering. Di default viene chiamata ad una frequenza pari al refresh rate (60 Hz). • Il target frameframe-rate può essere cambiato usando SetFramerate(Value); SetFramerate(Value); • E’ la sola funzione ad accedere al frame buffer OpenGL • Il massimo frameframe-rate possibile è 100 Hz Rendering OnTimer() • E’ la funzione normalmente dedicata alla gestione di loop ad alta velocità velocità (fisica, fisica, collision detection, etc.) Di default viene chiamata a 100 Hz. • Il timetime-step può essere cambiato usando: usando: SetTimestep(Value); SetTimestep(Value); • Minimo timetime-step = 1ms • Independente dal framerate (a meno che il sistema non sia sovraccarico) sovraccarico) • Non ha accesso al framebuffer Rendering OnEvent() • Funzione “prevista” per la gestione di eventi (event-driven programming) • Gli eventi possono essere generati da XVR, dal programmatore XVR (GenerateEvent(val, param)) o all’esterno di XVR (eventi Win32) • Un esempio di evento XVR è quello generato quando termina un download eseguito con la funzione FileDownload(); Rendering OnExit() OnExit() Viene eseguita all’uscita dell’ applicazione. L’uscita può avvenire esplicitamente o in seguito alla chiusura della pagina HTML contenitore. Rendering 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 Rendering Funzioni • Il tipo di parametri non viene specificato • Il tipo del valore di ritorno non viene specificato Rendering S3D: Tipi di dato La dichiarazione delle variabili non specifica il tipo. Il tipo viene specificato con l’assegnamento o l’inizializzazione: VAR VAR VAR VAR VAR k = i = i = i; j,k; x = 2; y = 3.1; s = “Don’ Don’t panic !!!” !!!” 4.3; 8; 9.2; VAR v = [0.0, 1.0, 0.0]; Rendering 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, true, { 12, 3 }}; // Array made of different types Var2 = Array(12); // Creates an array of 12 elements Array(12); Var3 = Var1[0]; // Var3 equals 1 Var4 = Var1[2][0]; // Var4 equals 12 Var1[1] = false; VECTOR: è un array di float Var1 Var2 Var3 = = = [ 0.2 , 2 , 3.33 , 4 ]; Vector(16); // creates a 16Vector(16); 16-elements vector Var1[0]; // Var3 equals 0.2 Rendering S3D: Tipi di dato predefiniti OGGETTI Gli oggetti possono essere dichiarati come istanze di: - Classi predefinite - Classi definite dall’utente Obj1 = CVmLight(); CVmLight(); Obj1.SetPosition( 10,10,20); Rendering S3D: Dichiarazioni di classi Class Playlist { var id; id; var name; name; var elements; elements; Add( Add(el); 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,) (i,n,) Playlist::Playlist { id = i; name = n; elements = {}; } // Il costruttore è dichiarato di default function Playlist:: Add(song) (song) Playlist::Add { aadd( aadd(elements,song); elements,song); } Rendering