Ar Quite Ctur As

97
Arquitecturas Orientadas a la Realidad Virtual Realidad Virtual y Animación Miguel Ángel Otaduy Marcos García Lorenzo Curso 2011/2012

description

Miguel Ángel OtaduyMarcos García Lorenzo

Transcript of Ar Quite Ctur As

Page 1: Ar Quite Ctur As

Arquitecturas Orientadas

a la Realidad Virtual Realidad Virtual y Animación

Miguel Ángel Otaduy

Marcos García Lorenzo

Curso 2011/2012

Page 2: Ar Quite Ctur As

2

Una arquitectura simple

CPU

GPU

Page 3: Ar Quite Ctur As

3

Una arquitectura ¿simple?

CPU multi-core (IBM cell, Intel Larrabee…)

GPU programable (NVIDIA Tesla S870)

Page 4: Ar Quite Ctur As

4

Múltiples Periféricos

Cueva (CAVE) para realidad virtual

Mosaico de

pantallas

Sistema gráfico + háptico

Page 5: Ar Quite Ctur As

5

Globalización

Juegos en red

Second Life

Google StreetView

Page 6: Ar Quite Ctur As

6

Bibliografía

“Virtual Reality Technology” Ed. Wiley-Interscience (Second Edition). Grigore C. Burdea & Philippe Coiffet.

(sólo arquitecturas para realidad virtual, obsoleto en cuanto a arquitecturas gráficas)

Page 7: Ar Quite Ctur As

7

Índice

• Arquitectura de la GPU

• Gráficos Multi-Proceso / Multi-Pantalla

• Gráficos Distribuidos

Page 8: Ar Quite Ctur As

8

Índice

• Arquitectura de la GPU

• Gráficos Multi-Proceso / Multi-Pantalla

• Gráficos Distribuidos

Page 9: Ar Quite Ctur As

9

CPU – GPU

GPU: Co-procesador para operaciones gráficas

Page 10: Ar Quite Ctur As

10

CPU – GPU

Pieza clave: memoria dinámica de alta velocidad de acceso* Almacena geometría y texturas * NVIDIA 9600GT: 512MB a 57.6GB/s

Page 11: Ar Quite Ctur As

CPU – GPU

11

Page 12: Ar Quite Ctur As

Pipeline

• Definición: división de un proceso en etapas, asignando a cada una de ellas distintos recursos.

• Pipelines

–CPU

–Gráfico

–Háptico

Page 13: Ar Quite Ctur As

Pipeline gráfico

• Paralelización de las etapas de pipeline

Page 14: Ar Quite Ctur As

Deferred Render

14

Page 15: Ar Quite Ctur As

Deferred Render

15

Geometría Fragmentos

Fragmentos

Page 16: Ar Quite Ctur As

Cuellos de botella

• Óptimo

– Todas las etapas trabajando al 100%

• Siempre hay etapas que trabajan más

• Curva ideal de funcionamiento

– Exponencial

Curva Ideal

0

10

20

30

40

50

60

70

80

90

100

1000

3000

5000

7000

9000

1100

0

1300

0

1500

0

1700

0

1900

0

2100

0

2300

0

Nº poligonos

Fra

mes/S

eg

un

do

Page 17: Ar Quite Ctur As

Cuellos de botella

• Cuello de botella en la etapa de aplicación al 100%

• CPU-limited

0

5

10

15

20

25

30

35

1000

3000

5000

7000

9000

1100

0

1300

0

1500

0

1700

0

1900

0

2100

0

2300

0

Nº poligonos

Fra

mes/S

eg

un

do

Page 18: Ar Quite Ctur As

Cuellos de botella

• Cuello de botella en la etapa gráfica

– Transform-limited

– Si aumenta los frames por segundo al disminuir el número de luces

• Cuello de botella en la etapa de rasterizado

– Fill-limeted

– Si el número de frames disminuye al aumentar la resolución

Page 19: Ar Quite Ctur As

Soluciones

• CPU-Limited – Remplazar la CPU por una más rápida

– Añadir otra CPU

– Modificar el código • Optimizar el código para una determinada CPU

• Uso de mejores compiladores

