Title: Arquitectura de Motores Grficos para Mundos en 3D
1Arquitectura de Motores Gráficos para Mundos en
3D
Arquitectura de Motores Gráficos para Mundos en
3D
- Por Sergio J. de los Santos
2Con que nos encontramos...
Con que nos encontramos...
- Una gran cantidad de Entidades(Objetos) los
cuales pueden interactuar entre si. - Un Escenario compuesto por decenas de miles(o aun
mas) de Polígonos, el cual será el Mundo
contenedor de todas las interacciones entre las
Entidades. - Será necesario también saber cuando algo ve a
otra cosa. De hecho no tiene sentido dibujar
cosas que no se ven. Además puede servir para IA
y entre otras cosas.
3Algunas Herramientas...
Algunas Herramientas...
- Frustum Culling
- Quadtree/Octree
- BSPTree - KDTree
- PVS(Conjuntos Potencialmente Visibles)
- Portales y Sectores
4Frustum Culling
Frustum Culling
- El View Frustum es la caja contenedora del
espacio visible por la cámara - Esta formada por 6 Planos, y suele tener forma de
pirámide Cortada, en el caso de vistas con
Perspectiva y cubica en caso de proyección
ortogonal. - La idea de Frustum Culling es testear Objetos
simples (Esferas, AABB, OBB, etc.) con el
ViewFrustum a fin de saber si entran en este, lo
cual indica en principio que son visibles.
5Frustum Culling
Frustum Culling
A,B,C
A
X
Y
Objetos contenidos en Esferas
B
C
X,Y,Z
Objetos contenidos en AABBs
Z
Debo Renderizar CBXY No Debo Renderizar AZ
Cámara
ViewFrustum
6Quadtree/Octree
Quadtree/Octree
Características generales
- Es un Arbol el cual Posee por cada Nodo 4 u 8
hijos,dependiendo si es Quadtree u Octree
Respectivamente. Cada Hijo es una Subdivisión
Espacial del Padre. - Cada Nodo es una Caja y cada hijo una Subdivisión
de esta de manera equitativa. - Puede Tener una Profundidad Definida o ser
adaptativo a la geometría. - Muy Util para Entornos Abiertos.
7Armado de QuadTree
Armado de QuadTree
Generación de la raíz y sus hijos.
Generación del siguiente nivel.
8Posibilidades de QuadTree
Posibilidades de QuadTree
Profundidad Adaptativa
Profundidad Uniforme
9Quadtree/Octree
Quadtree/Octree
Características de Profundidad Adaptativa
- Menor Cantidad de nodos, menos uso de memoria.
- Cálculos de Culling mas rápidos en subarboles
menos profundos. - Las Hojas mas grandes tienen gran posibilidad de
contener mas entidades/Objeto.
Características de Profundidad Uniforme
- Mayor cantidad de Nodos, por lo tanto mas uso de
memoria. - Cálculos de Culling mas lentos, en comparación
con el de Prof. Adap. - No existen nodos con mayor probabilidad de
contener mas Entidades.
10BSP Tree
BSP Tree
Primera Impresión
- Fue descripto por primera vez en 1969 por
Shumaker, pero recién a principios de los 90 se
empezó a usar en Vídeo Juegos., su fin inicial
era de HSR(Eliminación de Superficies Ocultas) - Los motores gráficos mas renombrados los usan
Quake(Todos), Unreal, etc. - Consiste en un árbol binario que subdivide el
Espacio en subespacios mas pequeños. - Cada nodo posee un HiperPlano con el cual se
clasificara la geometría del espacio asignado al
nodo
11BSP Tree
BSP Tree
X
D
X
A
B
C
B
Y
E
X
A
X
B
C
B
Y
E
D
12BSP Tree
BSP Tree
Primeras Características a tener en cuenta
- Los Arboles BSP construidos a partir de planos
divisores paralelos a los ejes se llaman KDTree. - Los Arboles BSP clásicos, suelen crearse
utilizando los planos que contienen a las propias
primitivas a clasificar.
13BSP Tree
BSP Tree
H
F
Tomemos las primitivas A..L Cada una representa
una Pared de nuestro Mundo 3D. La idea de
construcción de un árbol BSP es la
siguiente. Partimos de una lista de primitivas,
tomamos una de ellas, de acuerdo a un criterio
que elijamos, extraemos de ella el hiperplano que
la contiene y clasificamos al resto en función de
este plano. Luego tendremos dos listas(en
principio), una con las primitivas que quedaron
por delante y otra con las que quedaron por
detrás del plano clasificador. Entonces
repetiremos el proceso de forma recursiva hasta
que no queden primitivas por clasificar.
G
E
J
L
D
A
B
I
C
K
14BSP Tree
BSP Tree
H
F
- Notese que pueden darse 4 situaciones al
clasificar una Primitiva - Que quede totalmente delante del Plano
- Que quede totalmente detrás del plano
- Que sea coplanar al plano
- Que quede Partida por el Plano
- En los 1ros dos casos sabemos que hacer, en el
caso 3(Coplanar) se agrega a la lista de
primitivas del Nodo que se esta creando. En el
caso de que la primitiva quede Partida, se debe
reemplazar esta por otras 2 primitivas que
resulten de partir a la primera según indica el
corte del plano clasificador, luego cada parte
se agregara a la lista correspondiente.
G
E
J
L
D
A
B
I
C
K
15BSP Tree
BSP Tree
Aplicando el Algoritmo, elegimos como Primitiva
de clasificación a A, extraemos su Plano y
clasificamos al Resto. Notese que D y L son
Partidos por el Plano de A, por lo tanto se
generaran nuevas primitivas en base a D(DF y DB)
y a L(LF y LB).
H
F
A
Nodos traseros
G
E
Nodos frontales
J
B
C
E
F
G
H
I
K
D
L
J
LF
LB
DF
DB
LF
DF
A
B
I
LB
DB
C
K
16BSP Tree
BSP Tree
Ahora tomaremos el Nodo Frontal(Hijo de A) y
repetiremos eligiendo una primitiva, en nuestro
caso E, repetiremos recursivamente sobre cada
hijo, hasta que cada primitiva quede en un Nodo
clasificador. Notese que cuando esto suceda
detrás de cada hoja habrá espacio
Sólido(Estaríamos dentro de la pared) y delante
seria habitable, entiendase que estamos adentro
de la habitación
H
F
A
Nodos traseros
Nodos frontales
G
E
E
J
B
C
I
K
D
L
LB
DB
F
DF
G
H
LF
DF
A
J
LF
B
I
LB
DB
C
K
17BSP Tree
BSP Tree
Cuando terminemos llegaremos a esto, dependiendo
claro del criterio que usemos para elegir las
primitivas de para los planos de clasificación de
cada nodo
H
F
A
G
E
E
I
J
D
L
B
K
F
G
LF
DF
A
DF
B
C
LB
H
J
I
LB
DB
C
K
DB
LF
18BSP Tree
BSP Tree
Ahora a nuestro árbol BSP le agregaremos detrás
de cada nodo hoja un Nodo que llamaremos
Sólido(S) y delante de cada Hoja uno que se
llamara Vacío(V).
A
H
F
G
E
E
I
J
D
L
B
K
F
G
LF
DF
A
DF
C
LB
H
J
S
B
I
LB
DB
S
V
V
V
S
S
DB
S
C
K
LF
S
V
S
V
S
19BSP Tree
BSP Tree
Características ocultas de un árbol BSP
El árbol BSP que acabamos de construir posee una
característica geométrica particular, todas la
primitivas forman parte de sólidos con volumen.
Es decir no hay polígonos sueltos. Esto suele
llamarce CSG(Construcción Geométrica
Sólida). Podremos comprobar que si elegimos un
punto dentro de nuestro mundo y recorremos el
árbol clasificandolo según los planos, llegaremos
a una Hoja Sólida si esta dentro de la pared, y a
una hoja Vacía si esta en la habitación.
20BSP Tree
BSP Tree
Es nuestro punto de Prueba, los nodos con fondo
negro son los recorridos en la clasificación.
H
F
A
G
E
E
I
J
D
L
B
K
F
G
LF
DF
A
DF
B
C
LB
H
J
S
I
LB
DB
S
V
V
V
S
S
C
K
DB
S
LF
S
V
S
V
S
21BSP Tree
BSP Tree
Es nuestro punto de Prueba, los nodos con fondo
negro son los recorridos en la clasificación.
H
F
A
G
E
E
I
J
D
L
B
K
F
G
LF
DF
A
DF
B
C
LB
H
J
S
I
LB
DB
S
V
V
V
S
S
C
K
DB
S
LF
S
V
S
V
S
22PVS(Potential Visibility Set)
PVS(Potential Visibility Set)
- Se trata de tener precalculada en cada Sector la
información de que otros Sectores son Visibles. - Suele usarse con BSPTree(Quake por Ej..)
- Los cálculos de PVS, se basan en aplicar
Raytracing para diferentes puntos de prueba
ubicados en los diferentes Sectores, y así poder
determinar que Sectores son visibles desde el
cual se esta calculando.
23PVS(Potential Visibility Set)
PVS(Potential Visibility Set)
Tomaremos de Ejemplo uno de los Sectores
generados por nuestro árbol BSP. Ahora el Sector
2 podremos ver desde nuestro sector cualquier
otro sector salvo el 1.
A
H
F
E
I
G
E
4
B
K
F
G
J
5
D
L
3
DF
C
LB
H
J
S
LF
DF
A
S
V
V
V
S
S
DB
S
B
5
3
2
DB
I
LB
2
LF
S
1
V
S
C
V
S
K
1
4
24PVS(Potential Visibility Set)
PVS(Potential Visibility Set)
Luego para Renderizar la escena, recorreremos el
árbol, uniendo las hojas visibles, y se dibujaran
las primitivas encontradas en los nodos
visitados.
A
H
F
E
I
G
E
4
B
K
F
G
J
5
L
3
D
DF
C
LB
H
J
S
LF
DF
A
S
V
V
V
S
S
DB
S
B
5
3
2
DB
I
LB
2
LF
S
1
V
S
C
V
S
K
1
4
25Portales y Sectores
Portales y Sectores
Características
- El sistema resultante es análogo a un Grafo donde
los Nodos son los llamados Sectores y las
aristas los Portales. - Solo tienen gran utilidad en ambientes
interiores. - Permiten cálculos de visualización en geometría
dinámica. - Permiten Paginar al Mundo de manera simple y
eficaz.
26Portales y Sectores
Portales y Sectores
Descripción
- La idea es subdividir el Mundo en diferentes
áreas o habitaciones las cuales se interconectan
con portales. - Podemos decir que cada área es análoga a una
habitación y cada portal a una Puerta que nos
permite acceder a ella.
27Portales y Sectores
Portales y Sectores
Portal
- Suele representarse de forma simple(Una línea en
2D, un Rectángulo en 3D) de forma tal que sea
rápido saber si se ve o no(Si entra en el View
Frustum o no) - No requiere que apunte a un nodo ubicado a
continuación de otro, ya que puede servir para
teletransportes(Ej. Portales de Quake3). - En los cálculos de visualización los portales
acotan al viewfrustum, al momento de chequear en
los Sectores vecinos si los Objetos son visibles.
28Portales y Sectores
Portales y Sectores
Sector
- Representa un Area Habitable o Habitación
- Suele asociarse a la idea de un Nodo de un Grafo.
- Se conecta con otros Sectores vía los Portales.
- Suele ser Cóncavo, pero puede ser convexo, lo
cual no se lleva bien con la generación
automática de portales.
29Portales y Sectores
Portales y Sectores
Este es nuestro Mundo 3D, un conjunto de Faces
sin clasificar
30Portales y Sectores
Portales y Sectores
Cámara
Indica Portal Visible
S1
S2
Indica Portal Oculto
ViewFrustum
S5
Sectores Visibles
Sectores Ocultos
S3
S4
SX - Indica Sector X
S6
S7
S8
31Conclusiones
Conclusiones
- En casos de Encontrarse solo uno de estos casos
- Para Exteriores Abiertos Quadtree/Octree
- Para Interiores BSPTree con Portales o con PVS.
32Contacto
Contacto
Sergio J. de los Santos sergiojdelos_at_yahoo.com.ar
33Bibliografía Recomendada...
Bibliografía Recomendada...
- www.melax.com
- www.gamasutra.com
- www.gametutorials.com