Houdini 20.0 Nodes Geometry nodes

Edge Transport geometry node

Copies and optionally modifies attribute values along edges networks and curves.

On this page
Since 16.5

Overview

This node calculates attribute values as it “moves” along curves, or along edges in polygonal geometry.

The simplest form of “transport” is to copy an attribute value from the starting points to the end points. Alternatively, you can use a function to compute the attribute value at each point in the graph. For example, you can use a sum function to compute the depth of each leaf, or a maximum function to compute the maximum value of the attribute along each branch.

The node can traverse the selected edges in different ways:

  • The node can treat edges with shared points as implicitly forming a directed acyclic graph and move from the root(s) of the graph along the edges to the end points.

    • You must specify the “root” point(s) to start processing at. The Root choice parameter lets you use the first or last point in the geometry, or explicitly specify points to use as roots.

    • Houdini edges do not have an inherent direction. This node treats each edge as proceeding from the root outward. You can reverse the direction of traversal with the Direction parameter.

    • If the graph has multiple roots, the results may change if the geometry is animated, because the edge-network mode uses edge lengths to decide traversal order.

  • You can set a “parent” attribute on the points to explicitly set up a graph structure for the edges.

  • The node can p each edge individually. This is useful for hair/fur. In this case, avoid using geometry with shared points. If you are computing a point attribute and the edge’s points are shared, the resulting values are not well defined. This means the result may not make sense, and/or the result may change between runs or between versions of Houdini.

Recipes

To...Do this

Compute distance along the curve at each point

Set Direction to “Forward”, Operation to “Total”, Normalization off, Integrate a constant value on, Scale by edge length on, Edge split method to “Copy”.

Normalize the computed distance to a 0-1 range along the curve

Set Direction to “Forward”, Operation to “Total”, Normalization to “Per-component”, Integrate a constant value on, Scale by edge length on, Edge split method to “Copy”.

Compute the number of edges along the curve at each point

Set Direction to “Forward”, Operation to “Total”, Normalization off, Integrate a constant value on, Scale by edge length off, Edge split method to “Copy”.

Parameters

Method

How to traverse the edges between the points in the Point group.

Each Curve

Processes each curve individually. The “forward” direction of each curve is from the lowest point number to the highest point number. This mode supports both vertex and point attributes. This mode only supports polygons and curves. This mode works with closed curves.

Edge Network

The node forms a graph structure from any edges between the points in the Point group. You can set the starting points (roots) using the Root choice parameter. The node works from the root points outward. Edges at the same level are traversed by edge distance. This mode only supports point attributes. You can use this mode with any geometry type with internal edges.

Parent Attribute

This lets you explicitly set up the graph structure of the points using an attribute. Create an integer attribute named parent on the points (you can change the attribute name with the Parent attribute parameter). Set the value of this attribute on each point specifies the point number of that point’s parent point. This mode does not require actual edges to exist between the points.

To create a parent attribute from the edge topology (like how “Edge Network” mode works), do the following:

  1. Use an Enumerate SOP to set the parent attribute on each point to that point’s number.

  2. Use an Edge Transport node with Method set to “Edge Network”, Operation set to “Transport”, and New root value set to “Hold”.

Curve Group

When Method is “Each Curve”, only transport values along the curves in this primitive group. If this is blank, the node operates on all points.

Point Group

When Method is “Edge Network” or “Parent Attribute”, only transport values between points in this group. If this is blank, the node operates on all points.

Attribute

Transport the values of this attribute. When Method is “Each Curve”, this can be a point or vertex attribute. When Method is “Edge Network” or “Parent Attribute”, this must be a point attribute.

If this attribute does not exist, and Integrate a Constant Value is on, the attribute is created. Otherwise, if the attribute does not exist the node does nothing.

Direction

Forward

Process from the root points outward to the tip points (or from the start of each curve to the end).

Backward

Process from the tip points inward to the root points (or from the end of each curve to the start).

Parent Attribute

When Method is “Parent Attribute”, the node looks in this attribute to set up a directed acyclic graph from the points. The default is parent. The node treats points with invalid point numbers and their own point numbers in this attribute as roots. The node ignores any points not reachable from a root.

Root Choice

When Method is “Edge Network”, this controls which point(s) to start from.

First Point

Start from the point with the smallest point number. If after all points reachable from this root are processed there are still unprocessed points, the unprocessed point with the smallest point number is made a new root and the process repeats.

Last Point

Like “First Point” but starts from the point with the highest point number.

Group

Start from the point(s) in the Root group. If a point is reachable from multiple roots, whichever has the shortest path will apply the transport function for that point. Any points unreachable from these roots are not processed.

Root Group

When Root choice is “Group”, a group of points to use as roots for the edge network.

Operation

How the node sets the attribute values as it moves along the curves/edges.

Transport

Copy the value from the previous/parent point. If the point is a root, it uses the New root value parameter to choose the new value.

Transport from Root

Copy the value from the root. If the point is a root, it uses the New root value parameter to choose the new value.

Total

Set the value to the sum of all the values of previous/ancestor points. This operation is useful for measuring the distance from the root to each point, or counting the number of points from the root to each point.

To measure distance, turn on Scale by edge length. This scales each added value by the distance to the previous point, making the value of each point varying by the outgoing edge length.

When measuring distance or number of points, turn on Integrate a Constant Value. This treats each point’s current value as 1.

Note

Each point receives the total of the attribute value of all the previous points up to, and not including, itself. Thus root values receive zero.

Maximum

Set the value to the maximum of this point’s value and all previous/ancestor values. If the point is a root, it just uses its current value.

Minimum

Like “Maximum”, takes the minimum.

Use Normalization

When enabled, the attribute values are normalized to a 0-1 range. The normalization will be based on the method selected in Normalization.

Normalization

How the node normalizes the attribute values.

Per-Component

Each disconnected component is scaled to an individual 0-1 range. This method finds the minimum and maximum values for each component and normalizes each point attribute by which component it belongs to.

Global

All points are scaled to a shared 0-1 range. This method finds the global minimum and maximum values for all components and normalizes each point attribute to the global range regardless of which component it belongs to.

New Root Value

When Operation is “Transport”, this controls what values to use for the roots.

Zero

Treat the value of root points as 0.

Hold

Use the root point’s current value.

Integrate a Constant Value

When Operation is “Total”, treat each point’s current value as 1. This lets you measure distance or number of points along the edges.

Scale by Edge Length

When Operation is “Total”, scale the value transported along an edge by the edge length. This lets you measure distance along the edges.

Rotate by Edge Angle

When transporting a vector or orient attribute, rotate the attribute by the dihedral angle between the two neighbour edges. Note that this option is not supported when backward transporting an edge network.

Edge Split Method

When processing a graph structure with Direction set to “Forward”, a point can have more than one outgoing edge. This controls how to pass the current point’s value down to multiple “child” points.

Copy

Transport the current value to each child point.

Split

Divide the current value by the number of children and pass the result to each child point.

Edge Merge Method

When processing a graph structure with Direction set to “Reverse”, a point can have more than one incoming edge. This controls how to merge the values coming up from multiple “child” points.

Add

Use the sum of the child values.

Maximum

Use the highest of the child values.

Minimum

Use the lowest of the child values.

See also

Geometry nodes