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.
Slow or stuttering effects
Section titled “Slow or stuttering effects”| Symptom | Cause | Action |
|---|---|---|
| The effect runs in slow motion | A 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 speed | The emitter’s Timescale graph is below 1. | Raise Emission ▸ Timescale. See Emission and the HUD. |
| Long-lived particles move in visible jumps | Anim. 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 runs | Many 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 fires | A 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 late | The first play waits for the emitter’s images to load. | Call Part_Icles:Preload(root) beforehand. See Textures. |
What raises the cost
Section titled “What raises the cost”The Optimization indicator gives a figure for the selected emitters. These raise it.
| Cause | To lower it |
|---|---|
| More particles alive at once | Lower Rate, Emit count or Lifetime. Use a shorter Linger. |
| A stream with Pool off | Switch Pool on. |
High Anim. Steps, more so with Drag, or with Dir. Mode Local | Lower Anim. Steps until stepping shows, then raise it a little. |
| A flipbook, more so with many frames | Use a shorter flipbook, or one picture. |
| Particles that are partly transparent | Nothing, if the look needs it. Otherwise make fewer of them. |
| Shadows cast by the particle or by a nested light | Switch shadows off on the template. |
| Nested emitters | Their cost is multiplied by the number of parent particles. Lower the parent’s count first. |
| Heavy kinds: Models with many parts, Lights, long Trails | Use fewer parts. |
| Heavy kinds: bolts with many segments and forks, bursts with many chunks, ropes with many segments | Use 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.
Textures that appear late
Section titled “Textures that appear late”| Symptom | Cause | Action |
|---|---|---|
| The first particles of an effect show blank, then their textures appear | Preload 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 game | The 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 on | The 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 called | The script runs on the server. Preloading does nothing there. | Call Preload from a LocalScript. |
| Textures are late again after having loaded | A 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”| Symptom | Cause | Action |
|---|---|---|
| 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 editor | In 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 game | In 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 game | In 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 nothing | The script runs on the server. | See Nothing happens on the server. |