Rotation operator

The Rotation operator allows you to control particle orientations.


Rotation Rollout

Orientation

  • Orientation type: the starting orientation value, prior to any further modifications.

Inherit previous: uses the current value of a particle’s orientation as the start value.

Random 3D: uses a random orientation as the start value.

Random horizontal: uses a random orientation around the world’s Z-Axis as the start value.

World space: uses a world-aligned orientation as the start value.

Travel direction: uses an orientation aligned to the particle’s velocity as the start value.

Custom vector direction: uses an orientation aligned to a custom data channel as the start value.

Object align: uses an orientation aligned to the transform of the closest scene object as the start value.

Spline align: uses an orientation aligned to the curve of the closest spline as the start value.

Surface align: uses an orientation aligned to the closest point on a scene object’s surface mesh as the start value.

Parent align: uses an orientation aligned to the parent of each particle, if the particle has a parent.

Sibling align: uses an orientation aligned to the adjacent sibling of each particle, if such a sibling exists.

Look-at: uses an orientation directed towards the closest point on an input object as the start value.

Align to neighbors: uses an orientation directed towards the particle’s neighbors as the start value.

Align to binding neighbors: the orientation will be derived using a closest-fit approach to match the layout of the particle’s binding neighbors relative to their layout on the previous frame.

When doing a grain simulation, the Particle Bind Solver will adjust particle positions based on their bindings network, but will not adjust particle rotations at all. This is by design since the Particle Bind Solver is a simple mass-spring solver that does not take rotations into consideration. However, this means that while the overall structures of particles may rotate during the solve, individual particle orientations will not change. This can look strange in closeup. By enabling “Align to binding neighbors”, the Rotation operator will attempt to match the orientation of particles to the relative orientation of the cloud of particles they are bound to. This is a fairly effective way of keeping particle positions and orientations in sync when utilizing the Particle Bind Solver. Note: particles require at least 3 active bindings on current and prior frames in order for the alignment algorithm to activate on any given frame.

A particle must have at least 2 binding neighbors in order to be affected by the binding neighbors mode.

Closest edge on shape: the orientation will be derived from the vector defined by the closest edge on the particle shape to the particle location.

Closest face on shape: the orientation will be derived from the vector defined by the closest face normal on the particle shape to the particle location.

Shape-oriented bounds: the orientation will be derived from the oriented bounding box of the particle shape mesh. The longest axis of the bounding box will be the up vector of the rotation matrix, and the second longest axis will be the forward vector.

  • Affect particle shape orientation: controls whether a particle’s shape mesh orientation will be affected by the particle’s orientation change.

Disabling this setting has the effect of orientating the particle’s transform without changing the orientation of the particle’s mesh. In other words, it’s akin to rotating the particle’s pivot.

Disabling “affect particle shape orientation” can have a big impact on memory usage and performance, because each particle’s mesh will have to be manually adjusted in order to compensate for the particle’s orientation change.

  • X/Y/Z: controls the amount of offset applied to starting orientations, along each axis.

  • Divergence: controls the degrees of random divergence to apply to starting orientations.

  • Angle step: controls the minimum angle between divergent angles.

Increase the “angle step” value to increase the angle between random rotations. For example, a step value of 90 degrees means particles will only be randomly rotated in steps of 90 degrees. The step value works best when only a single axis of divergence is chosen.

  • Restrict diverg. to axis: restricts the amount of divergence applied to each axis.
Divergence Axis:
  • X/Y/Z: the amount of divergence to apply to each axis.

Limits

  • Limit effect: when enabled, the degrees between a particle’s old rotation and its specified new rotation will be constrained by the specified maximum value.

You can use the limit parameter to ensure a particle’s orientation does not change more than a specified number of degrees, per step.

  • Max degrees: the maximum number of degrees a particle may be rotated, compared to its prior orientation.

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

Interpolation

  • Normal interpolation: linearly interpolates the current value towards the target value.

  • Full interpolation on entry: linearly interpolates the particle's current value towards the target value, unless the particle's event age is 0 - then the particle's current value will be set to the target value.

  • Full interpolation at time of birth: linearly interpolates the particle's current value towards the target value, unless the particle's age is 0 - then the particle's current value will be set to the target value.

  • Curve interpolation (static): uses a curve to interpolate the particle's current value towards the value assigned to the particle when the particle first entered the event.

  • Curve interpolation (dynamic): uses a curve to interpolate the particle's current value towards the target value.

  • Duration: the number of frames over which the curve interpolation will be performed.

  • Value: the amount to linearly interpolate values each frame.

  • Variation %: the amount of variation to apply to the interpolation value.
  • Relative to travel distance: when enabled, rotation interpolation will be relative to the travel distance of particles.

  • Distance threshold: the threshold distance used to calculate the relative interpolation multiplier.

