Modifiers are one of the most important features supported by the Wavicle particle system in CRYENGINE V. Although Wavicle provides a wide range of feature implementations that can be used to make all kinds of effects, their true power is only utilized when modifiers are used to dynamically modify behavior.
Many properties implemented by Wavicle features can contain a stack of modifiers. Each modifier takes that property value and then manipulates it in a specific way and sends that value to the next modifier in the stack. Some of the modifiers combine the output value from the last modifier with its own by multiplying on top of it.
Depending on the property in question and the settings of the modifier, then its logic can be applied for each component, for example a new particle being spawned or every particle in every frame. The following list outlines the modifiers available in the component:
Pic1: Modifiers menu options.
This option allows you to change the base property based on an effect's attribute.
|Attribute Name||This will be the name of the attribute to read from. If the attribute does not exist in this emitter, then time source will get a value of 1 instead.|
|Scale and Bias||Allows the attribute to be scaled and biased. Usually useful when the input might not be in the 0 to 1 range.|
|Spawn Only||Specifies if the attribute is to be applied only when a particle is first born or if the attribute should always affect all living particles.|
Note: This modifier is just an alternative way of using attributes. Another way would be to use "Linear" with source set to "Attribute".
This option allows you to change the base property based on the platform type or particle quality setting. Best used to scale up or down other feature properties for performance scalability.
|Low||Scale value used when on Low Spec PC.|
|Medium||Scale value used when on Medium Spec PC.|
|High||Scale value used when on High Spec PC.|
|Very High||Scale value used when on Very High Spec PC.|
|XBox One||Scale value used when on XBox One.|
|Playstation 4||Scale value used when on Playstation 4.|
Linear (Time-Based Modifier)
This option allows combining properties that are modified with time source, but with no additional transformation.
|No additional property is added, only time-based properties are used.|
Noise (Time-Based Modifier)
This option uses a potential field based on Perlin noise to randomize the input property. Unlike the Random modifier, which tends to get fuzzy or diffuse, the Noise modifier adds smooth variation to particles.
|Time Source||Selects the time source input from the drop-down menu to sample the Perlin noise field. For more information, see the Time-Based Modifiers section below.|
|Mode||Selects the noise modes from the drop-down menu. The following options are available:|
|Amount||Specifies the amount of variation that will be added to the particle. If the amount is greater than 1, then it can provide positive and negative variation at the same time.|
|Pulse Width||When the Pulse mode is chosen, it specifies the balance between pulse being turned on or off. A value of 0.5 allows the pulse to be turned on and off equally. Values greater than 0.5 result in the pulse being turned off more often than it's turned on.|
Note: Use Time Source scale and bias to change the frequency and phase of noise. However, if time Scale is too high noise starts to behave closer to pure random and fuzziness, as a result diffuse might start to arise.
Pic2: Sample of Noise modes for a particle.
Wave (Time-Based Modifier)
This option is used to provide different types of periodic values. These are based on trigonometric mathematics and are useful to add regular behaviors as opposed to variance.
|Time Source||Lets you select the time source input from the drop-down menu and to sample the wave trigonometric equations. For more information, see the Time-Based Modifiers section below.|
|Wave||Lets you select the wave equation from the drop-down menu. The following options are available:|
|Amplitude, Bias||Lets you add the Waveform settings.|
|Inverse||When selected inverts the waveform.|
Note: Use Time Source scale and bias to change a Wave's frequency and phase.
Pic3: Samples of the wave equations.
Pic4: A sample waveform setting.
This option is applied, but only to the new particles. It provides a fast way to add simple variation to particle behavior.
|Amount||Lets you specify the amount of variation that will be added to the particle. If the amount is greater than 1, then it can provide positive and negative variation at the same time.|
Double Curve (Time-Based Modifier)
Unlike the Curve modifier, the Double Curve modifier uses two Bezier curves. Time source is used to sample both curves at the same time, while the particle's Random field is used to interpolate between the lower and upper Bezier curve. This is useful in providing additional variance to the particle's behavior.
|Double Curve||Uses a double Bezier curve to provide additional variance.|
Curve (Time-Based Modifier)
This option uses time source input to sample a Bezier curve. In Wavicle, Bezier curves have an unlimited number of points, however each point has to be in the range 0 to 1 in the X axis (there are no enforced limits on the Y axis). For performance reasons, Bezier points support slopes, but not slope weight.
|Curve||Uses a single curve to modify the values.|
This option allows child particles to inherit their parent's field.
|Spawn Only||Inherits parent field when a particle is born.|
Time-Based Modifier's Common Settings
Many modifiers of the Wavicle particle system are time-based. This allows the modifier to not only accept the input from the property value modified by previous modifiers, but other aspects of the particle. All of these modifiers have a common set of properties:
|Time Source Options|
The main way to differentiate between a regular modifier and a time-based modifier is that in the case of a time-based modifier, then a new drop-down box appears in the user interface allowing selection of the time source input. The following options are available:
Note: For immortal particles or properties that are not applied to particles during runtime, then those sources will always be 0.
|Attribute Name||Valid when Time Source is set to Attribute. This will be the name of the attribute to read from. If the attribute does not exist in this emitter, then time source will get a value of 1.|
When Time Source is set to either Field or Parent Field (n in the time source input). Allows for the selection/choosing of which field to read from:
Note: There is a difference between Time Source Random and Field Random. Time Source Random will always output a different number and is fully stochastic. Field Random on other hand corresponds to a particle's own random number and can be used to have consistent behavior between modifiers. This can be used for example to have variance but consistent size and opacity or to have all child particles share the same randomness as their parent.
Pic5: Field menu options.
Specifies from where the Time Source or Field should be taken from:
Note: When the owner is a Parent, but the particle's parent is already dead, then time source will always be 1. The exception to the rule is Speed, which will be set to 0 instead.
|Time Scale and Time Bias||Allows the time source input to be scaled and biased. Usually useful when the input might not be in the 0 to 1 range (such as Speed or Attribute).|
|Spawn Only||In some cases it is desirable to choose if the Modifier is to be applied for every particle every frame or if the Modifier should only be applied once when the particle is born.|
Currently modifiers have very limited support in the current GPU pipeline. At the moment the only modifier that can be used is the Curve modifier and only with Self Time as the time source.