Parameters explained

 Main screen

Emission Control: Even if you’ve created a Particle and an Emitter, nothing will happen before you’ve created an Emission. The Emissions determine which particles are emitted by which emitters. To create a new Emission, click New, then select the appropriate particle and emitter from the dialog. Emissions can be deleted by clicking the Delete button, and disabled with the Disable button. When exporting particle effects, the Disabled effects are not included.

Max # of particles: This sets the maximum number of active particles used in the particle system. The amount of memory allocated for the particle effect is determined by this number. If the maximum value is 500 particles, but the effect uses only 20 particles, it is recommended to set the maximum value to 20 to save in-game memory. Generally it is a good idea to create the effects with as few particles as possible to conserve CPU. There are several pointers concerning this in the Optimizing the effects section.

Particles emitted into:

  • Worldspace: the particles are emitted into the world coordinate space, and aren’t connected with the emitter. If the emitter moves, the particles leave a trail. This is the default setting, and useful in most applications.
  • Objectspace: The particles are emitted into the object’s own coordinate space, and follow the object around as it moves. This is handy for glow / force field style effects.

New particles when maximum reached: this determines what happens when the maximum number of particles has been reached and further particles are still being emitted.

  • Wait: No new particles are emitted before the old ones have died. If your particle emission rate is very high and the maximum amount limited, you may experience breaks in particle emission.
  • Replace oldest: When new particles are emitted, the oldest particles (eg. the ones that have been in the scene the longest time) in the effect disappear.
  • Replace random: When new particles are emitted, random particles will disappear.

Preview Configuration

KF Scene: Allows you to load a background scene to the particle preview screen for preview purposes. One background is scene is provided with the example files, you can find it in the examples\backgrounds\ directory (grid.txt). Click on the wide button (labeled <none> if no scene is present) to load / change the background. The scene is static and doesn’t move with the particle system. Press Clear to remove the scene from the preview.

To create a KF Scene, model it in 3DS Max (or another modeler that exports KF2 format), export it into a KF2 file, and create a script for it. Here’s the script file of the Grid background as an example:

[10m_grid]

{
       [Geometry]
       ExportData = data\grid.kf2;

       [Animation] // block redundant if the scene has no animation
       Index = 0;
       filename = data\grid.kf2;
}

KF Object: Allows you to insert an object to the preview in order to see how the effect looks like when attached to an object in the game, and to adjust its relative position to the object pivot. One object is provided, you can find it in ..\examples\backgrounds\deserteagle.txt. The KF object can move through the scene and the particle system is attached to it. The object aligns itself to the movement direction like the projectiles in the game. Press Clear to remove the object from the preview. NOTE: If you want to place the muzzle flash of a gun correctly in relation to the weapon, you must adjust the Emitter’s Relative Position values. The preview configuration’s position offset values are only used for preview purposes and are not exported.

Creating a KF object is done through the same procedure as a KF scene. You can use the example Grid file as a KF Object if you want, although this is not very useful.

Gravity: This sets the global gravity of the particle editor, allowing you to preview the effect in different gravity settings. Note that this does not affect the gravity setting used in the game. Default: 9.81m/s^2

Time scale: Changing the time scale multiplier allows you to preview how your particle effect looks in slow motion. If you set the multiplier to 0.1, the time passes one tenth of the default speed. Values above 1 speed up the time.

Max. FPS: By changing the FPS, you can preview how a lower frame rate affects the particles’ behavior. Some extremely quick particle effects may be affected by skipped frames. The default value is 85.

Camera follows at maximum distance of meters #: When checked, the camera will follow the particle system. When not set, the camera only orients itself towards the particle system.

Scene position is locked: Useless feature, keep it unchecked.

Gravity affects system: When checked, the particle system will fall down, affected by gravity. Useful when testing particle effects that are meant to be attached to projectiles.

Frontplane: Sets the front clip value of the particle system. If the camera moves closer to a particle than the Frontplane value (in meters), the particle will not be drawn.

Backplane: Sets the back plane value of the preview. If the particle is further than the Backplane value in meters, the particle will not be drawn.