In some rotation modes (ex: “travel direction” mode), tiny position changes that particles undergo can result in big rotation changes, due to the way rotation vectors are calculated. The classic solution to this problem is to simply reduce the rotation interpolation value - but eliminating rotation jitter can require interpolation values that are very low, which causes particles to rotate too slowly overall. By enabling “relative to travel distance”, interpolation values will be relative to the distance a particle has traveled over time - allowing fast moving particles to update their rotations more quickly than slow moving particles whose rotation jitters would otherwise be much more noticeable. This causes tiny position changes in slow moving particles (which would normally result in a lot of rotation jittering) to be eliminated, while faster moving particles (not affected by position jittering) will rotate at full speed.

Uniqueness

  • Seed: the seed value for all varied parameters.

  • Seed by time: the seed value will be incremented with the current time in ticks.

Banking Rollout

These settings apply banking when rotation type is set to travel direction

Banking

  • Multiplier: the amount of banking to apply to starting orientations, around the particle’s travel direction.

  • Smooth: the amount of temporal smoothing to apply to banking values, based on changes to the particle’s travel direction over time.

  • Relative to velocity magnitude: when enabled, the amount of banking applied will be relative to the specified min/max thresholds.

  • Min/max: the range of velocities that the banking amount will be made relative to.


Custom Data Channel Rollout

These settings pertain to rotation types which rely on the input of a custom data channel.

Vector/Target

  • Channel: the channel to derive the custom vector direction from.

Matrix Rollout

These settings control how secondary vectors of the orientation matrix will be derived (the up vector is the main alignment vector, and the right vector is derived from the cross product between the up and forward vectors).

Forward Vector:

  • Auto: the forward vector of the surface alignment transforms will be automatically computed based on the orientation of the up vector.

  • From surface: the forward vector of surface alignment transforms will be derived from the surface itself.

  • From velocity: the forward vector of surface alignment transforms will be derived from each particle’s velocity direction.

  • From particle: the forward vector of surface alignment transforms will be derived from each particle’s transform forward vector.

  • From world: the forward vector of surface alignment transforms will be defined in world space.

  • X/Y/Z: allows users to define world-space forward vectors, when “from world” is enabled.

  • First edge/closest edge/closest vertex: when forward vector is derived from surface, these options control which nearest face element will be used to derive the vector.

  • Orthogonal: controls whether surface alignment orientations will be made orthogonal to the up vector.

Surface element

Controls where to derive forward vector from, when “from surface” chosen as forward vector source.

  • From first edge of closest face: forward vector will be taken from first edge of closest face.

  • From closest edge of closest face: forward vector will be taken from closest edge on closest face.

  • From closest vertex of closest face: forward vector will be taken from edge containing closest vertex on closest face.

  • From closest explicit normal: forward vector will be taken from interpolated explicit normals of closest surface point.

  • From closest face normal: forward vector will be taken from face normal of closest face.

  • From closest vertex normal: forward vector will be taken from interpolated vertex normals of closest surface point.

Up Vector:

  • Surface explicit normal: controls whether the up vector of surface alignment transforms will be derived from the nearest explicit normal.

  • Surface face normal: controls whether the up vector of surface alignment transforms will be derived from the nearest face normal.

  • Surface vertex normal: controls whether the up vector of surface alignment transforms will be derived from the nearest vertex normal.


Neighbors Rollout

These settings control neighbor searches in neighbor align mode.

  • Radius: the particle neighbor search radius. Nearby particles within this radius will be considered neighbors.

  • Smooth interpolation: when enabled, particle rotations will interpolate smoothly to neighbor rotations, based on proximity.

  • Include all particles: particles will align to neighbors from any event.

  • Only include this event’s particles: particles will only align to neighbors in their same event.

  • Exclude this event’s particles: particles will only align to neighbors from other events.

  • Simulation groups: controls which particle simulation groups nearby particles must match in order to be considered neighbors.

Clusters

  • Enable clustering: controls whether alignment candidates will be determined by cluster values.

  • Channel: the particle data channel to get cluster values from.


Binding Neighbors Rollout

These settings control binding neighbor alignment.

  • ID: When enabled, only bindings with a matching ID will be used in alignment calculations.

Objects Rollout

These settings control which objects will be sampled for various rotation types, and the proximity of their influence.

Objects

  • Object list: the list of input objects used for surface alignment or facing mode.

Sample

  • Sample: controls which sampler will be used for surface alignment.

Proximity influence

The proximity 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.


Oriented Bounds Rollout

  • Unify transform orientation: when enabled, will attempt to orient rotation transforms in a way that generally point their Y-axis vectors in the same direction. Can help to create more intuitive transform orientations in scenarios where all meshes lie flat on the same plane.

  • Unify transform axis direction: if the specified transform axis points away from the specified vector, the entire transform will be flipped.


Sibling Rollout

  • First/Last/Both sibling(s): controls which sibling will be used for the alignment, or whether an average direction to either sibling will be used (if “both” is selected).