sábado, 28 de diciembre de 2013

Particle systems

Fuente: Irrlicht engine (http://irrlicht.sourceforge.net/)

Desde comienzos de siglo las funcionalidades para sistemas de partículas han sido integradas en la mayor parte de tecnologías gráficas. De este modo las APIs proporcionadas por los SDKs de nVidia o ATI, por ejemplo, extienden la capacidades proporcionadas en el ámbito de DirectX y OpenGL para alcanzar el máximo rendimiento de la GPU.
Los sistemas de partículas consisten en un conjunto de pequeños objetos que emanan de un objeto contenedor denominado emitter. El emitter actúa a modo de fuente generadora de partículas, controlando su posición en el espacio 3D, cantidad de partículas y su movimiento. Cada partícula contiene información de su tiempo de vida (lifespan), el color, la textura, la forma, etc. Además de estos objetos, otro módulo se encarga del comportamiento de la partícula aplicando efectos de gravedad, incluso diferentes tipos de aceleraciones, como una función euleriana o personalizada.

Para ilustrar esta idea, la siguiente imagen muestra un pseudo-diagrama de clases en UML con los diferentes tipos de componentes relacionados con un sistema de partículas:

 
Fuente: wiki/Blender

Como puede apreciarse, el objeto principal de Partícula controla la información de sus objetos de datos y mantiene una referencia al módulo predefinido de comportamiento. Los datos de la partícula se suelen asociar a la textura y sus atributos principales de simulación física (velocidad, aceleración, posición y fuerzas). En lo concerniente a la textura, es posible aplicar diferentes tipos de técnicas de rendering como: Billboards, Halos y Strands (para simular hierba y pelo). En la fase final de renderizado se decide el objeto 3D que representará a la partícula. En este caso se puede optar por simples píxeles, cruces, círculos y Strands; aunque para la representación de la partícula en sistemas de bajo rendimiento se utilizarán casi siempre píxeles.

Adicionalmente se puede añadir un objeto colisionador en la fase de simulación que deberá ser controlado y  redefinido por el módulo de comportamiento. El objeto colisionador puede ser cualquier objeto 3D o una simple superficie.

Finalmente cabe decir que el éxito de los motores de partículas no ha tardado en hacerse notar, pues su repercusión en la sociedad a través de videojuegos, cine y simulación de efectos astrofísicos ha sido sobresaliente.

------
 
Para código fuente pedagógico véase applet en el lenguaje Processing:

http://processing.org/examples/simpleparticlesystem.html

No hay comentarios:

Publicar un comentario en la entrada