Grow operator

The Grow operator invokes various algorithms to grow intricate patterns of particles.


Growth Rollout

Growth Algorithm

  • Diffusion-limited aggregation: the DLA algorithm grows particles outwards from particles that are surrounded by open space.

  • Ivy: the ivy algorithm grows particles along surfaces in vine-like patterns.

  • Shortest path: the shortest path algorithm grows particles towards destination objects along the shortest path through their neighbors.

  • Space colonization: the space colonization algorithm grows particles from seed particles that are in close proximity to expansion particles.


Diffusion-Limited Aggregation

DLA Rollout

Growth

  • Radius: controls the size of particles within the DLA algorithm. Increasing this value will increase the overall size of the growth.

As particles are spawned, they are connected to each others’ implicit surfaces. The minimum distance between two spawned particles is therefore (radius x 2).

  • Enable spacing: controls whether to use a custom value for the minimum size of empty space required for that region to spawn particles. If this is disabled, the radius value will be used instead.

  • Spacing value: the minimum size value of an empty region before it will be able to spawn particles. Increasing this value will result in growths stretching outward, rather than remaining in tighter clumps.

Each time the growth algorithm progresses, it chooses a random region adjacent to existing particles and checks that region for overlapping particles. If a particle exists inside the region, spawning inside the region is disabled. The smaller the spacing value, the easier it is for the growth algorithm to find empty regions and therefore progress forward. The larger the region, the more the growth algorithm must stretch out into empty space in order to find an area free of particles.

  • Bias: controls whether the search algorithm will tend to look for valid regions near the center of existing particles, or near the boundary of existing particles. Values less than 1.0 bias towards the center, values greater than 1.0 bias towards the boundary.

  • Inherited vel %: the percentage of velocity child particles will inherit from their parent.

  • Max tries: the maximum number of attempts the algorithm will make to find a valid region of space to spawn a particle, at each growth iteration.

  • Iterations: the number of growth iterations to perform, at each time step of the simulation.

  • Align rotation: aligns the rotation of particles to the vector between themselves and their parent.

  • Reset age: when enabled, new particles generated by the growth algorithm will have an age/eventAge of 0. When disabled, they will have the same age as their parent particle.

Disable the “reset age” setting if you want to easily control growth termination by particle age. Since all generated particles will therefore have the same age as their original parents, the growth as a whole can be terminated by adjust the operator’s timing settings.

  • Affect position/velocity: chooses which particle properties the growth algorithm will affect.
Clustering
  • Enable clustering: controls whether the DLA algorithm will iterate over clusters of particles individually, or over all event particles simultaneously.

  • Channel: the custom particle data channel from which cluster data will be retrieved.

By default, the growth algorithm will process all event particles together. By enabling clustering, you can separate particles into cluster-specific groups, which causes the growth algorithm to process those groups separately. This allows you to have multiple, independent growths forming within the same event.

Seed position

  • Growth bounds/random particle: controls whether starting candidate positions for new growth particles will be located around the bounds of overall growth, or at a random particle within the growth.

  • Affected by forces: controls whether the starting candidate positions for growth particles will be affected by forces.

  • Multiplier: the strength multiplier to apply to forces which affect starting candidate positions for growth particles.

  • Spread: the amount of random spread applied to the seed positions.

  • Simulation groups: controls which particle simulation groups the random particle seed position will be derived from.

  • Show seed points: displays the resulting seed points in the viewport.

Uniqueness

  • Seed: the seed value for all varied parameters.


Ivy

The simplest way to get started with the ivy growth algorithm is to create a new ‘Simple Ivy Flow’ from the ‘Presets’ section of the tyFlow editor right-click menu. It will setup a small growth simulation which assigns appropriate shape meshes to ivy particles (using the Shape operator ‘index from custom float value’ technique outlined below), as well as an optional Spline Paths operator which, when enabled, converts vine particles into splines for rendering.

Surfaces Rollout

  • Growth surfaces: the ivy will grow towards these surfaces, moving along them once it comes within a certain minimum distance to them.

  • Sample: controls which sampler will be used to determine closest-object proximities for particles.

Influence proximity

  • Distance: the maximum distance from the surface a particle may be, to adjust its trajectory to travel along the surface, rather than simply towards it.

  • Variation %: the per-particle percentage of variation to apply.

Surface attraction

  • Attraction: the amount of force the surface will exert on particles, causing them to move towards it.

  • Variation %: the per-particle percentage of variation to apply.

Ivy Rollout

Growth simulation

  • Iterations: the maximum iterations the internal ivy growth algorithm will simulate, each substep.

