Share

Transform, advect, and warp fields

Special nodes are available to transform fields, as well as advect and warp (or deform) them. You can think of these nodes as modifying the input positions at which a field will be sampled.

Transform fields

Transforming a field moves it so that positions are sampled at an offset from where they would normally be sampled. It is equivalent to applying the inverse transformation to the positions and then sampling the original field at the modified positions.

  • transform_field applies a float4x4 or float3x3 transformation to the field.
  • scale_field scales the field by the specified factor.
  • rotate field rotates the field by the specified quaternion.
  • translate_field translates the field by the specified vector.

Representing rotations as fields

Because fields do not support float4 values, you cannot use fields to represent rotations as quaternions or axis-angle values. However, you can use vector fields to represent rotations as "rotation vectors". Rotation vectors are 3D vectors where the direction represents the axis of rotation, and the length of the vector represents the angle in radians.

There are a few utility nodes to help you convert between rotation vectors and other representations:

  • euler_to_rotation_vector
  • quaternion_to_rotation_vector
  • rotation_vector_to_quaternion

For other types of rotation, you can convert them to quaternions first before converting them to rotation vectors.

Advect fields

Use advect_field to transform a given field along a vector field representing velocities across space. This is especially useful for making fields flow during simulations.

Warp fields

The warp_field node deforms a given field by a vector field that remaps its values to new positions. It is equivalent to sampling the warp field first to find new positions, and then using the new positions to sample the original field.

Was this information helpful?