devNotes 5-11-16 path follow, koreographer & theme



It all starts here, the Source determines from which position particles will emit within the scene. Every Source ranging from Transforms,

Meshes, Textures, Paint and Projections has different settings and approaches for how to structure Source Positions within the scene.


Emit from pre-defined positions created from an image or mesh. All Particle Playground systems uses a list of states to store data from

a mesh’s vertices or an image’s pixels. When creating a new State from an image you can define Texture, Depthamp (with Depthmap

Strength), Name, Scale, Offset and a parent Transform. When creating a State from a mesh you can define Mesh, Texture, Name, Scale,

Offset and Transform. Using a Transform will make you able to position, rotate and scale the State.


The name of this State.


Takes a Texture2D which will structure the State in color and positions from the Texture2D’s pixels. If you use a texture when

creating the State from a mesh, the positions will be colored from the UV-mapping of the mesh.


Takes a Texture2D which will define the Z-value in normalized value by grayscale. A black pixel is 0.0 and a white is 1.0.

Depthmap Strength

The amount the Depthmap will multiply the Z-positioning. A Depthmap Strength of 1.0 will affect the Z-positions one Unit

ranging from black to white.


The mesh to construct your State from. Each vertex in the mesh will define a position in the State.


To be able to position, rotate and scale a State you will need a Transform assigned from the scene.


The world scale of this State. Each pixel will originally be a square of 1×1 Units. To make the final size of a State smaller, use a

number below 1.0. Using a number below 0 will invert the State in X- and Y positions.


A State will be created in Vector3(0, 0, 0) in world coordinates (or local coordinates if a stateTransform is set) with origin of the

image’s bottom left or a mesh’s pivot. Use the offset to place it elsewhere, with offset from world’s or stateTransform’s Vector3(0,

0, 0) measured in Units.

Chroma Key

Filters out a specific color within Spread range. This is useful if the State’s texture doesn’t have any alpha information.


Emit from one or several Transform components within your scene.

Treat As One Transform

Determines the birth distribution of particles over the assigned transforms.


World Object

Emit from a Mesh component within your scene.

Mesh Vertices Update

Enable this if the World Object’s mesh is procedural and changes vertices over time.

Mesh Normals Update

Enable this if the World Object’s mesh is procedural and changes normals over time.

Skinned World Object

Emit from a Skinned Mesh component within your scene.

Force Update On Main-Thread

Enable Main-Thread updating to ensure correct birth positions on the live vertices. This can have a noticeable impact on

performance as the skinned mesh vertex extraction won’t be multithreaded.

Mesh Vertices Update

Enable this if the Skinned World Object’s mesh is procedural and changes vertices over time.

Mesh Normals Update

Enable this if the Skinned World Object’s mesh is procedural and changes normals over time.

 Source Down Resolution

The source vertex skipping. Use this to lower the distribution of particles needed along your complete skinned mesh. Each

position will be determined by jumping over vertices in the vertex list. The amount of calculated positions will be divided by how

many positions you’ve decided to skip. This is in many cases needed to amp performance when using skinned meshes in your

scene, especially when you target mobile platforms.


Control all particle emission behavior through custom scripts (advanced). Use PlaygroundParticlesC.Emit(position, velocity, color) to

create a particle at position. Several overloads are available where you also can emit a number of particles instantly. Please see the Ink

example scene for basic usage. Through the Inspector you’re presented with some basic control to try emission before putting them

into a script call,

Emission Index

The particle’s array position that will emit when you call Emit() on this PlaygroundParticlesC object.


The particle’s initial emission position when you call Emit() on this PlaygroundParticlesC object.


The velocity of the particle that will emit when you call Emit() on this PlaygroundParticlesC object.



The color of the particle that will emit when you call Emit() on this PlaygroundParticlesC object.


Paint positions and color by using your own brushes, or by a single point with color information. Creating your own brushes can be

done through the Brush Wizard, which you’ll find in the Brush Preset menu when selecting Brush as Paint Mode. All painting features

relies on colliders being hit in the scene. To paint live into the scene in script please see the example script PaintAtMousePositionC.

Paint Mode

This is an Editor-specific feature which lets you switch between painting with a single point (Dot), using predefined brushes (Brush)

or erasing paint positions (Eraser).


Painting with brushes lets you fill a larger area with a predefined texture rather than a single point (like Paint Mode: Dot). You can

define the texture yourself along with how the brush should function, such as detail, scale and spacing. When painting, each pixel

