Efecto de Parículas Usando Spritesheets
En este caso se aplica esta técnica para crear un efecto de confeti.
Configuración del Entorno VFX:
-
Método 1:
- Ve al panel Hierarchy
- Haz clic en el botón Add object
+ - Selecciona Visual Effects y luego Basic Particles
-
Método 2:
- Ve al panel Hierarchy
- Haz clic derecho para abrir el menú
- Selecciona Add object > Visual Effects > Basic Particles
📂 Importar Textura 2D:
Necesitas un spritesheet con múltiples niveles de desenfoque.
📚 Básicos de Profundidad:
Para lograr un efecto de profundidad se configura el editor VFX para que las partículas se vean borrosas al estar cerca de la cámara asignando un índice de textura basado en la posición Z de la partícula:
- En
Spawn logic, cambia elModeaPeriodic Burst, de modo que podamos generar una cantidad de partículas periódicamente usando un retraso. - En la lógica
init, agregaPosition: BoxySet Velocity.- Esto mantiene la ubicación de generación de la partícula dentro de un área con forma de caja.
- Establecer la posición en
(0, 20, 0)permite que las partículas se generen desde la parte superior de la pantalla.
-
En el nodo
Position: Boxestablece: posición en(0, 20, 0)y escala en(30, 0.1, 60).- Establecer la escala en
(30, 0.1, 60)crea un cuadro rectangular invisible y alineado horizontalmente en el que se generarán las partículas.
- Establecer la escala en
-
En el nodo
Set Velocityestablece la velocidad en(0.00, -10.00, 0.00).- Esto crea un movimiento de caída.
- Haz clic en la lógica
Outputy establece elBlend ModeaNormal.
🧩 Configurar el Índice de Textura Basado en la Posición Z de las Partículas:
A continuación, se muestra un diagrama que muestra cómo se posicionan las partículas dentro del cuadro de generación en la escena.
Hay un Position Box con un tamaño de (30, 0.1, 60) donde se generan las partículas; la posición Z de este es 0, el límite del cuadro irá de -30 a 30 a lo largo del eje Z. Debemos ajustar el rango de distancia (-30 a 30) al rango del índice de textura (0 a 4) que es el número de desenfoque que tenemos. El objetivo es elegir valores más altos para que la imagen se vea más borrosa a medida que una partícula se acerca a la cámara.
- Para esto agregamos los nodos
Get Position,SplityRemap. - Usa el nodo
Remappara convertir el rango de distancia (-30a30) al rango de índice de textura (0a4) en este caso. - Conecta los nodos
Get Position,SplityRemapal nodoSet Texture Index.
- En la lógica de salida:
- Elimina el nodo
Set Texture Indexy agrega el nodoFlipbook Blend. - En el nodo
Flipbook Blendselecciona la textura que se quiere aplicar a las partículas. - Agrega el nodo
Set Flipbook Sizey configúralo enx: número de columnas del spritesheet,y: número de filas del spritesheet.
- Elimina el nodo
🎆 Profundidad Avanzada:
Cuando se tienen múltiples variaciones en las formas y niveles de desenfoque. El spritesheet de este ejemplo tiene 3 variaciones en la forma (y: 3) y 5 variaciones en el nivel de desenfoque (x: 5).
-
Agrega los nodos
Const Vec3yRandom.- Conecta
RandomaConst Vec3yConst Vec3aSet Velocity. - Configura el nodo
Random→ Mín.:-20, Máx.:-10. Esto le dará a cada partícula una velocidad descendente en un rango entre-10y-20.
- Conecta
-
En el nodo
Position Box, establece la posición en(0, 40, 0)y la escala en(60, 0.1, 60).
Esto ubicará el cuadro de generación sobre la ventana gráfica de la cámara con un área más amplia y a medida que las partículas caen, se moverán hacia la vista de la cámara.
- Agrega los nodos
Random,Floor,Const Vec4ySet Custom Attribute.- Conecta
Get PositionaSplit,SplitaRemap,RemapaFlooryFlooral nodoSet Texture Index, como se muestra en la captura de pantalla.
- Conecta
- En el nodo
Random, estableceMín.: 0,Máx.: 2.99. - En la hoja de sprites hay tres variaciones de forma. Queremos almacenar uno de los tres números enteros
[0, 1, 2]para cada partícula. Recuerda que el nodoFloorredondea el valor de entrada hacia abajo hasta el número entero más cercano. Por lo tanto, el valor máximo debe ser menor que3, que es2.99. - El nodo
Custom Attributetiene unVec4. Como solo necesitamos almacenar un número flotante, podemos almacenarlo como un valorx. Al usarSet Custom Attributeen la lógicaInit, podemos almacenar un valor inicial, un número entero en este caso, para cada partícula. Esto se utilizará más adelante en la lógica de actualización para elegir la forma correcta.
En la lógica de salida:
- En el nodo
Flipbook Blend, seleccionaComplexBlur. - Agrega el nodo
Set Flipbook Sizey configúralo enx: 5,y: 3, ya que tenemos 3 filas y 5 columnas en la imagenComplexBlur.
Toques Finales
- En la lógica
Init, agrega el nodoSet Random Colorcon los valores predeterminados (Mín.: 0, 0, 0yMáx.: 1, 1, 1).
Esto básicamente asignará a cada partícula una gama completa de colores aleatorios.
- En la lógica de
Update:- Podemos agregar algo de velocidad horizontal como turbulencia.
AgregaGet Velocity,Random,Const Vec3y un nodoAdd.
ConectaRandomaConst Vec3,Const Vec3aAdd,Get VelocityaAddyAddaSet Velocity, como se muestra en la captura.- En el nodo
Random, configuraMín.: -0.5,Máx.: 0.5. Esto le dará un rango de fuerza horizontal leve a cada partícula.
- En el nodo
- Podemos agregar algo de velocidad horizontal como turbulencia.
- Por último, agregamos rotación a cada partícula.
Integra los nodosGet Angle, 2Random,Const Vec3yAdd.- Conecta los nodos
RandomaConst Vec3,Const Vec3aAdd,Get AngleaAddyAddal nodoSet Angle, como se muestra en la captura. Conectar 2 nodosRandoma los valoresyyzprovocará rotaciones en los ejesyyz. - En los nodos
Random, configura tanto el mínimo como el máximo. Esto le dará un pequeño incremento de rotación a cada partícula.
- Conecta los nodos
- Como resultado final tenemos un efecto de confeti con diferentes niveles de enfoque:
Puedes ver el resultado en TikTok