• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Overshoot/Bounce Back Expressions Mess up Orient Along Path

Community Beginner ,
Oct 14, 2020 Oct 14, 2020

Copy link to clipboard

Copied

Hi,

I have a series of layers animating along a path. I have each one oriented along the path. I'm trying to add bounce back/overshoot expressions, but this creates crazy unwanted effects with the orientation, causing the layers to switch direction randomly, or suddenly at the end. 

I don't have a very deep understanding of expressions, but I definitely don't plan on creating this bounce back manually.

Any advice is appreciated. The screenshot shows my animation without expressions. Here are the expressions I'm trying to use:

Keyframe Overshoot Expression:

freq = 3;
decay = 5;

n = 0;
if (numKeys > 0){
  n = nearestKey(time).index;
  if (key(n).time > time) n--;
}
if (n > 0){
  t = time - key(n).time;
  amp = velocityAtTime(key(n).time - .001);
  w = freq*Math.PI*2;
  value + amp*(Math.sin(t*w)/Math.exp(decay*t)/w);
}else
  value

 

Keyframe Bounce Back Expression:
e = .7;
g = 5000;
nMax = 9;

n = 0;
if (numKeys > 0){
  n = nearestKey(time).index;
  if (key(n).time > time) n--;
}
if (n > 0){
  t = time - key(n).time;
  v = -velocityAtTime(key(n).time - .001)*e;
  vl = length(v);
  if (value instanceof Array){
    vu = (vl > 0) ? normalize(v) : [0,0,0];
  }else{
    vu = (v < 0) ? -1 : 1;
  }
  tCur = 0;
  segDur = 2*vl/g;
  tNext = segDur;
  nb = 1; // number of bounces
  while (tNext < t && nb <= nMax){
    vl *= e;
    segDur *= e;
    tCur = tNext;
    tNext += segDur;
    nb++
  }
  if(nb <= nMax){
    delta = t - tCur;
    value +  vu*delta*(vl - g*delta/2);
  }else{
    value
  }
}else
  value  

 

TOPICS
Expressions , Scripting

Views

1.7K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 14, 2020 Oct 14, 2020

Copy link to clipboard

Copied

Orient along a path does exactly that. The layer orientation is controlled by the motion along the path so if the direction of the motion changes because of the expressions so does the orientation. There is no bug.

 

What you have to do is set up a parallel path using a null that is not oriented to the path, adjust the timing of the duplicate path, and then use Vector Math to make the layer with bounce and overshoot look at the reference path. I don't have the time to set up a sample comp with some expressions right now, but that is the general workflow. 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 14, 2020 Oct 14, 2020

Copy link to clipboard

Copied

LATEST

You could try turning off auto orient and using this rotation expression:

p = position;
n = 0;
if (p.numKeys > 0){
  n = p.nearestKey(time).index;
  if (p.key(n).time > time) n--;
}
if (n > 0){
  t = p.key(n).time;
}else{
  t = p.key(1).time;
}
v = p.velocityAtTime(t);
radiansToDegrees(Math.atan2(v[1],v[0]))

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines