Skip to main content

Bend by Object

Bend by Object allows you to change the angle of scattered items so that they rotate away or towards a selected object. It's ideal for illustrating objects interacting with grass or rugs with many other possible applications. To use it:

  • Use the Object property to select an object from the scene that will be used to affect the angle of scattered items.
  • Use leanOutAmount to change the amount objects will bend. Negative values lean away from the object and positive values lean towards the object.
  • Use leanOutDistance to control the distance from the object that the angle change affects. The effect will falloff until it reaches this distance.
  • Use randomWiggle to add some rotation variation to the items that are affected by the bend effect.

Effect Script

Vector vec1  =  object.position - fpItem.position;
real angle = atan2(vec1.x,vec1.y)-degtorad(90);

real lengthVec = length(vec1);
real leanOutX = easeIN( length(vec1),Lean_Out_Distance,0,fpItem.rotation.x,sin(angle+degtorad(randomReal(-randomWiggle,randomWiggle)))*Lean_Out_Amount);
real LeanOutY = easeIn( length(vec1),Lean_Out_Distance,0,fpItem.rotation.y,cos(angle+degtorad(randomReal(-randomWiggle,randomWiggle)))*Lean_Out_Amount);

fpItem.rotation.x = leanOutX;
fpItem.rotation.y = leanOuty;

You can find this Effect within the Forest Effects Library.

This Effect Uses

Parameters

  • Object

    Type: Object

  • Lean_Out_Amount

    Type: Real

  • Lean_Out_Distance

    Type: Scene Units

  • RandomWiggle

    Type: Real

Attributes

  • fpItem.areaIncNearest

    Vector to nearest include area edge.

  • fpItem.areaIncDistance

    Distance to nearest include area.

  • fpItem.position

    Position vector of individual fp Item.

  • fpItem.rotation.x

    Individual item's X rotation.

  • fpItem.rotation.y

    Individual item's Y rotation.

Functions

  • length(v)

    The length of v.

  • atan2(x,y)

    Returns the principal value of the arc tangent of y/x, expressed in radians

  • degToRad(p)

    Converts degrees to radians.

  • easeIn(x,x1,x2,y1,y2) returns an ease-in interpolation between y1 and y2. Returns y1 when x < x1