Skip to content

xpBranch

xpBranch creates branching structures, which can be used in an xpTrail object or rendered with the xpSplineMesher.


xpBranch_Hero Image_v01.png

xpBranch is a modifier which produces something akin to a plant structure.

It has a stem, which has branches coming from it and these branches may themselves have branches and so on.

The number, position, length, rotation around the stem, etc. may all be set, procedurally.

The xpBranch modifier itself only produces data used for the stem of the branched object.

To generate actual branches you need a Sub-Branch to be added to it, as a child object.

This can easily be done by clicking the Add Branch Object button.

The Sub-Branch object has a similar button, which you can click to add a sub-branch to the branch.

There is no limit to how many levels are generated but usually from one to three is all that is required.


xpBranch_UI.png

xpBranch General tab.

Checking this box activates xpBranch.

Set at Independent, by default.

You can change this to Action-Controlled.

In this mode, particles will be affected if they come into the field of effect of the modifier.

When in the Action-Controlled Mode setting, the modifier will only act on a particle when told to do so by an action.

This setting is only available in Action-Controlled mode.

It will force a branch to be generated, when an xpBranch modifier action is triggered which has the Force Branch box checked.

By setting the Branch In setting to longer than the Max Length setting, you can make the modifier only generate a branch when such an action is triggered.

Set to Time, by default, these length settings can be expressed in terms of time or distance.

The alternative setting is Distance Units.

The modifier will set the maximum length of the initial ‘stem’ of the branched object using the method in this drop-down.

The stem will have a length randomly selected between the Max Length and Min Length parameters.

The length is expressed in terms of elapsed time.

The default is set to 3 seconds.

The length is expressed in terms of scene units.

The default is set to 450 units (the distance traveled by a particle in 3 seconds at the default speed of 150 units/second).

You can use whichever setting meets your needs; it only changes the units used - there is no effect on the final result.

Max Time, Min Time/Max Distance, Min Distance

Section titled “Max Time, Min Time/Max Distance, Min Distance”

These are the upper and lower limits of the stem length.

The units of these parameters will change depending on the Length Method setting.

xpBranch_Length Method_DIstance_02.png

With the Length Method set as Distance Units, this first image shows three branch structures with both Max Distance and Min Distance values of 50cm.

xpBranch_Length Method_DIstance_01.png

In this second image, the Min Distance is still 50cm but the Max Distance is now 150cm, giving different lengths between the two values.

Set as Zigzag, by default, the stem will deviate from its initial course as it grows.

The other settings are: Natural and Curl.

xpBranch_Bending Modes_v02.png

Here are the Bending Mode settings of: Natural, Curl and Zigzag.

Each bend is in the opposite direction to the previous one, so the growth has a zigzag appearance.

The stem or branch grows in a natural fashion.

Different looks can be achieved by changing the Random Seed value in the Advanced tab of the xpEmitter.

In this mode the branch will curl as it grows.

If you choose this mode, additional parameter settings become available (below).

The time between bends in the stem.

The smaller the value, the more bends occur.

Variation to the time can be added with the Variation setting.

xpBranch_Bending In_01_v02.png

Bend In is set to 1 frame, in this image.

xpBranch_Bending In_01_v01.png

Bend In increased to 5 frames, giving less bends.

The degree of bending is randomly chosen between these values.

The maximum possible value is 90 degrees.

Set these values to zero to remove any bending.

xpBranch_Bending Angle_01.png

Max Bend Angle set at 25 degrees.

xpBranch_Bending Angle_02.png

Max Bend Angle increased to 40 degrees.

xpBranch_UI_Curl.png

Additional parameter settings with Bending Mode set as Curl.

This is the degree of curl.

The higher the value, the faster the branch will curl.

It is recommended that, in most cases, this value should be kept low, below 5 degrees.

You can add some variation between branches with the Variation setting.

If you click the little arrow to the left of the Curl Angle parameter, you have access to a control spline.

xpBranch_Curling Angle_v01.png

Here, the Curl Angle is set to 1 degree.

xpBranch_Curling Angle_v04.png

The Curl Angle is raised to 8 degrees in this second image.