• Minimizar las multiplicaciones y divisiones

• Utilizar simple precisión frente a doble precisión

– Reducir la complejidad de la escena • Uso de modelos con menor nivel de detalle

Page 20: Ar Quite Ctur As

Soluciones

• Transform-limited – Reducir el número de luces

– Modelo de sombreado • Flat

• Gouraud

• Phong

• Fill-limited – Reducción del tamaño de la ventana

– Reducción de la resolución

Page 21: Ar Quite Ctur As

Soluciones

• Otras soluciones (si la frecuencia de refresco es buena)

–Fill-limited: Aumentar la complejidad de la escena, introducir nuevas luces …

–Transform-limited: Aumentar la resolución

Page 22: Ar Quite Ctur As

22

Evolución de las GPUs

• Pipeline asociada a estándares OpenGl

• OpenGl 1.5: Pipeline fija para máxima eficiencia

• OpenGl 2.1: Pipeline programable para mayor versatilidad (Dispositivos movil3es)

• CUDA (NVIDIA): Arquitectura unificada, procesador paralelo general.

• OpenGl 3.3: Desaparecen las etapas fijas

• OpenGl 4.2: Tesselación!!!

Page 23: Ar Quite Ctur As

23

Pipeline Fija

Page 24: Ar Quite Ctur As

24

Pipeline Fija

• Trabajo con texturas: impostores, environment mapping, sombras, reflexiones, transparencia…

Page 25: Ar Quite Ctur As

25

Pipeline Fija

Entradas: primitivas (vértices, polígonos), texturas, comandos

Procesar sólo vértices o fragmentos (pixels). Operaciones fijas.

Las operaciones a realizar se determinan mediante el estado de OpenGL. El estado se selecciona mediante comandos.

Ensamblado

Page 26: Ar Quite Ctur As

Bloques de la GPU

Page 27: Ar Quite Ctur As

Stream Processing

• SIMD: Single instruction, multiple data stream.

• MIMD: Multiple instruction…

Multiplicar por 5

Multiplicar por 5

Multiplicar por 5

Entrada de datos Distribución

Page 28: Ar Quite Ctur As

28

Pipeline Programable

Page 29: Ar Quite Ctur As

29

Pipeline Programable

Page 30: Ar Quite Ctur As

30

Pipeline Programable

Page 31: Ar Quite Ctur As

31

Pipeline Programable

Permite al usuario programa las etapas de vértices, geométrica y fragmentos.

Memoria de textura general: accesible también en el procesado de vértices, y se puede escribir a ella desde el frame buffer!

Geometry

Page 32: Ar Quite Ctur As

Pipeline Programable

• El pipeline no cambia básicamente, pero se exponen al usuario el procesado de vértices y fragmentos

• Se pueden modificar las funciones, o se pueden diseñar funciones completamente distintas (incluso para aplicaciones no-gráficas!)

Page 33: Ar Quite Ctur As

Vertex Processing

• Funciones que se pueden sustituir/modificar:

–Tranformación de coordenadas y normales

–Normalización, escalado

–Cálculo de iluminación

–Aplicación de color

–Generación y transformación de coordenadas de texturas

Page 34: Ar Quite Ctur As

Vertex Processing

Page 35: Ar Quite Ctur As

Fragment Processing

• Funciones que se pueden sustituir/modificar:

–Acceso y aplicación de texturas

–Suma y mezcla de colores (blending)

–Profundidad

• Funciones que NO se sustituyen:

–Z-test (profundidad)

–Posición del fragmento (scan-conversion)

–…

Page 36: Ar Quite Ctur As

Fragment Processing

Page 37: Ar Quite Ctur As

Limitaciones

No se puede crear geometría (nuevos vértices)

No se puede cambiar la posición de los fragmentos

Page 38: Ar Quite Ctur As

Multi-Pass Rendering

• Para crear efectos complejos, realizar varios pases del pipeline, y en cada pase una operación distinta

• El resultado de un pase se puede escribir directamente a la memoria de textura (render to texture)

• En un nuevo pase, se leen los datos escritos a las texturas

• Programas: Frame Buffer Object (FBO)

Page 39: Ar Quite Ctur As

Ejemplo 1: Motion Blur (Efectos de Movimiento)

4 pases 16 pases

Page 40: Ar Quite Ctur As

Ejemplo 2: Depth of Field (Enfoque de la Cámara)

Sin enfoque Con enfoque

Page 41: Ar Quite Ctur As

Ejemplo 3: Soft Lighting (Luces con Área)

Luz puntual Luz con área

Page 42: Ar Quite Ctur As

42

Lenguajes de Shading

• Cg (NVIDIA): se programa y compila por separado, y se carga desde la aplicación

• GLSL (OpenGL): se programa directamente en la aplicación, y se compila on-the-fly; se puede modificar!

• HLSL (DirectX): similar pero de Microsoft

Page 43: Ar Quite Ctur As

43

Ejemplo Cg

// input vertex

struct VertIn {

float4 pos : POSITION;

float4 color : COLOR0;

};

// output vertex

struct VertOut {

float4 pos : POSITION;

float4 color : COLOR0;

};

// vertex shader main entry

VertOut main(VertIn IN, uniform float4x4 modelViewProj) {

VertOut OUT;

OUT.pos = mul(modelViewProj, IN.pos); // calculate output coords

OUT.color = IN.color; // copy input color to output

OUT.color.z = 1.0f; // blue component of color = 1.0f

return OUT;

}

Page 44: Ar Quite Ctur As

44

Pipeline Unificada

Massive parallel processing: multitud de procesadores ejecutando lo mismo. Desde la CPU, lanzar hebras e indicar cuántas se ejecutan, dónde, y qué memoria utilizan.

Page 45: Ar Quite Ctur As

Bloques de Hebras

(Device) Grid

Constant

Memory

Texture

Memory

Global

Memory

Block (0, 0)

Shared Memory

Local

Memory

Thread (0, 0)

Registers

Local

Memory

Thread (1, 0)

Registers

Block (1, 0)

Shared Memory

Local

Memory

Thread (0, 0)

Registers

Local

Memory

Thread (1, 0)

Registers

Host

• Hebras distribuidas por bloques.

• Comparten memoria por bloque.

• Identificador de bloque y de hebra.

• 3 tipos de memoria, con distintas propiedades y aplicabilidad

Page 46: Ar Quite Ctur As

46

Comunicación CPU-GPU

Creación/destrucción de memoria y transferencia de datos (parecido a C):

• cudaMalloc((void**)&Md.elements, size);

• cudaFree(Md.elements);

• cudaMemcpy(Md.elements, M.elements, size, cudaMemcpyHostToDevice);

• cudaMemcpy(M.elements, Md.elements, size, cudaMemcpyDeviceToHost);

Page 47: Ar Quite Ctur As

47

Código CUDA

• En general, se programa como en C

• Funciones (indicando quién las llama y dónde se ejecutan):

Ejecutada en Llamada por

__device__ float DeviceFunc() GPU GPU

__global__ void KernelFunc() GPU CPU

__host__ float HostFunc() CPU CPU

Page 49: Ar Quite Ctur As

49

Ejemplo CUDA

Page 50: Ar Quite Ctur As

50

OpenGL 3.3 (Compatibility)

Page 51: Ar Quite Ctur As

51

OpenGL 3.3 (Compatibility)

Page 52: Ar Quite Ctur As

52

OpenGL 3.3 (Compatibility)

Page 53: Ar Quite Ctur As

53

OpenGL 3.3 (Compatibility)

Page 54: Ar Quite Ctur As

54

OpenGL 3.3 (Compatibility)

Page 55: Ar Quite Ctur As

55

OpenGL 3.3 (Compatibility)

Page 56: Ar Quite Ctur As

56

OpenGL 4.2

Vertex Shader

Tessellation Control

Tessellator

Tessellation Evaluation

Geometry

Clipping

Rasterization

Fragment Shader

Blending

Frame Buffer

Array Assembly

Page 57: Ar Quite Ctur As

57

Índice

• Arquitectura de la GPU

• Gráficos Multi-Proceso / Multi-Pantalla

• Gráficos Distribuidos

Page 58: Ar Quite Ctur As

58

Ejemplo

Page 59: Ar Quite Ctur As

59

Motor de RV

• Componente clave

• Tareas:

– Lectura de los dispositivos de entrada

– Lectura de la base de datos

–Actualización del estado (base de datos)

–Escritura en los dispositivos de salida

Page 60: Ar Quite Ctur As

60

Motor de RV

Track 1 Haptic 1 …

Control Control Control

Update Data Base

Display 1

Track n Haptic n

Control

Display n

Control Control

Haptic 1

Control Control

Haptic n

Control

Page 61: Ar Quite Ctur As

61

Motor de RV: Tiempo Real

• Carga computacional elevadas: –Gran número de sistemas complejos

– Imposible predecir las acciones de los

usuarios

–Requisitos impuestos por los factores

humanos • Refresco visual 25-30Hz • Refresco táctil 500-1000Hz

Page 62: Ar Quite Ctur As

62

Motor de Gráficos: Tiempo Real

• Carga computacional elevadas: – Latencia: tiempo transcurrido desde que el

usuario efectúa una acción hasta que recibe una respuesta

Latencia total = latencia del sensor + retraso del bus + cálculo del nuevo estado + retraso del bus + latencia del dispositivo de salida – La latencia visual no debe exceder 100ms

Page 63: Ar Quite Ctur As

63

Pipeline Háptico

1. Detección de colisiones 2. Cálculo de fuerzas

– Depende de las propiedades de cada objeto – Suele utilizarse la ley de Hooke

(computacionalmente ligero)

3. Suavizado de fuerza – Como Phong shading, para cálculo de fuerzas

4. Mapeo de la fuerza

• Texturas hápticas – Añaden: fricción, suavidad, temperatura – Utilización de bumps

• Control háptico: Bucle pesado Vs. Bucle ligero

Page 64: Ar Quite Ctur As

64

Sistema Gráfico + Háptico

Page 65: Ar Quite Ctur As

65

Arquitecturas

• Arquitecturas basadas en PC’s

• Arquitecturas basadas en estaciones de trabajo

• Arquitecturas basadas en sistemas distribuidos

Page 66: Ar Quite Ctur As

66

Arquitecturas Basadas en PC’s

• Es la opción más utilizada hoy –Espectacular incremento de prestaciones

• A nivel de micros +3GHz

• A nivel de buses

• Nuevas tarjetas gráficas

–Actualmente son sistemas multiusuario

–Pueden controlar varios dispositivos salida

–Precio

Page 67: Ar Quite Ctur As

67

Bus

PCI (Intel, 1993) AGP (Intel, 1997): 2.1 GB/s en el AGPx8 PCI Express 3.0: 16 GB/s con 32 canales (SLI)

AGP: bus dedicado para gráficos,

eliminó el cuello de botella.

Page 68: Ar Quite Ctur As

68

Arquitecturas Basadas en Workstations

• Después de los PC’s es la opción más utilizada • Mayor capacidad de cómputo

– Gracias a • Arquitecturas superescalables • Arquitecturas multiprocesador • Mayor velocidad en los buses

– Tiempo real

• Orientados a la multitarea – Requerida por la mayoría de las aplicaciones VR – Por lo general usan sistemas operativos UNIX

• Mayor facilidad para soportar varios displays – Pueden soportar varias tarjetas gráficas

Page 69: Ar Quite Ctur As

69

Un poco de historia

Onyx InfiniteReality2

pipes

Page 70: Ar Quite Ctur As

70

Arquitecturas Distribuidas

• Sistemas monousuario

–Control de varios dispositivos

• Sistemas con varios pipelines

– Hápticos

– Render

• Sistemas multiusuario

–Entornos de cooperación

Page 71: Ar Quite Ctur As

71

Sistemas con Varios Pipelines Gráficos

• Sistemas que necesitan varios displays

–Mosaicos de pantallas (tiled displays)

–Cuevas

–Varios proyectores, utilizando una misma pantalla

• Ejemplo: sistemas estéreo pasivo

– ...

Page 72: Ar Quite Ctur As

72

Sistemas con Varios Pipelines Gráficos

