Skip to content

Slow or stuttering effects

Find the symptom in the left column. Each row gives one cause and what to do about it.

Exercise 20 shows how to find the costly layer of an effect. It uses the Optimization indicator, described on Scan and Fix, Insert Module, Emit Code, the Optimization indicator.

SymptomCauseAction
The effect runs in slow motionA speed set by a script is still in force. It was set as permanent, or set in the editor and saved with the place.Call Part_Icles:AbsoluteClearTimescale(effect). See Speed.
The effect runs in slow motion, and no script set a speedThe emitter’s Timescale graph is below 1.Raise Emission ▸ Timescale. See Emission and the HUD.
Long-lived particles move in visible jumpsAnim. Steps is low for the Lifetime. A particle is updated Anim. Steps divided by Lifetime times a second.Raise Advanced ▸ Anim. Steps. At 100 steps, a particle that lives 5 seconds is updated 20 times a second.
The frame rate drops while a stream runsMany particles are alive at once.Lower Rate or Lifetime. Switch Advanced ▸ Pool on, so finished particles are used again.
The frame rate drops when a Model emitter firesA Model emitter makes a whole model for each particle.Lower the Emit count or the Rate. Switch Pool on. Use a Model with fewer parts.
The first play of an ImageLabel emitter starts lateThe first play waits for the emitter’s images to load.Call Part_Icles:Preload(root) beforehand. See Textures.

The Optimization indicator gives a figure for the selected emitters. These raise it.

CauseTo lower it
More particles alive at onceLower Rate, Emit count or Lifetime. Use a shorter Linger.
A stream with Pool offSwitch Pool on.
High Anim. Steps, more so with Drag, or with Dir. Mode LocalLower Anim. Steps until stepping shows, then raise it a little.
A flipbook, more so with many framesUse a shorter flipbook, or one picture.
Particles that are partly transparentNothing, if the look needs it. Otherwise make fewer of them.
Shadows cast by the particle or by a nested lightSwitch shadows off on the template.
Nested emittersTheir cost is multiplied by the number of parent particles. Lower the parent’s count first.
Heavy kinds: Models with many parts, Lights, long TrailsUse fewer parts.
Heavy kinds: bolts with many segments and forks, bursts with many chunks, ropes with many segmentsUse fewer segments, forks or chunks.

The figure is an estimate worked out from the settings. It is not a measurement of the frame rate. Use it to compare two versions of an effect.

SymptomCauseAction
The first particles of an effect show blank, then their textures appearPreload Texture is off on the emitter.Switch Advanced ▸ Preload Texture on. Or call Part_Icles:Preload(root, true).
Textures are late on an effect that a script added during the gameThe effect was not in the place when Part_Icles:Activate() ran. Activate loads textures only for emitters present at that moment.Call Part_Icles:Preload(effect) after adding the effect.
Textures are late although Preload Texture is onThe effect is kept where Activate does not look, such as ServerStorage.Call Part_Icles:Preload(effect) from a LocalScript, once the effect has reached the player’s machine.
Textures are late although Preload is calledThe script runs on the server. Preloading does nothing there.Call Preload from a LocalScript.
Textures are late again after having loadedA script called Deload or Part_Icles:Deactivate(). Both release the textures.Remove that call, or call Preload again.

An effect that looks different in the game

Section titled “An effect that looks different in the game”
SymptomCauseAction
The effect is thinner in the game. Output mentions the particle cap.The Particle Cap in the game is 1000 unless a script changes it. The editor uses ≡ ▸ Settings ▸ Particle Cap.Set Part_Icles.MAX_ACTIVE_PARTICLES in the script.
A flipbook stays on one frame in the game. Output shows one warning that names SurfaceAppearance.A flipbook on a SurfaceAppearance plays in the editor only.Build the flipbook from Decals or Textures. See Decals and flipbooks.
Textures appear late in the game and not in the editorIn the editor, textures load as soon as Preload Texture is switched on. In the game they load on Activate, on the player’s machine.See Textures that appear late.
An emitter streams without end in the editor and bursts once in the gameIn the editor, Enabled streams at the Rate. AbsoluteEmit plays the Emit count, Delay and Duration once.For a stream, call Part_Icles:AbsoluteEnable(effect).
A stream pauses in the editor and never in the gameIn the editor, a stream pauses when Studio is left in the background. A game does not pause it.None.
Distortions are missing. Output reads [Part-Icles] Distortion: another Part-Icles engine owns the screen canvas; this engine's distortions are disabled.Two Part_Icles modules are running on one player’s machine. One of them alone can show distortions.Load Part_Icles from one place only.
Camera Shake, Distortion, ImageLabel emitters or Z-Offset do nothingThe script runs on the server.See Nothing happens on the server.