This lets you control the curl angle over the length of the branch so you could, for example, have a light curl at the start but a tighter one towards the end.

xpBranch_Curling Angle_v05.png

With this custom Spline setting, the curl angle is increasing over the length of the spline.

As the branch grows, the value in this setting is added to the curl angle, so the curl becomes tighter and tighter as the branch grows.

If this is set too low, the amount of curl may be very small, producing a soft bend rather than a curl.

This setting normally requires only a small value as the curl angle will be increased by this value each frame.

As with Curl Angle, clicking the little arrow reveals a control spline.

xpBranch_Tightening_01.png

Tightening set at 0.1 degrees.

xpBranch_Tightening_02.png

In this image, the Tightening is 0.4 degrees.

This lets you control tightening over the length of the branch.

xpBranch_Tightening_04.png

The Tightening is still set at 0.4 here, but now the Spline setting is increasing the tightening over time.

xpBranch_Tightening_05.png

The custom Spline setting, in this image, is driving an earlier increase in the tightening. This is now showing a similar shape to the image above, but with a tighter spiral towards the end of the spline.

As the branch grows, the particle speed is reduced by this amount each frame.

If you don’t do this, as the branch curls, the distance it travels each frame remains the same and the result is a curl which never reaches a center point.

If this is too high, the speed approaches zero and the branch stops growing.

Again, clicking the little arrow reveals a control spline.

This spline is to control speed reduction over the length of the branch.

Normally the curl all takes place in one arbitrary plane.

With this setting, you can force the curl to move out from that plane to produce a spiral or helix.

You can add variation to the displacement with the Variation setting.

xpBranch_Displacement_01.png

Displacement of 0 (zero) cm.

xpBranch_Displacement_02.png

Displacement value increased to 40cm, creating a spiral towards the Z axis.

The overall strength of the curl effect.

If this is set to zero, there will be no curl effect at all.

Once again, clicking the little arrow reveals a control spline.

This spline is to control the strength over the length of the branch.

If this parameter is unchecked, all branches curl in a randomly-selected plane.

If it is checked, you can choose any arbitrary plane for the branches, using the Plane Angle and Variation settings.

By default, this is enabled, so each branch will always curl in a fixed plane.

If you uncheck this setting, the plane is selected randomly and will vary according to the direction of the particle from which a branch is generated.

This can lead to results that may look very interesting but may also show no curl at all.

For that reason, it is recommended that you leave this enabled.

Only available if Use Plane Angle is enabled.

This forces the branch to set a fixed plane for the curl even if the Plane Angle subsequently changes.

If it is disabled, the curl plane is recalculated each frame and if the Plane Angle has changed, the curl plane will change.

This leads to the curl ‘unwinding’, rather than being held to one plane.

This can look very effective but, as with Use Plane Angle, it is recommended that you leave this enabled unless you are confident about how this mode works.

In such a case, Fixed Plane is always on to allow the creation of symmetrical curls.

Only available if Use Plane Angle is enabled.

It is the plane angle to use if Use Plane Angle is checked.

Variation can be added with the Variation setting.


This section contains the parameters for the branches from the initial stem.

xpBranch_UI_Branching_v02.png

xpBranch Branching tab.

xpBranch_UI_Branching_v03.png

This second image shows the UI for a Sub-Branch object.

This button will add a Sub-Branch object to the xpBranch modifier. The settings for the Sub-Branch object can be found further down the page.

You must do this before any branches are generated.

Once you have added a sub-branch, this button is unavailable since only one Sub-Branch object per branch level is permitted.

xpBranch_Branching_v01.png

In this image, the first object has no branches, the second has one Sub-Branch object and the third has four Sub-Branch objects.

Disabling this will disable branching from the stem and branching from any sub-branches (the entire hierarchy is disabled).

Enabling will give a more controllable result when using the Branch In and Variation settings.

If you have existing scenes whose branch structure you want to preserve, check this box; the previous algorithm will then be used instead.

The time between branches from the stem.

The smaller the value, the more often a branch is generated.

Variation to the time can be added with the Variation setting.

xpBranch_Branch In_01.png

Branch In set to 1 frame, with a branch being generated every frame.

xpBranch_Branch In_02.png

