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