Branching Modifier

This modifier creates branching structures which can be used in a trail object or rendered with the X-Particles Spline Mesher.

Please see the notes below on using the Branching modifier before using it for the first time. Also see the manual page for the Sub-Branch object, which you will need to create any branches.

Interface

This modifier includes the following sections:

For the 'Groups Affected', 'Mapping', and 'Falloff' tabs, and for the buttons at the bottom of the interface, please see the 'Common interface elements' page.

Parameters

General quicktab

Enabled

If this button is unchecked, the modifier will be disabled (inactive).

Mode

Independent [default setting]

In this mode, the modifier will work in the same way as a standard Cinema 4D particle modifier: particles will be affected if they come into the field of effect of the modifier. X-Particle Actions have no effect on the modifier in this mode.

Action-Controlled

In this mode, the modifier will only act on a particle when told to do so by an Action. Until that point, the particle will not be affected, but once activated for a particular particle, the modifier will continue to influence it as long as it is in the field of effect of the modifier. The modifier's effect on a particle can be halted by means of another Action, if desired.

Action Only

This switch is only available in 'Action-Controlled' mode. It will force a branch to be generated when a Branching Modifier action is triggered which has the 'Force Branch' switch 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.

Length Method

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. These length settings can be expressed in terms of time or distance. The settings therefore are:

Time

The length is expressed in terms of elapsed time. The default is set to 3 seconds.

Distance Units