In this image, Branch In is set to 5 frames, now generating less branches.

These parameters, if enabled, force the modifier to branch from the base and/or the tip of the stem.

If they are unchecked, branching from the base will never occur; branching from the tip may occur but only if the animation time happens to coincide with the time the modifier would branch at anyway.

This is the number of branches that will be generated (at the same starting point on the stem or parent branch) each time branching occurs.

xpBranch_Number_03.png

Number of Branches set to 1.

xpBranch_Number_04.png

Number of Branches now raised to 3.

xpBranch_Number_02.png

Finally, here Number of Branches is set to 15.

The maximum number of branches that will be generated.

xpBranch_Number_Max.png

In this image, Max Branches is set to 150.

This setting is only available if Number of Branches is set to at least two.

If you set Rotation Mode to Set Angle, all branches emerge from the stem at the same angle.

If, for example, you have set Number of Branches to two, you won’t see any effect because the two branches both follow the same direction.

By enabling this parameter, you can achieve a symmetrical effect so that, if the number of branches is set to two, the two branches emerge opposite one another.

If the number of branches is six, the six branches will be evenly spaced around the stem.

You can use this mode to create structures such as feathers.

xpBranch_Symmetrical_v01.png

Symmetrical is disabled in this first image.

xpBranch_Symmetrical_v02.png

Symmetrical enabled here, with the clear symmetrical result.

The degree of deviation of the branch from the stem is randomly chosen between these values.

The maximum possible value is 90 degrees.

Set as Use Emitter Speed, by default, this drop-down controls the speed of the newly-generated particle which forms the new branch.

The alternative options are: Source Particle Speed and Set Speed.

The speed given by the emitter will be used.

If a particle group is specified in the sub-branch object, the speed given in that group will be used; otherwise the speed given in the emitter itself is used.

The speed will be set to the same as the particle which generated the branch.

The value in the Branch Speed parameter will be used.

The speed of the branch particle, if Branch Speed Mode is set to Set Speed.


There are three splines to control branch distribution, length, and angle of rotation.

This spline controls the distribution of branches along the stem.

A value of zero means that no branch will occur at that point; a value of 1.0 means that a branch will occur,

This value is then multiplied with the number of branches from the modifier’s interface to determine how many branches to generate at that point.

If the number of branches is 1 and the value from the spline is less than 1.0, no branches are emitted.

This is because the number of branches must be a whole number and if the number of branches is 1 and the spline value is (for example) 0.4, the result is 1 x 0.4 = 0 (again, the number of branches must be a whole number).

If the number of branches is 3, then you would actually get 3 x 0.4 = 1.2 = one branch.

Therefore, if you are using the distribution curve, you should increase the number of branches to more than one, or all the branches may disappear.

xpBranch_Branches_Control Splines_Distribution_01.png

The following six images mainly have Number of Branches set to 1, the Rotation Mode is Set Angle with an Angle of 0 (zero) degrees. This first image has the default Distribution spline setting, with branches distributed over the entire source branch.

xpBranch_Branches_Control Splines_Distribution_02.png

This custom Distribution spline setting means there are no branches beneath the half way point, then branches appear afterwards.

xpBranch_Branches_Control Splines_Distribution_03.png

Number of Branches is increased to 20, in this image. The user spline used for Distribution means that the additional branches also increase in their distribution towards the top of the base branch.

This is a scale spline which affects the length of the branches.

It scales the value given in the branch length setting in the Sub-Branch object (not this modifier).

You can use this to have long branches near the base and short ones at the tip, for example.

xpBranch_Branches_Control Splines_Branch Length_v01.png

xpBranch_Branches_Control Splines_Branch Length_v02.png

xpBranch_Branches_Control Splines_Branch Length_v03.png

With the same settings as above, the three customized Branch Length spline settings are mirroring the branch lengths created in these three images.

Set as Random, by default, this governs the angle around the branch at which the branch emerges from the stem.

If you imagine a 360 degree circle around the stem, this is the point on that circle where the branch originates.

The other available settings are: Use Spline, Random Then Spline, Set Angle and Set Angle Then Spline.

The branches will be generated from a random angle around the stem.

