Actualizado el 4 de Marzo del 2020 (Publicado el 14 de Enero del 2017)
1.076 visualizaciones desde el 14 de Enero del 2017
3,6 MB
25 paginas
Creado hace 19a (16/11/2005)
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
Índice de Contenidos :.
Introducción :: 1
Tipos de Datos Fundamentales :: 1.1
El Mapeado de Texturas :: 1.2
El Pileline 3D Genérico :: 2
Clipping 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 :: 3
Jerarquí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
Sesión 4 :: Transp. 2
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
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.
Geometría
Original
i
i
n
ó
c
a
n
m
r
e
t
e
D
l
i
e
b
s
V
i
e
c
i
i
f
r
e
p
u
S
i
i
n
ó
c
a
n
m
r
e
t
e
D
i
n
ó
c
u
o
s
e
R
l
i
n
ó
c
a
m
r
o
f
s
n
a
r
T
i
n
ó
c
a
n
m
u
i
l
I
i
n
ó
c
a
z
i
r
e
t
s
a
R
Represen-
tación en
Pantalla
● Después de un conjunto de pasos se representa la geometría
que "sobrevive".
Sesión 4 :: Transp. 3
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
Tipos de Datos Fundamentales :.
● Vértices: Representados
mediante sus coordenadas
X,Y,Z (habitualmente float).
● Caras: Triángulos que
representan el modelo 3D.
Triángulo 1, Vértice 1
Triángulo 1, Vértice 2
Triángulo 1, Vértice 3
Triángulo 2, Vértice 1
Triángulo 2, Vértice 2
Triángulo 2, Vértice 3
...
Triángulo N-1, Vértice 1
Triángulo N-1, Vértice 2
Triángulo N-1, Vértice 3
Gestión Clásica
Gestión Indexada
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 Indexada
8(vértices) x 3(coord) x 4(Bytes/float) = 96 bytes
36(short int) x 2(Bytes/short) = 72 bytes
168 bytes Total
Sesión 4 :: Transp. 4
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
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)/TamTipoComp
Vdescompr = 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 metros
X = 0,0086*Vcomprimido
Si X=1.82...
Vcomprimido = 255 * (1.82/2.20) = 211
X = 0,0086*211 = 1,8146
Sesión 4 :: Transp. 5
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
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)
(u2, v2)
(u3, v3)
(u1, v1)
Imagen
Sesión 4 :: Transp. 6
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
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.
Sesión 4 :: Transp. 7
Ver OREj/OREj.pdf
Documentación del formato
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
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.
.
Geometría
Original
.
l
m
r
e
t
e
D
f
r
e
p
u
S
e
b
s
V
i
i
.
m
r
e
t
e
D
l
n
c
u
o
s
e
R
.
f
s
n
a
r
T
.
m
u
l
I
r
e
t
s
a
R
Represen-
tación en
Pantalla
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
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
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
Test de Oclusión :.
● Dependiendo del punto de vista, puede ocurrir que un
objeto no permita que otro, situado detrás, se vea.
Objeto
Oculto
● 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...)
Sesión 4 :: Transp. 11
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
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
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
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
Un Ejemplo en Primera Persona :.
Paso01.blend
Ver objetos/habitacion.blend
● Vamos a crear el prototipo de un juego en primera persona.
Importamos el escenario del fichero habitacion.blend.
● 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.
Escenario de ejemplo (4ª Sesión)
Sesión 4 :: Transp. 15
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
Situando al Jugador :.
Paso02.blend
● 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).
Sesión 4 :: Transp. 16
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
Jerarquías para moverse :.
● Añadimos (Append) a la escena el objeto "arma", que se
encuentra en el fichero "armas.blend".
Paso03.blend
Ver objetos/armas.blend
Escopeta y Bala...
● Con ayuda de las
tres vistas, situamos
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.
Sesión 4 :: Transp. 17
[Contenido] 1. Introducción :: 2. Pipeline 3D :: 3. Ejem. GameEngine
Moviéndonos por el entorno... :.
Paso04.blend
● Al objeto Jugador, le añadimos los controles para poder
ava
Comentarios de: sesión 4 - Gráficos 3D - Arquitectura General (0)
No hay comentarios