Object Offset XYZ: Sets the position of the KF object in the scene for preview purposes. Note that the particle system is always attached to the object, so if you offset the object, the particle system moves with it.

System Offset XYZ: Sets the position of the particle system in relation to the object for preview purposes. NOTE: this does not affect the offset of the exported particle system. If you need to offset the particle effects in order to correctly place the muzzle flash on a weapon etc, you need to set the Emitter’s own Relative Offset values.

System Rotation XYZ: Rotates the particle system for preview purposes, allowing you to see how the particle effect looks with different rotations. Does not affect the exported particle effect. To orient the effect in the game, the emitter must be rotated.

Object/System Velocity: Gives the particle system a velocity to the specified direction, allowing you to preview how the particle effect looks when attached to a moving emitter. Combined with gravity, this allows you to “simulate” rocket smoke trails, etc.

Particles

Particles are the basic elements of particle effects; the things you see flying, falling and floating. They are actually flat, square polygon “billboards” which always face the camera. They can be either Additive or Alpha blended.

To create a particle, select “Particle” from the selector under the Element and Emitter Properties, then click the “New” button. Double-click on the particle to pop up the particle properties window to edit its parameters. NOTE: you can copy particles to the clipboard by selecting them in the list and pressing CTRL-C or the Copy button. This allows you to transfer particles from one file to another.

The particle’s parameters are as following: 

Name: The name of the particle. Standard text editing features apply. You can also rename a particle by clicking on it in the particle list and waiting for one second without moving the mouse.

Enable Particle Lighting: When this is on, the particle’s shading is affected by the dynamic and point lights in the level – in addition to the Color Graph. NOTE: If the level’s point/spot lights are incorrectly set, this may lead to strange results (all particles end up black since they receive no light). This also increases the CPU load of the effect, so using this is not recommended except in special cases, for example, if you have a room full of smoke and a flickering spotlight.

Gravity Multiplier: This determines how the gravity affects the particle. If the value is 1, the particle is directly affected by the gravity. Values smaller than 1 divide the effect of gravity, values larger than 1 multiply it. If the value is 0, the particle is unaffected by gravity. Negative values make the particles “fall” upwards (useful for flames and other lighter-than-air particles)

Air Resistance (El. Velocity): This determines how the velocity of the particle affects its air resistance. The faster a particle moves, the higher its air resistance.

  • Linear: The particle’s air resistance is directly affected by its velocity.

  • Quadratic: The velocity affects the air resistance to the second power.

  • Cubic: The velocity affects the air resistance to the third power.

Air Resistance (El. Size): This determines how the size of the particle affects its air resistance. The larger the particle, the bigger its air resistance, if so desired. Both the size multiplier and the particle’s own size graph are taken into account.

  • None: The particle’s air resistance is unaffected by its size.

  • Linear: The particle’s air resistance is linearly comparable to its size.

  • Quadratic: The particle’s air resistance is affected to the second power.

Air Resistance Constant: The overall air resistance value of the particle. Generally, the higher the value, the higher air resistance the particles have, and the sooner they slow down. The constant is affected by the above two values (El. Velocity and El. Size). If the value is zero, the particle has no air resistance. Negative air resistance value actually accelerates the particle to whichever direction it is traveling, giving rather interesting – or strange - results. Experiment with these values until you get the results you want.

Particle Animation

Animation Type: This determines how the particle bitmaps animate.

  • Looping: The bitmaps loop the sequence at the determined frame rate. Example: a rotating piece of debris.
  • Lifetime: All the bitmaps are displayed in a sequence throughout the particle’s lifetime, from first to the last. Example: a blob of foam that dissipates into droplets.

Animation FPS: Determines the frame rate of the particle bitmap sequence. Only applicable if the animation type is set to Looping.

Random 1st Frame: When on, the bitmap sequence starts at a random frame when the particle is spawned – to avoid all particles looking “synchronized”. Only applicable if the animation type is set to Looping.

Random rotation from # to #: Determines how many degrees the particle billboard on-screen rotation is randomized when emitted. If the values are equal, no randomization takes place. You can set both values to (for example) -90 degrees to have all the particles rotated by 90 degrees counter-clockwise but not randomized.