xpBranch_Branches_Control Splines_Rotation Mode_Random_v01.png

Rotation Mode set as Random.

The spline will control the angle completely.

The spline angle at the point the branch occurs is not an absolute value; it is an incremental value, added to the previous angle.

For example, if you set the spline to have a constant value of 30 degrees, each time a branch is generated it will be rotated 30 degrees around the stem from the previous branch.

This enables you to generate a completely regular structure around the stem.

xpBranch_Branches_Control Splines_Rotation Mode_Spline_04.png

Rotation Mode set as Use Spline, with the Rotation spline setting driving the generation of the branch..

The modifier will first select a random angle around the stem and will then generate a branch.

For all subsequent branches the angle will be incremented by the angle in the spline at that point along the stem.

The angle is given by the value in the Angle parameter.

xpBranch_Branches_Control Splines_Rotation Mode_Set Angle_v01.png

With the Rotation Mode of Set Angle, the Angle set, here, is 70 degrees.

The modifier will first set the angle around the stem from the Angle parameter and will then generate a branch.

For all subsequent branches the angle will be incremented by the angle in the spline at that point along the stem.

xpBranch_Branches_Control Splines_Rotation Mode_Angle then Spline.png

In this image, the Rotation Mode is Set Angle Then Spline. The Angle set is 30 degrees and the Rotation spline is driving the shape of the rotation.

The angle used in the Set Angle and Set Angle Then Spline modes.

The control spline used for controlling rotations.


This object is required when adding a branch level to an xpBranch modifier.

Untitled

Sub-Branch object menu settings.

Most of the settings in this object are identical to those with the same name in the xpBranch modifier.

There are some small differences, which are detailed here.

You can specify that particles in this branch object belong to a different group from the source particle.

This is useful if you want different branch levels to be affected by different modifiers, such as an xpGravity modifier.

This button will add another Sub-Branch object to this Sub-Branch object as a child object of it.

Once you have added a sub-branch, this button is unavailable since only one sub-branch object per branch level is permitted.


You can spawn from the particle used in the stem, with these settings.

If you also want to spawn from the branched particles, these same settings are used, but you will also need to enable spawning in the Sub-Branch object.

For spawning to work correctly, the xpBranch modifier must be added to the modifiers list of the spawning emitter.

This will be done automatically if you use the Add Emitter button (in this Spawning tab) or if you drag an emitter into the Spawning Emitter link field.

xpBranch_UI_Spawning.png

xpBranch Spawning tab.

Check this box to enable spawning from the stem particle.

The emitter used to generate spawns.

This should not be the same emitter whose particles are generating the branches.

xpBranch_Spawning_v01.png

In this image, particles are being spawned with no speed. The xpBranch Spawning Emitter is linked to a unique xpEmitter, which is generating particles along the main stem.

Click this button to create a new emitter and add it to the Spawning Emitter link field.

Set as Random, by default, this is how the direction of the spawned particles is determined.

The alternative setting is Source Particle.

The direction of the spawned particles is set to a random value which, in practice, means that the spawns adopt a spherical distribution.

In this animation, with the same emitter setting as above, except speed now set on the particle emissions, Direction is set to Random.

In this mode the direction of the new particles is the same as the source particle.

The settings are same in this scene, with Direction now changed to Source Particle.

Set as Absolute, by default, this option controls the speed of the spawned particles.

The alternative setting is Relative.

The spawned particle speed is determined by the spawning emitter.

The spawned particle speed is the sum of the source particle speed and the speed from the spawning emitter.

If the spawning emitter sets a speed of zero, the spawns will have the same speed as the source particle.

The number of particles to spawn each frame.

The time interval between spawns.

Set this to zero to spawn new particles each frame.

xpBranch_Spawn Interval_v01.png

The Spawn Interval on the left is every frame. By comparison, on the right, the Spawn Interval setting is every 5 frames.

If enabled, a small offset (derived from the particle radius) is applied along the spawned particle’s direction of travel.

This is to prevent a too-regular appearance of the spawns.

If you prefer the appearance to be regular, uncheck this box.

Spawned particles can be assigned a new group.

Drag the Group object, you want to use, into this link field.


