Addendum to my Blender Character Animation Proposal
Ton mentioned that he was looking for some UI inspiration for the updates to the Action, Pose and NLA sections. Here are my thoughts:
- more attractive and clear presentation of actions and RVK in the action window
I actually like the way the Actions window is currently presented. It should continue to work well with some enhancements. First, it must recognize that IPOs other than pose IPOs can be included into the Action. The clearest way to do this is to create collapsible sets of color coded channels. Mockup:
The nice thing about this is that you can collapse the channels for each part of the Action seperately. It would be good to have shortcuts for the "collapse arrow", too: ctrl-click collapses all but the arrow you clicked on, allowing you to quickly target your display to a single object within the action; alt-click collapses/expands all objects. The colorization in the mockup is pretty arbitrary, but I think something like this gives experienced users a quick overview of what kind of keys are residing in the action. Note also the reminder tip in the channel name showing what kind of keys it represents.
RVK's obviously need a better interface than the one that sort of exists now. When I was using them daily on character animation, I would still occasionally screw it up and have to redo my work. Here's how they should function:
1. A new screen, akin to the Actions channel, for creating and managing the RVK's for a mesh. No more access through the obtuse Mesh keys menu setting of the IPO screen.
2. When you hit I in the 3D window to make a mesh key, it asks: Create New Key/Replace Selected Key. If no key is selected at the moment in the RVK management window, then a new key is automagically created. Keys can be renamed in the RVK window. Clicking on the Key channel in the RVK window sets the mesh to that key. Key channels can be selected, deleted and duplicated within the RVK window. New channels can be created either by duplication in the RVK window, or by setting a Mesh key from the 3D window.
3. Usage of RVKs is sequenced in the Action's window.
- revamping the NLA as well... these strips are very small and dont tell much
One solution here is to make the NLA window fully zoomable. Currently, using the scroll wheel expands/contracts only the time scale. Add a modifier (Ctrl-scroll) that actually zooms in, enlarging the entire view.
In my original proposal, I indicated that allowing the user to apply an IPO to an NLA strip would be much more powerful than the simple BlendIn/BlendOut values as they currently exist. I reiterate that here. When zoomed out sufficiently, these IPOs could be ignored, but as you zoom in, the IPO would be displayed directly within the NLA strip itself (and selectable/editable, too!). The illustration below shows a zoomed-in NLA strip with IPO curve. As to other visualization methods for NLA, I'll refer you to my answer to the last question.
- thinking over how 'ghost' drawing modes could work nicest
I think you're referring to Onion Skinning here. The best set of controls to have is this:
In this control panel, you can toggle skinning forward and backward in time independently. In the illustration, skinning will be drawn to indicate frames backwards in time, but not forwards. The color swatch indicates the base color to be used for the display, so that you can use forward and backward skinning simultaneously without getting confused in the 3D view. The Frames control sets the amount forward or backward in time for which the effect is displayed. The Steps control shows how many actual different poses are displayed.
- and related; how to display 'active pose-key' (like ipo-key)
- how will 'active pose' relate to 'active action' and 'active strip' in NLA? I think I know how... but still puzzling here. This should feel totally natural and flexible in the UI.
I think that one of the reasons it's been difficult to come up with a way to do this is that the interactions between Poses, Actions and NLA are unnecessarily complex. I noticed that Ton had a bit of time reconciling having an active Action over-riding things in the NLA. While you all are in there poking around, I think this might deserve a bit of a rethink.
What if character animation (i.e. Poses) were only calculated from the NLA? There would be no such thing as an "Active" Action, and you wouldn't have to worry about it. I think it would make things more intuitive in the following way:
1. Simple case; not using NLA. User makes an armature. They start advancing frames and placing keys. If no action is selected in the Actions window, this creates a new Action, behind the scenes, and also creates an NLA strip. If the user just wants to fiddle around in the 3D window, and never think about Actions or NLA, they are free to do so. Adding keys forward in time extends the boundaries of the NLA strip. Since an NLA strip has been automatically created, their animation is generated via NLA, and you only need a single code path to do this, as opposed to having two now: one with NLA and one without.
2. Advanced case; using NLA. I have to refer back to my other proposal here, because I think it makes a lot of sense. I'll try to address what I think might be some of the concerns with this workflow.
In this case, creating a new Action in the Actions window also creates a new strip in the NLA. If the user doesn't really want to have it in the NLA, they can delete it from the NLA window, but in almost all cases in which you are creating more than one Action, it is so you can then use it in NLA. Also, as the character animation system is evaluating only the NLA and not simply replacing it with the "active" Action, you get immediate feedback on the quality of your composited animation. You see how the new keys you are laying down affect the overall animation. Too many times, you create multiple Actions, only to be surprised by the result when you layer them in NLA. This gets rid of that problem.
But what if you want to create an Action completely in isolation from other NLA strips? Simple. You use the new "Solo" and "Mute" controls, that are a tested and true part of sound sequencing. See this illustration:
Want to work on an Action in isolation? Click the Star (solo) icon and the animation system will evaluate only this channel. Inversely, clicking the Barred Circle (mute) icon, would cause the animation system to skip that channel while evaluating the rest. In the illustration, the NLA strip "Baked.002" is the only one that will be evaluated.
The really good part about this is that nothing changes for people who only want to use character animation on the simplest level. Power users are given what they want: more power, without having to worry about the NLA acting weird or being modal when there is an Action chosen as active in the Actions window. The code has only a single path, simplifying character animation resolution.
One of things that is still puzzling me, though, is how to deal with IPOs other than pose IPOs that will be put into actions. Let's say that you have Energy and RGB IPOs from a lamp put into an Action, as the coders are trying to allow. Do you then (and this question holds true even if none of this proposal is implemented) generate values for these IPOs only from NLA? Or do you try to do it normally, then look to the NLA data to modify it? I think that the only solution is that as long as IPOs have been placed in an Action, you have to use NLA data for animation to the exclusion of anything else. In the case of the lamp, as soon as you include it's IPOs in an Action, you put yourself in a situation where you HAVE to evaluate those particular values based on NLA.
Which makes me wonder if every IPO in Blender should be pumped through NLA, and given a default, hidden NLA strip. As soon as another Strip is created by the user, that hidden default strip is Muted. When all strips pertaining a certain IPO are removed from NLA, the hidden strip is unMuted. I'm not sure how big of a job this would be, and if it would entail a significant slowdown or not. But that's for people with better knowledge than me of the internal workings to decide.
Feedback can be sent directly to me (me at harkyman dot com).
As always, thanks for reading.