Índice de contenidos - esi.uclm.es · blender no facilita demasiado ... personaje vuela! ......

25

Upload: lamphuc

Post on 05-Oct-2018

220 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)
Page 2: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Índice de Contenidos :.[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Sesión 4 :: Transp. 2 

Introducción :: 1Tipos de Datos Fundamentales :: 1.1

El Mapeado de Texturas :: 1.2

El Pileline 3D Genérico :: 2Clipping y Culling :: 2.1

Detección de Oclusiones :: 2.2 Análisis de Nivel de Detalle :: 2.3

Transformación e Iluminación :: 2.4

GameEngine: Un tipo FPS :: 3Jerarquías y Animación Básica :: 3.1

Gestión Dinámica de Objetos :: 3.2

«No es lo mismo tener la mente abierta que un agujero en la cabeza». Proverbio

Page 3: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Represen-tación enPantalla

Introducción :.

● Podemos ver a la tarea de representación 3D como una secuencia de operaciones realizadas sobre una geometría de entrada → Pipeline de varios Segmentos.

● Después de un conjunto de pasos se representa la geometría que "sobrevive".

GeometríaOriginal

Det

erm

inac

ión

Su

per

fici

eV

isib

le

Det

erm

inac

ión

Res

olu

ció

n

Tra

nsf

orm

ació

nIl

um

inac

ión

Ras

teri

zaci

ón

Sesión 4 :: Transp. 3 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 4: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Tipos de Datos Fundamentales :.

● Vértices: Representados mediante sus coordenadas X,Y,Z (habitualmente float).

● Caras: Triángulos que representan el modelo 3D.

Gestión Indexada

Gestión Clásica

Triángulo 1, Vértice 1Triángulo 1, Vértice 2Triángulo 1, Vértice 3Triángulo 2, Vértice 1Triángulo 2, Vértice 2Triángulo 2, Vértice 3...Triángulo N-1, Vértice 1Triángulo N-1, Vértice 2Triángulo N-1, Vértice 3

Almacenamiento de un cubo (6 caras)Gestión Clásica

12(trig.) x 3(vért) x 3(coord) x 4(B/float) = 432 bytes

Gestión Indexada8(vértices) x 3(coord) x 4(Bytes/float) = 96 bytes

36(short int) x 2(Bytes/short) = 72 bytes168 bytes Total

Sesión 4 :: Transp. 4 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 5: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Cuando no Importa Perder Calidad... :.

● Cuantización (Quantization): Mantenemos los datos comprimidos en memoria y descomprimimos cuando los usemos. Es una técnica con pérdida de información.

● Almacenamiento de valores con menor precisión.

● Tratamos de hacer conversiones «salvajes». De float a unsigned short (16 bits típicamente) o unsigned bytes (8 bits).

Vcomprimido = TamTipoComp * ((Voriginal-Min)/(Max-Min))Precisión = (Max-Min)/TamTipoCompVdescompr = Precisión*Vcomprimido + Min

Ejemplo: Altura de un individuo codificación en 1 byte.Vcomprimido = 255 * ((X-0)/(2.20-0))Precisión = 2.20/255 = 0,0086 metrosX = 0,0086*Vcomprimido

Si X=1.82...Vcomprimido = 255 * (1.82/2.20) = 211X = 0,0086*211 = 1,8146

Sesión 4 :: Transp. 5 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 6: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Mapeado de Texturas :.● Las texturas se asignan a nivel de caras, por lo que cada triángulo tiene un mapa de texturas individual que lo cubre totalmente. ● Un vértice puede tener asociadas varias texturas. ● La representación final del modelo puede resultar de la aplicación de varios niveles de texturas. ● Asignación de coordenadas 2D (UV) a cada vértice del triángulo.

(u1, v1)

(u2, v2)(u3, v3) (u1, v1)

(u2, v2)

(u3, v3)

Imagen

Sesión 4 :: Transp. 6 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 7: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Mapeado de Texturas :.

● Debido a cuestiones de optimización, las texturas suelen ser cuadradas y con tamaño 2n

● La creación de este tipo de texturas no es sencilla.

● Blender no facilita demasiado este aspecto.Ver OREj/OREj.pdf

Documentación del formato

Sesión 4 :: Transp. 7 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 8: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Una Pipeline 3D Genérica :.

● Hemos visto cómo representar los tipos de datos... ¿Cómo los renderizamos de forma eficiente?... Podemos ver la Pipeline formada por 4 etapas.

Represen-tación enPantalla

GeometríaOriginal

Det

erm

.S

up

erf

Vis

ible

Det

erm

.R

eso

lucn

.

Tra

nsf

.Il

um

.

Ras

ter

Recorte (Clipping)Eliminación por Orientación (Culling)Test de Oclusión

● La combinación de estos procesos consiguen una alta tasa de frames por segundo en gráficos para tiempo real.

Sesión 4 :: Transp. 8 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 9: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Recorte: Clipping :.

● Eliminación de la geometría no usada dentro de un volumen de recorte. Debe realizarse tan pronto como sea posible.● Según el Engine y el tipo de juego podrá ser más o menos efectivo (en general, bueno con niveles grandes, RPGs, FPSs, RTSs...)● Recorte de Triángulos: Analizamos triángulos individualmente. Las aceleradoras modernas lo incorporan. No obstante, no da buen rendimiento...● Recorte de Objetos: Disponemos de una representación homogénea del volumen del objeto.

● Esferas como Límite: Muy rápido, pero problemas...● Cajas como Límites (Bounding Boxes): Más costoso

computacionalmente...

Sesión 4 :: Transp. 9 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 10: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Eliminación por Orientación: Culling :.

● Elimina la geometría dependiendo de la orientación. Parte de la base en que los objetos están bien construidos (B-rep correctas).

B-rep No B-rep No B-rep

● Suele implementarse menos que el clipping debido a:● El beneficio es del 50%, mientras que clipping elimina

hasta el 80% de la geometría.● Es complicado implementarlo.

Sesión 4 :: Transp. 10 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 11: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Test de Oclusión :.

● Dependiendo del punto de vista, puede ocurrir que un objeto no permita que otro, situado detrás, se vea.

● Algunos juegos se diseñan aprovechando esta técnica de optimización para que, en todo momento, haya el mismo nº de polígonos aproximadamente... Como en los FPS.● Implementado en Hw en tarjetas modernas (GeForce3...)

ObjetoOculto

Sesión 4 :: Transp. 11 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 12: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Determinación de la Resolución :.

● Clipping, Culling y Test de Oclusión determinan qué vamos a ver, mientras que la Determinación de la Resolución decide cómo lo vamos a ver. ● Los objetos más cercanos y grandes aparecerán con mayor número de polígonos que los lejanos y pequeños...● Políticas Discretas: Disponemos de una tabla con los modelos en varias resoluciones.

● Políticas Contínuas: Se basan en eliminar aristas que no aportan mucha información. La técnica se denomina Edge Collapse.

Sesión 4 :: Transp. 12 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 13: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Transformación e Iluminación :.

● En la etapa de Transformación se realizan las transformaciones geométricas en el flujo de datos de entrada. ● Típicamente rotación, escalado y traslación realizadas mediante composición de matrices 4x4. Finalmente, las coordenadas 3D se convierten en 2D mediante matrices de proyección.● En la etapa de iluminación aplicamos las características de las superficies y modos de sombreado con las luces que haya en la escena. ● Técnicas orientadas a vértices; no se pueden implementar en Hw operaciones de RayTracing o Radiosidad.

Sesión 4 :: Transp. 13 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 14: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Rasterización :.

● Proceso en el que la geometría se convierte en un conjunto de píxeles, que se envían al monitor. Todo en Hw.● Importante la forma de enviar las primitivas a la GPU... ¡Agrupar todo lo que se pueda!

glbegin(GL_TRIANGLES);glColor3f(1,1,1);glVertex3f(1,0,0);glVertex3f(0,-1,0);glVertex3f(-1,0,0);glEnd();

● OpenGL: Uso de vertex arrays.● DirectX: Vertex buffers.Paquetes de datos que sólo requieren una llamada para enviar toda la estructura al Hw. Acelera mucho los cálculos.

● Como el cuello de botella es el Bus, ¿por qué no enviar la geometría sólo una vez y no en cada frame? → Técnicas del lado del Servidor (Server-side techniques).

Sesión 4 :: Transp. 14 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 15: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Un Ejemplo en Primera Persona :.

● Vamos a crear el prototipo de un juego en primera persona. Importamos el escenario del fichero habitacion.blend.

Ver objetos/habitacion.blendEscenario de ejemplo (4ª Sesión)

● Borramos el cubo por defecto de Blender y añadimos a la escena los objetos "Bases", "Habitacion Global", "Paneles" y "Plataformas".

● Situamos la cámara en el interior del escenario, tal como se muestra en la figura de la derecha.

Paso01.blend

Sesión 4 :: Transp. 15 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 16: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Situando al Jugador :.

● Añadimos un objeto Empty a la escena [Barra Espaciadora] Add/Empty, justo debajo de la cámara, que servirá como jugador (Le cambiamos el nombre a "Jugador"). En el menú de Game Engine lo definimos como Actor, con propiedades dinámicas Dynamic, para que se tenga en cuenta sus colisiones.● El tamaño de la Bounding Sphere (en Size) lo ponemos aproximadamente en 1 (Volumen de cálculo de colisiones físicas).

Paso02.blend

Sesión 4 :: Transp. 16 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 17: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Jerarquías para moverse :.

● Añadimos (Append) a la escena el objeto "arma", que se encuentra en el fichero "armas.blend".

Ver objetos/armas.blendEscopeta y Bala...

la pistola tal y como se muestra en la figura.

● Definimos la siguiente jerarquía:● arma es un objeto hijo de jugador.● Camara es un objeto hijo de arma.

● Para hacer un objeto A hijo de un objeto B, primero seleccionamos A (siempre el hijo primero) y manteniendo pulsada [Mayúsculas], seleccionamos B. Hecho esto, pulsamos P y pinchamos en Make Parent.

● Con ayuda de las tres vistas, situamos

Paso03.blend

Sesión 4 :: Transp. 17 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 18: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Moviéndonos por el entorno... :.

● Al objeto Jugador, le añadimos los controles para poder avanzar, retroceder, girar y mirar arriba y abajo. Para estos 4 últimos, utilizaremos dRot de Motion en el eje correspondiente.

Paso04.blend

Sesión 4 :: Transp. 18 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 19: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

¡Con los Pies en la Tierra! :.

● ¿Qué ocurre si miramos arriba y a la vez avanzamos? ¡El personaje Vuela! Lo arreglamos poniendo un sensor de tipo Touch, forzando a que el Jugador toque un objeto de material "floor".

Paso05.blend

● Como el sensor se añade al final, podemos situarlo entre el sensor avanzar y el sensor retroceder, plegando el diálogo y con BIR/Move Up.

● Para que pueda subir rampas, habilitaremos la fricción

Anisotropic (eje Y menor fricción).

Sesión 4 :: Transp. 19 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 20: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Andando de Verdad :.

● Vamos a añadir un movimiento de andado realista. Para ello, nos situamos en el frame 1 y añadimos una clave de movimiento al objeto arma. Lo desplazamos arriba y añadimos otra clave (de localización) en el frame 7. Lo movemos abajo a la derecha y añadimos otra clave (fr. 15).

● Insertar clave: I (Insert Key) ● Movernos por los frames: <- -> (Cursores)● Barra que indica el número de frame:

Paso06.blend

Sesión 4 :: Transp. 20 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 21: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Andando de Verdad (II) :.

● Mientras el Jugador avance o retroceda, lanzaremos un mensaje broadcast (sin destinatario) de "andando". El objeto arma lo recibirá y mostrará la animación (en modo ping pong) simulando el movimiento al andar.

Paso07.blend

Sesión 4 :: Transp. 21 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 22: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Preparen Armas, Apunten... :.● Vamos a hacer que la pistola dispare de verdad. Para ello, importaremos el objeto "disparo" de armas.blend.

Paso08.blend

Ver objetos/armas.blendEscopeta y Bala...

● Movemos el objeto recién importado a una capa oculta, por ejemplo la décima. Tecla M ● En el objeto Arma, definimos un actuador para [Barra Espaciadora], que Añada un objeto con linV (velocidad después de la creación) en el eje Y (local a la pistola). Coordenadas locales si activamos el botón L.

Time es el tiempo de vida del objeto (en frames).

Sesión 4 :: Transp. 22 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 23: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

Más detalles... :.

● Insertamos un nuevo sonido al proyecto (misil.wav), y lo reproduciremos siempre que se cree una bala. ● Añadimos a todos los elementos del escenario una propiedad "escenario".● Localizamos la colisión con el escenario usando un sensor de tipo Ray.

Paso09.blend

sonidos/misil.wav

Añadir la propiedad a "Bases", "Habitacion Global", "Paneles" y "Plataformas"

Cuando el objeto choque con el escenario, además de desaparecer, reproducirá otro sonido.

Sesión 4 :: Transp. 23 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 24: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

¿Añadimos a los malos? :.

● Insertamos las mallas "enemigo" y "enemigo_muerto" de objetos/enemigos.blend. Movemos enemigo_muerto a una capa oculta y duplicamos por la escena el objeto enemigo ([Mayúsculas][D]). Antes de duplicar debemos definir el comportamiento:

Paso10.blend

● Para que el sensor de Colisión se active, tiene que ser tocado por un objeto que tenga la propiedad bala. Ese objeto será el disparo al que añadiremos la siguiente propiedad:

En estos casos, el tipo de las propiedades es irrelevante; ya que se usan sólo por su existencia.

Sesión 4 :: Transp. 24 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine

Page 25: Índice de Contenidos - esi.uclm.es · Blender no facilita demasiado ... personaje Vuela! ... (velocidad después de la creación) en el eje Y (local a la pistola)

El punto y final; efectos de humo :.

● Añadimos un plano perpendicular a la cámara en su punto de partida. Le aplicamos una textura (texturas/humo.tga), tal y como se realizó con el suelo de la sesión 2 del curso. ● Nos vamos a los botones de pintado y con la cara en modo de selección de caras [F], activamos las siguientes opciones:

Paso11.blend

● Ponemos de nombre "humo" al plano y lo movemos a una capa oculta. Añadimos al objeto "disparo" los bloques lógicos:

Sesión 4 :: Transp. 25 

[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine