Está en la página 1de 22

SINTESIS DE IMGENES Y ANIMACIN 3D

SISTEMAS DE PART CULAS


Profesor: Isidro Verd Conesa

Juan ngel Moreno Fernndez I.T. Informtica de Sistemas Universidad de Murcia Mail: jamf2@alu.um.es

Sistemas de partculas Nombre Prctica

0.- ndice.
0.- ndice. ..................................................................................................................... 1 1.- Introduccin ............................................................................................................ 2 2.- Modelado basado en fsicas ..................................................................................... 2 3.- Base de los sistemas de partculas ............................................................................ 3 4.- Sistema de modelado tradicional, diferencias y ventajas de los sistemas de partculas ..................................................................................................................................... 4 5.- Partculas................................................................................................................. 5 5.1.- Definicin......................................................................................................... 5 5.2.- Atributos........................................................................................................... 6 5.3.- Dinmicas......................................................................................................... 7 5.4.- Ciclo de vida..................................................................................................... 8 6.- Modelo bsico para sistemas de partculas ............................................................... 9 6.1.- Emisor .............................................................................................................. 9 6.2.- Generacin ..................................................................................................... 10 6.3.- Eliminacin .................................................................................................... 11 6.4.- Actualizacin.................................................................................................. 11 6.5.- Renderizado.................................................................................................... 12 7.- Jerarquas de sistemas de partculas ....................................................................... 12 8.- Implementacin de un sistema de partculas bsico................................................ 13 8.1.- Partculas ........................................................................................................ 13 8.2.- Emisor ............................................................................................................ 14 8.3.- Generacin ..................................................................................................... 15 8.4.- Actualizacin.................................................................................................. 16 8.5.- Renderizado.................................................................................................... 18 8.6.- Aplicacin ...................................................................................................... 19 9.- Referencias............................................................................................................ 21

SIA3D

Sistemas de partculas Nombre Prctica

1.- Introduccin
En la naturaleza abundan fenmenos fsicos difcilmente modelables con tcnicas tradicionales de modelado grfico. Entre estos fenmenos podemos nombrar el humo, fuego, nieve, etc. La dificultad del modelado de estos fenmenos utilizando un ordenador radica principalmente en su superficie, compuesta de multitud de cambios que adems varan con el tiempo. En 1982 William T. Reeves [4], mientras estaba trabajando en la pelcula Star Trek II: The wrath of Khan [5], trataba de encontrar un mtodo para crear un efecto de fuego realista para una secuencia de la pelcula. Entonces se dio cuenta de que los objetos que componen este tipo de efectos no estn compuestos de superficies fcilmente definibles y que podan ser modelados de forma ms efectiva y realista como sistemas o conjuntos de partculas sujetas a unas reglas dinmicas. Reeves fue el primero en utilizar la nocin de sistemas de partculas que hoy en da abundan en cualquier software, pelcula, etc., realizado por ordenador. Hemos de decir que anteriormente a Reeves, ya se haban utilizado tcnicas similares a las partculas para modelar ciertos objetos, por ejemplo, desde hace mucho tiempo los desarrolladores de videojuegos realizaban explosiones en las que trozos de un objeto eran lanzados caticamente, o tambin se haba utilizado sistemas similares a partculas para modelar humos. La innovacin que Reeves introdujo fue la de aplicar un sistema de reglas a las partculas, de forma que poda almacenar el comportamiento del fenmeno mientras mantena cierto control sobre su evolucin. En este documento tratamos de presentar la arquitectura de sistemas de partculas descrita por Reeves y que puede considerarse base fundamental para cualquier aproximacin a uno de estos sistemas. Hoy en da la extensin de esta tcnica de modelado es muy amplia, abarcando desde la simple simulacin de una fuente de agua, por poner un ejemplo, hasta su uso en visualizaciones interactivas de flujos [11]. Nosotros solo nos centraremos en la base. Comenzamos dando algunas nociones bsicas del modelado basado en fsicas, pasamos despus a introducir los sistemas de partculas y realizamos una pequea comparacin con las tcnicas tradiciones de modelado. El siguiente paso en nuestro documento es profundizar en el mundo de las partculas y su inclusin en un modelo bsico de sistema. En la parte final del documento hablamos de las jerarquas de partculas y desglosamos la implementacin de un sistema de partculas realizado por Jeff Lander [9] utilizando como base el sistema propuesto por Reeves [4].

2.- Modelado basado en fsicas


Los modelos basados en sistemas fsicos reales, se caracterizan por tener un comportamiento que viene determinado por leyes fsicas del mundo real. Algunas de estas leyes pueden llegan a ser muy complejas, por lo que a la hora de enfrentarse con el modelado de uno de estos sistemas, es muy importante realizar un buen anlisis y estructuracin de dicho sistema [1]. En los sistemas de modelado tradicional, para representacin grfica, la meta era realizar imgenes o animaciones realistas de objetos que podan ser reales o irreales. Estos modelos tenan tres partes bien diferenciadas:

SIA3D

Sistemas de partculas Nombre Prctica

- Modelado: Consista en la definicin geomtrica de los objetos. - Renderizado: Computacin de la imagen. - Animacin: Manipulacin de los objetos durante el tiempo. Queda claro que este sistema era puramente geomtrico y para soportar el concepto de animacin se realizaba un parametrizado de los objetos (por ejemplo, en jerarquas articuladas). Dichos parmetros eran variados en el tiempo de forma manual, la mayor parte de las veces, por los animadores. Esta tcnica, a pesar de ser potente dejaba mucho trabajo en manos humanas, lo que llevaba en muchos casos, a resultados irrealistas. El modelado basado en fsicas (Phisically-based Modeling) es un sistema de modelado cuya principal potencia reside en la incorporacin de caractersticas fsicas en el propio modelo, lo cual facilita la simulacin numrica de su comportamiento por medio de un ordenador, es decir, de forma ajena a un humano. Los elementos ms utilizados en estos sistemas son las dinmicas clsicas (fuerza, masa, velocidad, inercia, etc.) aplicadas a los objetos del modelo, que pueden ser tanto rgidos como flexibles. En este documento tratamos los sistemas de partculas, que utilizan caractersticas de los modelos basados en fsicas, por lo que se pueden englobar dentro de ellos.