a) Tarjetas multipipe • Barato • No son escalables • Comparten el bus, memoria y CPU

b) RACs con varias tarjetas gráficas • Necesitas equipos con más de un bus • Son sistemas caros (workstations) • Uso de PC’s y tarjetas sobre slots PCI.

c) Un mismo pipe para varios dispositivos • Pérdida de resolución

d) Cluster de PC’s, con su propia tarjeta gráfica • Conectados por redes de alta velocidad

– Es el cuello de botella – Topologías y protocolos de red optimizados (WireGl)

Page 73: Ar Quite Ctur As

73

WireGl - Chromium

Page 74: Ar Quite Ctur As

74

WireGl - Chromium

• Protocolo basado en TCP/IP o en protocolos Myrinet

• Se basa en distintos servidores de control cada uno de los cuales supervisa varios servidores de render

• El servidor de control captura los comandos OpenGl y los distribuye entre los distintos servidores de render

• Codifica las instrucciones OpenGl compactando y empaquetando datos y operaciones

• El servidor de control lleva un control del estado de cada nodo de render – Solo envía la información que ha cambiado

Page 75: Ar Quite Ctur As

75

Sincronización de dispositivos heterogeneos

Track 1 Haptic 1 …

Control Control Control

Update Data Base

Display 1

Track n Haptic n

Control

Display n

Control Control

Haptic 1

Control Control

Haptic n

Control

Page 76: Ar Quite Ctur As

76

Sincronización de Dispositivos Heterogéneos

• La sincronización se realiza a nivel software

• Necesidad de desacoplado

– Distintas frecuencias de trabajo

Page 77: Ar Quite Ctur As

77

Sincronización de Pipelines Hápticos

• La sincronización se realiza a nivel de aplicación a) Después de la detección de colisiones

• Más carga en el dispositivo dedicado

• Más carga en la red

b) Después del calculo de fuerzas • Sólo se trasmite el vector de fuerzas

• Menos carga en el dispositivo dedicado

• Tareas del dispositivo dedicado – Suavizado

– Mapeado

– Texturado

Page 78: Ar Quite Ctur As

78

Sincronización de Pipelines Gráficos

• Crítica en mosaicos de displays – Especialmente cuando se usan varios

monitores CRT • Requieren sincronización píxel a píxel

• En el caso de utilizar imágenes estéreo la sincronización es todavía más crítica – Se requiere que todos los dispositivos

muestren a la vez el mismo campo de la imagen (izquierdo o derecho)

• La falta de sincronización produce parpadeo y malestar en el usuario

Page 79: Ar Quite Ctur As

79

Sincronización de Pipelines Gráficos

• La sincronización puede darse a 3 niveles

–Nivel de aplicación

–Nivel de cambio de buffers

–Nivel de vídeo

Application

Geometry

Rasterizer

Buffer Master CRT

Application

Geometry

Rasterizer

Buffer Slave CRT

Synchronization command Synchronization command Synchronization command

Page 80: Ar Quite Ctur As

80

Sincronización a Nivel de Aplicación

• Se comienza a procesar un nuevo frame a la vez en todos los pipeline

• Puede que haya pipelines que terminen antes que otros

–Cuando se llena un framebuffer, se muestra; no se espera

Page 81: Ar Quite Ctur As

81

Sincronización a Nivel de Cambio de Buffers

• Cuando termina un pipeline, espera a que termine el resto

• Cuando todos han terminado se intercambian los buffers (escritura visualizado) –glutSwapBuffer() (GLUT)

Page 82: Ar Quite Ctur As

82

Sincronización a Nivel de Cambio de Buffers

• Problema: cada display comienza a pintar en momentos distintos, dependiendo de su ciclo y de su frecuencia de refresco

– Los monitores CRT empiezan a pintar cuando su disparador retorna de la esquina inferior derecha a la esquina superior izquierda

Page 83: Ar Quite Ctur As

83

Monitores CRT

Page 84: Ar Quite Ctur As

84

Sincronización a Nivel de Vídeo

• Sincronización a nivel Hardware

– Interconexión entre tarjetas de vídeo

• Arquitectura maestro-esclavo

