Particle Playground 3 is out!

8 December 2015
5683 Views

Particle-Playground-3-trails01

After quite some time in development Particle Playground 3 is now available on the Unity Asset Store. The focus has been on improving performance, functionality and adding new technical features. Particle Playground 3 is also made compatible with the updated Shuriken particle system in Unity 5.3.

What’s new:

Updated Shuriken component (Unity 5.3 support)
Particle Playground is now supporting all Unity versions spanning from 4.3.4 to 5.3. Particle Playground is compatible with the updated Shuriken component in Unity 5.3.

Increased performance through the Playground Thread Pool
A self managed thread pool is introduced which will take care of the multithreaded calculations. This is proven to increase performance by up to 2x while decreasing the amount of GC allocations by up to 6x from previous versions.

Max Threads will determine the amount of available reusable threads in the Playground Pool. Try to keep this at a low figure (for example 8) for best performance in regular desktop/mobile projects. If you’re certain the end-target will have more CPUs you have the possibility of raising the maximum threads up to 128.

The previous .NET Thread Pool is still available, this can be toggled in Playground Manager > Advanced > Thread Pool Method.

Playground Trails – Draw mesh trails after particles
Particle Playground 3 introduces Playground Trails, with the ability to draw flexible mesh trails after particles.

A Playground Trail’s length is defined by a time parameter, from where each created point in the trail will base its starting lifetime upon. The width of the trail is defined by the Width and Time Width parameters. Time Width is a normalized Animation Curve where each trail point will be scaled accordingly to its y-axis value over its lifetime.

Coloring of the trails is done through a gradient, where the Color Mode will determine if colors are distributed over the trail point’s Lifetime or linearly through the Point Array. The UVs can also be distributed over the trail based on the point Lifetime or the linear Point Array.

A Playground Trail can use the Render Modes: Billboard, Horizontal, Vertical and Custom Render Scale. Billboard will rotate each trail point towards the assigned Billboard Transform (Main Camera by default). Horizontal will render the trails flat globally on XZ-axis, Vertical renders the trails flat globally on XY-axis. Custom Render Scale creates a custom render rotation and scale specified by a Vector3.

All mesh data in a Playground Trail is cached upon start and then iterated through throughout its lifetime to generate less memory garbage. The amount of cache is determined by the Maximum Points found in the Point Creation tab.

The Playground Trails are multithreaded (Advanced > Multithreading) and will do mesh calculations asynchronously, they will also dynamically batch to reduce draw calls.

Learn more about the Playground Trails

Playground Recorder – Particle recording and playback
Introducing the Playground Recorder which makes you able to record, playback and time scrub particle systems at any point. The method used is particle arrays acting as keyframes where current and next keyframe will be interpolated between during playback.

A recording can be stored in a Scriptable Object format in Editor (also while in Play Mode to be stored between sessions, which is preferable due to a more detailed simulation time). Note that serialization of Scriptable Objects outside the Unity Editor is not available, but they are however possible to read back into the Playground Recorder at runtime.

The Playground Recorder is multithreaded and will record and playback asynchronously.

Learn more about the Playground Recorder

More particle effects and preset categories in the Playground Wizard
A bunch of freshly made particle effects are now available along with categories in the Playground Wizard (Window > Particle Playground). The categories are based on the folder structure in Particle Playground/Playground Assets/Presets/.

The Preset Wizard now also handles categories when creating presets. When selecting ’Uncategorized’ the preset will be stored directly in the specified Assets Preset Path set in Settings > Paths (default: Particle Playground/Playground Assets/Presets/). When selecting ’Resources’ the preset will be stored in the specified Resources Preset Path set in Settings > Paths (default: Resources/Presets/).

Along with this the naming convention for User/Example presets is changed to Assets/Resources. An ’Asset’ preset is contained in the project folder inaccessible until referenced by the project, whereas a ’Resource’ preset is contained in a Resources folder and will always be accessible (i.e. can instantiate when using PlaygroundC.InstantiatePreset). Any presets within Resources will always be exported to the final build.

Improved preset search pattern
It is now easier to search for presets using the preset search bar in the Playground Wizard. The search pattern is based on words without any particular order, where you can also type the category name to filter out presets even further.

Custom Mask Sorting
You can now set your own mask sorting by calling
RefreshMaskSorting (int[]). The passed in mask sorting array should contain all numbers from 0 to particleCount-1, it will then apply non-linear masking depending on the order of the numbers in relation to the actual particle array.

Particle Lifetime Strength for Manipulators
A Manipulator can now affect particles based on a normalized Animation Curve, where the Manipulator’s Strength value will be multiplied based on the particles lifetime.

Infinite Manipulator Shape
A Manipulator can now be defined with Shape: Infinite to bypass distance / containment checks of particles. This is a more performant mode if you want to affect all particles within a Manipulator. An Infinite Manipulator will be displayed as red in the Scene View.

WebGL support
Particle Playground will now run in a browser using webGL. Keep in mind that JavaScript doesn’t support multithreading and you will therefore experience less performant particle simulations.

Memory improvements
A previous Particle Playground system was addressing up to 3MB of memory due to a fixed Shuriken particle cache. This is now reworked to stay flexible depending on actual particle count. A standard particle system is now reduced down to 13kB.

Increased color calculation speed
The color conversion is now fully using Color32 to apply colors whereas no unnecessary color conversions from Color to Color32 is being made.

Lossy- or Local Scale option
Any Source that is using a Transform to base birth positions on now supports lossy scale. This also includes the Playground Spline component where you can change between Local- or Lossy Scale in the Advanced tab.

Particle Position, Color, Scale and Velocity functions
You can now set particle position, color, scale and velocity in a more convenient way through script without having to dig into the Playground Cache. Use the available functions (on your particle system reference):
- ParticlePosition()
– ParticleColor()
– ParticleSize()
– ParticleVelocity()

Playground Components Menu
Introducing the Playground Components Menu in the Playground Wizard where you can attach Playground related components to your GameObjects.

Improved Editor functionality for finding assets
Particle Playground will now cache the location for the Playground Settings.asset file if not found at original path. If you have moved your Particle Playground folder into another location and the Playground Settings.asset file can’t be found you will be presented with a dialogue to search for the file in the Playground Wizard. This functionality improves loading times if you have a large project.

Global or Local Time Scale
The Playground Manager can now determine whether to use global or local time scale within the scene (Playground Manager > Advanced > Global Time Scale). If this is turned off the Time.timeScale won’t affect the particle simulations.

(Bonus) A simpler and faster alternative to Playground Follow
There’s now a script called PlaygroundTransformFollow.cs found in the Simple Scripts folder which will make objects follow particles. This version uses a static pool of objects and does not contain event listeners for particle birth/death, which also means that all followers will be active at all times. This is suitable for objects following particles within a looping particle system.

(Bonus) Spline Meshes w. Perlin Noise
Use the script PlaygroundSplineMesh.cs onto any Playground Spline to construct meshes along your spline. The component also supports Perlin Noise which adds a more natural geometry along the mesh.

For the full list of updates please see the version history document.

Upgrading to Particle Playground 3

Your previous Particle Playground 2 license carries over to Particle Playground 3. Particle Playground 3 is compatible with Unity 4.3.4 and up. Particle Playground 3 is backwards compatible with Particle Playground 2, however make sure to backup your existing project before installing Particle Playground 3 over a previous version.

 

How far we’ve come since day one! Enjoy the upgrade and make sure to stay in touch with your feedback.