3.- Base de los sistemas de partculas


Los sistemas de partculas son una aproximacin al modelado de objetos cuyo comportamiento a travs del tiempo no puede ser descrito de forma sencilla, principalmente por la complejidad de su superficie con multitud de cambios durante el tiempo. Se han utilizado sistemas de partculas para modelar fenmenos reales tales como humo, agua, fuego, niebla, fuegos artificiales y un inmenso etc.

Podemos describir un sistema de partculas como una coleccin de muchos objetos diminutos (partculas), que al considerarse como un conjunto, representan un fenmeno cuya complejidad puede ser bastante elevada, pero tambin nos puede llevar a obtener resultados mucho ms realistas que utilizando tcnicas tradicionales. En estos sistemas, cada partcula posee unas propiedades o atributos, que en la mayor parte de los casos coincide con atributos fsicos del sistema modelado (modelo basado en fsicas). La principal caracterstica de los sistemas de partculas es que evolucionan en el tiempo, es decir, poseen un estado temporal. Esta evolucin temporal puede ser controlada de diversas formas, aunque lo usual es que venga determinada por reglas probabilsticas y estocsticas (reglas basadas en aleatorios).

SIA3D

Sistemas de partculas Nombre Prctica

La evolucin y representacin de un sistema de partculas se puede dividir en las siguientes etapas: - Generacin de nuevas partculas en el sistema, a las que se asignan atributos individuales y personalizados. - Eliminacin de partculas cuyo ciclo de vida ha terminado. - Actualizacin de partculas vivas de acuerdo con sus atributos dinmicos. - Renderizado de la imagen mediante la representacin de cada una de las partculas del sistema. Atendiendo a esta divisin de la evolucin de los sistemas de partculas, se puede observar que poseen un carcter procedural, lo cual nos va a permitir modelar sistemas complejos sin necesidad de utilizar mucho tiempo de diseo. Se podrn utilizar, por tanto, modelos desarrollados en diferentes disciplinas cientficas o de ingeniera para describir la apariencia o dinmica del sistema. El control de la forma, apariencia y dinmicas de las partculas, en un sistema de partculas, viene determinado por un conjunto de parmetros que restringen los atributos de las partculas generadas dentro del sistema. En general cada parmetro especifica un rango en el que debe estar el valor del atributo asociado de una partcula, por ejemplo, la velocidad de una partcula, tendr un valor inicial determinado por unos rangos establecidos en el sistema y ser asignada en el momento de su creacin de forma probabilstica o estocstica. Teniendo en cuenta lo anterior podemos ver los sistemas de partculas desde dos puntos de vista [2]: - Externamente se tiene la sensacin de un todo, de un solo objeto en el espacio. - Internamente el modelo se estructura como una coleccin de partculas interactivas. Esta dualidad presente en los sistemas de partculas nos va a permitir representar Externamente multitud de fenmenos utilizando Internamente el mismo modelo o una pequea variacin del mismo, lo cual conlleva una reduccin de la carga de trabajo para todas las personas involucradas en un proyecto.

4.- Sistema de modelado tradicional, diferencias y ventajas de los sistemas de partculas


Como ya hemos mencionado anteriormente, en los sistemas de modelado tradicional, se tena como meta la obtencin de imgenes o animaciones realistas de objetos que podan ser reales o irreales. Si nos centramos en el modelado de los fenmenos comentados, tradicionalmente se ha realizado como un conjunto de primitivas de superficie que definen la forma del objeto o del sistema modelado. Estas primitivas suelen ser polgonos, patches, etc. Hay tres conceptos clave en la representacin de un sistema de partculas que lo diferencian claramente del sistema de modelado tradicional: - Un modelo se va a representar como una nube de primitivas partculas que definen su volumen, mientras que en el sistema tradicional se representa, como hemos dicho, utilizando primitivas de superficie que definen su forma. - Un sistema de partculas no es una entidad esttica, ya que sus partculas cambian con el paso del tiempo (cambian de forma, se mueven, nacen, mueren,

SIA3D

Sistemas de partculas Nombre Prctica

etc.), mientras que en el sistema tradicional la forma modelada si suele ser esttica. - Un objeto representado por un sistema de partculas no es determinista. No se especifica completamente su forma, sino que se usan procesos estocsticos para crear y cambiar la apariencia del objeto. Esto supone una gran ventaja frente al modelo tradicional, ya que podemos dotar al sistema de partculas de adaptabilidad. Ya hemos comentado que el sistema tradicional se basa en primitivas de superficie, pero los sistemas de partculas tambin utilizan una primitiva, la partcula. Esta primitiva es mucho ms simple que un polgono, o que un patche, o que cualquier otra utilizada en el sistema tradicional. Por lo tanto, en el mismo tiempo computacional se pueden procesar muchas ms partculas que primitivas (tradicionales). En sistemas en los que el tiempo para procesar una imagen no es un factor determinante, esto supone un simple ahorro temporal, mientras que en sistemas en los que el tiempo es determinante, supone la obtencin de resultados ms complejos en el mismo tiempo de computacin. Anteriormente hemos mencionado el carcter procedural controlado por leyes probabilsticas y estocsticas de los sistemas de partculas. Esto implica dos ventajas claras respecto al sistema tradicional, por un lado, modelos detallistas no tienen porque necesitar mucho tiempo de diseo, ya que la propia evolucin del sistema manejar la complejidad de los detalles. Y por otro lado, un sistema de partculas podr ajustar sus parmetros en tiempo de ejecucin y as, por ejemplo, se podra reducir el nmero de partculas en situaciones en las que el observador est alejado del sistema.

