Used to simulate particles and produce renderable particle mesh on either CPU or GPU. GPU simulation is generally much faster than its CPU counterpart, because it avoids slow CPU-GPU synchronization and takes advantage of many GPU cores. However, it requires client to support reasonable uniform count, reading from multiple textures in vertex shader and OES_texture_float extension, including rendering into float textures. Most mobile devices fail to satisfy these requirements, so it's not recommended to simulate thousands of particles on them. GPU version also can't sort particles, so enabling sorting forces CPU mode too. Particle rotation is specified by a single angle parameter: default billboard particles rotate around camera facing axis, while mesh particles rotate around 2 different view-independent axes. Most of the simulation parameters are specified with pc.Curve or pc.CurveSet. Curves are interpolated based on each particle's lifetime, therefore parameters are able to change over time. Most of the curve parameters can also be specified by 2 minimum/maximum curves, this way each particle will pick a random value in-between.
|alignToMotion||Orient particles in their direction of motion.|
|alphaGraph||Alpha over lifetime.|
|alphaGraph2||If not null, particles pick random values between alphaGraph and alphaGraph2.|
|animLoop||Controls whether the sprite sheet animation plays once or loops continuously.|
|animNumFrames||Number of sprite sheet frames to play.|
|animSpeed||Sprite sheet animation speed.|
|animTilesX||Number of horizontal tiles in the sprite sheet.|
|animTilesY||Number of vertical tiles in the sprite sheet.|
|autoPlay||Controls whether the particle system plays automatically on creation.|
|colorGraph||Color over lifetime.|
|colorMap||The color map texture to apply to all particles in the system.|
|colorMapAsset||The pc.Asset used to set the colorMap.|
|depthSoftening||Controls fading of particles near their intersections with scene geometry.|
|depthWrite||If enabled, the particles will write to the depth buffer.|
|emitterExtents||(Only for EMITTERSHAPE_BOX) The extents of a local space bounding box within which particles are spawned at random positions.|
|emitterRadius||(Only for EMITTERSHAPE_SPHERE) The radius within which particles are spawned at random positions.|
|emitterShape||Shape of the emitter.|
|halfLambert||Enabling Half Lambert lighting avoids particles looking too flat in shadowed areas.|
|initialVelocity||Defines magnitude of the initial emitter velocity.|
|layers||An array of layer IDs (pc.Layer#id) to which this particle system should belong.|
|lifetime||The length of time in seconds between a particle's birth and its death.|
|lighting||If enabled, particles will be lit by ambient and directional lights.|
|localVelocityGraph||Velocity relative to emitter over lifetime.|
|localVelocityGraph2||If not null, particles pick random values between localVelocityGraph and localVelocityGraph2.|
|loop||Enables or disables respawning of particles.|
|mesh||Triangular mesh to be used as a particle.|
|meshAsset||The pc.Asset used to set the mesh.|
|normalMap||The normal map texture to apply to all particles in the system.|
|normalMapAsset||The pc.Asset used to set the normalMap.|
|numParticles||Maximum number of simulated particles.|
|preWarm||If enabled, the particle system will be initialized as though it had already completed a full cycle.|
|rate||Minimal interval in seconds between particle births.|
|rate2||Maximal interval in seconds between particle births.|
|rotationSpeedGraph||Rotation speed over lifetime.|
|rotationSpeedGraph2||If not null, particles pick random values between rotationSpeedGraph and rotationSpeedGraph2.|
|scaleGraph||Scale over lifetime.|
|scaleGraph2||If not null, particles pick random values between scaleGraph and scaleGraph2.|
|startAngle||Minimal initial Euler angle of a particle.|
|startAngle2||Maximal initial Euler angle of a particle.|
|stretch||A value in world units that controls the amount by which particles are stretched based on their velocity.|
|velocityGraph||World-space velocity over lifetime.|
|velocityGraph2||If not null, particles pick random values between velocityGraph and velocityGraph2.|
|wrapBounds||The half extents of a world space box volume centered on the owner entity's position.|
|isPlaying||Checks if simulation is in progress.|
|pause||Freezes the simulation.|
|play||Enables/unfreezes the simulation.|
|reset||Resets particle state, doesn't affect playing.|
|stop||Disables the emission of new particles, lets existing to finish their simulation.|
|unpause||Unfreezes the simulation.|
|enabled||Enables or disables the component.|
Create a new ParticleSystemComponent
|system||pc.ParticleSystemComponentSystem||The ComponentSystem that created this Component|
|entity||pc.Entity||The Entity this Component is attached to|
Number of sprite sheet frames to play. It is valid to set the number of frames to a value less than animTilesX multiplied by animTilesY.
Sprite sheet animation speed. 1 = particle lifetime, 2 = twice during lifetime etc...
Controls whether the particle system plays automatically on creation. If set to false, it is necessary to call pc.ParticleSystemComponent#play for the particle system to play. Defaults to true.
The color map texture to apply to all particles in the system. If no texture is assigned, a default spot texture is used.
Controls fading of particles near their intersections with scene geometry. This effect, when it's non-zero, requires scene depth map to be rendered. Multiple depth-dependent effects can share the same map, but if you only use it for particles, bear in mind that it can double engine draw calls.
If enabled, the particles will write to the depth buffer. If disabled, the depth buffer is left unchanged and particles will be guaranteed to overwrite one another in the order in which they are rendered.
(Only for EMITTERSHAPE_BOX) The extents of a local space bounding box within which particles are spawned at random positions.
(Only for EMITTERSHAPE_SPHERE) The radius within which particles are spawned at random positions.
Shape of the emitter. Defines the bounds inside which particles are spawned. Also affects the direction of initial velocity.
- pc.EMITTERSHAPE_BOX: Box shape parameterized by emitterExtents. Initial velocity is directed towards local Z axis.
- pc.EMITTERSHAPE_SPHERE: Sphere shape parameterized by emitterRadius. Initial velocity is directed outwards from the center.
Enabling Half Lambert lighting avoids particles looking too flat in shadowed areas. It is a completely non-physical lighting model but can give more pleasing visual results.
Defines magnitude of the initial emitter velocity. Direction is given by emitter shape.
An array of layer IDs (pc.Layer#id) to which this particle system should belong. Don't push/pop/splice or modify this array, if you want to change it - set a new one instead.
If not null, particles pick random values between localVelocityGraph and localVelocityGraph2.
Triangular mesh to be used as a particle. Only first vertex/index buffer is used. Vertex buffer must contain local position at first 3 floats of each vertex.
The normal map texture to apply to all particles in the system. If no texture is assigned, an approximate spherical normal is calculated for each vertex.
If enabled, the particle system will be initialized as though it had already completed a full cycle. This only works with looping particle systems.
If not null, particles pick random values between rotationSpeedGraph and rotationSpeedGraph2.
Sorting mode. Forces CPU simulation, so be careful.
- pc.PARTICLESORT_NONE: No sorting, particles are drawn in arbitary order. Can be simulated on GPU.
- pc.PARTICLESORT_DISTANCE: Sorting based on distance to the camera. CPU only.
- pc.PARTICLESORT_NEWER_FIRST: Newer particles are drawn first. CPU only.
- pc.PARTICLESORT_OLDER_FIRST: Older particles are drawn first. CPU only.
A value in world units that controls the amount by which particles are stretched based on their velocity. Particles are stretched from their center towards their previous position.
If not null, particles pick random values between velocityGraph and velocityGraph2.
The half extents of a world space box volume centered on the owner entity's position. If a particle crosses the boundary of one side of the volume, it teleports to the opposite side.
Checks if simulation is in progress.
ReturnsBoolean true if the particle system is currently playing and false otherwise.
Freezes the simulation.
Enables/unfreezes the simulation.
Resets particle state, doesn't affect playing.
Disables the emission of new particles, lets existing to finish their simulation.
Unfreezes the simulation.