Patch T22084: Robert Penner Easing Equations
Commit daccaa713b6e66af4b958fa373b31d557a4caa33 introduces support for a number of new interpolation types which are useful for motion-graphics work. These define a number of "easing equations" (basically, equations which define some preset ways that one keyframe transitions to another) which reduce the amount of manual work (inserting and tweaking keyframes) to achieve certain common effects. For example, snappy movements, and fake-physics such as bouncing/springing effects.
The additional interpolation types introduced in this commit can be found in many packages and toolkits (notably Qt and all modern web browsers). For more info and a few live demos, see http://easings.net and http://www.robertpenner.com/easing/
The New Interpolation Types
From least dramatic to most dramatic, the transitional types are as follows:
In addition to these easing types, there are also a number of types which imitate physics-based effects:
- Elastic: This is like bending a stiff pole stuck to some surface, and watching it rebound and settle back to its original state.
- The amplitude property controls how strongly the oscillation diverges from the basic curve. At 0.0, there is no oscillation (i.e. it just snaps to the B-value like an extreme exponential transition), and at 1.0 a profile similar to the one shown in the icon occurs.
- The period property controls the frequency with which oscillations occur. Higher values result in denser oscillations.
- Bounce: Self-explanatory; Bouncing balls, etc.
- Back: Use this one when you want a bit of an overshoot coming into the next keyframe, or perhaps for some wind-up anticipation.
- The back property controls the size and direction (i.e. above/below the curve) of the overshoot.
The amplitude, period, and back settings can be found in the Active Keyframe panel in the Properties Region (NKEY).
The "easing" property controls which end of the segment between the two keyframes that the easing effects apply to.
- Ease In - Effect builds up to the second keyframe
- Ease Out - Effect fades out from the first keyframe
- Ease In Out - Effect occurs on both ends of the segment
- Automatic Easing (default) - The most commonly expected of the above behaviours is used. For the transitional effects, this is basically 'ease in', while for the physics effects it is 'ease out'.
- Patch T36209: Use binary search function for evaluating F-Curves (2aff243). This should provide some speedups when playing back long F-Curves containing many keyframes.
- RNA: Added a
FCurve.update()method which can be called by scripts to recalculate handles and ensure that all keyframes are correctly sorted. (3e26a7a59)
- UI Tweak: Explicit warnings are now shown in the Drivers UI about the use of
bpy.contextin expressions (9e881d0). Use of these in driver expressions is completely unsupported and a common source of updating issues.
- Editing driver expressions directly from the properties they affect automatically recalculates drivers properly now. Previously, it was necessary to manually click "Update Dependencies" in the Graph Editor for changes to take effect. (49cde5d)
- Patch T39470: Better code for converting from "bone axis + roll" to matrix by Tippisum (07f8c5c3b680c717c3bbc698cf873015f63d9798)
- UI Tweak: A button has been added to the error message displayed in the Object Constraints tab when in Pose mode on Armatures, making it easier for users to jump to the correct constraints tab (i.e. Bone Constraints Tab) instead. (0dd52d1)
Transform Constraint - Backward Compatibility Issue
The Transform constraint has been modified, so that the mapping factors get valid units (length for location, none for scale, and angle for rotations). Unfortunately, this involved compatibility issues with older files (2.70a and earlier) which would animate those settings (either by FCurves or drivers). In such case, please manually run the “Update Animated Transform Constraints” operator (from the space-bar menu) - only once (since it converts degrees to radians, using it more than once would break again angle values).
Decouple auto-snapping behaviour from time display type
This commit (9c28a24) cleans up and fixes some problems related to how the auto-snapping behaviour in the animation editors works, resolving the issues mentioned in T39819.
- "Nearest Frame" no longer snaps to the nearest second when time is displayed in seconds. Instead, there is now also a "Nearest Second" option, so that either can be used as needed instead of only when a certain time display is used.
- A similar change has been made for "Time Step" - This is now "Frame Step" and "Second Step" respectively.
Jumping between keyframes only considers selected data by default
Made the timeline option to only show keyframes from selected channels/data be a per-scene setting (and enabled by default) instead of the per-timeline option it was previously (c261052). This makes it easier for animators working on rigs with multiple bones (especially during the polishing phase), since now the timeline and jump to keyframe operators use the same setting to decide which subset of keyframes they need to consider.
2D Views: Lock Time to Other Windows option restored
The "Lock Time to Other Windows" feature for 2D views from 2.4x has now been restored (b245d35)).
Dope Sheet Editor
- Optimised long keyframe drawing/construction for summary channels. Although it is still a bit jerky, it is now at least somewhat usable now (d2a5ddb)
- View Selected now recenters the view vertically as well to show the first channel that has selected keyframes. (89abdb6)
- In order to support all these new interpolation types, the drawing code for F-Curves has now been fully replaced with a version that samples the curve at pixel-sized intervals. On some files, you may notice a bit of a decrease in viewport speed as a result of this, especially when the Graph Editor is quite wide.
- Handle types for the active keyframe can be seen and edited from the Active Keyframe panel in the Properties Region of the Graph Editor (b339535)
- Lasso selection now works in the fcurve editor with CtrlLMB and Ctrl⇧ ShiftLMB to deselect (fa24ad1fd50cdd6a6af2b76736fe8e1430ee3cd7)
- Bugfixes e80fbf8 and 3b75d6c mean that all auto-snapping modes should now work correctly in the Graph Editor now
- c504b8b resolves some of the weirdness encountered when editing the right handle's y-coordinate via the Active Keyframe panel, if both of the handles were selected and both were aligned.
0985bb4 and followup commits attempted to make aligned handles more predictable to use.Aligned handles in general should still behave similar to how they were in previous version.
Several tweaks were made to the NLA Editor interface to polish the interface and hopefully make the "animation layer" workflow intentions clearer.
The most noticeable is that the code behind the "NLA Action" channels has now been refactored to use the system used for the rest of the animation channels. As a result of these changes:
- It is now possible to rename the active action from the NLA by Ctrl-Clicking on it
- The buttons and toggles here can use the proper widget toolkit, allowing them to have tooltips when hovering over them. This makes exploring the interface a bit easier.
- The "pushdown" functionality - which pushes the active action onto the top of the NLA stack as a new NLA Strip (previously represented by the snowflake) - has a new new icon (downwards chevron) which better communicates this functionality (2812e6a).
- Note: This functionality now has a dedicated operator (
nla.action_pushdown), which takes the index of the channel (i.e. the top-most channel in the channels list has index 0) as a mandatory parameter to decide which action line to work on. Be aware that this only works when the channel the index points to is in fact an NLA action line.
- Note: This functionality now has a dedicated operator (
- The toggle to show keyframes in NLA-mapped (pinned) vs unmapped (unpinned) when in tweakmode now has a tooltip to show what its purpose is. Also, the icon state makes more sense now than it used to.
- Fixed tooltip on mute toggles shown on datablock expanders, since it wasn't clear what these were for before. These are used to toggle whether the NLA stack contributes to the final result or not, which is useful for checking whether the active action does what you think it is doing. (35a9a7d)
- CtrlAltP sets the preview range extents based on the selected strips (b40b6bd)
- Commit 68c3b63 modifies the behaviour of the duplication tool, introducing the distinction between linked duplicates and full-copy duplicates as for objects.
- ⇧ ShiftD Makes a new copy of the actions used. WARNING: The behaviour here is different from in previous versions
- AltD Uses the same action again, but creates new strips. NOTE: This was the old behaviour
- Added Make Single User operator U which ensures that none of the selected strips use an action which is also used by any other strips a3a3141