Randomize rotation direction: Randomly inverts the Rotation Graph of the particles.

Random mirroring: Randomly flips the bitmap by X or Y axis to increase particle variety. Some particles (for example, the gasoline explosion fireball) should only be flipped horizontally and some others only vertically, hence these are separate.

Size Graph: This graph determines how the size of the particle changes through its lifetime. NOTE: if you want all the particles coming from the emitter to be larger, it’s a better idea to adjust the Size Multiplier value of the emitter than the size graph, because some other emitter in the effect may also be spawning the same particles.

Rotation Graph: This graph determines how the particle rotates through its lifetime. This graph is inverted and multiplied by the Emission Rotation Multiplier and Randomize rotation direction values.

Vertex Alpha Graph: This graph affects the alpha blend opacity of the particle. With this you can make the particles fade in and out. Note: all values in the graph that go above 255 are normalized to 255.

RGB Color Graph: Allows you to determine how the color of the particle changes throughout its lifetime. There is a separate graph for each color element (Red, Green and Blue). Press C to activate the Windows Color Picker for easy value editing. NOTE: the particle coloring is multiplicative. If the particle bitmap has color in itself, any coloring applied will darken it and mix with the bitmap. The best idea is to create all particle bitmaps as white as possible, then use the color graph to color them. This allows you to use the same bitmaps for multiple purposes.

Emitters

The particle emitters are the ”machines” that spew out particles according to their parameters. To create a new Emitter, select “Particle Emitter” from the selector under the Element and Emitter Properties and click the “New” button. To edit the emitter’s properties, double-click on it with the left mouse button. NOTE: you can copy emitters to the clipboard by selecting them in the list and pressing CTRL-C or the Copy button. This allows you to transfer emitters from one file to another.

The parameters are as follows: 

General

Name: The name of the emitter. Standard text editing features apply.

Positions and Directions

Relative Position: The X, Y and Z coordinates to change the relative position of the emitter. For example, the muzzle flash effects of the guns are created at the gun pivot point, and must be offset by the Relative Position value to be placed at the gun muzzle.

Emission Direction Graph: This graph determines how the direction of the particle emission changes through the emission cycle. There are separate graphs for each direction (X, Y and Z).

Example: You can create a circular ring-like emission by setting the emission cycle length very short (0.01 seconds), then changing two of the graphs into sine curves offset by 90 degrees. This is how the ring-like “body fall” dust clouds in Max Payne  were created.


A circular emission

X +/-, Y +/-, Z +/-: These constant values determine how much the emission direction is randomized to each direction. If you want to “spread out” the particles more when emitted, increase the values perpendicular to the emission direction. If you want the particles to be emitted at different velocities, increase a value parallel to the emission direction.

Velocity Inheritance Factor: Not applicable. Feature not implemented.

Element Random Velocity Graph: Determines how the particle emission direction is randomized overall throughout the emission cycle. The value has two graphs, determining the maximum and the minimum amount of randomization to be applied. This randomization randomizes the emission in all directions (X/Y/Z).

Example:If you want to create a spray of water that first spreads a lot, then turns into a uniform stream, create a graph that starts off high, then quickly fades to zero.

Emitter Shape

The emitter shape determines what kind of an area the particles are spawned in. You can choose between two emitter shapes: Square and Sphere.

Square: The particles are created within a box whose dimensions are adjustable. Setting the values of any one axis to zero creates a flat emission plane. Setting two axes to zero creates a line. If you want the particle effect’s origo to be in the center of the box, the values must be determined between symmetric negative and positive values (for example: Min –2 meters, Max 2 meters makes 4 meters in total). If all three dimensions are set to zero, all the particles will be created in the same point.

Sphere: The particles are created inside a spherical area whose radius is adjustable. The Hotspot radius is where the most emissions take place, and the Falloff radius “fades out” the particle emission probability to zero (you can experiment with this by creating a very short effect that creates thousands of tiny stationary particles, then tweaking the hotspot and falloff values). The Falloff must be equal to or larger than the Hotspot. If both values are set to zero, all particles will appear in the same point.

