Skip to content

Motion Preview

Particle authoring is mostly guess and re-guess. You set a Speed graph, an Acceleration vector, a SpreadAngle, then turn Enabled on and squint at the resulting cloud trying to figure out which property is doing what. Motion Preview cuts that loop. Pick an emitter and the plugin draws several variant trajectories — actual paths a particle would follow — directly in the viewport. Tweak a property, the lines update live.

The plugin HUD has a Motion Preview toggle. Click it on. While on, every selected emitter gets its trajectory variants drawn over the viewport.

Click the toggle off when you’re done. The lines clear immediately.

Each line is a sample particle’s path through space, drawn from where it would spawn to where it would reach its end-of-Lifetime position. A small chevron at the line’s tip shows the direction of motion. Linger (post-lifetime hold) doesn’t extend the line — Linger keeps the particle stationary at its end position, so there’s no additional motion to draw.

The plugin draws several variants per emitter. Each variant rolls fresh random values from your SpreadAngle cone, your RotX/Y/Z initial rotations, your PosX/Y/Z offset ranges, and any envelope ranges on graphs. So the cluster of lines you see is a representative sample of the distribution your live emission will produce — narrow when your spread is tight, wide when it’s loose.

Because the same physics runs both the preview and the live emission, what you see is what you get. The preview reuses the engine’s actual motion routine — the same code path that decides where a real emitted particle would be at any moment of its life. There’s no second simulator that might disagree.

Edit any property — Speed, Drag, Acceleration, SpreadAngle, anything that affects motion — and the lines redraw.

Updates are debounced: the plugin waits a short window after your last change before re-running the simulation, so you don’t pay for a full re-sim on every keystroke or slider tick. Hold a slider down and you’ll see the lines update at a steady rate, not 60 times per second.

The total line budget is adaptive to the selection size, not fixed per emitter. With one emitter selected, you get a thicker cluster (about 20 lines) drawing the full distribution of variants. With five or more emitters selected, those ~20 lines are shared across the selection — each emitter gets fewer lines so the viewport stays uncluttered. The cluster scales with selection size; for a single-emitter focus pass you see the full sample, and for many-emitter overviews you see a representative sketch per emitter.

Motion Preview supports the workspace types that have meaningful trajectories:

  • Part — simulated via the engine’s per-frame motion routine, so any combination of Speed/Drag/Acceleration/RotMode/DirMode/SpreadAngle is honoured.
  • Attachment — simulated via the parent-local variant of the same routine, which respects parent-local CFrame chaining.
  • Model — same simulator as Part, since Models inherit Part’s motion model.

Types that don’t move don’t show preview:

  • Beam, Trail — fixed geometry, no per-particle trajectory.
  • PointLight — animates Range/Brightness/Color in place; not a “where does it fly” question.
  • Blur, Bloom, ColorCorrection, Atmosphere — screen-space, not in 3D.
  • ImageLabel — 2D GUI motion; would need a separate viewport overlay system to visualise.

Roblox’s ParticleEmitter selections also get preview, with an inline simulator that mirrors Roblox’s own particle motion model.

The lines are LineHandleAdornment instances pooled under workspace.Terrain.MotionPreview. The folder is created lazily on first use and marked Archivable = false — so it doesn’t appear in your Explorer’s archive view, doesn’t get saved with your place file, and doesn’t pollute your undo history. When you turn the toggle off, the lines hide; when you re-toggle, the same pool is reused.

If you ever notice a MotionPreview folder under Terrain, that’s the pool. Don’t touch it; the plugin manages its lifecycle.

The chevron at each line’s tip is two short stroke segments forming a < shape. Per frame, those strokes re-orient so the chevron plane always faces the camera — like a tiny billboard — so the arrow direction is readable from any view angle. This is a RenderStepped connection that only runs while preview is on.

Each variant is a single forward simulation walk through several dozen sample points. For a typical emitter selection (a few items, several variants each), that’s well under one millisecond per debounce. The visual cost — line drawing — is bounded by the line pool size, not the variant count.

For huge selections, the plugin caps how many items get processed at one time, keeping the visible cluster bounded without flooding the viewport.

The Motion Preview tool draws lines through space, but the content of each particle (its texture, its flipbook frames) comes from a separate library. The next chapter — The Inventory — covers that library: cloud catalogue, local Studio assets, search, multi-select, dissect.