Jump to content

Channel Editor Weirdness


peship

Recommended Posts

I found something very disturbing, let me explain it shortly ...

The channel editor - i have an animation curve with to say 3 keyframes.

Now i want to change the curvature type of each key - the first one to be bezier, the second one to be linear and the third one to be spline.

What the UI offers me, is to affect the whole curve segment between two keys instead of affecting the keys directly.

On top of that i cant find a way to control the in and out curvature of each key.

Please tell me that i'm wrong and there is a way !

Thanks.

Link to comment
Share on other sites

Hi peship,

In Houdini, animation functions are set on a segment, not on a specific keyframe. However, you can change the in/out values, slopes and accelerations of the segments independently.

If you have three keyframes, then you have two segments. To change the slopes independently at the key values, then simply click on the key and hit 't' (to untie the keys) (or Ctrl-RMB and choose Tie/Untie Selection).

Now for certain function types you can't change certain values (for example, you can't change the slope on a linear segment.

Versions before 7.0, you can't untie from the last segment, but in future versions of Houdini, I believe you can have a different out value at the last segment.

Hope that helps,

George.

Link to comment
Share on other sites

but, but, but ... you are making me sad :(

The curvature function should be applied to the keyframes instead of to the curve segments. I want the freedom to define different curvature type to the start and end parts of the curve segments.

Also, if i apply any of the functions to a segment it changes the type of my keyframes.

For example - usually i'm using bezier keyframes to tweak my animation curves. If i apply linear() function this action should only align my bezier keyframe handles in way to make the curve look linear - leaving me the freadom to continue tweaking them from this new position.

Somebody would say - heh - big deal - just align the curves by hand.

If i touch the animation stuff once a week it is not big deal at all, but if i'm doing character animation then i'm playing with this stuff 200 times a day - and to have no ability to use these functions in the way i explained above just turns to pain.

Ok enough mucking about this.

Another very disturbing thing - the keyframe's bezier handles cant pass the position of previous/next keyframes - why ?

To make a popping style animation ( Madagascar is very good example ) i really want to push the limits of my animation curves. This silly limitation of the bezier handles will force me to add tons of inbetween keyframes to make my curvature more extreme than what i can get now.

Last question - how to break the in/out handles of the keyframes ?

If we have a member here ( animator ) with good experience in this area, let him/her bring some light about what is the workflow.

Thanks.

Link to comment
Share on other sites

The curvature function should be applied to the keyframes instead of to the curve segments. I want the freedom to define different curvature type to the start and end parts of the curve segments.

Doesn't seem logically feasibly to me... if your first keyframe is "linear", and your second keyframe is "ease", you'd want the slope of the curve to blend from a linear solution to an ease in/out solution towards the second keyframe? You could prolly do it in CHOPs, but this is certainly not what they had in mind with the graph editor. Maybe someone else could expand on this, but... (not me)

Also, if i apply any of the functions to a segment it changes the type of my keyframes.

For example - usually i'm using bezier keyframes to tweak my animation curves. If i apply linear() function this action should only align my bezier keyframe handles in way to make the curve look linear - leaving me the freadom to continue tweaking them from this new position.

Yeah that would be kinda cool, to have it snap your handles to match a particular function

Another very disturbing thing - the keyframe's bezier handles cant pass the position of previous/next keyframes - why ?

Hmm, dunno... possibly because it would result in a curve that would be beyond vertical slope, or some other kind of impossibility?

Last question - how to break the in/out handles of the keyframes ?

OK, this one's easy -- click once on the handle alone, then hit "t" or CTRL-RMB >> "Tie/Untie Selection"

Link to comment
Share on other sites

Doesn't seem logically feasibly to me...

Strange to hear that. The rest of the world is dealing with animation curves exactly in the way i explained above.

Hmm, dunno... possibly because it would result in a curve that would be beyond vertical slope, or some other kind of impossibility?

Nope, there is a lot more free space for use behind this limitation :)

OK, this one's easy -- click once on the handle alone, then hit "t" or CTRL-RMB >> "Tie/Untie Selection"

Absolutelly ! Man, i'm getting retired :P

Link to comment
Share on other sites

Doesn't seem logically feasibly to me... if your first keyframe is "linear", and your second keyframe is "ease", you'd want the slope of the curve to blend from a linear solution to an ease in/out solution towards the second keyframe?

One can always define their own segment interpolation expression functions use the $T (time), $IT (segment's in time), $OT (segment's out time), $IM (segment's in slope), $OM (segment's out slope), $IV (segment's in value), $OV (segment's out value), $IA (segment's in accel), $OA (segment's out accel) variables. These stem back from the PRISMS days which I think had even more.

Yeah that would be kinda cool, to have it snap your handles to match a particular function.

Sure. But that always seemed like a hack to me because they decided to just change the slopes instead adding proper support for functions. The point is that a channel segment is a function, any function. Typing in "linear()" is no different from typing in "sin($FF)". In Houdini one can mix sin($FF), linear(), cubic(), ch(), chop(), etc. in *any* segment.

I'm not saying that this functionality is not useful (snapping slopes to linear) but it's just extremely limited in the grand scheme of things.

Hmm, dunno... possibly because it would result in a curve that would be beyond vertical slope, or some other kind of impossibility?

19291[/snapback]

Neil looked at this a while back and I think the reason why it looks like it should go farther is because it enforces additional constraints (smoothness?) or something like that.

Link to comment
Share on other sites

  • 2 weeks later...

Heya Edward and Exel, thank you for the answers.

I can see now the idea behind the animation system in H.

My interests are mainly in character development and special effects.

As "character" guy some H features are scaring me a bit, but maybe they need their time.

Link to comment
Share on other sites

  • 1 year later...
One can always define their own segment interpolation expression functions use the $T (time), $IT (segment's in time), $OT (segment's out time), $IM (segment's in slope), $OM (segment's out slope), $IV (segment's in value), $OV (segment's out value), $IA (segment's in accel), $OA (segment's out accel) variables. These stem back from the PRISMS days which I think had even more.

sorry can you get me an example of how to use these varibles to form an expression in the graph?

i must include the kind of interpolation i want?

if i want to start with a cubic, and end with a bezier, for example, what i should write in the function field?

Link to comment
Share on other sites

To do a linear interpolation between cubic() and bezier() over the length of the segment, you could do something like this:

fit01((($T-$IT)/($OT-$IT)),cubic(),bezier())

However, that's extremely hard to tell what's happening. Something easier:

if((($T-$IT)/($OT-$IT)) < 0.5, cubic(),bezier())

Link to comment
Share on other sites

To do a linear interpolation between cubic() and bezier() over the length of the segment, you could do something like this:

fit01((($T-$IT)/($OT-$IT)),cubic(),bezier())

However, that's extremely hard to tell what's happening. Something easier:

if((($T-$IT)/($OT-$IT)) < 0.5, cubic(),bezier())

ok i'll try it. thanks a lot!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...