Emission

Emission Rate graph: This graph determines how many particles are emitted per time unit throughout the emission cycle. The value has two graphs, and the number of emissions is randomized between the two values. Example: if you want to create a trickling water effect that starts as a gush then reduces to slow dripping, start with a high value, then ramp down the emission rate graphs. If you want the emission rate to be completely steady, set both graphs to exactly the same value. If you want the emission rate to be very uneven throughout, set one of the graphs to zero, and set the other graph with a high value.

Cycle Length: This value determines the overall length of the emission in seconds. You can randomize the length of the emission by entering a second value in the +/- field. The randomization value must be smaller than the cycle length. The cycle is then of different length every time it is initialized. Example: If you shoot at the water coolers in Max Payne, you can notice that some water trickles last longer than others. This is done with cycle length randomization.

Cycle Looping: When checked, the emission will restart immediately after it has ended. Example: You can create a random flicker-like effect by looping a short emission whose length is randomized a lot. Note that rapid cycle restarts cause some CPU overhead in the levels, so use this sparingly. If you need to create a long, steady looping particle effect, it's a better idea to leave this flag unchecked and instead set it to loop in the script (looping = true.)

Element Lifetime Graph: Determines how long the emitted particles live. The graph has two values, and the lifetime of each particle is randomized between these two. Example: Being a graph, the lifetime of the particles emitted can change through the cycle. For example, if you have a fire effect that lasts 20 seconds, the values can start off high, creating long-living high-reaching flames. As the cycle continues, you can ramp down the curve so that the fire becomes lower and lower, with the flames flickering with shorter and shorter lifetime, until the fire goes out.

Particle Emitter

Size Multiplier Graph: Determines the size of the particles emitted through the cycle. There are two graphs, and the size of each emitted particle is randomized between these two. If you want all the particles in the effect to be larger or smaller, it is a better idea to adjust the size multiplier graph than the particle’s own size graph – since you may be using the same particle with another emitter too. Example: With a ramp downwards, the effect can first emit large particles, then as the cycle continues, the particles start off smaller.

Rotation Multiplier Graph: Multiplies the particle’s Rotation Graph. There are two graphs, and the rotation multiplier of the particle is randomized between them. With values greater than 1, the particle rotation increases, and with values less than 1, it decreases. Negative values invert the graph. If all graphs are reset to zero, the particles do not rotate, regardless of their rotation graph. However, the particle’s Rotation Random still applies. Rotation Multiplier Graph is somewhat less useful than the other parameters, and is usually best used as two constant values (horizontal lines) with the sample rate set to 2. Example: if you create a particle rotation graph that goes up and down like a roller coaster, the particle “swings” through its lifetime. The magnitude of the swinging can be varied with the Rotation Multiplier Graph.  This is how the snowflakes in Max Payne were created.

Light

In addition to particles, the particle emitter can also create a Gouraud point light which illuminates the environment and the characters (and the particles whose lighting is activated). The light is always attached to the emitter and moves with it. To activate the light, check the Use Light checkbox. All emitters that have the light active have an (L) in their name (this helps to avoid using several lights in an effect, as lights cause graphics overhead). If you want to use the particle effect only for light, you need to create a “dummy” particle and a “dummy” emitter with all other values set to minimum so that no particles are emitted.

The parameters are as follows:

Light Falloff Graph: Determines how the falloff radius of the light changes through the emission cycle, ie how far the light reaches. NOTE: rapid light falloff changes result rapid level geometry tessellation that cause CPU overhead. It is recommended to use the falloff graph only in special cases. A constant value works well most of the time. To fade out the light, it is a better idea to use the color graph.

Light Color Graph: With this, you can change the color of the light through the emission cycle. The color consists of three graphs, one for each color element (Red, Green and Blue). Press C when the color graph window is active to open the Windows Color Picker for easy editing. The lower the color values, the dimmer the light is.

Brightness: This value has no effect in the current version of ParticleFX.

Light Position Offset: You can offset the position of the light from the emitter position; this may be necessary in some cases. The offset value depends on the emission’s own Relative Position offset. If you change the emission position offset, the light offset moves with it.