5.- Partculas
5.1.- Definicin
Las partculas son la primitiva base de los sistemas de partculas, es decir, los objetos que en ltima instancia presencia un espectador. Podramos describir la abstraccin de una partcula, en un caso simple, como un punto con masa que reacciona, a las fuerzas que se le aplican, de acuerdo a las leyes fsicas de la mecnica de Newton. Cada una de las partculas que conforman el sistema, tiene unos atributos que directa o indirectamente afecta a su comportamiento y por lo tanto al estado global del sistema de partculas al que pertenece [3]. No debemos confundir la sensacin de partcula como elemento atmico con la representacin como objeto que estamos tratando, aunque si hay que tener en cuenta que las partculas exhiben caractersticas fsicas, como las del mundo real. Estas caractersticas quedan reflejadas en sus atributos como partculas. Normalmente las partculas se asocian y se representan por primitivas grficas como puntos y lneas, o sea, primitivas grficas de poca carga computacional en su representacin. Un ejemplo de la utilizacin de estas primitivas en la implementacin de un sistema de partculas se puede ver en el efecto gnesis desarrollado por Reeves [4] para la pelcula Star Trek II: The wrath of Khan [5].

SIA3D

Sistemas de partculas Nombre Prctica

Aunque hemos dicho que puntos y lneas son las primitivas ms usadas, no estamos hablando de una restriccin, sino de un hecho. En la implementacin de partculas como primitivas, podra utilizarse cualquier objeto o tcnica 2D o 3D, o incluso grupos de ellos, etc. Ms tarde hablaremos de las jerarquas de sistemas de partculas en las que se podr ver un reflejo de este hecho.

5.2.- Atributos
Un sistema de partculas va a determinar para cada partcula generada una serie de atributos. Estos atributos caracterizarn a la partcula y variarn dependiendo del modelo que representa el sistema de partculas, as por ejemplo, no tendrn los mismos atributos las partculas de un sistema que emula el efecto del humo, como un sistema que emula la explosin de un fuego artificial. Con lo anterior queremos dejar claro que no hay una lista de atributos nica, aunque si que podramos hablar de unos atributos bsicos o comunes. Reeves en [4] plantea la siguiente lista de atributos como bsicos: - Vector posicin: Posicin de la partcula en el espacio. - Vector velocidad: Velocidad y direccin de la partcula. - Tamao de la partcula. - Color de la partcula. - Transparencia de la partcula. - Forma de la partcula (por ejemplo punto, lnea, etc.). - Tiempo de vida: Duracin en frames o imgenes de la partcula. Podramos decir que la lista planteada por Reeves incluye los atributos ms importantes y comunes en la mayora de los sistemas de partculas, aunque con el tiempo esta lista ha evolucionado y se ha adaptado a las necesidades, tal y como hemos mencionado anteriormente. Valga como ejemplo el siguiente listado: - Vector posicin: Posicin de la partcula.

SIA3D

Sistemas de partculas Nombre Prctica

- Vector posicin anterior: Posicin de la partcula en el frame anterior. - Vector Velocidad: Velocidad y direccin. - Color de la partcula. - Energa de la partcula. - Tamao de la partcula. Este listado fue planteado por John van der Burg como atributos bsicos para la implementacin de un buen sistema de partculas para videojuegos [6]. Como se puede apreciar, hay un cambio fundamental: la eliminacin del tiempo de vida y la insercin de la energa. John van der Burg plantea que la energa es anloga a la edad de la partcula, ya que se puede considerar que la partcula ha murto cuando su energa es cero, adems este atributo tiene otras muchsimas implicaciones fsicas, lo cual nos puede permitir realizar ms efectos sin necesidad de aadir otros parmetros. Andrew Witkin en [2] considera que toda partcula est sujeta a fuerzas, por lo que en su estructura de partcula utiliza un campo como acumulador de fuerzas que es actualizado en la fase de actualizacin utilizando funciones de clculo diferentes para conseguir efectos diferentes.

5.3.- Dinmicas
Cada partcula en un sistema de partculas se va a mover en un espacio-mundo, que puede ser tanto bidimensional como tridimensional, y cambian sus atributos en funcin del tiempo transcurrido, que se mide en frames o imgenes. Por ejemplo, el color de una partcula en una explosin se har cada vez ms oscuro conforme se aleje del centro de explosin. Aunque nos vamos a centrar en el planteamiento realizado por Reeves en [4], no podemos dejar de mencionar la clasificacin de los sistemas de partculas, dependiendo de la interaccin entre sus partculas, planteada por David Tonnesen [7]: - Sistemas con partculas independientes: las fuerzas que actan sobre cada partcula son independientes del resto de partculas en el sistema. Dentro de este conjunto se engloba el sistema de Reeves. - Sistemas con conexiones fijas entre partculas: Cada partcula interacciona con las partculas vecinas. En estos sistemas, las interacciones son constantes desde la especificacin inicial. Dentro de este conjunto se engloba la simulacin de telas mediante sistemas de partculas. - Sistemas con interacciones dinmicas: las interacciones entre partculas aparecen y evolucionan con el tiempo, es decir, interacciones prcticamente aleatorias. Segn esta clasificacin de los sistemas de partculas, est claro que no hay unas reglas fijas que guen el modelado de las dinmicas de las partculas dentro de un sistema. Queremos decir con esto que dependiendo del tipo de sistema que tratemos de modelar y de la complejidad de este, tendremos unas u otras propiedades y con ello, diferentes dinmicas. Nosotros solo vamos a dar una pequea descripcin de las dinmicas propuestas por Reeves [4] aunque se pueden encontrar otras tcnicas ms avanzadas en [2, 6, 8, 11]. El movimiento de una partcula, de un frame a otro, es tan simple como aadir a su vector posicin, su vector velocidad (es decir direccin y velocidad en mdulo): PosicionPartcula = PosicinActual(x, y, z) + DireccionVelocidad(x, y, z)