The xpBranch modifier can detect intersections with other branches and take action if a potential intersection is detected.

In this first animation, Check Intersections is disabled. The stem curls around onto itself and the branches intersect.

By comparison, in this scene, Check Intersections is enabled. When the particle is within 100cm of the xpTrail, it changes direction and triggers an action (as seen in the Layers list). The action (in the Actions list) is a Change Scale Action, from 0.25cm radius to 2cm. This action also includes a change in particle color and shape. Therefore, the source particle changes appearance and direction when within 100cm of the xpTrail.

Checking for intersections is computationally-intensive.

Only chck this box if you want to detect, and respond to, potential intersections.

The maximum distance at which a potential intersection will be detected.

There is little point in detecting all possible intersections, no matter how far away, since a branch may change direction in the meantime.

This setting has two uses.

Since the xpTrail object is a spline, this is the ‘thickness’ given to the trail.

A spline has zero thickness, so there is nothing to collide with; in that case, the spline has to be given an assumed thickness to provide a collision object.

In this modifier, this object is always an X-Particles Trail object, as opposed to a conventional spine.

Therefore, its thickness comes from the Thickness and Color tab of the xpTrail object.

That tab can do three things:

  • the default is that the thickness is not set, in which case it is given a default value of 0.5 scene units and this default thickness setting is ignored
  • the thickness is specifically set, in which case this setting is again ignored
  • or the No Thickness or Color Data setting is enabled, in which case no thickness data at all is provided by the xpTrail object and this setting provides the thickness value.

There is another use.

When a particle is trying to avoid its own xpTrail object, the problem is that the trail has the virtual ‘cylinder’ around it.

This means that if you test for intersections from the particle position, it will hit the cylinder around itself and register an instant hit, which is clearly incorrect.

If it tries to change direction at that point, it won’t be able to because the ‘cylinder’ completely surrounds it, so it fails to determine a suitable new direction and simply stops.

The only way around this is to advance the starting position along its direction of travel until the starting position is ‘outside’ the virtual cylinder.

The Default Thickness value is used for this purpose, advancing the start position of the ray by that distance along the direction of travel.

It is strongly recommended that you enable No Thickness or Color Data in the xpTrail object.

This will then ignore all thickness data from the xpTrail object and use only the value in this setting.

Set as Change Direction, by default, this enables you to choose what the particle will do when it detects a possible collision with an xpTrail object from the Trails list.

The alternative settings are: Freeze, Die and Trigger Actions.

The particle will change direction to avoid the trail.

The particle will freeze.

It can be unfrozen again using an action or the xpNegate modifier.

The particle will trigger any actions in the Actions list.

When you add a Trigger Actions layer, a new action will be created and added to the Actions list.

Using this menu will add the selected option to the Layers list.

You can add more than one entry to the Layers list if required

This is the list of options that will be carried out when a potential collision with an xpTrail object from the Trails list; it can contain more than one entry.

You can remove options by right-clicking an entry and selecting Remove or Remove All.

You can also disable any entry temporarily by unticking the box at the left of the entry.

The order of these entries is not relevant and, in fact, you cannot change the order.

They are always carried out in this order, if present in the list: 1) Direction changes, 2) Particle freezes, 3) Actions are triggered, 4) Particle dies.

xpBranch_Intersection_Layers_UI.png

Layers list, with all available layer options included.


Drag the xpTrail objects you want to avoid intersecting with into this list.

Normally you would drag the particle’s own xpTrail object into the list, but you can add trails from other emitters as well.


Drag actions you want to be triggered, on detecting an intersection, into this list.

The actions will only be triggered if there is a Trigger Actions layer in the Layers list.

Click this button to create a new action and add it to the Actions list.

When you click this button, if there is not already a Trigger Actions layer in the list, one will be created.


To specify the group, drag and drop the desired Group object into this field.

This setting is useful if you want to ensure that the spawned particles are, or are not, affected by xpBranch.


The modifier’s settings can be mapped to particle data.

Use the dedicated manual page, below, for instructions on how this works.

Data Mapping


You can use the Fields options to control where xpBranch operates.


Copyright © 2026 INSYDIUM LTD. All rights reserved.