Particles Tutorial

From Bohemia Interactive Community
Revision as of 22:13, 7 August 2020 by Lou Montana (talk | contribs) (Add first A1 → A3 example conversion: Burning Vehicle Fire Look-Alike)
Jump to navigation Jump to search

Template:SideTOC

Basics

A particle is a (to some extent, non-physical) 2D plane that always faces the camera, or (more rarely) a 3D model. It can be used to simulate ambient effects, such as dust, fire, water splash, wood splinters and even rock debris.

A particle source is a non-physical object that creates particles at a certain rate and position/velocity.

A particle (as well as a particle source) is local to the computer where the script has been called; one player could see smoke while another could see through without any issue.

Particles exist since Operation Flashpoint, but the first related command (drop) was only introduced in Operation Flashpoint: Resistance.
Particle source notions and commands were introduced in Arma, some commands were later added in Arma 3 (e.g setParticleFire, setParticleClass).


How to

Create a particle source

private _particleSource = "#particlesource" createVehicleLocal getPosATL player;
A particle source is local (and all the particle commands take a local argument too), hence createVehicleLocal usage.

3

_particleSource setParticleClass "ObjectDestructionFire1Smallx"; // defined in configFile >> "CfgCloudlets"

Set source parameters

// see ParticleArray for details on the array format
_particleSource setParticleParams
[
	["\A3\data_f\ParticleEffects\Universal\Universal", 16, 12, 0, 8],
	"", "Billboard", 1, 3,						// animationName, type, timerPeriod, lifeTime
	[0,1.5,0],									// position relative to referenceObject
	[0,0,0],									// velocity
	0, 0.005, 0.003925, 0.1, [0.25, 0.75],		// rotation, weight, volume, rubbing, size
	[[1,0,0,0.5], [0,1,0,1], [0,0,01,0.25]],	// colors
	[1],										// animationPhase
	0, 0,										// randomDirectionPeriod, randomDirectionIntensity
	"", "",										// onTimer, beforeDestroy
	player,										// referenceObject
	0, false,									// angle, bounces
	-1, [],										// bounceOnSurface, emissiveColor
	[0,0,0]										// vectorDir
];

Set source drop interval

_particleSource setDropInterval 0.0625;

Set source drop circle

_particleSource setParticleCircle [3, [0,1,0]];

Set source random values

_particleSource setParticleRandom [0, [0.1, 0.1, 0.1], [0, 0, 0.5], 0, 0.1, [0, 0, 0, 0], 0, 0];

3

_particleSource setParticleFire [0.1, 0.5, 2];

Delete source

deleteVehicle _particleSource; // as simple as that

Use the drop command

The drop command only drops one particle. If multiple ones are needed, a loop (for, while) must be used.

// see ParticleArray for details on the array format
drop [
	["\A3\data_f\ParticleEffects\Universal\Universal", 16, 12, 0, 8],
	"", "Billboard", 1, 3,						// animationName, type, timerPeriod, lifeTime
	[0,1.5,0],									// position relative to referenceObject
	[0,0,0],									// velocity
	0, 0.005, 0.003925, 0.1, [0.25, 0.75],		// rotation, weight, volume, rubbing, size
	[[1,0,0,0.5], [0,1,0,1], [0,0,01,0.25]],	// colors
	[1],										// animationPhase
	0, 0,										// randomDirectionPeriod, randomDirectionIntensity
	"", "",										// onTimer, beforeDestroy
	player										// referenceObject
];


Full examples

The following examples are for Arma 2 and later titles. For Arma examples, see ParticleTemplates.
Burning vehicle fire look-alike

Burning Vehicle Fire Look-Alike

This one requires 3 particle sources, 1 for the fire and 2 smokes:

private _posATL = player modelToWorld [0,10,0];
// Fire
private _ps0 = "#particlesource" createVehicleLocal _posATL;
_ps0 setParticleParams [
	["\A3\Data_F\ParticleEffects\Universal\Universal", 16, 10, 32], "", "Billboard",
	0, 1, [0, 0, 0.25], [0, 0, 0.5], 1, 1, 0.9, 0.3, [1.5],
	[[1,1,1, 0.0], [1,1,1, 0.3], [1,1,1, 0.0]],
	[0.75], 0, 0, "", "", _ps0, rad -45]; // orientation fix
_ps0 setParticleRandom [0.2, [1, 1, 0], [0.5, 0.5, 0], 0, 0.5, [0, 0, 0, 0], 0, 0];
_ps0 setDropInterval 0.03;

// Smoke part 1
private _ps1 = "#particlesource" createVehicleLocal _posATL;
_ps1 setParticleParams [
	["\A3\Data_F\ParticleEffects\Universal\Universal", 16, 7, 1], "", "Billboard",
	1, 10, [0, 0, 0.5], [0, 0, 2.9], 1, 1.275, 1, 0.066, [4, 5, 10, 10],
	[[0.3, 0.3, 0.3, 0.33], [0.4, 0.4, 0.4, 0.33], [0.2, 0.2, 0, 0]],
	[0, 1], 1, 0, "", "", _ps1];
_ps1 setParticleRandom [0, [0, 0, 0], [0.33, 0.33, 0], 0, 0.25, [0.05, 0.05, 0.05, 0.05], 0, 0];
_ps1 setDropInterval 0.5;

// Smoke part 2
private _ps2 = "#particlesource" createVehicleLocal _posATL;
_ps2 setParticleParams [
	["\A3\Data_F\ParticleEffects\Universal\Universal", 16, 9, 1], "", "Billboard",
	1, 15, [0, 0, 0.5], [0, 0, 2.9], 1, 1.275, 1, 0.066, [4, 5, 10, 10],
	[[0.1, 0.1, 0.1, 0.75], [0.4, 0.4, 0.4, 0.5], [1, 1, 1, 0.2]],
	[0], 1, 0, "", "", _ps2];
_ps2 setParticleRandom [0, [0, 0, 0], [0.5, 0.5, 0], 0, 0.25, [0.05, 0.05, 0.05, 0.05], 0, 0];
_ps2 setDropInterval 0.25;


See also