Skip to main content

Repulsion

Repulsion computes the distance in 2 dimensions to a given object and applies a "repel" effect according to the distance and strength paramters. Next, the item is projected onto the surface in its new position using the fpSurfaceHitZ function. To use it:

  1. Use Object to pick an object from the scene that will repel forest items.
  2. Use the Distance parameter to set falloff limits of the repulsion effect.
  3. Use the Strength parameter to push scattered items away from the repulsion object.
  4. Use the Controllerdroperty to pick a track from the scene that is added to the distance parameter to control the falloff limits. For example if you are using a ball to repel Forest items you could use the Radius controller to automatically adjust the falloff distance as the ball is re-sized.

Effect Script

vector vec = [fpItem.position.x - Object.position.x, fpItem.position.y- Object.position.y, 0];
vector dir = unit(vec);
real dist = length(vec);
real dd = easeOut(dist, 0, (Distance+Controller)*5, (Distance+Controller)*2.5, 0) * Strength / 100;
vector displ = dir * dd;
fpItem.position = fpItem.position + displ;
fpItem.geomID = if(dd > 0,1, fpItem.geomID);
fpItem.position.z = fpSurfaceHitZ(fpItem.position);

You can find this Effect within the Forest Effects Library.

This Effect Uses

Parameters

  • Object

    Type: Object

  • Distance

    Type: Scene Units

  • Strength

    Type: Percentage

  • Controller

    Type: Controller

Attributes

  • fpItem.position

    Position of Forest Item in local coordinates

  • fpItem.geomID

    Index in the Geometry List, starting at zero

Functions

  • easeOut(x,x1,x2,y1,y2)

    Returns an ease-out interpolation between y1 and y2. Returns y2 when x > x2.

  • unit(v)

    Returns a unit vector in the same direction as v.

  • length(v)

    The length of v.

  • fpSurfaceHitZ(p)

    Computes the projection of p onto the Forest surface (XY mode only). Returns z value.