From a819ef65c07131ddb203a55bd8dc4e3207130b64 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 1 Nov 2017 13:38:51 +1300 Subject: Fix for T48988 - Enabling bbone easing for posemode This fix enables the usage of bbones easing parameters for edit and pose mode seperately. This allows animators to take advantage of the functionality and may eliminate confusion as the parameters now behave similar to other bbone parameters. Note that splitting the parameters between the modes effectively creates a new parameter set. Blend files of previous versions do not contain this information and will have the values set to 0 on load. As it broke backwards compatibility for pose mode values anyway, I also took the liberty to rename the easing parameters in some places for consistency (which breaks edit mode values). Reviewers: aligorith Subscribers: aligorith Tags: #animation Differential Revision: https://developer.blender.org/D2796 --- source/blender/makesdna/DNA_action_types.h | 1 + source/blender/makesdna/DNA_armature_types.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'source/blender/makesdna') diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index 9d4731f8da4..a7f3d27e9d2 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -254,6 +254,7 @@ typedef struct bPoseChannel { float roll1, roll2; float curveInX, curveInY; float curveOutX, curveOutY; + float ease1, ease2; float scaleIn, scaleOut; struct bPoseChannel *bbone_prev; /* next/prev bones to use as handle references when calculating bbones (optional) */ diff --git a/source/blender/makesdna/DNA_armature_types.h b/source/blender/makesdna/DNA_armature_types.h index cda6441f0ae..757c0eb8394 100644 --- a/source/blender/makesdna/DNA_armature_types.h +++ b/source/blender/makesdna/DNA_armature_types.h @@ -66,12 +66,12 @@ typedef struct Bone { float dist, weight; /* dist, weight: for non-deformgroup deforms */ float xwidth, length, zwidth; /* width: for block bones. keep in this order, transform! */ - float ease1, ease2; /* length of bezier handles */ float rad_head, rad_tail; /* radius for head/tail sphere, defining deform as well, parent->rad_tip overrides rad_head */ float roll1, roll2; /* curved bones settings - these define the "restpose" for a curved bone */ float curveInX, curveInY; float curveOutX, curveOutY; + float ease1, ease2; /* length of bezier handles */ float scaleIn, scaleOut; float size[3]; /* patch for upward compat, UNUSED! */ -- cgit v1.2.3 From 8bdc391c5488228dfe9c9e995277d67558293f08 Mon Sep 17 00:00:00 2001 From: Alexander Gavrilov Date: Wed, 1 Nov 2017 21:34:30 +0300 Subject: Implement a new automatic handle algorithm to produce smooth F-Curves. The legacy algorithm only considers two adjacent points when computing the bezier handles, which cannot produce satisfactory results. Animators are often forced to manually adjust all curves. The new approach instead solves a system of equations to trace a cubic spline with continuous second derivative through the whole segment of auto points, delimited at ends by keyframes with handles set by other requirements. This algorithm also adjusts Vector handles that face ordinary bezier keyframes to achieve zero acceleration at the Vector keyframe, instead of simply pointing it at the adjacent point. Original idea and implementation by Benoit Bolsee ; code mostly rewritten to improve code clarity and extensibility. Reviewers: aligorith Differential Revision: https://developer.blender.org/D2884 --- source/blender/makesdna/DNA_anim_types.h | 9 +++++++++ source/blender/makesdna/DNA_curve_types.h | 9 ++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'source/blender/makesdna') diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index 977cd2347ad..099d5da7c49 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -490,7 +490,10 @@ typedef struct FCurve { float curval; /* value stored from last time curve was evaluated (not threadsafe, debug display only!) */ short flag; /* user-editable settings for this curve */ short extend; /* value-extending mode for this curve (does not cover */ + char auto_smoothing; /* auto-handle smoothing mode */ + char pad[7]; + /* RNA - data link */ int array_index; /* if applicable, the index of the RNA-array item to get */ char *rna_path; /* RNA-path to resolve data-access */ @@ -545,6 +548,12 @@ typedef enum eFCurve_Coloring { FCURVE_COLOR_CUSTOM = 2, /* custom color */ } eFCurve_Coloring; +/* curve smoothing modes */ +typedef enum eFCurve_Smoothing { + FCURVE_SMOOTH_NONE = 0, /* legacy mode: auto handles only consider adjacent points */ + FCURVE_SMOOTH_CONT_ACCEL = 1, /* maintain continuity of the acceleration */ +} eFCurve_Smoothing; + /* ************************************************ */ /* 'Action' Datatypes */ diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h index a25c00915d2..2207b0ec0b1 100644 --- a/source/blender/makesdna/DNA_curve_types.h +++ b/source/blender/makesdna/DNA_curve_types.h @@ -124,7 +124,8 @@ typedef struct BezTriple { float back; /* BEZT_IPO_BACK */ float amplitude, period; /* BEZT_IPO_ELASTIC */ - char pad[4]; + char f5; /* f5: used for auto handle to distinguish between normal handle and exception (extrema) */ + char pad[3]; } BezTriple; /* note; alfa location in struct is abused by Key system */ @@ -395,6 +396,12 @@ typedef enum eBezTriple_Handle { HD_ALIGN_DOUBLESIDE = 5, /* align handles, displayed both of them. used for masks */ } eBezTriple_Handle; +/* f5 (beztriple) */ +typedef enum eBezTriple_Auto_Type { + HD_AUTOTYPE_NORMAL = 0, + HD_AUTOTYPE_SPECIAL = 1 +} eBezTriple_Auto_Type; + /* interpolation modes (used only for BezTriple->ipo) */ typedef enum eBezTriple_Interpolation { /* traditional interpolation */ -- cgit v1.2.3