To animate ivy growth over time, set Grow operator timing to continuous, and set ‘iterations’ to a value less than the ivy’s ‘max age’ value. If the ivy’s ‘max age’ value is greater than the ‘iterations’ value, further simulation substeps will be required for ivy to reach its max age, causing it to grow over time.

  • Iterations affect particle age: when enabled, the age of ivy particles will be relative to the number of iterations taken in the internal ivy simulation, regardless of how many global sim steps have been taken. For example, if the max age of the ivy is 200, then the first ivy particle will have an age of 200 and the last ivy particle will have an age of 1 (and the ages of all middle particles will span 0-200), even if all particles were born on frame 0 of the global simulation.

Growth time

  • Max age: the maximum number of iterations an ivy vine will grow.

  • Variation %: the per-particle percentage of variation to apply.

Growth speed

  • Growth speed: the maximum distance, in scene units, that the ivy will grow each iteration.

Internal growth forces

  • Spread: the amount of force to apply to ivy child vines to drive them away from their parent vine.

  • Untangle: the amount of internal force to apply to ivy vines to prevent them from forming tight clusters.

  • Jitter: the amount of force to apply to ivy particles to jitter their position over the length of each ivy vine. This scale of this jitter is relative to the scale of the noise applied to the ivy as a whole.

  • Variation %: the per-particle percentage of variation to apply.

Growth scale

  • Scale multiplier: a multiplier applied to the scale of ivy vine particles.

  • Variation %: the per-particle percentage of variation to apply.

By default, ivy scale is relative to the scale of the input particles, however the scale multiplier can be used to further tweak the overall scale of the ivy.

  • Scale jitter %: a per-particle scale variation applied to ivy vine particles.

Test TRUE for:

  • Vines/stems/leaves: controls which ivy particles will be sent out to the next event.

It’s usually a good idea to send stems/leaves to another event for display/rendering/processing, because the ivy vines themselves will likely need to be converted into splines using a Spline Paths operator. By separating out the stems/leaves to another event, you can do the spline conversion without any interference from the particles which don’t need to be converted into splines.

Uniqueness

  • Seed: the seed value for all varied parameters.

Direction Rollout

  • Vector/splines: controls how direction vectors for ivy particle forces will be computed. Vector mode will use a static vector as the ivy direction force. Spline mode will cause ivy to follow the direction of the nearest spline, within a defined range.

  • X/Y/Z: the individual components of the static direction vector.

  • Follow: the amount of directional force applied to ivy particles.

  • Attraction: the amount of attraction force applied to ivy particles, towards the nearest spline.

  • Divergence: the amount of angular divergence applied to ivy particle directional force vectors.

  • Spline list: the list of splines that ivy particles will follow in ‘splines’ mode.

  • Distance/falloff: the maximum influence range of splines, outside of which ivy particles won’t be affected.

Branching Rollout

Branching occurs when an ivy vine spawns child vines as it grows over time. Child vines inherit properties of their parents, but usually in different quantities. For example, a child vine may be shorter than its parent, or it may have a smaller radius than its parent, etc. The branching multipliers allow you to control how vine properties transfer to child vines. The multipliers are additive, so for example, if the scale multiplier is set to 0.5 and a parent vine’s radius is 1.0, then the child vine’s radius will be 0.5 - however, if that child spawns it’s own child, that 2nd-order child’s radius will be 0.25, and so on.

Depth

  • Max depth: the maximum depth of spawn recursion that may occur in the vine. For example, if ‘max depth’ is set to 1, vines may spawn child vines, but child vines may not spawn their own child vines.

  • Variation %: the per-particle percentage of variation to apply.

Timing

  • Branch time: the amount of time a vine must grow before it can potentially spawn a child vine.

  • Variation %: the per-particle percentage of variation to apply.
  • Branch time mult: a multiplier on the ‘branch time’ of vines that is applied to child vines. The lower the value, the more child vines may spawn from a parent vine, relative to the original ‘branch time’ value.

  • Variation %: the per-particle percentage of variation to apply.

Age

  • Max age mult: a multiplier on the ‘max age’ of vines that is applied to child vines. The lower the value, the shorter child vines will be.

  • Variation %: the per-particle percentage of variation to apply.

Growth direction

  • Direction mult: a multiplier on the direction force of vines that is applied to child vines. The lower the value, the less child vines will conform to directional forces.

  • Variation %: the per-particle percentage of variation to apply.

Surface attraction

  • Attraction mult: a multiplier on the attraction force of vines that is applied to child vines. The lower the value, the less child vines will be attracted to surface objects.

  • Variation %: the per-particle percentage of variation to apply.

Leaves Rollout

  • Leaves/stems: controls whether leaf or stem particles will be generated along ivy vines.

Growth

  • Density %: controls how dense leaf growth will be, along vines. A value of 100% means that every vine particle will spawn a leaf particle.

  • Stem length mult: controls how long leaf stems will be, relative to the scale of the parent vine particle.

  • Stem radius mult: controls the radius of leaf stems, relative to the scale of the parent vine particle.

  • Leaf scale mult: controls the scale of leaves, relative to the scale of the parent vine particle.

  • Variation %: the per-particle percentage of variation to apply.

