Controlling the Particle Size
The Radius Property
By default, all particles loaded from any sources will have the same size. This global size is defined by the "Radius" parameter in the "Particle Size" group of controls located in the Meshing rollout. The default value of this parameter is 5.0, matching the radius of a Standard Shape in a Standard Particle Flow.
The Radius defaults and the default meshing mode (Union Of Spheres) were selected carefully to provide the fastest performance with standard Particle Flow settings. If they do not match your preferences, you can create a Preset with the desired values and set it as default for newly created FROST objects to customize your experience...
The Radius Channel
Instead of using one size for all particles, FROST can accept a particle data channel called "Radius" as a per-particle size source. When the "Use Radius Channel" checkbox is checked, the particles that have a valid "Radius" or equivalent channel will be loaded using their own values.
Objects that do not provide a valid Radius channel, such as Mesh Vertices and Shape Knots, will use the global Radius value even if the "Use Radius Channel" option is checked. This allows the mixing of local Radius values from objects that provide a Radius channel with global Radius values.
In the case of Particle Flow, the particle Radius will be extracted from the native Particle Flow channels controlling the particle Size and Scale. Note that the Size in Particle Flow represents the Diameter of a Sphere Shape (or the width/length/height of a Box Shape), so the values entered in Particle Flow have to be twice the Radius value in the FROST UI to match. e.g. Size 10.0 and 100% Scale correspond to Radius 5.0.
In the case of Thinking Particles, the Size and Scale channels will be used to determine the Radius value of the particles. Like with Particle Flow, the Size of TP Particles is the Diameter/Width/Length/Height of the Particle Shape. To match a Radius of 5.0 in the FROST UI, the Size has to be set to 10.0 units. The Scale channel will multiply the Size value, so a Size of 5.0 and Scale of 200% will produce the same Radius as Size 10.0 and Scale of 100%.
The Radius parameter of the SphereGizmo helpers will be takes as the Radius value of the particle.
Krakatoa PRT Objects
Krakatoa PRT objects like PRT Volume and PRT FumeFX can generate a custom Radius channel using a Krakatoa Channels Modifier. By default though, neither will provide a valid Radius channel and FROST will fall back to using its own global Radius value.
The PRT Loader object can provide a Radius channel in various ways. If the PRT sequence being loaded contains a valid "Radius" channel that was saved when the sequence was produced, it will be used. If the PRT sequence was saved from a Particle Flow or Thinking Particles file and the Size and Scale channels were saved, they will be used instead. A Krakatoa Channels Modifier could be also added to the PRT Loader to generate a new Radius channel based on any other channels, static or dynamic values. If the PRT sequence does not contain a "Radius" channel, the global Radius value of the FROST objects will be used instead.
Randomizing the Radius
The option "Randomize Radius by ID" provides an additional option for varying the particle size. It works best when the incoming particles contain a valid ID channel, because the random variation can be linked to the particle and always produce the same variation without flickering between frames. When no ID can be found for a specific particle, its Index within the particle stream will be used instead. Depending on the order of particles (which can change over the course of simulation), the Index might or might not be the same for a given particle.
The following particle sources provide a valid ID channel:
- Particle Flow – the Born ID channel will be used
- Thinking Particles - the Born ID channel will be used
The following particle sources can provide a valid ID channel:
- Geometry Vertices - the vertex index within the mesh will be used. If the topology is changing, so will the vertex order and flickering might occur.
- Shape Mesh Vertices - the vertex index within the renderable mesh will be used. If the topology of the spline is changing (for example if the shape's "Adaptive Interpolation" is on), the particles' size could flicker.
- Krakatoa PRT Loader – if a valid ID channel was saved to the PRT sequence, it will be loaded. Otherwise, the index within the stream will be used.
- Krakatoa PRT Volume particles - normally, the PRT Volume does not provide a dedicated ID channel and the Index channel will be used instead. If the source mesh of the PRT Volume is changing shape and the particle order is contantly changing, the random Radius variation will cause severe flickering. An ID channel could be generated using a Krakatoa Channels Modifier based on the particle position to avoid this undesired effect. (Position->Magnitude->ToInteger->ID)
- Krakatoa PRT FumeFX particles- same as PRT Volume particles (see above).
The "Randomize Radius By ID" option provides two parameters – a "Variation" value and a "Seed" value.
The Variation value can range from 0.001 to 0.95 and is used to calculate a variation value based on the original particle Radius value. Unlike Particle Flow for example where the variation value makes particles both smaller and larger, FROST uses the variation only to produce smaller particles. The higher the variation value, the larger the variation will be.
The Seed value defines the random seed. Changing it will produce different "patterns" in the size variation, but each particle will have the same variation throughout the animation for a given Seed value thanks to its unique ID.
The Scale option multiplies the radius that is given by either the Radius control or the Radius channel. Combined with the Sync by control options, the Scale lets you animate a particle's size over time.
Time: The keyframed Scale parameter will be applied to all particles in absolute time. For example, if the Scale was keyframed from frame 0 to frame 100 to change from 1.0 to 0.0, all particles will be scaled by 1.0 on frame 0 and by 0.0 on frame 100 regardless on when they were born or when they will die.
Age: The keyframed Scale parameter will be applied to each particle individually, starting with the value keyframed on frame 0 when the particle has Age of 0.0. This will only offset the keyframed animation of the Scale parameter without stretching its range to the LifeSpan of the particle. In other words, if the Scale was set to 1.0 to 0.0 over the range from 0 to 100, particles born on frame 0 and dying 50 frames later will show a Scale of 1.0 at Age of 0.0, but a scale of 0.5 at their death.
Life %: They keyframed Scale parameter will be applied to each particle individually, starting with the value on frame 0 when the particle has the Age of 0.0, and ending with the value on frame 100 when the particle has the Age equal to LifeSpan. In other words, the keyframed Scale range from 0 to 100 will be adjusted to the LifeSpan of each particle. Particles that die in 10 frames, 50 frames or 100 frames will all go through the same scale animation, just at a different speed.
Change Scale With Age:
The [>>] button provides a menu with several options to set the Scale parameter's keyframes and the Sync by option to produce growing and shrinking effects. It also allows the opening of the TrackView for editing of the Scale parameter's curve, and the deleting of its keyframes.
Mode-Specific Radius Scale Controls
Some meshing modes provide additional particle size scaling options. For example, the Metaballs mode features a Radius Scale that can be used to increase the influence of the particles and thus increase or decrease their effect without changing the incoming particle data values discussed above.