(depending on chosen Detail level) will represent a ray into the scene at screen position. Each ray need to hit a collider to create a

Paint Position at world point.


A list of predefined brushes with specific settings which will define current paint settings upon selection. You can create your

own presets by pressing the ”Create”-button which will open the Brush Wizard. A preset is stored in Particle Playground/

Resources/Brushes and can be edited through the Inspector. To remove a preset from the Brush Preset list either delete the

prefab in the ”Brushes”-folder or change the presentation mode to ”List” instead of ”Icons” and press the button ”-”.

Brush Shape

The texture to project onto the surface where you choose to paint. The texture’s amount of pixels (width and height) will be

calculated for the amount of Paint Positions that will be created (amount is shown in the ”Paint” progress bar). All brush

textures need to have Read/Write Enabled and use True Color (non-compressed) in their Import Settings.

Brush Detail

The detail represents how many of the original pixels that should be read from the Brush Shape texture. This will affect how

many positions that will be created on every brush stroke. Keep in mind that it’s by rare occasions you ever need a perfect

copy of your brush’s full pixel amount onto a surface.


Every pixel will be read (100% of existing texture pixels).


Every second pixel will be read (50% of existing texture pixels).


Every forth pixel will be read (25% of existing texture pixels).


Every sixth pixel will be read (16.6% of existing texture pixels).

Brush Scale

The scale of a brush measured by the ratio of the original Brush Shape texture. For instance, a texture with 32×32 pixels and

a scale of 0.5 will represent a screen space area of 16×16 pixels.

Brush Distance

How far the brush sees from its origin position into the scene (in the Editor the origin is the Scene View’s camera). If the

distance is shorter than the target collider you want to paint on then no Paint Positions will be created.

Use Brush Color

Each Paint Position is created along with the Brush Shape’s color information at the ray’s pixel coordinate. Disabling this will

use the Color chosen by you instead, the alpha information will still be used from the Brush Shape texture.


The color to paint with when using the Dot Paint Mode. If you disable ”Use Brush Color” for a brush then Color will determine each

Paint Position color instead.

Paint Mask

Determines which layer of colliders the paint function sees in the scene. Available for all Paint Modes (Dot, Brush and Eraser). Use

this to see through certain objects or mask out a single object in the scene to avoid spilling paint.

Paint Spacing

The space needed for next paint position to occur. This is measured from the last paint position’s world point towards where next

will end up while painting. A transparent green disc will show the spacing area in Scene View while painting. Use this to distribute

paint more evenly along a surface for instance.

Max Paint Positions

The max positions allowed to be stored by this Paint object. Use this to limit the existing Paint Positions within a scene. Exceed Max

Stops Paint will determine if no more painting can occur or if Paint Positions will be removed (ascending from first position in list)

when reaching the max limit.

Paint – Inspector information

The amount of Paint Positions currently in the scene. ”Max Paint Positions” will determine where 100% of the progress bar is. If you

suddenly can’t see all Paint Positions the reason is much likely that you need to extend the Particle Count in Particle Settings.

Start/Stop Paint

Use this to begin or abort painting into the scene.


Removes all Paint Positions from the scene.


Project particles from a transform using a texture. This behaves similarly to the Unity Projector. This can be used to for instance create

fog, dust or splashes on certain surfaces. Choose to offset the origin texture and the projected source position from the surface using

the projected normal’s direction. Use Live Update to update the projection position every frame. You can scale your projection in any

direction with the projection transform.

Projection Texture

The image to use where each pixel will wander through the scene in form of a Raycast.


The transform to project from.

Live Update

Determines if the projection should update every frame. Enable this if your projection transform moves or you have projected

objects moving inside the projection area.

Origin Offset

Offset the texture’s origin in X- and Y values.

Projection Distance

Determines how far the projection rays can travel into the scene, measured in Units.

Projection Scale

The scale of projection in Units. A scale of one will make each pixel one Unit. When using local simulation space, use this to scale

rather than the projection transform to ensure correct projection depth.

Surface Offset

Determines how far away the source position will be distributed from surface. Using the projected surface normal.

Projection Mask

The layer mask of which colliders within layer can be seen by the projection rays in the scene.


Emit particles from one or several Playground Splines in the scene. A Playground Spline is multithreading friendly and can be updated

live during runtime. Each node and bezier handle can be set towards a Transform, for easier live manipulation.

Time Offset

The offset of the spline’s curves. This can be used to move particles over time on the spline.

Treat As One Spline

Determines the birth distribution of particles over the assigned splines.