Work in progress
The content of this page was not yet updated for Godot
4.3
and may be outdated. If you know how to improve this page or you can confirm
that it's up to date, feel free to open a pull request.
Sistemas de partículas 2D
Introducción
Los sistemas de partículas se utilizan para simular efectos físicos complejos como chispas, fuego, partículas mágicas, humo, niebla, etc.
La idea es que una "partícula" se emite a un intervalo fijo y con una vida útil fija. Durante su vida útil, cada partícula tendrá el mismo comportamiento básico. Lo que hace que cada partícula sea diferente y proporciona un aspecto más orgánico es la "aleatoriedad" asociada a cada parámetro. En esencia, crear un sistema de partículas significa establecer parámetros físicos básicos y luego agregarles aleatoriedad.
Nodos de partículas
Godot provee dos tipos de nodos distintos para partículas 2D, GPUParticles2D y CPUParticles2D. GPUParticles2D es más avanzado y utiliza la GPU para procesar los efectos de partículas. CPUParticles2D es una opción manejada por CPU que está cercana en características a lo ofrecido por GPUParticles2D, pero con menor prestaciones. Por otro lado, CPUParticles2D puede funcionar mejor en sistemas de bajos recursos o en situaciones de cuellos de botella en GPU.
Mientras que GPUParticles2D se configura a través de ParticleProcessMaterial (y opcionalmente con un shader), las opciones coincidentes se proporcionan a través de las propiedades del nodo en CPUParticles2D (con la excepción de la configuración de trail).
Se puede convertir un nodo GPUParticles2D en un nodo CPUParticles2D haciendo clic en el nodo en el inspector, seleccionando la ventana 2D y seleccionando GPUParticles2D > Convertir a CPUParticles2D en la barra de herramientas de la misma ventana.
El resto de este tutorial va a utilizar el nodo GPUParticles2D. Primero, añade un nodo GPUParticles2D a tu escena. Después de crear este nodo notarás que sólo se ha creado un punto blanco, y que hay un icono de advertencia junto a tu nodo GPUParticles2D en el inspector. Esto se debe a que el nodo necesita un ParticlesProcessMaterial para funcionar.
ParticleProcessMaterial
Para agregar un material de procesado al nodo de partículas, ve a Process Material en el panel del inspector. Haz clic en la casilla junto a Material y selecciona New ParticleProcessMaterial en el menú desplegable.
Tu nodo GPUParticles2D ahora debería estar emitiendo puntos blancos hacia abajo.
Textura
Un sistema de partículas puede utilizar una sola textura o una animación flipbook. Un flipbook es una textura que contiene varios fotogramas de animación que se pueden reproducir o elegir al azar durante la emisión. Esto es equivalente a una hoja de sprites para partículas.
La textura es definida en la propiedad Textura:
Usando AnimationTree
Los flipbooks de partículas son adecuados para reproducir efectos complejos como humo, fuego y explosiones. También se pueden utilizar para introducir variaciones aleatorias de textura, haciendo que cada partícula utilice una textura diferente. Puede encontrar imágenes de flipbooks de partículas existentes en línea o renderizarlas previamente utilizando herramientas externas como Blender o EmberGen.
Ejemplo de un sistema de partículas que utiliza una textura de flipbook
El uso de un flipbook de animación requiere una configuración adicional en comparación con una textura individual. Para fines de demostración, usaremos esta textura con 5 columnas y 7 filas (haga clic derecho y elija Guardar como…):
Créditos: JoesAlotofthings (CC BY 4.0)
Para utilizar un flipbook de animación, debe crear un nuevo CanvasItemMaterial en la sección Material del nodo GPUParticles2D (o CPUParticles2D):
Creando un CanvasItemMaterial en la parte inferior del inspector de nodos de partículas
En este CanvasItemMaterial, habilite Animación de partículas y establezca Frames H y Frames V según el número de columnas y filas presentes en la textura de su flipbook:
Configurar CanvasItemMaterial para la textura del flipbook de ejemplo
Una vez hecho esto, la Sección de animación en ParticleProcessMaterial (para GPUParticles2D) o en el inspector CPUParticles2D será efectiva.
Truco
Si la textura de su flipbook tiene un fondo negro en lugar de un fondo transparente, también deberá configurar el modo de fusión en Sumar en lugar de Mezclar para una visualización correcta. Alternativamente, puedes modificar la textura para que tenga un fondo transparente en un editor de imágenes. En GIMP, esto se puede hacer usando el menú Color > Color a Alfa.
Parámetros de Tiempo (Time)
Lifetime (Tiempo de vida)
El tiempo en segundos que cada partícula estará viva. Cuando termina su tiempo de vida, se crea una nueva partícula para reemplazarla.
Tiempo de vida: 0.5
Tiempo de vida: 4.0
One Shot (Una Vez)
Cuando está habilitado, un nodo GPUParticles2D emitirá todas sus partículas una vez y después nunca más.
Preprocess (Preproceso)
Los sistemas de partículas comienzan con cero partículas emitidas, luego comienzan a emitir. Esto puede ser un inconveniente al cargar una escena y sistemas de partículas como una antorcha, niebla, etc. ya que comienzan a emitir en el momento en que entras. El preproceso se usa para permitir que el sistema procese un número determinado de segundos antes de que se dibuje por primera vez.
Speed Scale (Escala de Velocidad)
La escala de velocidad tiene un valor predeterminado de 1, y se usa para ajustar la velocidad de un sistema de partículas. Disminuir el valor hará que las partículas se vuelvan más lentas, aumentar el valor hará que las partículas sean mucho más rápidas.
Explosiveness (Explosividad)
Si el tiempo de vida es 1 y hay diez partículas, significa que se emitirá una partícula cada 0.1 segundos. El parámetro de explosividad cambia esto y obliga a las partículas a emitirse todas al mismo tiempo. Los rangos son:
0: Emite partículas a intervalos regulares (valor predeterminado).
1: Emite todas las partículas simultáneamente.
Los valores intermedios también están permitidos. Esta característica es útil para crear explosiones o ráfagas repentinas de partículas:
Randomness (Aleatoriedad)
Todos los parámetros de física se pueden aleatorizar. Los valores aleatorios varían de 0 a 1. La fórmula para aleatorizar un parámetro es:
initial_value = param_value + param_value * randomness
FPS fijo
Esta configuración se puede usar para configurar el sistema de partículas para que se renderice a un FPS(Fotogramas Por Segundo) fijo. Por ejemplo, cambiar el valor a 2 hará que las partículas se rendericen a 2 fotogramas por segundo. Tenga en cuenta que esto no ralentiza el sistema de partículas en sí.
Nota
Godot 4.3 does not currently support physics interpolation for 2D particles. As a workaround, disable physics interpolation for the particles node by setting Node > Physics Interpolation > Mode at the bottom of the inspector.
Fract Delta
Esto se puede usar para activar o desactivar Fract Delta.
Parámetros de Dibujo (Drawing)
Visibility Rect (Rectángulo de Visibilidad)
El rectángulo de visibilidad controla la visibilidad del sistema de partícuas. Si el rectángulo está fuera del Viewport, el motor no dibujará en pantalla las particulas del sistema.
Los valores W y H controlan el ancho y alto del rectángulo de visibilidad. Los valores X y Y controlan la posición de la esquina superior izquierda del rectángulo de visibilidad, relativo al emisor de partículas.
Puedes hacer que Godot genere un Rectángulo de Visibilidad automáticamente usando la barra de herramientas en la parte superior de la vista 2D. Para ello, selecciona el nodo GPUParticles2D y haz clic en Particles > Generate Visibility Rect. Godot simulará el nodo Particles2D emitiendo partículas por unos segundos y creará un rectángulo que se ajuste a la superficie ocupada por las partículas.
Puedes controlar la duración de la emisión con la opción Tiempo de generación (seg). El valor máximo es de 25 segundos, si necesitas más tiempo para que tus partículas se muevan, puedes cambiar temporalmente la propiedad preprocess en el nodo Particles2D.
Coordenadas Locales
Por defecto esta opción está activada, y significa que el espacio al que se emiten las partículas es relativo al nodo. Si se mueve el nodo, todas las partículas se mueven con él:
Si se desactiva, las partículas se emitirán en el espacio global, lo que significa que si el nodo se mueve, las partículas ya emitidas no se verán afectadas:
Draw Order (Orden de Dibujo)
Esto controla el orden en el que se dibujan las partículas individuales. Index significa que las partículas son dibujadas de acuerdo a su orden de emisión (por defecto). Lifetime significa que se dibujan en el orden de la vida restante.
Ajustes del material de procesado de partículas
Dirección
Esta es la dirección base en la que las partículas emiten. El valor por defecto es "Vector3(1, 0, 0)`` que hace que las partículas emitan hacia la derecha. Sin embargo, con la configuración predeterminada de la gravedad, las partículas irán directamente hacia abajo.
Para que esta propiedad se note, se necesita una velocidad inicial mayor que 0. Aquí, fijamos la velocidad inicial en 40. Notará que las partículas se emiten hacia la derecha, y luego bajan debido a la gravedad.
Spread (Propagación)
Este parámetro es el ángulo en grados que se añadirá aleatoriamente en cualquier dirección a la base Direction. Un spread(Dispersión) de 180 emitirá en todas las direcciones (+/- 180).
Llanura
Esta propiedad sólo es útil para las partículas 3D.
Gravity (Gravedad)
La gravedad aplicada a cada partícula.
Initial Velocity (Velocidad Inicial)
Initial Velocity es la velocidad a la que se emitirán las partículas (en píxeles/segundo). La velocidad puede ser modificada posteriormente por la gravedad u otras aceleraciones (como se describe más adelante).
Angular Velocity (Velocidad Angular)
Angular velocity es la velocidad angular inicial aplicada a las partículas.
Spin Velocity (Velocidad de Giro)
Spin velocity es la velocidad a la que las partículas giran alrededor de su centro (en grados/segundo).
Orbit Velocity (Velocidad de la Órbita)
Orbit velocity se utiliza para hacer que las partículas giren alrededor de su centro.
Linear Acceleration (Aceleración Lineal)
La aceleración lineal aplicada a cada partícula.
Radial Acceleration (Aceleración Radial)
Si esta aceleración es positiva, las partículas se aceleran lejos del centro. Si es negativo, se atraen hacia él.
Tangential Acceleration (Aceleración Tangencial)
Esta aceleración utilizará el vector tangente hasta el centro. La combinación con la aceleración radial puede producir buenos efectos.
Damping (Amortiguación)
Damping aplica fricción a las partículas, forzándolas a detenerse. Es especialmente útil para chispas o explosiones, que generalmente comienzan con una alta velocidad lineal y luego se detienen a medida que se desvanecen.
Angle (Ángulo)
Determina el ángulo inicial de la partícula (en grados). Este parámetro es mayormente útil aleatorizado.
Escala
Determina la escala inicial de las partículas.
Color
Permite cambiar el color de las partículas emitidas.
Hue variation (Variación de tono)
El valor de Variation establece la variación de tono inicial aplicada a cada partícula. El valor Variation Random controla el ratio de aleatoriedad de la variación de tono.
Animación
Nota
La animación del flipbook de partículas solo es efectiva si el CanvasItemMaterial utilizado en el nodo GPUParticles2D o CPUParticles2D ha sido configurado adecuadamente.
Para configurar el flipbook de partículas para reproducción lineal, establezca los valores de Velocidad Min y Velocidad Max en 1:
Configurar la animación de partículas para su reproducción durante la vida útil de la partícula
De forma predeterminada, el bucle está deshabilitado. Si la partícula termina de reproducirse antes de que finalice su vida útil, seguirá usando el último fame del flipbook (que puede ser completamente transparente dependiendo de cómo esté diseñada la textura del flipbook). Si el bucle está habilitado, la animación volverá al primer frame y reanudará la reproducción.
Dependiendo de cuántas imágenes contenga su hoja de sprites y de cuánto tiempo esté viva su partícula, es posible que la animación no se vea fluida. La relación entre la vida útil de las partículas, la velocidad de la animación y la cantidad de imágenes en la hoja de sprites es la siguiente:
Nota
A una velocidad de animación de 1.0, la animación llegará a la última imagen de la secuencia justo cuando finalice la vida útil de la partícula.
Si desea que el flipbook de partículas se utilice como fuente de texturas de partículas aleatorias para cada partícula, mantenga los valores de velocidad en 0 y establezca Offset Max en 1:
Configuración de animación de partículas para compensación aleatoria en la emisión
Tenga en cuenta que el FPS Fijo del nodo GPUParticles2D también afecta la reproducción de la animación. Para una reproducción fluida de la animación, se recomienda establecerlo en 0 para que la partícula se simule en cada frame renderizado. Si esta no es una opción para su caso de uso, configure FPS Fijo para que sea igual a la velocidad de fotogramas efectiva utilizada por la animación del flipbook (consulte la fórmula más arriba).
Formas de Emisión
Los ParticleProcessMaterials (materiales de procesamiento de partículas) permiten establecer una Emission Mask (máscara de emisión), la cual indica el área y dirección en la cual las partículas serán emitidas. Esas pueden generarse a partir de texturas en tu proyecto.
Asegúrate de que el material de procesado de partículas esté asignado y de que el nodo GPUParticles2D esté seleccionado. Un menú de "Partículas" aparecerá en la Barra de Herramientas:
Abrelo y selecciona "Cargar Máscara de Emisión":
Luego selecciona la textura que usarás como máscara:
Aparecerá un cuadro de diálogo con varias configuraciones.
Máscara de Emisión
Desde una textura se pueden generar tres tipos de máscaras de emisión:
Pixeles Sólidos: Las partículas aparecerán desde cualquier área de la textura, excluyendo áreas transparentes.
Píxeles de Borde: Las partículas saldrán de los bordes exteriores de la textura.
Píxeles de Borde Directos: Similar a Píxeles de Borde, pero agrega información extra a la máscara para darle la habilidad de emitirse hacia afuera de los bordes. Nota que la
Initial Velocitydebe ser asignada para utilizar esto.
Colores de Emisión
Capture from Pixel causará que las partículas hereden el color de la máscara donde son emitidos.
Una vez que hagas clic en "OK", la máscara se generará y se establecerá en el ParticleProcessMaterial, en la sección Emission Shape:
Todos los valores de esta sección han sido generados automáticamente por el menú "Cargar Máscara de Emisión", así que en general no debe tocarse nada.
Nota
La imagen no debe ser agregada directamente a Point Texture o Color Texture. Se debe usar siempre el menú "Cargar Máscara de Emisión".