Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
Software per canale visivo
AMBIENTE VIRTUALE
UTENTE
CANALE
VISIVO
CANALE
ACUSTICO
CANALE
APTICO
CANALE
INERZIALE
Canale visivo: componenti
Graphical
Feedback
SW modules of visual
modelling & rendering
HW devices
of visualization
Software per canale visivo
Moduli logici
Sintesi Campionamento
Comportamenti Proprietà
Rendering
UTENTE
Interazione
AMBIENTE VIRTUALE
Modellazione
Management
Software per canale visivo
Software per la grafica 3D
Obiettivi distinti ma collegati:
modellazione geometrica
animazione
modellazione fisica
rendering
- impostazione delle luci
- definizione dei materiali
- definizione delle inquadrature
- calcolo del risultato
- offline / real-time
generazione di un immagine 2D
corrispondente alla prospettiva
della scena/modello a partire dal
viewpoint
Software per canale visivo
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à
Software per canale visivo
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
Software per canale visivo
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
Software 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 materiale
addirittura 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 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 canale visivo
Software per modellazione e rendering
Software 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/3dsmax
Software 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/maya
Software 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 e
compositing
game engine
Wiki: wiki.blender.org
Forum: www.blenderartist.org
Software 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 Exploration
Software per canale visivo
Renderer
Commerciali:– Maxwell
– Mental Ray
– RenderMan
– Vray
Free: – Indigo, Yafray,
POVray, WinOSI...
Software per canale visivo
Software per rendering real-time
Software 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 hardware
Software per canale visivo
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
Software per canale visivo
Complessità di un sistema VR
CANALE
VISIVO
CANALE
ACUSTICO
CANALE
APTICO
CANALE
INERZIALE
AMBIENTE VIRTUALE
UTENTE
Visual
Rendering(~ 60 Hz)
Audio
Rendering(~ 60 Hz)
Haptic
Rendering(~ 1 KHz)
Motion
Rendering(~ 1 KHz)
Tracking
MoCap(~ 30 Hz)
Interaction
Manager(~ 30 Hz)
Simulazione
(Fisica, …)(~ 200 Hz)
Network
Manager(~ 10 Hz)
Main
Application
Software per canale visivo
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.)
Software per canale visivo
VRFramework
VR frameworks
HW Visual HW Audio HW Haptic HW Tracking
OpenGL OpenAL OpenHaptics
Fisica
Applicazione
Networking
OpenGL OpenAL
3D Graphics
Engine3D Audio Engine 3D Haptics Engine
Software per canale visivo
Workflow (canale visivo)
3D Modeling
Software
Geometria
Materiali
Texture
modellazione
File
geometria
Textures
esportazione
importa
zio
ne
VR
Frameworkprogrammazione
Applicazione
Ambiente
Virtuale
Software per canale visivo
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
Software 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 script
basato su Python
http://www.worldviz.com
Software per canale visivo
VR framework: XVR
Software per canale visivo
XVR
Software per canale visivo
Virtual Machine
Hardware Abstraction Layer
Scene Graph
Core Libraries
XVR stack di sviluppo
3d Graphics
Engine3d Sound
Engine
Physics
EngineHaptics
Engine
VR System Hardware
XVR Scripting Language
VR System
Development
Cluster Renderer
Software per canale visivo
~ 60 Hz 100-1000 Hz
3 Callback principali
OnFrame() OnTimer()
Tutte le variabili sono condivise
OnEvent()
VR_EVENT_1
VR_EVENT_3
VR_EVENT_2
VR_EVENT_4
XVR Loops
Software per canale visivo
User interaction
management
XVR features
Multi-channel visual stereoscopic display (CAVEs)
Photo-realistic rendering
Hardware interfaces supportAdvanced content authoring and management
Software per canale visivo
• Possibilità di usare più PC “slave” per renderizzareuna singola scena (o più viste di una singola scena)
XVR Cluster Renderer
Software per canale visivo
Dove avviene la sincronizzazione ?
Script Language
Scene Graph
OpenGL
commands
Frame
buffer image
User Input
Scene Graph
OpenGL
commands
Frame
buffer image
Sort First
Sort Early
Sort Late
Sort Last
User Input
C++ Language
OpenGL
Raster images
Software per canale visivo
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
Software per canale visivo
XVR Cluster Renderer
Software per canale visivo
XVR Cluster Renderer (CAVE)
Software per canale visivo
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
Software per canale visivo
La XVR-VM contiene:
- Un set di istruzioni bytecode
- Un set di registri
- Uno stack
- Un area per i metodi
Il comportamento delle applicazio-
ni viene specificato tramite un lin-
guaggio di scripting (S3D)
Lo script S3D viene compilato in un
bytecode che viene processato ed
eseguito dalla XVR-VM
XVR Virtual machine
Virtual Machine
IP
bytecode
OP1 OP2 OP3
BS
STACK
FunctionClass Lib
Class declConst Function
GLO
BAL
VAR
SP
Software per canale visivo
XVR Workflow
CompilerInterpreter
(Virtual Machine)
Dedicated scripting
languageOutput
Binary
ByteCode
Software per canale visivo
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
Software per canale visivo
<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>
Web embedding: codice HTML
Software per canale visivo
“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
0142Engine Family
(sempre la stessa)Compiler Generation Number
Progressivo all’interno
della famiglia
Software per canale visivo
XVR scripting language (.S3D)
• Sintassi simile a JAVA e BASIC
• Byte code – virtual machine
model
• Type less
• Object oriented
• Costrutti dedicati alla VR
Software per canale visivo
VISUAL ACOUSTIC HAPTIC INERTIAL
VIRTUAL ENVIRONMENT
USER
Visual
Rendering(~ 60 Hz)
Audio
Rendering(~ 60 Hz)
Haptic
Rendering(~ 1 KHz)
Motion
Rendering(~ 1 KHz)
Tracking
MoCap(~ 30 Hz)
Interaction
Manager(~ 30 Hz)
Physics(> 100 Hz)Network
Manager(~ 10 Hz)
Main
Application
Loop negli ambienti virtuali
Software per canale visivo
~ 60 Hz 100-1000 Hz
3 Main Call-backs (+ 3 special ones)
OnFrame() OnTimer()
Tutte le variabili sono condivise
OnEvent()
VR_EVENT_1
VR_EVENT_3
VR_EVENT_2
VR_EVENT_4
L’approccio XVR
Software per canale visivo
Ogni script S3D è basato su 6 funzioni predefinite:– OnDownload()
– OnInit()
– OnFrame()
– OnTimer()
– OnEvent()
– OnExit()
Queste funzioni vengono automaticamente invocate al verificarsi di determinati eventi
Struttura di uno script S3D
Software per canale visivo
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
Software per canale visivo
OnInit()
• Viene chiamata all’inizio
dell’applicazione, subito dopo la
OnDownload()
• E’ il posto per gestire il carica-
mento dei data-files scaricati e
tutte le inizializzazioni.
•Può ricevere parametri di
ingresso specificati nella pagina
HTML con il tag <UserParams>
Software per canale visivo
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
Software per canale visivo
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
Software per canale visivo
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() ]
Software per canale visivo
OnExit()
Viene eseguita all’uscita dell’ applicazione.
L’uscita può avvenire esplicitamente o in seguito alla chiusura della pagina HTML contenitore.
OnExit()
Software per canale visivo
IF..ELSE
WHILE
DO..WHILE
FOR
BREAK
CONTINUE
S3D: Statements e preprocessore
SWITCH..CASE
SETSCENE_FOV Field of view
SCENE_NEAR Near clipping plane distance
SCENE_FAR Far clipping plane distance
AUDIO_MODE 3d Audio Setup mode
#DEFINE
#IFDEF
#ENDIF
#ELSE
#INCLUDE
#PRAGMA
Software per canale visivo
Funzioni
• Il tipo di parametri non viene specificato
• Il tipo del valore di ritorno non viene specificato
Software per canale visivo
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
Software per canale visivo
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
Software per canale visivo
OGGETTI
Gli oggetti possono essere dichiarati come istanze di:
- Classi predefinite- Classi definite dall’utente
Obj1 = CVmLight();
Obj1.SetPosition( 10,10,20);
S3D: Tipi di dato predefiniti
Software per canale visivo
Class Playlist
{
var id; // Identificativo unico della playlist
var name; // Nome della playlist
var elements; // Array di id che compongono la playlist
Add(el); // Aggiunge un elemento
Start(); // Avvia la playlist
Stop(); // Stop della playlist
};
function Playlist::Playlist(i,n,) // Il costruttore è dichiarato di default
{
id = i;
name = n;
elements = {};
}
function Playlist::Add(song)
{
aadd(elements,song);
}
S3D: Dichiarazioni di classi
Software per canale visivo
S3D: Ereditarietà multipla
Class Vehicle: Engine, Bodywork
{
var m_Desc;
var m_NumWeels;
var m_MaxVel;
Info();
};
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 );
}
Multiple inheritance, comma separated
Calling a base class method
Software per canale visivo
Importare funzioni esterne (1/2)
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
XVR consente di implementare funzionalità non disponibili
nell’engine embedded attraverso dll esterne
Software per canale visivo
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);
Importare funzioni esterne (2/2)
Software per canale visivo
XVR Tools
Software per canale visivo
XVR Studio IDE
Software per canale visivo
XVR built-in profiler
Software per canale visivo
XVR AAM viewer
Software per canale visivo
XVR Texture Converter
XVR Add-ons
Software per canale visivo
XVR State Machine Visual Editor
XVR Add-ons
Software per canale visivo
XVR Shader Editor
XVR Add-ons
Software per canale visivo
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
Software per canale visivo
XVR Debugger
• Breakpoint
• Single step
trace
Software per canale visivo
XVR Debugger
70
• Workspace
management
• Variables watch
Software per canale visivo
71
• Added the directive “#import” to support importing XVR
libraries consisting of precompiled .bin files
Compile ExternLib
.s3d.bin
Use
XVR: Script precompilati