Complessità di un sistema VR

Transcript

Complessità di un sistema VR
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
VR Engine Software
•VirTools (Dassault Systems)
•
Quest 3D (Act – 3D)
Realtà
il futuro
Realt•à Virtuale: il presente, il passato,Interazione
XVR: Un IDE per applicazioni VR
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
XVR features
PhotoPhoto-realistic rendering
User interaction
management
MultiMulti-channel visual stereoscopic display (CAVEs
(CAVEs))
Hardware interfaces support
Advanced content authoring and management
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
XVR Cluster Renderer
Sc reen
Sc r een
Sc reen
CRT projec t or
VRlib
XVR
Servers
Slaves
CRT pr ojec t or
CRT pr ojec t or
Et he rnet
XVR Master
VRlib
Client
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
XVR Cluster Renderer (CAVE)
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
XVR Workflow
Dedicated scripting
language
Output
Binary
ByteCode
Compiler
Interpreter
(Virtual Machine)
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
<PARAM
<PARAM
<PARAM
<PARAM
NAME="ScriptName" VALUE=" AppName.s3d.bin">
NAME="EngineVersion" VALUE="0136">
NAME="BackgroundColor" VALUE="#000066">
NAME="Params" VALUE "DEPTH=24">
NAME=“UserParams" VALUE "…">
</OBJECT>
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
“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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
XVR scripting language (.S3D)
• Sintassi simile a JAVA e BASIC
• Byte code – virtual machine
model
• Type less
• Object oriented
• Costrutti dedicati alla VR
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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>
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
OnEvent()
• Funzione “prevista” per la gestione di eventi (event-driven
programming)
• Gli eventi possono essere generati da XVR
(GenerateEvent(val, param)) o all’esterno di XVR
(eventi Win32)
• Al momento l’unico evento gestito è quello generato
quando termina un download eseguito con la funzione
FileDownload();
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
OnExit()
OnExit()
Viene eseguita all’uscita dell’
applicazione.
L’uscita può avvenire
esplicitamente o in seguito alla
chiusura della pagina HTML
contenitore.
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
Funzioni
• Il tipo di parametri non viene specificato
• Il tipo del valore di ritorno non viene specificato
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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’t panic !!!”
4.3;
8;
9.2;
VAR v = [0.0, 1.0, 0.0];
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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);
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione
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);
}
Realtà
il futuro
Realtà Virtuale: il presente, il passato,Interazione