Particle material: motion, size and color
Birth versus acceleration, curve semantics, scale and surface material.
ParticleProcessMaterial simulates particle behavior. It does not draw the particle mesh. Configure the emitter's lifetime/capacity separately and give the draw mesh a surface material; see creating a 3D particle effect.
Separate birth values from ongoing changes
| Task | Starting controls | Important distinction |
|---|---|---|
| Where particles appear | EmissionShape and its size/point data | Birth positions, not a moving collision volume. |
| Initial movement | Direction, Spread, InitialVelocityMin/Max | Direction alone does not create speed. |
| Continued acceleration | Gravity and acceleration controls | Zero acceleration does not cancel an existing velocity. |
| Slowing motion | DampingMin/Max and damping mode | Different from shortening lifetime or pausing simulation. |
| Size over life | ScaleMin/Max and ScaleCurve | Surface geometry and billboard settings also affect appearance. |
| Color | Color, initial/lifetime ramps and optional point colors | The drawing material must use particle vertex color. |
The executed ParticlePointMaterial example on point-based emission isolates these controls with a fixed camera, seed and unshaded surface. It verifies that zero initial speed does not move merely because Direction is set, while gravity accelerates particles from rest.
Min, Max and Curve are property-specific
For a randomized scalar range, equal minimum and maximum remove that source of variation. They do not remove Spread, random birth timing, other forces or randomness elsewhere in the material.
Do not assume every curve multiplies the same base value. In the current generated shader, ScaleCurve multiplies scale, while animation offset is added to its base and animation speed participates in lifetime-based animation progression. Read the specific property's contract before copying a curve from a different control.
For scale, a base range of 2–2 and a constant curve value of 0.5 returns the tested geometry to its baseline size of 1. The curve is evaluated over normalized particle lifetime, not an absolute number of seconds. Check its endpoints and value range: an unintended zero or oversized value can make an effect seem missing or enormous.
Do not require Keep Size universally for scale to work. That surface-material setting affects billboard size behavior; ordinary particle meshes in the GPU example visibly change size without it. Test the actual mesh/billboard setup. A scale value should not be treated as a general command to stop simulation or remove an emitter.
Shape and direction solve different problems
Point, sphere, sphere surface, box and ring choose different birth distributions. Points/DirectedPoints read a finite set from data textures. A volume distribution is not the same as a surface distribution; avoid promising mathematically uniform density for every shape implementation.
EmissionShapeScale and EmissionShapeOffset transform generated local birth positions in this order: position × scale + offset. They do not enlarge the draw mesh. Changing shape settings is not an automatic relocation command for every existing particle; restart a controlled comparison when evaluating the new spawn layout.
Direction plus InitialVelocity controls initial travel; Spread changes its angular variation. Gravity adds ongoing acceleration independently. For DirectedPoints, stored normals orient a local frame: the example uses local +Z (Vector3.Back) so its velocity follows each stored normal. A different base Direction need not travel along that normal.
Acceleration and damping
- Gravity is a material acceleration vector, not a subscription to the physics world's gravity. Synchronize it explicitly if your game needs that relationship.
- Linear acceleration changes velocity along the relevant movement direction; it does not directly assign a position.
- Radial acceleration uses the direction away from the emitter origin. Positive/negative values change whether it pushes outward or inward.
- Tangential acceleration in the 3D generated shader uses a cross product involving Gravity. It is not universally limited to world XZ regardless of gravity direction. The Disable Z path uses a different planar calculation.
- Ordinary damping reduces speed. Damping As Friction switches to a speed-dependent calculation; it is not a promise of a fully calibrated physical friction model. Acceleration can counteract damping.
These additional force branches are reviewed in the shader source here, not all exercised by the small GPU example. For complex motion, enable one contributor at a time and compare the same lifetime/seed before combining them.
Color needs the drawing material
The process Color multiplies other particle-color sources. Point color data likewise modulates the result; it is not a replacement that ignores the base color. A yellow process color removes the blue point group in the tested red/blue example.
ColorInitialRamp supplies a randomized initial color choice; ColorRamp changes color over normalized lifetime. Check both when a result looks unexpectedly dark. The standard surface material needs Vertex Color → Use As Albedo (VertexColorUseAsAlbedo = true) to use that particle color, and a white albedo avoids another unintended tint.
Alpha values also need an appropriate surface transparency mode. An opaque material does not become blended smoke just because a process color or ramp contains alpha. Conversely, large blended cards can be expensive even at a modest particle count. Do not repair a material/color error by only increasing emission.
Lifetime, flags and advanced controls
LifetimeRandomness changes each particle's effective lifetime relative to the emitter's base Lifetime. This differs from the emitter Randomness birth-timing control. Align/rotation flags affect particle orientation, while the drawing material can add billboard behavior; test their combination rather than treating every rotation control as interchangeable.
Disable Z constrains the corresponding particle path, with LocalCoords determining local/world interpretation. Attractor interaction, turbulence, collision, sub-emission and animation textures have extra setup requirements; enabling a material flag alone does not establish a working complete effect.
The companion example supplies 14 native Windows Forward+/Vulkan checks for point data, color, shape transforms, size/curve and direction/velocity/gravity. Other force/flag branches, every primitive shape, advanced effects, exporters and performance remain separate validation. See emitter timing, including the documented SpeedScale/Finished limitation.