I want to open a discussion around the idea of having a timeline editor in GH. If ithe discussion already exists please point me to it because I didn’t find it…
I imagine that this would work as many timeline editors present in classic 3D SW. In this case it would allow to keyframe the input components such as number sliders, MD sliders, knobs, colour pickers, time components, boolean toggles, etc… setting a value in time, and interpolating between them.
I guess this would replace the timer component or it could be used to specify the iteration rate between frames.
I think this would allow for a better control of animations and complex scenes in GH, opening possibilities that are currently complicated or even impossible to handle.
I don’t think any discussion about this exists, but the way the new Graph editor works (or rather, the way I want it to work) would make this possible. You’d be able to add any number of graphs in the same space, and then it’s just a matter of evaluating them at a specific value (i.e. time). There’s also far more types of graph available, so finding one that describes motion would be a lot easier than now.
This is an old screen cap of the new editor concept:
And here is a test I did with Fourier Transforms so you can create periodic motion:
So far I’ve implemented the following main graph types:
- Constant value (through single point)
- Linear (through two points)
- Parabola (through vertex and one other point)
- Hyperbola (based on centre, horizontal asymptote direction and one other point)
- Nth degree polynomial (through n+1 points)
- Sinc (through two points)
- Cosine (through two points)
- Fourier periodic (through n points)
- Block, Triangle, and Jagged waves (through two points)
- Perlin (based on centre, unit square and octaves + decay scalars)
- Interpolation (through n points)
- Blend curve (similar to interpolation, but has constant values outside the transition region and continuity controls, this one particularly is handy for animation)
- Cubic curve (through control-points and tangent constraints)
- Nurbs curve (from control-points).
(Fourier not shown, it’s still in a different code branch)
Furthermore the Interpolation graph has a bunch of different interpolation schemes:
- Block (nearest grip)
- Linear (linear between grips on either side)
- Log-Linear (same as above, but logarithmic)
- Cubic (standard cubic interpolation)
- Monotone (cubic with adjusted weights to prevent any overshooting)
- Akima (cubic with adjusted weights to prevent strong overshooting)
- Equidistant Polynomial (polynomial fitting, only really suitable for when samples are spaced equally)
- Neville polynomial (polynomial fitting, more flexible)
- Floater-Hormann (rational fitting, good results)
- Bulirsch-Stoer (rational fitting, often leads to asymptotic poles)
I’m also planning to create a two-point+tangent blend curve type which allows for the editing of either the curve itself, or the derivative, or the integral.
Furthermore I’ll probably add some statistical distributions.
I really think this is a feature that would open new uses for GH and rhino and also would allow a better integration with other 3D SW. For instance I needed to animate a rubber tape in modo and it was impossible to achieve there. I ended modelling and animating in GH and exporting a sequence of obj. Position and scale wasn’t much of a problem, but timeline control was really a challenge.
The graph editor looks fantastic and it seems it could be used for timeline control. For animation you often need to access all the curves at the same time and then it is often the case that the graph view is too cluttered, so a dopesheet view is used for fast animation control.
Anyway, here are a few features that I think would improve the usability of a graph editor as an animation editor.
01 Pre and post behavior - This is the extrapolation before and beyond the first and last values. Constant, linear, repeat, repeat offset, oscillate and reset for example.
02 Scale values - Select the keyframes and scale their values in X or Y, centered, from right or left, from up or down.
03 Ripple edit - If you move a key, all the successive keys move with it. This can apply to X, Y or both.
04 Copy Paste Values
05 X and Y values input form - Select one or multiple points and numerically specify the values
06 Spreadsheet view - A spreadsheet containing the X and Y value pairs for all the points in the graph.
Awesome to see more GH animation capabilities are on the way.
Will this graph feature be the only new component? Is it within reason to suggest integrating a timeline component similar to blender or touchdesigner?
as @Frane mentioned before I could see how having the capability to add key frames to components, would open the door for so many more uses of GH.
Let me know if what i’m suggesting is impossible, but even the ability to reference animated meshes like alembic files would be amazing (I’ve posted in similar thread here : V-Ray for Grasshopper - Animations)
At the moment I usually have to reverse engineer a lot of my animation work from Grasshopper to 3Ds Max which can be rather tedious
You can easily produce your own timeline for animation manually without limitations of standard pre-programmed timelines.
Thanks @Jonish, would you mind explaining a bit more how this would work?
How does this feed into grassshopper, for example lets say I wanted to make a point move up and down in multiple axis in the space of 10 seconds?
Basically you can take X as time and Y as value. Let’s say Y is your point’s height. You create slider moving a point on X axis and project it to your graph curve, reading its Y coord and use it further down in Grasshopper for basically anything (height, tilt, rotation, anything.). In the end you right click the slider and use Animate to create a rendered animation from the current viewport.
Here’s two ways to animate values. One using a custom curve that is intersected, another using an expression: animate.gh (19.6 KB)
Or X as time and Z as value as in the picture below.
A 500 ms (1 ms = 1 mm) long series of vehicle sensor data (actually rubbish values, but anyway). Illustrated is where acceleration and constant temperature overlaps (meaning, unexpected coincidences):
The “pipes” are the ms intervals which are tangent to a reference vector (|X+| in this case). The nearest curve has criteria “planarity” within vector angle interval set by a slider, and the third curve is acceleration, where pipes are the segments that are within the constraining angle interval. Intersection-boxes shows where both curves meet their respective criteria. GH 1.0 std components only.
I believe there’s really great freedom, although it’s quite time consuming to animate this way. My example was a simulation of bird wings - joint rotation etc. Based on a robotic bird whitepaper by Festo. Pretty cool experiment they did, by the way.
Thanks for the replies guys, starting to get my bearings on how to use this method after using @DavidRutten’s file.
Just curious as to the extent of which this can be used, i.e. could I use this to make a surface undulate via moving each of its division points randomly (made an attempt in linked file).
Or is it possible to make an object follow a pre-defined path curve that shifts across more than 1 axis at once?
Thanks again for the help
animate (Undulate Surface).gh (12.3 KB)