
El sistema de partículas de Unity
Volumen 1
El sistema de partículas de Unity es bastante completo, y puede gozar de complejidad infinita según lo que queramos llegar a conseguir con él.
Este artículo pretende ser un conjunto de capítulos de explicación técnica y creativa sobre cómo crear sistemas de partículas complejos y alucinantes. Como siempre empezaremos con su parte técnica y a medida que avancemos iremos haciendo artículos más divertidos y artísticos.
El sistema de partículas de Unity
El sistema de partículas de Unity no es complicado de usar ya que es muy intuitivo. El problema vendrá con la imaginación para saber qué queremos hacer y tener en mente los conocimientos técnicos para solucionar esos problemas.
Primero de todo, ¿para qué sirve el sistema de partículas de Unity? Para hacer magia… Bueno, no es la descripción más específica pero técnicamente hablando usaremos los sistemas de partículas para simular disparos, explosiones, tormentas, fuego, tormentas de fuego con explosiones y disparos… Y un sinfín de efectos especiales para nuestro videojuego mediante la edición de los valores que tienen en cada campo. En cuanto sepas como funciona te sentirás como un verdadero mago de la Comarca.
Pero antes de sentirnos mínimamente poderosos vamos a tener que ver qué hace cada apartado de nuestro sistema de partículas para saber que tenemos que tocar para cada cosa.
Antes que nada, vamos a crear el sistema de partículas de Unity. Para ello, vamos a hacer clic derecho en el apartado Hierarchy, donde se nos muestran todos los objetos de nuestro escenario, entonces nos dirigimos a Effects y hacemos clic en Particle System. Al hacer clic se nos generará en nuestro escenario un elemento Partycle System al cual le podremos cambiar el nombre al que queramos y por defecto se empezará a reproducir el efecto predeterminado que se asemeja a nieve lentamente subiendo hacia el cielo.
A partir de ahí, seleccionando ese nuevo elemento, se nos mostrarán los campos y valores propios que tiene dentro del panel Inspector.
Muy bien, vamos a ir analizando qué hace cada campo del sistema de partículas, en este artículo veremos el apartado general, emission y shape, si sabéis inglés tenéis media batalla ganada ya que en cada campo si os colocáis encima se os explicará que hace cada cosa en ese idioma.
GENERAL
Antes de entrar en su explicación y ejemplos, os aconsejo que le echéis un vistazo a las flechas que aparecen al lado de cada campo que por norma general nos mostraran opciones de como dar los valores, esto no solo sucederá en el apartado general sinó también en los demás:
Esto nos servirá para dar valores aleatorios entre dos valores o curvas. Si seleccionamos entre dos valores, lo cual es una opción bastante común, podremos decir que las partículas empiecen con un tamaño entre 1 y 5 unidades, de forma aleatoria se generaran partículas entre esos valores.
En este articulo veremos los siguientes apartados.
Duration
Es el campo que determina durante cuánto tiempo podrá generar nuevas partículas este sistema. Repito, generar no es lo mismo que existir, es decir, las partículas ya generadas en el segundo 4,99 seguirán existiendo hasta morirse por el valor de otro campo.
Looping
Permite que el sistema sea de ciclo infinito o finito. Si te has fijado hasta ahora tu sistema de partículas no paraba de reproducirse.
Prewarm
Está relacionado con el Looping, el problema de un Looping es que normalmente empieza desde cero. Si se supone que eso ya funcionaba desde antes de llegar debería ya estar en pleno trabajo y no empezando el sistema. Un ejemplo: Las antorchas de una mazmorra arderán desde el primer momento porque así lo queremos, antes de que incluso el jugador entre a esta.
Start Delay
Podemos traducirlo como “empezar con retraso de tiempo”. La idea de este es la contraria al Prewarm, este tarda un tiempo extra en activarse, las unidades son segundos y si tenemos el Looping activado veremos que nuestro sistema tardará la cantidad de tiempo que hayamos introducido y después de eso se reproducirá infinitamente, este valor solo funcionará al inicio de la primera reproducción del sistema de partículas, en los loopings posteriores no habrá más retrasos de tiempo.
Start Lifetime
Es el tiempo de vida de la partícula generada. Por tanto, si mi sistema de partículas tiene una duración de 5 segundos y mi partícula vive 5 segundos nuestro efecto podría tardar en desaparecer completamente hasta 10 segundos. Ejemplos de esto podrían ser el humo de una fábrica, el vapor de cualquier máquina…
Start Speed
Es la velocidad a la que se mueven las partículas. Cuanto más valor tenga más rápidas se moverán y por tanto su dispersión será mayor. Una bala, la caída de una roca o el movimiento de una burbuja.
Ahora entramos en una parte donde veremos continuamente 3D con distintos campos y luego su campo normal sin el 3D.
Para empezar veamos el campo normal y luego trataremos el 3D.
Start Size
Es el tamaño con el que empieza nuestra partícula. Por ejemplo un copo de nieve, una chispa del fuego, una bala de cañón…
Start Rotation
Es la rotación inicial con la que va a empezar nuestra partícula, la pregunta es: ¿para qué nos sirve rotar una partícula? Esto ya dependerá de nuestra sistema pero imaginemos la típica bomba de los juegos de guerra, al explotar salen pedazos de piedra y demás restos despedidos, podríamos hacer que saliesen disparados en rotaciones distintas, porque si no quedaría muy falso…
Por el momento solo estamos viendo campos con un solo valor fijo pero ya os adelanto que estos campos pueden contener más de un valor con lo que jugaremos más adelante. Como comentaba anteriormente, los campos que contienen 3D en su nombre es porque podéis usar los 3 ejes de un objeto 3d para que un mismo objeto acabe quedando más estirado y aplastado, que no simplemente escalarlo de manera proporcional a su tamaño normal o bien que la rotación sea más caótica y por tanto rote en varios ejes a la vez.
Flip Rotation
Tiene un valor entre 0 y 1. Lo que se busca con el valor que pongamos es que todo parezca siempre más caótico ya que va a invertir los grados que hayamos puesto en Start Rotation y va a hacer que esos mismos grados tengan valores negativos.
Los sistemas de partículas con cierto orden quedan falsos para sucesos naturales, pueden ser interesantes si se buscan efectos más artificiales o humanos pero la naturaleza tiende a ser más caótica que ordenada.
Start Color
Será el color inicial de la partícula. Con este valor hay que tener cuidado posteriormente, ya que puede mezclarse con otros campos, como mapas de bits personalizados o el apartado de Color over Lifetime, y podría ser que no consigamos el tono de color que queremos para los efectos posteriores a nuestras partículas. Por norma general recomiendo dejarlo en blanco. Su utilidad es un tanto fantasiosa pero puede funcionar si lo que queremos es que se generen partículas que tengan colores distintos a medida que se generan. Por ejemplo un disparador de pelotas de tenis que sacara con cada disparo una pelota de distinto color.
Gravity Modifier
Como veis de primeras nuestro sistema tiene gravedad 0, es por eso que nuestras partículas se elevan y nunca caen. Por qué se elevan? Si os habéis fijado sí que tenemos una velocidad inicial de nuestra partícula y la encontramos en Start Speed con un valor de 5, por eso se elevan inicialmente. Si aumentáis a positivo este valor apreciaréis como empiezan a caer por gravedad, en cambio en negativo flotarán y cada vez se acelerarán más en ambos lados del valor.
Simulation Space
Este es un campo muy importante ya que puede hacer que tu sistema no funcione correctamente. El concepto de este campo es la idea de que tu partícula dependa de la posición de su generador o que una vez generada esa partícula se vuelva totalmente libre e independiente del sistema que la ha generado. Por lo que tenemos dos sistemas predefinidos el “Local” y el “World”. Una simulación local podría ser el rayo láser de una de esos pequeños punteros láser ya que éste se mueve tan rápido que no podremos apreciar la libertad de esa partícula, en este caso fotón, mientras que en una simulación world, podríamos encontrar muchísimos ejemplos como… El humo del cigarrillo que se queda atrás mientras la persona va andando, las motas de barro que puede soltar un coche sucio, etc… Por norma general la mayoría de sistemas estarán en simulación global.
Simulation Speed
A veces puede suceder que a pesar de que aumentamos la gravedad o la velocidad de una partícula o su propia animación, lo veremos más adelante con las texturas animadas, el sistema de partículas se sigue viendo a cámara lenta y no convence, podemos usar este campo para que todo suceda con tiempo acelerado, obviamente eso influirá en todos los valores que hayamos usado hasta el momento y estén claramente relacionados con el tiempo. Duración, vida de la partícula, etc…
Delta Time
Tenemos dos posibles valores, escalado o no escalado esto dependerá de si queremos que hayan efectos que se sigan reproduciéndose cuando pausemos el juego por ejemplo. Puede ser un toque interesante que las antorchas sigan estando animadas a pesar de que estemos en el menú de equipamiento de un personaje, momento donde muchos juegos pausan la acción real para darte la posibilidad de equiparte lo que necesites pero podemos seguir reproduciendo los sistemas de partículas que sean del escenario.
Scaling Mode
Nos permitirá escalar nuestro sistema en base a distintos orígenes y por tanto variará la creación de nuestro sistema, en todo caso este es probar el que más convenza.
Play on Awake
Sirve para reproducirse automáticamente al abrir el escenario como juego.
Emitter Velocity
Esto puede hacer que simule la velocidad en base al movimiento del sistema o a su rigidbody que es la parte de simulación de físicas de Unity. Un ejemplo en la realidad sería… ¿qué pelota va más rápida la que lanzo desde un tren en movimiento o la que lanzo desde mi casa? Claramente ninguna de ellas ya que dependerá de hacía que dirección del tren lance la pelota. ¿A qué se debe esto? A que estaré lanzando la pelota a favor o en contra de la velocidad del tren y por tanto la velocidad de inercia del tren se deberá sumar o restar, según en qué dirección lance, al lanzamiento de la pelota. Este último efecto de suma o resta de velocidades lo hará el rigidbody, mientras que el transform lo interpretará distinto, de manera más sencilla.
Max Particles
Éste se entiende por sí solo, solo debes tener en cuenta que no podrá generar más partículas que el número que pongamos aquí. Si yo pongo un máximo de 1000 partículas, aunque yo genere 100 partículas por segundo y se reproduzca infinitamente, a partir de los 10 segundos se parará la generación de partículas hasta que se hayan muerto las que ya se habían generado.
Auto Random Seed
Cada vez que simulemos el escenario en videojuego se iniciará distinto nuestro sistema siempre y cuando respete todos los valores que nosotros le hayamos añadido.
Stop Action
Este campo nos avisa de qué hacer en caso de parar nuestro efecto. ¿Cómo se parará? Mediante programación. Desactivarse y por tanto permanecer en el mismo sitio generado pero inactivo, destruirse por lo que se eliminará del escenario completamente y Callback, volver a llamar, en caso de pararse de manera que se volverá a reproducir.
Culling Mode
Saber si nuestro efecto debe reproducirse o pausarse si no se está mirando. Esto puede ser interesante según si es para ahorrar rendimiento o generar efectos raros como que al no mirar la explosión que tenemos detrás nunca se acabe. Por norma general, el modo automático funciona para la mayoría de efectos comunes.
Ring Buffer Mode
Los sistemas que ya se les haya acabado la duración no son eliminados sino que se quedan remanentes en un sitio hasta que la parte de memoria dirigida a estos sistemas sea excedida y entonces los nuevos sistemas borrarán la memoria.
Muy bien, ya vamos por la mitad del camino a partir de aquí son menús más situacionales que dependerán de lo que queramos hacer, es por eso que los deberemos activar mediante la cajita blanca que hay al lado izquierdo del nombre de cada una de estas secciones.
Algunos menús niegan a otros o como mínimo no es muy normal tener varios activos a la vez.
Emission
El apartado emission nos va a servir para definir la cantidad de particles que se generen con el sistema de partículas de Unity. Podremos definirlo de 3 modos distintos:
Rate over …
El ratio de generación de partículas será en base a…
Time
Nos permite generar un valor, el que introducimos, de partículas en base a 1 segundo.
Distance
En este caso, según la cantidad de unidades de distancia de Unity que se mueva, el sistema de partículas de Unity, va a generar X partículas, por defecto es 0.
Si ponéis cualquier cantidad y probáis a darle a Play al sistema de partículas no veréis que pase nada, eso se debe a que tendréis que mover el sistema para que funcione, este modo de generación está pensado para que cuando un personaje se mueva suelte un poco de polvo detrás de sus pies, por ejemplo.
Bursts
Para finalizar tenemos un modo no tan visible a primera vista, es el modo Bursts, el cual se puede traducir como explosión, y es que en este modo podremos generar disparos de escopeta o, efectivamente, explosiones de granada ya que nuestro sistema va a soltar de golpe una cantidad definida de partículas. Veréis que se pueden tocar varios valores, desde el campo de inicio de generación de partículas, hasta la probabilidad de que suceda ese disparo. Los que pueden parecer más enrevesados son los ciclos y el intervalo.
Básicamente si queremos que haya más de un ciclo dentro de la duración de nuestro sistema, es decir más de un disparo, y por tanto, si hay más de un disparo cuál será el intervalo entre estos. Estos campos nos pueden ayudar a generar, por ejemplo, un arma de ráfaga. Con un ciclo de 3 y un intervalo de 0.15, cambiando el conteo, Count, a 1, seremos capaces de ver 3 disparos con un retardo de tiempo para cada uno. Aunque no acaba de parecer un arma muy precisa ya que dispara hacia distintos lados… Esto lo veremos con el siguiente apartado, Shape. Síganme!
SHAPE
Este apartado viene por defecto activado siempre con la forma de cono, podemos cambiar este campo clicando en un listado desplegable que encontraremos en este menú. Tenemos varios tipos de formas cada una nos va a servir para efectos muy diversos, desde formas con volumen hasta formas 2D. Tenemos formas especiales y muy útiles como la Mesh que comento al final del artículo.
No os puedo comentar todos los campos ya que van a ser distintos en base a la forma escogida pero, hay algunos que se repiten y son más difíciles de entender o no se ven a simple vista.
Radius Thickness
El objetivo de este campo es saber si puede usar todo el interior de la forma escogida o bien, solo puede usar la superficie de la forma escogida. Cuanto más cercano a 1, más espacio del interior de la forma podrá usar y a menos más cercano a la superficie deberán generarse las partículas.
Como ejemplo, podría comentar la polución del humano en la Tierra como un sistema de partículas donde éstas, la polución, se generan desde la superficie de la Tierra, una esfera, y no desde el interior de ésta ya que de momento no vivimos bajo tierra, por tanto usaríamos el Radius Thicknes con un valor de 0. Un ejemplo de valor 1, usando la misma Tierra, podría ser la generación o erupción de un volcán ya que la lava si que proviene del interior de la Tierra.
Arc
El arc será la cantidad de grados desde la cual permitiremos que se generen las partículas en base a la forma escogida.
Position, rotation y scale
Tenemos un par de menús más como el de posición, rotación y escala, estos simplemente hacen lo que dice el campo en el eje local, si no sabéis que es el eje local, primero tendréis que aprender la diferencia entre eje local y global ya que os va a servir para un sinfín de cosas con las partículas y entender su diferencia es muy importante. Los randomize y spherize son para indicar hacia donde se van a dirigir las partículas o desde donde van a empezar, son conceptos más fáciles de ver que de explicar.
Randomize Direction
En randomize direction haremos que cuanto más cercano a 1 sea ese valor más aleatoria podrá ser su dirección una vez salga de la forma original, podríamos hasta tener una partícula que se escapara para luego volver, el problema es que no podemos controlar la dirección o que tan aleatorio va a ser, el spherize direction veréis que limita el campo anterior.
Para acabar tenemos el Randomize position, éste es muy caótico ya que en base a la Shape original que use para generar las partículas, podremos agregarle un valor que será el que pongamos en este campo para que la partícula salga desplazada X valor en base a ese campo. Si ponemos valores muy grandes veréis que las partículas se acaban generando fuera de nuestra forma y podría parecer más un efecto ambiental que un efecto generado en una zona concreta.
Mesh
Ésta se basa en la generación de partículas a partir de una Mesh, malla en español, que podría ser nuestro personaje cuando esté ardiendo, envenenado, mojado, etc… Como diré varias veces, el límite estará en vuestra imaginación y en cómo sepáis de bien lo que hace cada campo.
En relación al ejemplo de ráfaga anterior, bastará con desactivar la Shape y ya saldrán todos en línea recta.
gemma
menuda explicacion, estupendo Jafet..
gemma
muy bien explicado Jaffet.