First of all lets think about what keyframe types are and what is their function:
The objective of having a sort of "tagging" system for keyframes is to be able to glance at them so when you need to select them it's easier to know what is what.
What is the current state:
We have 5 keyframe types to chose from: Keyframe, Breakdown, Moving Hold, Extreme, Jitter,
with 4 of them having different colors and 2 having very similar colors (keyframe and moving hold), adding to that Jitter and Breakdown are slightly smaller and extreme being slightly bigger.
The problems with the current design:
- As you can in the following picture, when the keyframes are unselected the colos are so simiar different enough that it's hard to tell what is what which fights the main "objective" of having keyframe types which is being able to understand roughly what is going on with a glance.
- Secondly they have been named with specific character animation terms which is understandable but not universal enough and not easy to communicate with:
example use: If i tell you: "select the keyframe keyframe?" you wouldnt understand, if i tell you "move the moving hold keyframe" you'd probably have to go and look up what type is the "moving hold" type and then find it.
- Also being called type implies that it does something different, and as the zen of pythin says: "explicit is better than implicit"
- Currently that's it, but an other problem with this is the missed pportunity of being able to do things like selecting all the keyframe keyframes, or selecting all the jitter keyframes (or deselecting them) performing action on this keyframe groups.
- Under the keyframe popover there is a menu to define what is the new keyframe types, so if i create a new keyframe with the extreme option selected it will create them all "extreme" but if there is a keyframe already where i'm standing with the playhead then it only affects new keyframes does not replace the type to the keyframes that are already there.
Proposed Solutions: General Outline of the Tasks to be Created
- Change name from "Keyframe Type" to "Keyframe Color".
- Use the same colour palette that Nate Craddock proposed for the outliner colours: Red, Orange, Yellow, Green, Cyan, Purple, Gray, Brown.
- as stated we could potentially create a selection of colors that can work also for colorblindness --, but as far as I'm concerned 5 colors is more than enough.
- Name the keyframe colour according to the color "the red keyframe is called red"
- Unify the selection colour, whenever the keyframes are selected they'll go White-
This particular point as has a downside which is not being able to recognise they keyframe colour when they are selected, but I think it's good compromise because normally you want to know before you select them, after you select them it's usually fine. --, on the other hand and option would to highlight the keyframes by keeping the same colour but drawing a White outline in the selected ones.
Now here are 2 ideas on how to implement this:
The colors displayed in these examples are orange for selected but not active and white for selected and active as it happens in the graph editor and edit mode of object to make selection states coherent with the rest of blender.
in this one we make the interior of the key frame the desired color and the outline will change acording to selection, this will allow to easily maintain the colors even if the selection state changes but will still be clear, the downside to this option is that the key color becomes the most important thing visually.
In this second example the key color is the outline and the interior is the selection state, I personally think that this may be the better way to go as it still more important to see what is unselected/selected/active
- Implement "Select Grouped" menu with a "By color" -> https://developer.blender.org/T86180
- Make the "new keyframe type" option also replace whatever keyfame is being modified with the new one (this could be a tickbox for the desired behaviour)
Obviously this is all open for discussion but based on the feedback from blender.chat it seems pretty well accepted.