Growth along vines

  • Min age: controls how old a vine particle must be before it can spawn leaves. Higher values means leaves will only grow further down along vines. A value of 0 means that leaves can grow anywhere along a vine.

  • Variation %: the per-particle percentage of variation to apply.
  • Min depth: controls the recursive depth requirement for leaves along vines. Higher values than 0 mean that only child vines at the specified depth may grow leaves. A value of 0 means that any vine can grow a leaf.

  • Variation %: the per-particle percentage of variation to apply.

Growth over surfaces

  • Normal threshold: controls how close the angle of the nearest surface face normal must be to 0,0,1, in order to grow leaves. Higher values means only vines moving along upward-facing surface faces may grow leaves.

  • Variation %: the per-particle percentage of variation to apply.

Orientation

  • Gravity: controls how much artificial gravity is applied to leaves and stems. Higher values means that leaves and stems will hang towards the ground. A value of 0.0 means that leaves and stems will point outwards from the face normals of the nearest surface.

  • Stem divergence: the amount of angular divergence to apply to the orientation of stems.

  • Leaf divergence: the amount of angular divergence to apply to the orientation of leaves.

  • Variation %: the per-particle percentage of variation to apply.

Properties Rollout

Material ID

  • Vines/stems/leaves min/max: the minimum and maximum material ID values to apply to ivy particles.

Element categorization

It may be important later in a sim to differentiate between ivy particles (ie, between vines, stems and leaves). By assigning unique custom float values to each particle type, you can filter particles by their type later in a simulation.

  • Channel: the channel name to store the category values in.

  • Vines/stems/leaves: the float values to assign to each ivy particle type.

The Grow operator doesn’t assign any shape meshes to particles itself. However, by assigning a unique integer value to each particle type (ex: 0, 1, 2), those values can later be used in a Shape operator as index values, to easily assign different shape meshes to ivy particles, depending on their type. For example, if ‘leaves’ are assigned a category value of 2.0, then the 3rd item in the following Shape operator (if ‘index from custom float value’ is enabled in the Shape operator) will be assigned to leaf particles (because the Shape operator list uses 0-based index values).

Targets

As ivy grows, each particle will assign its parent particle as its target. This allows easy conversion to splines or bindings later in the simulation.

  • Channel: the custom float channel to assign ivy particle targets to.


Shortest Path

The shortest path algorithm finds the shortest path between particles and a set of destination objects, through a graph formed by connections between particles in the event. Traditionally, shortest path algorithms use surface topology to form a connectivity graph between points (ex: edge connections between vertices in a mesh) - however, the Grow operator can form a graph between any set of particles by using a neighborhood search to determine connectivity.

By default, the shortest path algorithm will find shortest paths between connected particles and the nearest destination object and simply set the particles’ targets accordingly. However, if you connect the output of a Grow operator to another event, each path that is found will be output to the other event as a full chain of new particles. In other words, if you don’t connect the Grow operator to another event, no new particles will be born and existing particles will just have their target values modified…but if you connect the Grow operator to another event, each path will be converted into a new chain of spawned particles. The latter result makes it possible to convert all paths into individual splines using a Spline Paths operator in the output event (in target mode, using the target assignments from the Grow operator to determine spline connectivity).

When converting shortest paths into splines, make sure to assign the path index channel to the appropriate Spline Paths operator’s clustering channel value. This will allow the tySplines object connected to the Spline Paths operator to better recognize which particles should be welded together, if welding is enabled in the tySplines object.

  • Radius: the maximum distance between particles in order for them to be considered connected by the algorithm.

  • Max neighbor: the maximum number of connected neighbors a particle may have.

  • Expand search if radius too small: when enabled, a particle with no neighbors within its search radius will connect itself to the nearest particle regardless of distance. This ensures that all particles have a least one connection (if the total number of particles is greater than one).

Shortest path

  • Distance heuristic: controls which distance-measuring heuristic will be used during the shortest path search. Euclidean is the most accurate. Euclidean squared is often faster than Euclidean but can produce longer paths when a lot of concave areas exist in the connectivity graph. Manhattan favors paths which follow cardinal directions.

  • Target channel: when paths are formed from particle-to-particle, successive targets values will be assigned to this channel which can be used later to retrieve the paths (for example, by creating splines using a Spline Paths operator set to target mode).

  • Path index channel: particles belonging to a path will be assigned a value in this channel which will be unique to that path. These values can be used later to determine which path a particle is a member of, or for cluster welding if the paths are converted to splines in a tySplines object.

