Make Custom Bedrock Particles with Snowstorm

Design a short Bedrock particle burst in Snowstorm, export it to a resource pack and test it in Minecraft. Fix textures, looping and excessive particle counts.

A convincing particle effect needs readable timing more than a huge particle count. This guide builds a short magical pickup burst in Snowstorm, exports the effect to a Bedrock resource pack and checks it in Minecraft before connecting it to gameplay.

Define one effect with a clear ending

Our starting brief is a small burst near a pickup: 18 pale sparks, outward motion, a little upward drift and a lifetime of about half a second. It should draw attention once and then disappear. These are design starting values, not engine limits or a claim of measured performance on every device.

Begin in a valid resource pack. If you do not already have one, create it with the Addon Template Generator. Use your own small transparent PNG for the spark. A simple centered mark with a few transparent pixels around it is easier to diagnose than a detailed texture atlas.

Build the burst in Snowstorm

Microsoft's particle tutorial introduces Snowstorm's editor and export workflow. Create an effect with the identifier icedfox:pickup_spark. Work through timing, emitter shape, motion and appearance separately so you can tell which setting changed the result.

  1. Choose an instant emission with 18 particles and a one-time emitter lifetime.
  2. Start with a small sphere around the origin and outward emission. Avoid a large spawn region while checking scale.
  3. Set an initial speed near 0.7 blocks per second and particle lifetime near 0.55 seconds.
  4. Add a slight upward acceleration rather than a large random displacement.
  5. Choose a billboard that faces the camera and map the UV rectangle to your spark texture.
  6. Use a restrained pale color and fade the alpha toward the end. Preview the effect over both light and dark backgrounds.

Save the editable effect before adding variations. Duplicate it for comparisons such as faster motion versus longer lifetime; do not change both and then guess why the result feels different.

Understand the exported timing components

Inside the exported effect's components, the core timing can look like this. It is a fragment, not a complete runnable particle file: keep Snowstorm's description, material, texture, shape, motion and appearance definitions.

Particle components fragment
{
  "minecraft:emitter_rate_instant": {
    "num_particles": 18
  },
  "minecraft:emitter_lifetime_once": {
    "active_time": 0.1
  },
  "minecraft:particle_lifetime_expression": {
    "max_lifetime": 0.55
  }
}

Emitter lifetime controls the emitter; particle lifetime controls the emitted particles. Instant emission creates a burst, while steady emission produces particles over time. The component reference documents these separately. Keep only the intended emission-rate and lifetime modes, rather than combining leftover presets blindly.

Export the effect and its texture

Resource pack layout
PickupEffects_RP/
  manifest.json
  particles/
    pickup_spark.json
  textures/
    particle/
      pickup_spark.png

Export the effect JSON into particles. Copy the actual PNG into the resource pack too; an editor preview does not prove the game has the image. The render description should reference textures/particle/pickup_spark without the .png extension.

For an 8 × 8 standalone texture, use its real dimensions and the intended full-image UV region. If you later switch to an atlas, update both the dimensions and rectangle. An effect showing an unrelated corner of an image is often a UV mismatch, not a motion problem.

Trigger it manually before adding gameplay

Activate the resource pack in a Creative test world. With cheats enabled, run:

Minecraft chat
/particle icedfox:pickup_spark ~ ~1 ~

The particle command creates the named effect at a position. It does not prove that a pickup event or animation is wired correctly. Repeat the command while looking from the side and above; make sure the burst has ended before triggering the next one.

Once manual playback works, connect one gameplay trigger or animation event. Verify one action produces one burst. An effect spawned repeatedly by a tick loop can look like a broken infinite emitter even when its own JSON has a short lifetime.

Improve motion without making visual noise

Make the center readable first. Keep most sparks close enough to describe the pickup location, with only a few traveling farther. Use a narrow speed range and a consistent upward tendency instead of random values on every axis. Introduce variation only after the basic motion works.

Compare the silhouette at gameplay distance, not only zoomed in. If the sparks become giant overlapping squares, reduce size or opacity before increasing count. A good fade should avoid an abrupt final pop, but it should also leave a clear moment when the effect is gone.

Set a practical performance budget

Count simultaneous triggers as well as particles per trigger. Ten overlapping bursts at 18 particles each can briefly produce 180 particles; that arithmetic is a planning estimate, not a frame-rate benchmark. Test the busiest plausible scene on the slowest device you intend to support.

Compare an effect-disabled scene with the same scene using your effect. Watch for large transparent surfaces, unnecessary collision and repeated spawning. If performance drops, reduce overlapping coverage and trigger frequency before adding more complex random expressions.

Troubleshoot in a fixed order

  • Nothing appears: confirm the resource pack is active, check the exact effect identifier and read the Content Log.
  • Wrong or missing texture: check the PNG file, render path, texture dimensions and UV rectangle.
  • It never stops: inspect both emitter lifetime and the frequency of the code or command that spawns it.
  • Works in the editor but not in-game: inspect the exported JSON and packed files rather than assuming the preview is the exported release.

Sources and verification

References checked on October 29, 2026. Examples were checked against these references and validated structurally; in-game acceptance checks are included above for your target version.