1 Shaders de geometría Explosiones y “efecto arena” Programación avanzada sobre tarjetas gráficasPedro Zuñeda Garrido
2 Introducción
3 Introducción - Proyecto4 modelos utilizando Geometry Shaders. Primitivas de salida: 3 modelos de explosión Modelo “efecto arena”
4 Introducción - Estructura7 objetos programa con sus respectivos Shaders ¿Por qué? Porque dependiendo del modelo que se está ejecutando se utilizan unos Shaders u otros y hay que estar cambiando. Modelos de explosión ProgramID[0]: cargar objeto original. ProgramID[1]: cargar objeto dividido en triángulos. ProgramID[2]: cargar objeto dividido en puntos por baricentro. ProgramID[3]: cargar objeto con triángulos discretizados en puntos. Modelo ‘Efecto arena’ - (Después se explicará). ProgramID[4]: cargar objeto que se va consumiendo. ProgramID[5]: cargar objeto formado por granos de arena. Entorno ProgramID[6]
5 Introducción - IluminaciónIluminación basada en imágenes (Práctica Tema 3 - Parte 4) Vertex Shader Ahora se calcula para las nuevas primitivas de salida en el Geometry Shader.
6 Introducción - IluminaciónVertex Shader y Fragment Shader adjuntados a los objetos programa que utilizan Geometry Shader. Vertex Shader Pasamos vértices en coordenadas del objeto para calcular gReflectDir En el Geometry Shader. Fragment Shader Calculadas en Geometry Shader
7 Geometry Shader
8 Modelo de explosión nº 1 Geometría separada en triángulos
9 Modelo de explosión nº 1 Función ProduceVertex( ) - Geometry Shader
10 Modelo de explosión nº 1
11 Modelo de explosión nº 2 Geometría separada puntos. Un punto en el baricentro de cada triángulo.
12 Modelo de explosión nº 2 Geometry Shader
13 Modelo de explosión nº 2
14 Modelo de explosión nº 3 Triángulos de entrada discretizados en puntos.
15 Modelo de explosión nº 3 Geometry Shader Algoritmo de subdivisión
16 Modelo de explosión nº 3 ¿Cómo funciona el algoritmo de subdivisión?Cada triangulo está parametrizado por dos variables, que serán multiplicadas por dos aristas adyacentes del triángulo para determinar todos los puntos interiores. La función ProduceVertex( ) produce un vértice a partir de los parámetros s y t. El parámetro t se utiliza para controlar la dirección primaria de la subdivisión a través del triángulo, y el parámetro s para controlar la dirección secundaria.
17 Modelo de explosión nº 3 Geometry Shader
18 Modelo de explosión nº 3 ¿Cómo funciona el algoritmo de subdivisión?Por ejemplo:
19 Modelo de explosión nº 3
20 Modelo de explosión nº 3
21 Modelo de explosión nº 3
22 Modelo de “efecto arena”Triángulos de entrada discretizados en puntos.
23 Modelo de “efecto arena”Se hace un escaneado de la componente Y de la normal de cada triángulo. Los granos de arena empiezan a caer en un instante T según la orientación de su normal en Y. Objeto Programa Objeto Programa 2 (triángulos) (puntos) Resultado Escaneo detecta en instante T que un triángulo debe caer. No se dibuja triángulo en Programa 1. Se dibujan puntos en Programa 2 y aplica física.
24 Modelo de “efecto arena”Escaneo de normales para detectar cuándo empieza a caer cada punto. Se calcula para el instante t actual, el valor mínimo de la componente Y de la normal (normalYScan) de manera que cualquier triángulo con un valor de Normal.y menor no es alterado. normalYScan se ha calculado a partir de la ecuación de la recta (véase gráfica). normalYScan
25 Modelo de “efecto arena”Geometry Shader 1 (Triángulos)
26 Modelo de “efecto arena”Geometry Shader 2 (Puntos)
27 Modelo de “efecto arena”Geometry Shader 2 (Puntos) Para mover los puntos es necesario desfasar el instante de tiempo con el que se calcula la física de la caída, ya que no todos los puntos empiezan a caer al mismo tiempo.
28 Referencias Mike Bailey and Steve Cunningham. “Graphic Shaders”, second edition, 2012.
29 Gracias por vuestra atención