SIA3D

Sistemas de partculas Nombre Prctica

Se podra aadir ms complejidad al sistema utilizando factores de aceleracin, as por ejemplo, se podra simular la gravedad, y por lo tanto movimientos parablicos de partculas, simplemente con aadir un vector adicional de fuerzas. En cuanto a la variacin en el tiempo de otros atributos de una partcula, se realiza incluyendo algunos atributos en la lista, que definen la frecuencia de cambio de por imagen de estos atributos. As, haciendo uso de estas frecuencias de cambio, se pueden modificar valores como transparencia, color, tamao, etc. ColorParticula(r, g, b) = ColorParticula(r, g, b) + DeltaColor(r, g, b); En sistemas ms complejos se utilizan parmetros estocsticos, en lugar de utilizar estas frecuencias de cambio. Podemos ver, por tanto, que en general, los atributos de una partcula se pueden especificar por una ecuacin lineal que toma como parmetro el tiempo o el tiempo y otros atributos (por ejemplo, la nueva posicin de una partcula depender de su posicin actual, de su vector velocidad y del tiempo), y que nos permite obtener el nuevo estado dinmico de la partcula de forma simple y con poca carga computacional. Por ejemplo, podramos utilizar la siguiente ecuacin para obtener el tamao de la partcula: SiguienteTamao = TamaoActual + VariacionDelTamao Utilizando esta simple ecuacin, obtenemos el tamao en el siguiente frame en funcin del tamao actual y de un atributo que determina la variacin, as si VariacionDelTamao es un valor positivo la partcula incrementar su tamao en cada frame, y si es negativo lo decrementar.

5.4.- Ciclo de vida


El ciclo de vida de una partcula es el siguiente: - Creacin: el sistema aade una nueva partcula con unos atributos determinados. - Evolucin: la partcula sufre modificaciones como consecuencia del paso del tiempo. - Extincin: la partcula se elimina del sistema cuando llega un momento determinado. Los dos primeros estados en la vida de una partcula ya han sido comentados en los apartados anteriores, por lo que nos resta comentar el ltimo paso: La extincin. Dentro de los atributos de una partcula, hay uno (o varios, dependiendo del sistema) que controlar el tiempo de vida en frames o imgenes de dicha partcula. Podramos considerar este atributo como uno de los ms importantes, ya que va a determinar para cada partcula, la duracin de su presencia en el sistema, es decir, externamente, durante cuantas imgenes una partcula ser visible para el espectador, e internamente, durante cuantas imgenes el sistema va a trabajar sobre la partcula. El sistema de actualizacin del tiempo de vida es simple, en cada frame este tiempo se decrementar y cuando este atributo llegue a cero, se destruir la partcula. Como ya mencionamos anteriormente, otros autores utilizan Energa en vez de tiempo de vida, pero la actualizacin de este otro atributo no diferir mucho. El anterior, es el mtodo de actualizacin bsico, o sea, la respuesta ms directa a la pregunta Cundo elimino una partcula?. Pero al igual que en cualquier otro

SIA3D

Sistemas de partculas Nombre Prctica

sistema se podran plantear otras preguntas que desenlazarn en la eliminacin de partculas a pesar de no haber terminado su ciclo de vida. Es el caso de Es necesario que una partcula se procese?, Se diferenciar esta partcula?, etc. Como respuesta a estas preguntas, se podra aumentar la complejidad del sistema, habilitando otros mecanismos de eliminacin de partculas. Estos seran utilizados en aquellos casos en que la o las partculas consideradas, no contribuyesen a la imagen final, por ejemplo se podran eliminar partculas totalmente transparentes, o aquellas que estn fuera de una regin determinada por algn parmetro del sistema, o aquellas que estn tan alejadas del espectador que no se pueden aprecian, etc.

6.- Modelo bsico para sistemas de partculas


En este apartado vamos a tratar de dar algunas directrices para el diseo de un sistema de partculas bsico. Vamos a suponer que trabajamos con un sistema tridimensional, aunque para dos dimensiones los cambios seran mnimos.

6.1.- Emisor
Lo primero que debemos tener en cuenta, es que un sistema de partculas no es solo una abstraccin, sino que en un diseo, se tendr que convertir en un objeto, este objeto ser una especie de centro de creacin de partculas. Podemos separar la abstraccin, del objeto, utilizando un objeto intermedio: El emisor. El emisor tendr una posicin tridimensional que va a definir el origen del sistema de partculas y un vector de direccin que nos va a orientar nuestro sistema, en algunos casos en vez de un vector direccin se utilizan dos ngulos llamados Yaw y Pitch que indican ngulos de rotacin respecto al eje Y y al eje X respectivamente. Tambin se les suele asociar una forma, que define la regin del espacio donde se irn colocando las partculas en el momento de su creacin. Ejemplos de formas para el emisor son una esfera de radio r, un circulo en el plano XY de radio r, etc.

SIA3D

Sistemas de partculas Nombre Prctica