• Asegura que los dispositivos utilicen la misma frecuencia y ciclo de refresco

Page 85: Ar Quite Ctur As

85

Genlock

• Señal externa generada por hardware para sincronizar distintos pipelines

• Conexión de dipositivos en cadena (Daisy-Chain)

• Realiza – La sincronización del intercambio de buffers

• Cuando el maestro termina pregunta al esclavo si éste ha terminado también. Si el esclavo también ha terminado manda la señal de done, si no, no manda nada hasta que termina

– La sincronización a nivel de vídeo

– La sincronización de campos en imágenes estéreo

– La sincronización con otros dispositivos (como trackers) • Reducción de interferencias

Page 86: Ar Quite Ctur As

86

Índice

• Gráficos Multi-Proceso / Multi-Pantalla

• Arquitectura de la GPU

• Gráficos Distribuidos

Page 87: Ar Quite Ctur As

87

Sistemas VR Distribuidos Multiusuario

• Objetivo: generar entornos virtuales distribuidos – Varios usuarios separados físicamente comparten un

mismo entorno virtual

• Todos los usuarios pueden modificar su entorno - Entornos de colaboración

• Sólo un usuario puede manipular un objeto al mismo tiempo

- Entornos cooperativos • Varios usuarios pueden manipular el mismo objeto a la vez

• A través de red LAN ó WAN

Page 88: Ar Quite Ctur As

88

Topología de la Red

• Factores

– Tipo de aplicación

• Entornos de colaboración

• Entornos cooperativos

– Número máximo de usuarios

– Otros

• Latencia máxima admitida

• Escalabilidad

• Tolerancia a fallos

• Tipo de interacción (visual, háptica, audio…)

Page 89: Ar Quite Ctur As

89

Topología de la Red

• La clave: reducción del tráfico – Todos los equipos mantienen una copia de

la escena – Sólo transmiten las modificaciones que

hacen – Utilizan un buffer de transmisión para

mantener la coherencia en caso de fallo de la red

• Tipos de redes – Conexión punto a punto vs. broadcast – Topologías con un único servidor – Topologías con varios servidores – Protocolos peer-to-peer (P2P)

Page 90: Ar Quite Ctur As

90

Conexión Punto a Punto

• Sólo permiten interconectar dos equipos

• Direccionamiento unicast

• Funcionan bien sobre TCP/IP –Protocolo orientado a conexión

Page 91: Ar Quite Ctur As

91

Topologías con un Único Servidor

• Direccionamiento unicast, sobre TCP/IP

• Los usuarios notifican al servidor cuando modifican la escena

• El servidor trasmite los cambios en la escena sólo a los nodos interesados

Page 92: Ar Quite Ctur As

92

Topologías con un Único Servidor

• El número máximo de usuarios lo determinan la capacidad del servidor y la capacidad de la red

• Si la red es rápida, el servidor es un cuello de botella

Page 93: Ar Quite Ctur As

93

Topologías con Varios Servidores

• Direccionamiento unicast, sobre TCP/IP

• Cada nodo lleva asociado un servidor • Los usuarios notifican a su servidor

cuando modifican la escena • El servidor trasmite los cambios en la

escena al resto de servidores y a los nodos asociados interesados

Page 94: Ar Quite Ctur As

94

Topologías con Varios Servidores

• Estructura jerárquica de la red

• Mayor tráfico y mayor latencia, pero el servidor no es un cuello de botella

• El número máximo de usuarios lo determina la capacidad de la red

Page 95: Ar Quite Ctur As

95

Protocolos Peer-to-Peer

• Direccionamiento multicast, sobre UDP/IP

• Los nodos notifican al resto cuando modifican la escena mediante mensajes multicast

• Un nodo procesa los mensajes sólo cuando le interesa

Page 96: Ar Quite Ctur As

96

Protocolos Peer-to-Peer

• Si el sistema se queda sin usuarios se pierde el entorno

• Un nodo al conectarse descarga el entorno de otro nodo mediante TCP-IP

Page 97: Ar Quite Ctur As

Ejemplo: Juego Distribuido

97

Dueling Teapots http://www.scheib.net/school/243/index.html