Free Electron Documented Operators
Common Operator Info
FE DodgeOp

DodgeOp in Maya

DodgeOp running at render time in Arnold


Moves curves to avoid an obstacle.

When not in temporal mode, prior frames do not affect the current solution. This may only produce a tolerable response for static colliders or select highly convex moving colliders, but it can be a faster and simpler solution since any frame can be computed independently.


The Input Surface should be a collection of curve primitives. It is presumed that the first vertex of each primitive is the base of a curve.

A Collider defines the region to be avoided. An optional Skin Surface can provide additional guidance.


Common threading options are supported as inherited by OperatorThreaded.

A Primitive Group can be specified to limit the effect to those primitives. Otherwise, all primitives will be affected.

With Partition Collider on, the primitive string Collider Attr specifies sectioning based on matching patterns. The Repulsion Match is a regex pattern that selects which sections of the collider surface provoke repulsion. Likewise, the Collision Match is a regex pattern that selects which sections of the collider surface provoke direct contact collisions.

The precision of the collider curvature can be improved by using Refinement to introduce adaptive subdivision.

The Direction to deflect curves can be based on the Nearest Normal or using a Tangent Attribute. The normal would be sampled from the collider while the tangent would be grabbed from a vector primitive Tangent Attr.

The Dead Zone indicates how many input points on each curve are not subject to change, starting from the root. When the Dead Zone Attr specifies a valid primitive integer attribute and for each primitive where the value is more than zero, that value is used instead of the parameter setting.

The particular result of random effects can be changed with a different Seed.

Extra visual elements can be added using Debug Output.

The operator is designed to be modestly stable without using history. Turning on Temporal will keep the history of the last frame. If the operator is evaluated over consecutive frames, this data can be used to stabilize near-arbitrary deflection directions and also impose a slow response when curves are released from the collider. The Response determines how strongly the curves return to their prior state. A response of 1.0 would ignore the history.

When using the temporal mode, a non-zero Compensation will reduce the effect of momentum from changes in the input. So if the base of each curve is the root of a hair on a moving head, full compensation counteracts that motion instead of letting the hair whip around.

The Threshold specifies how far the curves should stay away from the collider. A Projection value of 1.0 will try to continue the trailing end of any bent primitives in the established bent direction, while a value of 0.0 will try to pull the remainder of bent primitives back to their original position.

In combination with the hard collisions, a Repulsion strength can help make a smooth transition reaching out to a Falloff distance.

A non-zero Decompression will try to restore the length of crushed segments by pushing the segment tip out from the collider perpendicular to the segment direction.

A non-zero Retraction will try to restore the length of stretched segments by pulling the segment tip back along the segment direction.

A non-zero Lead In will pull preceding vertices in a curve towards any vertex that gets moved. This option has not seen much use.

While in collision, each segment is incrementally rotated by the Step Angle, laterally shifted by the Step Distance, and scaled down by the Step Shrink. A rotation is usually always used, but it is quite reasonable for the other two to be left at zero. Large values may reach a solution faster, but the result may not be as stable. There is a limit on the number of iterations, so very small increments may simply stop before reaching a solution. A non-zero step distance will impact performance as it can cause preceding segments to be repeatedly reevaluated.

A non-zero number of Substeps will provoke a number finer and simpler adjusts within each regular increment. Since the step is simplified, it may not be a real benefit over using finer values for regular increments. This option has not seen much use.

Curves with a root closer to the the collider than the Proximity Outer distance will be treated with a more intense form of repulsion, potentially forcing full deflection. The effect is ramped up to a peak at the Inner distance.

If a skin surface is provided and Skin Avoidance is non-zero, curves that are pushed into the skin will be adjusted towards laying flat on the surface. The Skin Affinity will bias the direction to directly flatten towards the skin instead of respecting the selected direction method (normal or tangent).

Many of these parameters have an associated +- parameter to add random variation.


tested in Houdini and Maya
demonstrated in Arnold

Web page, Copyright 2015, Free Electron Organization