Normalmente, la forma del sistema va a determinar la direccin inicial de las partculas, as por ejemplo, si utilizamos una forma esfrica, las partculas podran tener un vector velocidad en la direccin de la lnea entre el emisor y la partcula y un sentido tal que se aleje del emisor. Una tcnica muy utilizada es ir variando la forma del emisor en el tiempo, crendose as diferentes efectos de forma flexible. Otra tcnica muy utilizada es la inclusin de un ngulo de eyeccin que unido a la direccin inicial de la partcula brinda muchas posibilidades, por ejemplo, si suponemos que el emisor tiene como forma un circulo en el plano XY y que las partculas se mueven verticalmente alejndose del emisor, podramos aadir la sensacin de dispersin simplemente utilizando un ngulo de eyeccin. Este ngulo consigue que las partculas no se lancen perpendicularmente sobre el emisor, sino que obtengan una variacin de direccin. Utilizando esta tcnica se puede conseguir, por ejemplo, un efecto de explosin.

6.2.- Generacin
La generacin de partculas dentro del sistema, se controla mediante mtodos estocsticos (incluyen aleatorios) que determinan el nmero de partculas que se aaden al sistema por imagen. Es decir, en cada imagen se utilizar un mtodo de procesamiento del sistema, encargado de generar nuevas partculas. Este nmero va a influenciar directamente la densidad del fenmeno. El control del nmero de partculas generadas se suele realizar de una de las dos siguientes formas: - Controlando el nmero medio de partculas a generar por imagen y su posible desviacin: NumParticulas = NumMedioParticulas + Rand(-1, 1) x DesviacionParticulas Ej: NumParticulas = 5 + Rand(-1, 1) x 2, se generan entre 3 y 7 partculas por frame. Controlando el nmero medio de partculas a generar por unidad de rea de pantalla y su posible desviacin:

SIA3D

10

Sistemas de partculas Nombre Prctica

NumParticulas = (NumMedioParticulas + Rand(-1, 1) x DesviacionParticulas) x Area Ej: NumParticulas = (3 + Rand(-1, 1) x 2) x 8, se generan entre 1 y 5 partculas por unidad de rea de pantalla, para un rea de 8 se generarn entre 8 y 40 partculas. En el segundo caso, el sistema de partculas debe determinar en cada imagen el rea de pantalla que cubre. Este hecho podra aumentar la complejidad del sistema, pero a cambio se pueden obtener mejores rendimientos. As por ejemplo, se podra controlar el nivel de detalle y por lo tanto el tiempo de renderizado, solo basta darse cuenta de que no habra necesidad de procesar 100000 partculas si el sistema cubre un rea de pantalla de 4 pxeles. En ambos casos se puede variar el nmero medio partculas, generadas por imagen, durante el tiempo para conseguir diferentes efectos, por ejemplo aumentando o disminuyendo este nmero, se podra variar la intensidad del sistema. Esto se puede realizar con una simple funcin lineal: NumMedioParticulas = NumMedioParticulasInicial + NumMedioDelta x (f - f0) Siendo NumMedioParticulasInicial un valor inicial y constante para el nmero medio de partculas a generar por imagen y NumMedioDelta un parmetro que indica su velocidad de cambio. f y f0 son los frames actual e inicial respectivamente, que se utilizan para calcular el tiempo transcurrido. Ej: NumMedioParticulas = 20 + 2 x (f - f0), si suponemos que el frame inicial es el 0, el nmero medio de partculas para el frame inicial es 20, para el frame 2 sern 24 y para el frame 10 sern 40. En cuanto a la asignacin de los atributos iniciales de las partculas, se utilizan formulas similares a las del clculo del nmero de partculas y por lo tanto son aplicables los mismos mtodos comentados: ValAtributo = ValMedioAtributo + Rand(-1, 1) x DesviacionAtributo Ej: Tamao = 4 + Rand(-1, 1) x 2, las partculas generadas tendrn un tamao inicial entre 2 y 6.

6.3.- Eliminacin
La relacin entre un sistema de partculas y sus partculas, es una relacin padre hijo y como tal, el sistema tiene constancia y control sobre todas sus partculas. La eliminacin de partculas es simple, el sistema recorre todas las partculas y elimina aquellas para las que su tiempo de vida ha finalizado.

6.4.- Actualizacin
El sistema recorre todas sus partculas, actualizando sus atributos. Para ello har uso de los atributos del sistema y atributos propios de las partculas (vase la seccin Partculas: Dinmicas). Aunque hemos definido la fase de eliminacin como una etapa de la evolucin del sistema de partculas, normalmente la eliminacin de partculas se hace en esta etapa de actualizacin reducindose as el tiempo de cmputo. La separacin de la fase de
SIA3D

11

Sistemas de partculas Nombre Prctica

eliminacin de la fase de actualizacin la hemos realizado a causa de su importancia dentro de la evolucin global del sistema.

6.5.- Renderizado
La fase de renderizado tiene lugar una vez se han calculado las posiciones, apariencia, etc. de todas las partculas del sistema. En esta fase suelen aparecer dos problemas generalizados en la mayora de los sistemas de partculas: - Superposicin de partculas: este problema aparece cuando una partcula tapa a otra parcial o totalmente. Como consecuencia, una partcula se puede ver oscurecida por la accin de otra. - Interaccin con objetos de la escena: interacciones que aparecen cuando alguna partcula entra en contacto con objetos de la escena que estn basados en primitivas tradicionales. El problema de la superposicin lo vamos a resolver considerando que las partculas son puntos emisores de luz. As cada una aadir un poco de luz a los pxeles que cubre. Utilizando este mtodo una partcula bajo otra, no ser ocultada sino que ver incrementada la luz de sus pxeles. Deberemos tener en cuenta que la luz y el color de los pxeles dependern de los atributos de las partculas. En cuanto al problema de las interacciones con otros objetos de la escena, su solucin se sale fuera del mbito de este documento. Aqu supondremos que las partculas no interaccionan con objetos basados en primitivas tradicionales, es decir, solo tendremos que manejar interacciones con otras partculas, cosa que ya hemos comentado como hacerlo. Utilizando estas dos suposiciones anteriores se elimina la necesidad de ordenar las partculas, cosa que reduce el tiempo de cmputo de las mismas.

