# particles

> Talos 0.6 · Since 0.6

Use it in a scene entity's `components` list as `{ "type": "particles", … }`. The contract writes the fields flat and refuses unknown keys.

## Fields

| Field | Type | Required | Default | Allowed values | Description |
|---|---|---|---|---|---|
| `preset` | `ParticlePreset` | yes |  | `smoke`, `fire`, `sparks`, `dust`, `steam`, `drips`, `debris`, `glow` |  |
| `rate` | `number` | yes |  |  |  |
| `color` | `string` | no |  |  |  |
| `material` | `string` | no |  |  | A key of scene.assets whose kind is "material": a material file with a `shader` (`blend: add` or `blend: blend`) the sprites draw with instead of the built-in sprite. The shader reads `particleAge`, `particleRandom` and `particleColor` from its SurfaceInput. On HD such an emitter is simulated on the CPU so its shader can draw it; emitters without one stay GPU-simulated. |

## Rules that can refuse it

- `render.hd.cloud_shadow_unavailable`
- `render.hd.screen-fx-views`

## Example

From the contract's tested fixture `fixtures/contract/full20/scene.json#smoke-vent`.

```json
{
  "type": "particles",
  "preset": "smoke",
  "rate": 24,
  "color": "#9AA0A6"
}
```