The length is expressed in terms of scene units. The default is set to 450 units (the distance travelled 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 (or 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.

Bending Mode

The stem will deviate from its initial course as it grows. There are three mode:

Natural

The stem or branch grows in a natural fashion.

Zigzag

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

Curl

In this mode the branch will curl as it grows. If you choose this mode, additional settings become available:

See below for details of this mode.

Bend In, Variation

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.

Max. Bend Deviation, Min. Bend Deviation

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.

Curl mode

This mode causes the branch to curl as it grows. Effects like this are possible:

Before using curl mode please read the separate page 'Using Curl Mode Effectively'. This give more information and examples of how changing these controls will affect the final result.

Curl Angle, Variation

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' label, you have access to a control spline:

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.

Tightening

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 and produces 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 shows a spline to control tightening over the length of the branch.

Speed Reduction

As the branch grows the particle speed is reduced by this amount each frame. If you don't do this, then as the branch curls the distance it travels each frame remains the same and the result is a curl which never reaches a centre point. But if this is too high the speed approaches zero and the branch stops growing.

As with 'Curl Angle' clicking the little arrow shows a spline to control speed reduction over the length of the branch.

The amount of 'Tightening' and 'Speed Reduction' you need depends entirely on the look you are trying to achieve, so experimentation is required.

Examples of the above settings can be found in the 'Using Curl Mode Effectively' page.

Displacement, Variation

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. This screenshot shows the difference. On the left 'Displacement' is zero, on the right it is set to 10 scene units:

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

Strength

The overall strength of the curl effect. If this is set to zero, there will be no curl effect at all.

As with 'Curl Angle' clicking the little arrow shows a spline to control the strength over the length of the branch.

Use Plane Angle

If this switch 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 switch is checked since then each branch will always curl in a fixed plane. If you uncheck this switch, 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 switch checked unless you are sure about what you are doing.

Fixed Plane

Only available if 'Use Plane Angle' is checked. This forces the branch to set a fixed plane for the curl even if the 'Plane Angle' subsequently changes. If it is unchecked, 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 checked until are confident about how this mode works.

Important: this switch has no effect if the 'Symmetrical' option in the Branching quicktab has been enabled in the parent branch of a sub-branch. In such a case 'Fixed Plane' is always on to allow the creation of symmetrical curls.

Plane Angle, Variation

Only available if 'Use Plane Angle' is checked. It is the plane angle to use if 'Use Plane Angle' is checked. Variation can be added with the 'Variation' setting.

Branching quicktab

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

Add Branch Object

This button will add a Sub-Branch object to the Branching modifier. 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.

Enable Branching

Unchecking this switch will disable branching from the stem and branching from any sub-branches (the entire hierarchy is disabled, in other words).

Legacy Mode

The algorithm used to calculate when to generate a branch has changed slightly to 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 switch. The previous algorithm will then be used instead, giving the same result as previous versions of X-Particles.

Branch In, Variation

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.

Branch From Base, Branch From Tip

These switches, if checked, 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.

Number of Branches

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.

Max. Branches

The maximum number of branches that will be generated. Most of the time you can leave this setting alone.

Symmetrical

This switch is only available if 'Number of Branches' is set to at least two. You cannot have symmetrical branches with only one branch!

If you set 'Rotation Mode' to 'Set Angle' then 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 checking this switch 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:

Max. Branch Deviation, Min. Branch Deviation

The degree of deviation of the branch from the stem is randomly chosen between these values. The maximum possible value is 90 degrees.

Branch Speed Mode

This drop-down controls the speed of the newly-generated particle which forms the new branch. The options are:

Use Emitter 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.

Source Particle Speed

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

Set Speed

The value in the 'Branch Speed' parameter will be used.

Branch Speed

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

Control Splines

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

Distribution

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, IF the time given in 'Branch In' indicates that a branch should be generated. Any other value is a probability that a branch will occur, again if the time in 'Branch In' would cause a branch to be generated at that point.

Note that the returned value from the spline ranges between zero and one. 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 was 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!

Branch Length

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.

Rotation Mode

This governs the angle around the branch at which the branch emerges from the stem. This is NOT the deviation angle of the branch. If you imagine a 360 degree circle around the stem, this is the point on that circle where the branch originates.

Note that this value, and also the 'Angle' setting and the rotation spline, are not available if 'Bending Mode' is set to 'Curl'. Use the 'Plane Angle' setting in the curl section instead.

The drop-down has the following settings:

Random

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

Use Spline

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.

Random Then Spline

The modifier will first select a random angle around the stem and will generate a branch. For all subsequent branches the angle will be incremented by the angle in the spline at that point along the stem.

Set Angle

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

Set Angle Then Spline

The modifier will first set the angle around the stem from the 'Angle' parameter and will generate a branch. For all subsequent branches the angle will be incremented by the angle in the spline at that point along the stem.

Angle

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

Rotation

The control spline used for controlling rotations.

Spawning quicktab

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.

Important note about Spawning

For spawning to work correctly, the Branching modifier MUST be added to the modifiers exclusion list of the spawning emitter. This will be done automatically if you use the 'Create Spawning Emitter' button or if you drag an emitter into the 'Spawning Emitter' link field. However, if you then remove this modifier from the exclusion list, or change the list to 'Include' rather than 'Exclude', or any other change which would allow this modifier to act on the spawning emitter, no spawning will occur.

This is a safety measure. Since X-Particles is threaded, using a spawning emitter which is then acted upon by the branch modifier means that the modifier will attempt both to spawn from the spawned particles and create branches from them. This can cause a crash, so allowing the modifier to act on an emitter it is using for spawning is not permitted.

Enable Spawning

Check this switch to enable spawning from the stem particle.

Spawning Emitter

The emitter used to generate spawns. This should NOT be the same emitter whose particles are generating the branches.

Create Spawning Emitter

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

Direction

This is how the direction of the spawned particles is determined. There are two options:

Random

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

Source Particle

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

Spawned Particle Speed

This option controls the speed of the spawned particles. There are two options:

Absolute

The spawned particle speed is determined by the spawning emitter.

Relative

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.

Number to Spawn

The number of particles to spawn each frame.

Spawn Interval

The time interval between spawns. Set this to zero to spawn new particles each frame.

Use Random Offset

If checked, 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 in fact you prefer the appearance to be regular, uncheck this switch.

Group

Spawned particles can be assigned a new group. Drag the Group object you want to use into this link field.

Intersection quicktab

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

Check Intersections

Checking for intersections is computationally-intensive. Only check this box if you want to detect and respond to potential intersections.

Detection Distance

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.

Default Thickness

This setting has two uses. Since the trail 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 (imagine a virtual cylinder around the spline) 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 Trail 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' switch is checked, in which case no thickness data at all is provided by the Trail object and this setting provides the thickness value

But it has another use. When a particle is trying to avoid its own Trail 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.

But how far should it be advanced? An arbitrary value won't work, since the trail thickness could be set to any value. Instead the 'Default Thickness' value is used. This will advance the start position of the ray by that distance along the direction of travel,

In this case we strongly recommend that you check the switch 'No Thickness or Color Data' in the Trail object. This will then ignore all thickness data from the Trail object and use only the value in this setting. This will let you understand more clearly what is happening.

On Intersection

This menu enables you to choose what the particle will do when it detects a possible collision with a Trail object from the 'Trails' list. There are four possible options:

Change Direction

The particle will change direction to avoid the trail.

Freeze

The particle will freeze. It can be unfrozen again using an Action or the Negate modifier.

Die

The particle will be killed. Unlike freezing, this cannot be reversed later.

Trigger Actions

The particle will trigger any actions in the 'Actions' list.

For convenience, 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.

Layers

This is the list of options that will be carried out when a potential collision with a Trail object from the 'Trails' list. It can contain more than one entry. For example, this list will change the particle direction then trigger any actions in the 'Actions' list:

You can remove options by right-clicking an entry and selecting 'Remove' or 'Remove All'. You can also disable any entry temporarily by unchecking the checkbox at the left of the entry, like this, where the 'Change Direction' entry is disabled:

Note that you can only have one entry of the same type.

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

Trails

Drag the Trail objects you want to avoid intersecting with into this list. Normally you would drag the particle's own Trail object into the list, but you can in fact add trails from other emitters as well. Note that this list will only accept X-Particles Trail objects.

Actions

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.

Add Action

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. This is simply for convenience, since presumably if you create an action you want it to be triggered.

Using the Branching Modifier

The Branching modifier is a complex modifier. Please read these notes if you are not familiar with its use.

Concept

Think of the modifier as producing something like 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.

Objects

The Branching modifier itself only produces data used for the stem of the branched object. To generate actual branches you need a Sub-Branch object 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. Usually from one to three is all that is needed.

Although the hierarchy can have any number of levels, each one can contain just one Branch object. There is nothing to prevent you from duplicating the Branch objects but they will do nothing - only the first one on each level is used.

Particles

The modifier will create an extra particle for each branch that is generated. This can result in quite a lot of extra particles! So if you have limited the number of particles that can be emitted from the emitter, you may not see any branches if the emitter has reached its limit. This is important if you only want to generate a small number of branched systems - don't do it by reducing the maximum particle count, instead use the Start/End emit settings in the emitter, or use Shot or Pulse or Defined Emission modes.

Visualising your branches

To see the branched structure, link a Trail object to the emitter. This will generate a branched structure which you can render with the XP material, or use in the X-Particles Spline Mesher object, or use in a Sweep object.

Using Curl mode

This mode adds an additional degree of complexity. For more details, please see the separate page 'Using Curl Mode Effectively'.