7.- Jerarquas de sistemas de partculas


Llamamos jerarqua de sistemas de partculas, a un sistema de partculas en el que las partculas son en si mismas, sistemas de partculas. La idea es crear una jerarqua de sistemas con estructura de rbol (estructura, no forma), en la que tenemos una relacin nodo padre nodo hijo. En estos sistemas, cuando una partcula padre se transforma, implica como sistema de partculas, la transformacin de todas sus descendientes. Por ejemplo, si el tamao de una partcula aumenta, dado que no se trata de una partcula, sino un sistema completo, los tamaos de sus sistemas hijos aumentarn. Los parmetros de un sistema de partculas en una jerarqua, se obtienen a partir de los del sistema padre, por ejemplo, el nmero de partculas generadas por imagen en un sistema, vendr determinado por el mismo nmero del sistema padre. Utilizando esta arquitectura, se pueden representar y controlar fenmenos muy complejos, por ejemplo una nube se podra modelar como una composicin de varios sistemas de partculas cada uno de los cuales representa una regin de partculas de agua, es decir, una nube es un sistema de partculas donde cada partcula es un sistema de gotas de agua. Teniendo en cuenta la forma de manejar estos sistemas que hemos comentado, el control total de la nube se realizara por un solo sistema y reglas
SIA3D

12

Sistemas de partculas Nombre Prctica

estadsticas y estocsticas. Podramos ir un poco ms lejos y suponer que un cielo es un sistema de partculas donde cada partcula es una nube, etc.

8.- Implementacin de un sistema de partculas bsico


En esta seccin presentamos y comentamos la implementacin de un sistema de partculas bsico realizado por Jeff Lander [9] y que sigue casi al pie de la letra las ideas de Reeves [4], ideas que hemos tratado de seguir y comentar a lo largo de este documento. El mismo cdigo de Jeff Lander fue comentado por Ernesto Coto [10]. Antes de comenzar queremos mencionar que el cdigo propuesto por Jeff Lander, se puede considerar, desde nuestro punto de vista, multiplataforma. Pensamos que esto es as principalmente por dos razones: - Todo el cdigo est escrito en C estndar. - Las libreras grficas utilizadas son OpenGL y su utilizacin se restringe a la fase de renderizado.

8.1.- Partculas
struct tParticle { tParticle *prev,*next; tVector pos; tVector prevPos; tVector dir; int life; tColor color; tColor prevColor; tColor deltaColor; };

// // // // // // // //

Enlaces con otras partculas Posicin actual Posicin anterior Direccin y velocidad actual Tiempo de vida Color actual Color anterior Delta para cambio de color

Los campos pos y prevPos se utilizan para almacenar la posicin actual y la posicin anterior. Los campos color y prevColor son utilizados para almacenar el color actual y el color anterior de la partcula. Estos atributos se almacenan recordando el valor anterior para poder realizar antialiasing de las partculas de forma sencilla. Las partculas se podrn dibujar como puntos, en cuyo caso no se realizar antialiasing y como lneas, caso en el cual el antialiasing va a consistir en dibujar la lnea entre las dos posiciones almacenadas realizando un degradado de color entre los colores almacenados. El campo deltaColor, es la cantidad en que cambiar el color de un frame a otro, es decir, la frecuencia de cambio para el color. El campo life, almacenar el tiempo de vida tal y como comentamos en secciones anteriores En cuanto al campo dir, es un vector que almacenar la direccin de la partcula, pero tambin incluye la velocidad inicial, ya que esta se puede combinar de forma sencilla simplemente multiplicndose por la direccin. Los dos primeros campos, prev y next, se utilizan para estructurar las partculas como una lista doblemente enlazada.

SIA3D

13

Sistemas de partculas Nombre Prctica