Destination objects

  • Objects: the list of objects that each particle will try to find the shortest path to.

  • Distane bias: this value will be subtracted from the total distance from each particle to its nearest object. Increasing this value can cause particles to “find” their shortest path sooner (even if their path is not the actual shortest path to the nearest object). For example, if the end point of a path is 20 units away from the nearest object but the distance bias is set to 20, the particle will stop searching for a shorter path, even if one exists.

  • Exit if inside object: when enabled, particles that are already inside a destination object will not perform a shortest path search.

  • Exit if existing path found: when enabled, particles that reach another particle that is part of an existing path, will adopt the existing path’s endpoint as its own.

Display

  • Show search data: when enabled, particles searched by the shortest path algorithm will be highlighted in green. Enabling this setting can help to visualize the algorithm’s efficiency.


Space Colonization

Unlike DLA, the space colonization algorithm requires two types of particles in order to run: seed particles and expansion particles. Seed particles are particles which will give birth to new particles during each iteration of the growth cycle. Expansion particles are particles that are in close proximity to seed particles, and that tell seed particles which direction to grow in. A typical setup using this algorithm involves a birth event that generates the initial seed particles, and a birth event which generates the volume of expansion particles the seed particles should grow towards.

Space Colonization

  • Seed radius: controls the size of seed particles.

  • Expansion distance: controls the maximum distance allowed between seed particles and expansion particles. Expansion particles further than this value from any seed particles will not affect growth in the current iteration.

  • Kill distance: controls the maximum distance between expansion particles and seed particles that will cause expansion particles to be deleted after seed particles grow outwards during a growth iteration.

  • Variation %: the per-particle percentage of variation to apply.
  • Iterations: the number of times to repeat the algorithm in a single time step.

  • Max children: the maximum number of children any given seed particle is allowed to grow.

  • Align rotation: aligns the rotation of particles to the vector between themselves and their parent.

  • Grow on whole frames only: the growth algorith will only run on whole frames, not sub frames.

Expansion particles

  • Enable filtering by custom float: when enabled, the only particles that will be treated as expansion particles, are those whose custom float data channel value is not equal to 0.

  • Channel: the custom float data channel to use for filtering.

  • Simulation groups: controls which particle simulation groups the expansion particles will be derived from.

Targets

  • Set target to seed particle: each new particle will have its target set to the seed particle it was spawned from.

  • Channel: the custom float data channel to assign the target value to.

Scale

  • Multiplier: the multiplier applied to the scale value new particles inherit from their seed parents.

  • Variation %: the per-particle percentage of variation to apply.

Uniqueness

  • Seed: the seed value for all varied parameters.


Forces Rollout

Forces will affect the direction of growths.

Forces

  • Force object list: the list of force objects used to direct the growths.

  • Influence %: the amount of influence forces will have on growths.

  • Variation %: the per-particle percentage of variation to apply.

Built-in Force

Using the built-in force allows you to apply simple forces to growth particles without having to create force objects in the scene.

  • X/Y/Z: the direction vector of the built-in force.

  • Strength: the strength of the built-in force.

  • Variation %: the per-particle percentage of variation to apply.


Noise Rollout

  • Noise mode: controls which noise algorithm will be used.

  • Noise texmap: the texmap that will be used by the noise texmap mode(s).

  • Noise preview: a preview image showing a 2D representation of the selected noise mode.

  • Strength: the strength of the noise (a multiplier on the default noise range of [-1, 1]).

  • Frequency: the speed at which the noise will evolve over time.

  • Scale: the scale multiplier for position values sent through the noise algorithm. Smaller values create larger noise patterns.

  • Roughness: controls the amount of extra detail applicable noise modes will generate.

  • Lacunarity: controls the scale of successive noise octaves for applicable noise modes.

  • Iterations/Octaves: controls the number of overlapping noise patterns that applicable noise modes will generate.

  • Phase: provides manual control over the evolution of the noise over time.


Objects Rollout

  • Object list: the list of scene objects which will act as growth attractors.

Attraction

  • Attraction: the amount of attraction force the scene objects will apply to particles.

  • Above/Below: controls whether attraction forces will be applied to particles above or below the object’s surface.

Attraction influence

The attraction influence extends outwards from nearby objects.

  • Distance: particles within this distance will be fully affected.

  • Falloff: the effect on particles beyond the base distance, but within this falloff distance, will diminish according to the inverse-square law.


  • Follow: the amount of force the scene objects will apply to particles, parallel to the object’s surface.

  • Above/Below: controls whether follow forces will be applied to particles above or below the object’s surface.

Follow influence

The follow influence extends outwards from nearby objects.

  • Distance: particles within this distance will be fully affected.

  • Falloff: the effect on particles beyond the base distance, but within this falloff distance, will diminish according to the inverse-square law.

Misc

  • Variation %: the per-particle percentage of variation to apply.