For the complete documentation index, see llms.txt. This page is also available as Markdown.

Sistemas de partículas

Particle_System_Component dibuja efectos de partículas 2D deterministas. El movimiento de las partículas se muestrea analíticamente a partir de un descriptor, una semilla y el tiempo, en lugar de avanzar y almacenar una transformación para cada partícula en cada fotograma.

Inicio rápido

Añade el componente y reproduce uno de los preajustes incorporados:

particles := entity.add_component(Particle_System_Component);
particles.play(Particle_System_Desc.preset_explosion());

play valida y copia un descriptor, restablece la semilla determinista y la hora de inicio, y habilita el componente. Llama a restart() para reproducir de nuevo el descriptor activo:

particles.restart();

Llama a stop() para deshabilitar el efecto. Un Particle_System_Component sin descriptor es inerte hasta que play() es llamado, por lo que añadir uno nunca inicia primero un efecto predeterminado invisible.

Los preajustes de ráfaga deshabilitan su componente después de la vida útil máxima posible de la partícula. Los preajustes continuos permanecen habilitados hasta que deshabilites o elimines el componente.

Preajustes

Cada llamada a un preajuste devuelve un descriptor nuevo que puede personalizarse con seguridad:

desc := Particle_System_Desc.preset_smoke();
desc.color_over_lifetime = Particle_System_Desc.over_lifetime_v4(
    {0.4, 0.15, 0.7, 0.8},
    {0.05, 0.01, 0.1, 0}
);
desc.spawn_position_radius = 0.3;
particles.play(desc);

El `desc` activo del componente desc es de solo lectura. get_desc() devuelve una copia por valor que puede personalizarse con seguridad y pasarse de nuevo a play(); por lo tanto, las partículas en ejecución nunca pueden observar un cambio de descriptor aplicado a medias.

Los preajustes incorporados son:

  • preset_default

  • preset_shotgun

  • preset_firework

  • preset_explosion

  • preset_sparks

  • preset_smoke

  • preset_dust

  • preset_fountain

  • preset_embers

  • preset_snow

  • preset_rain

  • preset_confetti

  • preset_magic_aura

Espacio de simulación local y mundial

Define simulation_space según cómo deben reaccionar las partículas ya generadas cuando el emisor se mueve:

Ambos modos usan el mismo muestreador analítico determinista. Solo difieren en la información en tiempo de ejecución necesaria para recuperar el origen de la partícula:

  • Espacio local mantiene un estado del emisor de tamaño constante. Un sistema recién creado en espacio local no asigna estado de simulación por partícula.

  • Espacio mundial almacena un pequeño registro de nacimiento por cada ranura de partícula reutilizable: su posición del emisor al nacer y el índice de vida. La posición, la velocidad, la rotación, el tamaño y el color todavía se calculan analíticamente.

Esto hace que el espacio local tenga estado O(1) y el espacio mundial tenga estado O(desc.get_particle_count()) estado.

Emisión en ráfaga y continua

La emisión en ráfaga genera de una vez el número solicitado de partículas:

La emisión continua programa el número solicitado de partículas por segundo:

Trata emission, prewarm, y auto_disable_when_finished como una configuración de ciclo de vida al cambiar un preajuste. Los preajustes devuelven descriptores completos, y asignar una nueva emission no restablece ninguno de los otros campos. En particular, los preajustes ambientales, como preset_magic_aura() ya tienen prewarm = true; bórralo explícitamente antes de cambiarlos a emisión en ráfaga, o play() rechazará el descriptor.

El motor deriva automáticamente el grupo mínimo seguro de ranuras reutilizables:

Usa desc.get_particle_count() para inspeccionar el recuento de ráfaga resultante o el recuento de ranuras continuas. La capacidad continua no es un control de autoría: la tasa de emisión y la vida útil ya determinan el número máximo de partículas simultáneamente elegibles.

prewarm avanza analíticamente un programa continuo por un ciclo completo del grupo, dando a los efectos ambientales una apariencia de ya estar en ejecución sin simular fotogramas anteriores. Un prewarm en espacio WORLD no tiene ninguna trayectoria anterior del emisor que inspeccionar, por lo que asume deliberadamente que el emisor estaba estacionario en su posición actual antes de la activación.

Campos comunes del descriptor

Los rangos y los valores sobre la vida útil usan constructores auxiliares:

size_over_lifetime contiene el ancho y el alto completos en espacio mundial. Proporcionar ambas dimensiones permite intencionalmente el estiramiento para trazos y partículas rectangulares. Para preservar la relación de aspecto de origen de un sprite, especifica su altura visual:

Los campos principales del descriptor son:

  • spawn_offset, spawn_rect_size, y spawn_position_radius: dónde se originan las partículas con respecto al emisor.

  • direction y direction_spread_degrees: dirección base de viaje y dispersión angular aleatoria. El muestreador normaliza la dirección.

  • speed, gravity, y friction: controles de movimiento analíticos.

  • lifetime, fade_in_seconds, y fade_out_seconds: vida útil y envolvente de opacidad.

  • color_over_lifetime: interpolación de color RGBA. Los fundidos multiplican el alfa interpolado en lugar de reemplazarlo.

  • initial_rotation_degrees y angular_velocity_degrees: rango de rotación y rango de velocidad angular.

  • face_direction: orienta cada partícula según su velocidad actual en lugar de aplicar velocidad angular.

  • size_over_lifetime: ancho/alto completo independiente durante la vida útil de la partícula.

  • sprite: textura renderizada.

  • seed_salt: variación estable por descriptor mezclada en la semilla de activación.

layer y z_offset viven en Particle_System_Component y controlan el orden de renderizado.

Validación

play() y restart() hacen aserción sobre descriptores inválidos para que los errores de programación fallen en su origen. Los editores y otras herramientas de autoría pueden validar sin iniciar el efecto:

validation_error() devuelve ese mismo error directamente, o una cadena vacía cuando el descriptor es válido. Los valores inválidos nunca se acotan silenciosamente.

Determinismo e interpolación

Cada muestra se deriva de la semilla del sistema de partículas, el índice de ranura, el índice de vida y el tiempo actual. El dibujo no muta el estado de simulación. Las muestras analíticas actual y anterior se pasan al renderizador de quads interpolados, incluyendo posición, tamaño y rotación, de modo que las partículas permanezcan suaves entre actualizaciones fijas de simulación.

Las posiciones de nacimiento en espacio mundial se capturan durante la ruta de actualización compartida y no durante el dibujo. El dibujo muestrea como mucho hasta la última actualización de posición de nacimiento completada, por lo que el tiempo de arranque y de reactivación no puede exponer una ranura recién elegible antes de que exista su origen. Esto mantiene el efecto compatible con la predicción y la resimulación, evitando al mismo tiempo cambios de estado solo de renderizado.

Última actualización