Comunidad orientada al desarrollo de videojuegos

Unity3D – Partículas de Fuego

Hoy vamos a crear un pequeño fuego, muy útil en los juegos si queremos usar desde antorchas, hogueras, algún efecto de alguna explosión o simplemente por si tenemos un entorno destruido y queremos darle más detalle con estas partículas en concreto.

En primer lugar vamos a empezar con una textura de base. Esta puede ser de cualquier tipo, desde una imagen de fuego buscada directamente en internet, a un dibujo que podamos hacer nosotros directamente en Photoshop o en algún software de dibujo, lo único que tiene que tener para este ejemplo es un fondo negro y que tenga la transparencia en el canal alpha de nuestra textura. Para este ejemplo yo voy a partir de esta que os pongo a continuación.

Fire1

Una vez que tenemos la imagen, lo primero que tenemos que hacer es, para tener nuestro trabajo organizado, crear tres carpetas que vamos a usar, una que se llame Prefabs, donde guardaremos la partícula final, otra que se llame Textures, donde guardaremos esta textura que vamos a usar, y finalmente una carpeta Materials, donde guardaremos el material asociado a estas partículas.

Unity1

Empezamos lo primero de todo importando esta textura que vamos a usar de base para el sistema de partículas en la carpeta de Textures. Acto seguido vamos a la carpeta de Materials y ahí con el botón derecho elegimos crear un nuevo Material. Una vez creado, lo elegimos, por ejemplo, del tipo mobile, particles, additive, así de base vamos a poder usarla tanto en dispositivos móviles como en aquellos que no lo sean.

Unity2

Una vez creado el material arrastramos directamente nuestra textura al material para tenerlo, quedándonos algo de este estilo:

Unity3

En el que podemos observar como ya nuestro material tiene transparencia donde no se encuentra el “fuego”.

Ahora empezamos ya con el trabajo propiamente de crear el sistema de partículas en sí. Para ello, vamos a crear un nuevo sistema de partículas en nuestra escena (Menú Game Object, Create Other, Particle System) y posicionarlo en el suelo de nuestra escena. Una vez posicionada en la escena veremos que nos da toda una lista de opciones, que serán las que veremos y comentaremos a continuación para poder conseguir el acabado de este fuego que vamos a crear.

Unity4

En esta primera parte simplemente tenemos que meter unos valores variables tanto en Start Lifetime, Start Speed, Start Size y Start Rotation para conseguir un patrón de creación de partículas para el fuego en el que tengan distintas velocidades a la hora de moverse desde su nacimiento hasta su extinción, así como distintos tamaños para dar más sensación de aleatoriedad (entre 0,6 y 1, por ejemplo) y de giro (entre 0 y 360). Hay que pensar que el fuego es una de las partículas que más aleatoriamente se generan, así que aquí se puede jugar directamente con los valores hasta encontrar los que mejor queden, pero por ejemplo una configuración como la de la imagen anterior estaría perfecta como base para empezar a trabajar.

Unity5

En Emission marcamos la cantidad de partículas que queremos emitir, en este caso por unidad de tiempo, así que una cantidad de 10-12 es un buen valor de base. Siempre se puede cambiar ese valor según la intensidad del fuego que queramos crear, y no olvidar marcar que queremos que esta emisión se haga a lo largo del tiempo, no del otro valor, el de distancia, que trae justo debajo de nuestro valor de partículas.

Unity6

En Shape controlamos la forma en la que se van a dispersar estas partículas desde su creación hasta su extinción. De ahí que si queremos un fuego de una hoguera o de una antorcha pongamos en Shape que queremos un Cone, en el que añadiremos un ángulo medio de unos 25 grados y un radio lo más pequeño que podamos, porque este valor controla el punto de emisión de las partículas al nacer, con lo que cuanto más alto lo tengamos más dispersión encontraremos en la base, y para fuegos del estilo de antorchas o de hogueras lo mejor es tener un punto cuanto más concentrado mejor. Finalmente le diremos que queremos que emita esas partículas desde la base.

Otro valor bastante importante y que mucha gente suele olvidar a la hora de generar las partículas es usar la variable de Color over Lifetime. Con este valor lo que podemos conseguir es que las partículas, tanto en su nacimiento como en su muerte no tengan siempre la misma opacidad. En casos como el fuego, siempre partimos de unas partículas que se crean con poca opacidad, alcanzan su cota máxima de color y luego según siguen subiendo se van destruyendo y haciéndose cada vez más transparentes. La mejor manera de conseguir esto es usando un gradiente en esta opción, y para ello nada mejor que ilustrar este comportamiento con colores. Como lo que queremos es que las partículas nazcan con cierta transparencia, hacemos que empiece en un color gris medio, poco a poco va pasando a un color blanco puro, que alcanza al poco de crearse, y finalmente, al final, le ponemos un color negro que hará que la partícula, según va avanzando el tiempo vaya haciéndose cada vez más transparente hasta que finalmente desaparezca, de ahí el usar un color negro al final.

Os tendría que quedar algo de este estilo:

Unity7

El siguiente valor a tocar sería Size over Lifetime. De este poco hay que explicar, ya que lo que queremos hacer es que las partículas a lo largo del tiempo pasen de su tamaño de creación a que desaparezcan completamente, así que para eso podemos usar unos valores de este estilo para conseguir el efecto que buscamos:

Unity8

Otro valor que puede servirnos para darle más realismo a estas partículas de fuego es usar Rotation over Lifetime, que lo que hace es entre los valores que le pongamos (Random Between Two Constants) hacer que las partículas a lo largo de su vida vayan realizando un giro. Aquí hay que tener cuidado, porque si bien puede quedar bastante bien un giro pequeño (por ejemplo entre -60 y 60) el usar valores muy altos puede hacer que las llamas finales queden totalmente irreales. También comentar que aquí también es bueno usar, siempre que se pueda, valores en el rango de los valores negativos y positivos, porque esos dos valores no indican en ningún momento el valor de rotación en valores absolutos, sino que lo que haces poniendo a un lado valores negativos y a otro positivos es decirle que puedan girar tanto a la izquierda como a la derecha a partir de su posición de creación.

Unity9

Finalmente, y ya para terminar, nos ocupamos de la parte más importante, la de Renderer, donde le vamos a decir cómo queremos que esa partícula se muestre finalmente y donde le vamos a poner nuestro material para que finalmente se vea como queremos. En primer lugar, como Render Mode vamos a elegir Billboard, que es la manera que tenemos de decirle a nuestro sistema de partículas que nos genere planos que directamente van a estar enfocados a la cámara, que es la mejor manera para representar nuestro fuego en pantalla.

En segundo lugar, donde pone Material, simplemente tenemos que agregar nuestro material que anteriormente creamos para poder ver el aspecto definitivo de nuestras partículas. Decir que este paso se puede hacer el primero de todos a la hora de empezar a configurar los valores del sistema de partículas, ya que así ya vamos viendo de una manera más directa como está quedando nuestro fuego o cualquier otra cosa que estemos creando.

Unity10

Finalmente, y una vez hechos los cambios necesarios en nuestro sistemas de partículas, simplemente arrastrándolo de la jerarquía de nuestro proyecto en Unity, a la carpeta que creamos anteriormente en el proyecto, llamada Prefabs, podremos tener disponible para usarlo siempre que queramos.

UnityFinal

Aquí tenéis un package de Unity con el proyecto completo por si todavía tenéis algún problema o queréis tener una base desde la que comenzar:

Package Unity Partículas de Fuego

Leave a Reply