8.2.- Emisor
struct tEmitter { long id; char name[80]; long flags; // Informacin de enlaces tEmitter *prev; tEmitter *next;

// ID del emisor // Nombre del emisor // Banderas del emisor

// Puntero al nodo padre // Puntero al nodo hijo

// Informacin de transformacin tVector pos; // float yaw, yawVar; // float pitch, pitchVar; // float speed, speedVar; //

Posicin XYZ Rotacin en Y y variacin Rotacin en X y variacin Velocidad y variacin de velocidad

// Partcula tParticle *particle; // Lista enlazada terminada en NULL int totalParticles; // Total emitidas en cualquier momento int particleCount; // Total emitidas en este momento int emitsPerFrame, emitVar; // Emitidas por frame y su variacin int life, lifeVar; // Timpo de vida y su variacin tColor startColor, startColorVar;// Color inicial y su variacin tColor endColor, endColorVar; // Color final y su variacin // Fsica tVector force; };

// Fuerza de gravedad, viento, etc.

Los campos id, name almacenan un identificador y un nombre para el emisor. El campo flag no se utiliza en esta implementacin, para futuras ampliaciones almacenar banderas indicadoras del emisor. Los campos prev y next no se utilizan, pero estn pensados para la creacin de una lista doblemente enlazada de emisores, tambin se podran utilizar para la implementacin de jerarquas de partculas. Todos los campos xxxVar indican la desviacin o varianza posible de los campos xxx, tal y como hemos comentado en secciones anteriores. El campo pos almacena la posicin del emisor. Los campos yaw y pitch indican unos ngulos de rotacin respecto al eje Y y al eje X respectivamente. Estos ngulos se utilizarn para calcular la direccin inicial de las partculas emitidas. Para ello, una vez calculados los valores de yaw y pitch respecto a sus desviaciones, se obtiene una vector director para la partcula. El campo particle almacenar la lista enlazada de las partculas del sistema (debemos recordar que el emisor se comporta como sistema de partculas). Los campos totalParticles y particleCount almacenan contadores de partculas totales e instantneas. Los campos emitsPerFrame, life y startColor, son autoexplicativos. El campo endColor se utilizar para calcular el deltaColor de una partcula, para ello se realizar la frmula: (endColor - StartColor) / life Esta frmula asegura que la partcula, durante su ciclo de vida, variar su color de forma controlada por los parmetros del emisor.

SIA3D

14

Sistemas de partculas Nombre Prctica

El vector force, almacena la fuerza vectorial total que actuar sobre las partculas. Es un campo muy potente, ya que nos va a permitir crear efectos aplicando fuerzas fsicas.

8.3.- Generacin
BOOL addParticle(tEmitter *emitter) { /// Variables locales ////////////////////////////////////////// ///////////////// tParticle *particle; tColor start,end; float yaw,pitch,speed; //////////////////////////////////////////////////////////////////////// // Si hay un emisor y una partcula en el acumulador // y si no he emitido el mximo if (emitter != NULL && m_ParticlePool != NULL && emitter->particleCount < emitter->totalParticles) { //Obtenemos la particula del acumulador particle = m_ParticlePool; m_ParticlePool = m_ParticlePool->next; //Aadimos al emisor if (emitter->particle != NULL) emitter->particle->prev = particle; particle->next = emitter->particle; particle->prev = NULL; emitter->particle = particle; //Establecer su posicin (relativa a la posicin del emisor) particle->pos.x = 0.0f; particle->pos.y = 0.0f; particle->pos.z = 0.0f; //Guardar posicin anterior para antialising particle->prevPos.x = 0.0f; particle->prevPos.y = 0.0f; particle->prevPos.z = 0.0f; //Calculo del vector direccin inicial yaw = emitter->yaw + (emitter->yawVar * RandomNum()); pitch = emitter->pitch + (emitter->pitchVar * RandomNum()); //Convertir las rotaciones a un vector RotationToDirection(pitch,yaw,&particle ->dir); // Multiplicamos la velocidad speed = emitter->speed + (emitter->speedVar * RandomNum()); particle->dir.x *= speed; particle->dir.y *= speed; particle->dir.z *= speed; //Calculamosr los colores start.r = emitter->startColor.r+(emitter-> startColorVar.r*RandomNum()); start.g = emitter->startColor.g+(emitter-> startColorVar.g*RandomNum()); start.b = emitter->startColor.b+(emitter-> startColorVar.b*RandomNum()); end.r = emitter->endColor.r + (emitter-> endColorVar.r*RandomNum()); end.g = emitter->endColor.g + (emitter-> endColorVar.g*RandomNum()); end.b = emitter->endColor.b + (emitter-> endColorVar.b*RandomNum()); particle->color.r = start.r; particle->color.g = start.g;

SIA3D

15

Sistemas de partculas Nombre Prctica


particle->color.b = start.b; //Calculamos el tiempo de vida particle->life=emitter->life+(int)((float)emitter->lifeVar* RandomNum()); //Calculamos la variacin del color particle->deltaColor.r = (end.r - start.r) / particle->life; particle->deltaColor.g = (end.g - start.g) / particle->life; particle->deltaColor.b = (end.b - start.b) / particle->life; //Aumentamos el contador de partculas emitter->particleCount++; return TRUE; } return FALSE; }

Jeff Lander para no tener que estar creando y destruyendo partculas en tiempo de ejecucin, hizo uso de un acumulador de partculas. Este acumulador no es ms que una lista de partculas no usadas. Cuando se aade una partcula al sistema, se extrae del acumulador, se utiliza y cuando su ciclo de vida termina, se devuelve al acumulador. Este sistema va a limitar el nmero mximo de partculas en el emisor, pero va a hacer que el tratamiento de estas sea muy rpido. Despus de la insercin de la partcula en el emisor, se asignan las posiciones de las partculas. Aqu creemos que el autor cometi un error en el cdigo, ya que asigna a todas las partculas la posicin inicial (0, 0, 0) cuando debera haber asignado la posicin del emisor. Como se puede apreciar en el cdigo, prcticamente todos los atributos se establecen con la formula que ya hemos comentado en otras secciones: ValAtributo = ValMedioAtributo + Rand(-1, 1) x DesviacionAtributo

8.4.- Actualizacin
BOOL updateEmitter(tEmitter *emitter) { ///Variables locales int loop,emits; tParticle *particle, *next; if (emitter != NULL) { if (emitter->particle != NULL) { // Actualizacin de las partculas particle = emitter->particle; while (particle) { next = particle->next; updateParticle(particle,emitter); particle = next; } } // Generacin de las partculas para este frame emits=emitter->emitsPerFrame+(int)((float)emitter-> emitVar*RandomNum()); for (loop = 0; loop < emits; loop++) addParticle(emitter); return TRUE; } return FALSE; }

SIA3D

16

Sistemas de partculas Nombre Prctica

El cdigo anterior es utilizado para realizar la actualizacin del emisor en cada frame. Como se puede apreciar, se recorren todas las partculas del sistema, para realizar su actualizacin. Una vez realizada la actualizacin, se generan las partculas correspondientes para este frame. Es importante sealar, que la generacin debe realizarse tras la actualizacin, en otro caso, las partculas no pasaran por su frame inicial.
BOOL updateParticle(tParticle *particle,tEmitter *emitter) { // Si an es vlida la partcula if (particle != NULL && particle->life > 0) { // Guardamos su posicin anterior para antialiasing particle->prevPos.x = particle->pos.x; particle->prevPos.y = particle->pos.y; particle->prevPos.z = particle->pos.z; // Calculamos su nueva posicin particle->pos.x += particle->dir.x; particle->pos.y += particle->dir.y; particle->pos.z += particle->dir.z; // Aplicamos fuerza global de direccin particle->dir.x += emitter->force.x; particle->dir.y += emitter->force.y; particle->dir.z += emitter->force.z; // Guardamos el color anterior para antialiasing particle->prevColor.r = particle->color.r; particle->prevColor.g = particle->color.g; particle->prevColor.b = particle->color.b; // Calculamos el nuevo color particle->color.r += particle->deltaColor.r; particle->color.g += particle->deltaColor.g; particle->color.b += particle->deltaColor.b; // Decrementamos su tiempo de vida particle->life--; return TRUE; } //Comprobamos si la partcula ha muerto else if (particle != NULL && particle ->life == 0) { // Si ha muerto, la eliminamos y la devolvemos al acumulador if (particle->prev != NULL) particle->prev->next = particle->next; else emitter->particle = particle->next; // Actualizamos los punteros if (particle->next != NULL) particle->next->prev = particle->prev; particle->next = m_ParticlePool; m_ParticlePool = particle; // Actualizamos el numero de partculas emitter->particleCount--; } return FALSE; }

El cdigo anterior realiza la actualizacin de las partculas en un emisor. Se puede ver que en caso de haber completado su ciclo de vida, se ejecutar la Eliminacin de la partcula, que como ya hemos dicho consiste en sacarla de la lista de partculas del emisor y devolverla al acumulador para su reusabilidad, acelerndose as el proceso de insercin y eliminacin de partculas. La mejora en el tiempo, proviene de la eliminacin de cdigo de reserva y liberacin de memoria al insertar y eliminar partculas.
SIA3D

17

Sistemas de partculas Nombre Prctica

En cuanto a la actualizacin de los atributos de la partcula, en el caso de no haber muerto, sigue las directrices que comentamos en secciones anteriores. La nueva posicin se calcular sumando a la posicin actual, el vector de direccin de la partcula. La nueva direccin se calcular sumando al vector, la fuerza vectorial que acta sobre el emisor. El nuevo color consistir en incrementar el actual con su delta, que como ya dijimos, est calculado para oscilar entre los colores que el emisor prepar para la partcula.

8.5.- Renderizado
BOOL renderEmitter(tEmitter *emitter, BOOL antiAlias) { // Variables locales //////////////////////////////////////////////// /////////// tParticle *particle; if (emitter != NULL) { if (emitter->particle != NULL) { //Obtenemos la primera partcula del emisor particle = emitter->particle; // Comprobamos si aplicar antialiasing if (antiAlias) glBegin(GL_LINES); else glBegin(GL_POINTS); //Recorremos las partculas dibujandolas while (particle) { //Aplicamos antialising en caso de ser necesario if (antiAlias) { glColor3f(particle->prevColor.r, particle-> prevColor.g, particle->prevColor.b); glVertex3f(particle->prevPos.x,particle-> prevPos.y,particle->prevPos.z); } //Dibujamos la partcula glColor3f(particle->color.r, particle->color.g, particle->color.b); glVertex3f(particle->pos.x,particle->pos.y,particle>pos.z); //Obtenemos la primera partcula particle = particle->next; } glEnd(); } return TRUE; } return FALSE; }

El renderizado del sistema de partculas realizado por Jeff Lander [9] utiliza OpenGL. El procesamiento es sencillo, recorrer todas las partculas y dibujarlas una a una. La idea de antialiasing utilizada es simple, como ya comentamos: - Si no se activa antialiasing, las partculas son dibujadas como puntos con color utilizando la primitiva grfica GL_POINTS de OpenGL. En este caso hay que

SIA3D

18

Sistemas de partculas Nombre Prctica

especificar para cada punto, un color y un vrtice o vector de posicin tridimensional. Si se activa antialiasing, las partculas son dibujadas como lneas con degradado de color utilizando la primitiva grfica GL_LINES de OpenGL. En este caso hay que especificar para cada lnea un vrtice de inicio y su color y un vrtice final y su color.

En el cdigo se utilizan como primitivas puntos y lneas, pero el sistema sera extensible a otra primitivas, por ejemplo, se podran utilizar cuadrados texturizados, u objetos tridimensionales, bastara con realizar el dibujado de estos objetos en utilizando el color y posicin de la partcula.

8.6.- Aplicacin
Como ltimo apartado mostramos algunos ejemplos de aplicacin del cdigo de Jeff Lander. Las imgenes han sido tomadas del programa demostracin que acompaa al cdigo anterior y que se puede obtener directamente de GameDev.net

Efecto humo:

SIA3D

19

Sistemas de partculas Nombre Prctica

Efecto fuente:

Efecto fuego:

Efecto nieve:

SIA3D

20

Sistemas de partculas Nombre Prctica

9.- Referencias
[1] [BARZEL92] Physically-Based modeling for computer graphics, 1992. [2] Andrew Witkin, Pixar Animation Studios, Physically Based Modeling. Particle System Dynamics, 2001. [3] Allen Martin, Particle systems, http://web.cs.wpi.edu/%7Ematt/courses/cs563/talks95.html, 1995. [4] William T. Reeves, Lucasfilm Ltd, Particle systems: A technique for modeling a class of fuzzy Objects, 1983. [5] Paramount Pictures, Star Trek II: The wrath of Khan, 1982. [6] John van der Burg, Game developer magazine, Building an advanced particle system, 2000. [7] David Tonnesen, Particle systems for artistic expression, 2001. [8] Kent _dot_ lay, GameDev.net, Designing an extensible particle system using C++ and templates, 2003. [9] Jeff Lander, Game developer magazine, The ocean spray in your face, 1998. [10] Ernesto Coto, Universidad Central de Venezuela, Introduccin a los sistemas de partculas, 2004. [11] Jens Krger, Meter Kipfer, Polina Kondratieva y Rdiger Westermann, Universidad tcnica de Mnchen (Alemania) A particle system for interactive visualization of 3D flows, 2005.

SIA3D

21