Implementación de un sistema de partículas

El Z-buffer

El Z-Buffer es un mecanismo, usualmente implementado en hardware por la placa de video, que nos permite dibujar polígonos sin un orden preestablecido y sin importar su distancia a la cámara. Si no activamos esta opción, un polígono que se encontrase parcialmente ocluido por otro debería ser siempre dibujado primero, de otro modo la escena no se vería correctamente.

Gracias al z-buffer no debemos estar ordenando los polígonos de nuestra escena previa a ser dibujada cada vez. Sin embargo, cuando los objetos son semitransparentes el sistema no funciona, pues si dibujamos primero un objeto semitransparente y luego uno sólido detrás, el chequeo contra el z-buffer de los píxels ocluidos del segundo objeto dictará que los mismos no sean dibujados, en lugar de modificar el color del pixel en la posición correspondiente según la especificación del alpha blending que posea nuestra aplicación.

Las partículas suelen utilizar mucho los efectos de transparencia. De hecho, en la demostración lo que realizamos las partículas a medida que van muriendo se van haciendo cada vez más transparentes hasta desaparecer. Por lo tanto, deberíamos tomar alguna medida al respecto para que nuestro sistema se vea correctamente.

En nuestra lista de partículas vivas, siempre tomaremos como primera la partícula más vieja (ya que la manipulamos como una cola), de modo que la lista se encontrará ordenada por antigüedad. Lo que haremos será deshabilitar el z-buffer para dibujar el sistema y dibujar las partículas haciendo uso del orden natural de la lista. Por supuesto, que esto no soluciona nuestro problema, sólo lo disimula en gran parte de los casos. Si las partículas ascendiesen sobre el eje Y nosotros realizáramos una vista superior del sistema, podríamos apreciar el error, pues las partículas nuevas (las de abajo) “pisarían” a las partículas más nuevas (las de arriba).

El ejemplo que acompaña al tutorial

La aplicación que acompaña este tutorial implementa un sistema de partículas con ciertas flexibilidades y ciertas limitaciones. Por un lado es posible establecer por medio de su panel de configuración ciertos parámetros a ser:

. Color fijado cuando las partículas nacen (color desde) y color al cual van cambiando a medida que transcurre su vida.
. Tiempo de generación de las partículas. Un intervalo menor hará que se generen una mayor cantidad de partículas por unidad de tiempo.
. Tiempo de vida de las partículas
. Escala por defecto de las partículas
. Dispersión de la partícula. La dispersión es el ruido aplicado a la velocidad vectorial inicial de la partícula. Si la dispersión es 0, la partícula comenzará
. Si la partícula es afectada o no por la gravedad.
. El bitmap de partícula a cargar entre un listado de partículas posibles.

Varios parámetros más podrían agregarse para variar los efectos producidos. En la demostración la generación es puntual y el punto es fijo. Esto podría modificarse para que el punto se moviese por un determinado trayecto (recta, círculo, etc.) o podría ser randómico dentro de un segmento o superficie.

También podría agregarse viento de modo que las partículas se desplacen hacia un lado u otro (de hecho, el viento podría variar de manera randómica durante la ejecución de la aplicación haciendo “bailar” en el aire a las partículas como si fuesen hojas caídas de un árbol).

Invitamos a los lectores a realizar estas modificaciones para que se adapten a sus necesidades y propongan nuevas modificaciones. Por el momento, con la demostración realizada se puede logran múltiples efectos:

particulas screenshot-fuego

Fuego

particulas screenshot-smoke

Humo

particulas screenshot-sparks

Chispas

Sistema de Sistemas

Hemos establecido que no es conveniente crear y destruir partículas dinámicamente, pues existe un tiempo en la asignación / desasignación de memoria que repercutirá en un deceso de cantidad de cuadros por segundo que podrá generar nuestra aplicación. Del mismo modo si nuestro juego/aplicación requiere que existan en pantalla de manera simultánea diversos sistemas de partículas que nacen y mueren con frecuencia deberemos adoptar una política similar con ellos.

Por lo tanto, podríamos poseer un repositorio de sistemas de partículas los cuales serían reutilizados a medida que se lo requiera. De este modo estableceremos una cantidad máxima de sistema de partículas en escena, cada uno de los cuales poseerá, a su vez, una cantidad máxima de partículas simultáneas que podrá mostrar.

particulas dc2

Figura 10. Ahora incorporamos una nueva clase que gestiona sistemas de partículas

Conclusión

Un sistema de partículas es una característica que casi nunca es imprescindible en un juego pero que siempre lo mejora muchísimo visualmente, lo que se suele conocer como un eye candy (golosina para los ojos). Además, si el sistema es creado con la suficiente flexibilidad puede ser reutilizado para la creación de muchos efectos distintos. Espero que este tutorial les haya sido de utilidad.

Para descargar la aplicación de ejemplo, puede hacer click aquí.

~fuzzyLogic

Compartir:
  • Twitter
  • Facebook
  • MySpace
  • BarraPunto
  • del.icio.us

Pages: 1 2 3 4

Comments

  1. Master-Blaster
    April 9th, 2007 | 3:15

    lindo tutorial, gracias!

  2. Ni7ram
    April 9th, 2007 | 17:34

    Muy bueno

  3. kuo
    June 28th, 2007 | 12:53

    Oe man…precioso tutorial… te pasaste on… Por los diagramas de clases y diagramas de flujos y la paciencia que tienes para explicart …te puyedo asegurar que tienes dotes de profesor on..Bueno espero que sigas subiendo mas tutoriales on… son super buenos…A solo queria preguntarte si pronto vas a subir el tutorial de MD2(segunda parte y posteriores me serian de gran utilidad)

  4. kuo
    June 28th, 2007 | 12:57

    Oe man buen tutorial on(te pasaste)… por los graficos y diagramas te puedo asegurar que tienes dotes de profe on… sinceramente bueno …sigue colgando mas tutoriales on serian de mucha ayuda… A man ya ps acuerdate de subir el tutorial MD2 (segunda parte)

  5. kuo
    June 28th, 2007 | 13:01

    Man buenazo on te pasaste …se ve que tienes dotes de profesor

  6. kuo
    June 28th, 2007 | 13:10

    sinceramente myu bueno man…tienes dotes de profesor on…

  7. June 3rd, 2008 | 23:55

    muy bueno muy bueno.

Leave a reply