Some ideas on making blender better for Animators- Add yours

Blender is an amazing piece of software. It is already pretty good in terms of animation features. But I think that Maya still leads it in a number of small and big ways. The big ways are already obvious and work is being done towards re-factoring Depsgraph.

But what about all the small things that make it a bit more cumbersome? For me personally, coming from other software- the problem is not that it does things differently. That is actually a good thing. B3d does take a fresh approach. But after using it for a while, I found some things that I would like to list. Some of these are low hanging fruits which I want to see if everyone agrees with me would make a small but noticeable improvement.

Maybe the community here will help me out by pointing out workarounds and also pointing out annoyances they found themselves.

-Quaternion being the default rotation for armatures - this is strange to me, since the f curves that you get from it are much harder to deal with than Euler. I am yet to see an example where it was successfully used for character animation.
Do a lot of people use it? Maya has quaternion mode as well, but it is almost never used. In production videos of pixar/dreamworks I also notice they use euler there as well. I’ve been doing some Animschool courses for a while- nobody uses quaternion there. So why is it the default and why is there no way to change that default? Gimbal locks are scary, but there are ways to deal with them. Quaternion curves are too abstract.

-FIXED-Not being able to operate on multiple selected Joints (N-panel) - Not being able to rotate them by dragging the slider once. Having to do it all on a one by one basis (no addon).

  • not being able to set multiple bones rotation mode and having to do it one by one (there is an addon that fixes that).

  • Not being able to shift select multiple specific attributes in the n-panel and click-dragging to add/sub to them. Right now you can only drag select a range and do that(A+B+C) but not select specific (A+C).

  • No AutoFrame mode option in the f curves editor. In Maya there is an option where the software automatically frames the curve(s) you have selected to edit- without the need to hit the F key constantly. This saves time as the software constantly frames what you need to see without the need for you to adjust it.
    In Blender you have the HOME key, which you must hit every time you want to frame your curve. There is no option to make blender automatically frame stuff (home key command) each time you select a curve.

-Copy and paste curves in the f-curve editor doesnt work as expected- Try to copy X rotation curve from one foot to the other- it doesnt work. It copies the entire animation of the foot. It does work if you use the dopesheet instead though.

-Show keyframes in Cyclic curve modifier- The cyclic channel modifier is very useful when you need to copy animation from one foot to the other and then offset it. However it does not show the keyframes in cycled curves. This makes it a little bit harder to pinpoint your offset. I wish it showed them slightly greyed out or something.

-Mass renaming channels (useful for dead f curves)- When you append an “action” from another rig, and some of the bones have a different naming convention , you must rename the channels in order to get them to work. In blender that is possible, but it is very difficult. You have to manually rename each individual channel- xyz rotations and translations. I wish blender had a quick “find and replace” operator for renaming channels. This would make animation retargeting easier.

-No button picker- for controller objects. There is currently an add on in the works, but it is not an official thing that is a part of blender. I wish Blender had a built in selection button maker- to allow for easy controller object selection. Most modern rigs in a production environment come with a 2d controller object button picker. This improves productivity as it makes it much faster to select controller objects.

=====================
Features that would make it even better than other software:

  • Cloning f curves (channels) /keyframes- Right now you can copy and paste them. This is useful if you want to copy some animation from one half of a character and paste it to the other (left foot>right foot). But when you edit the animation of the left half, you have to do the same for the other half.
    The animation on the other half is offset usually with a f-curve cyclic modifier. Imagine if it also allowed us to clone the animation of one foot, but add some f-curve modifiers and offset it to make it work automatically and non destructively on the other foot.
    This would take advantage of blender’s f-curve modifier stack. Cloning and flipping+offseting animation of one half to the other would also give you a cleaner and easier to work with file. That way when you change the animation of the left foot- the flipped copy of the same animation on the right foot with automatically update!
    How a cloned curve would work:
  • It’s keys are not editable (or editing them alters the original as well) , but
    > you can delete it (without affecting the original),
    > translate it (the entire curve- without affecting the original),
    > scale it (to flip it without affecting the original)
    > add a different stack of modifiers to it (without affecting the original).

Now I get it that this is mostly useful for looping actions :slight_smile: But this can also be used with animation baking when you no longer need the clones to be just clones. You would be able to bake them in a specific timeline range.

I agree with many of your points, especially the graph editor. Even with the new updates in 2.73, the graph editor is unwieldy. I used to have a script called “isolate and frame” that was a hotkey (shift-v) that did what it said. It took your channel selection the graph editor, hid the rest and framed it up in the viewport. I loved it and now it’s broke. I can post it here later this morning. Maybe someone can fix it for 2.73. Right now I have to hit two uncomfortble hotkeys to do the same thing. Shift-h to hide unselected and then then the home key. It’s a sucky workflow but it IS better then it was in 2.72. Still none of it compares to the isolate-and-frame script.

I would really love to get that script :slight_smile:

Btw there is an annoying bug I found in 2.73 with the armature pose mode. When you hit the UNDO, it kicks you out of pose mode.

It’s why I still use 2.72b

Does it do that for others?

PyQT should be ideal for interfaces, it is also used in other leading apps. I quickly managed to get it to run as a test in Blender but I did not do anything overly sophisticated with it. If anyone has production experience with pyQT and blender, maybe you can share your experience

Here is the script. It was written by Jason van Gumster per my request and I always hoped it would wind up in trunk as it’s a great time saver (an even better time saver would be to add this to the menu as a toggle-able default behavior so you don’t even need the hotkey but I digress). Instead, 2.73 added some functionality that got closer to this, but still requires multiple hotkey presses to achieve so I don’t know why that workflow was ever considered good enough for trunk but not this… :stuck_out_tongue:

The script looks simple enough, but I don’t know python so I don’t know what’s broken about it. Hopefully someone can look it over and fix it.

Thanks!


# ***** BEGIN GPL LICENSE BLOCK *****
#
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ***** END GPL LICENCE BLOCK *****




bl_info = {
    "name": "Channel Isolate and Frame",
    "author": "Jason van Gumster (Fweeb)",
    "version": (0, 2, 1),
    "blender": (2, 6, 2),
    "api": 43969,
    "location": "Graph Editor > Channel > Isolate and Frame",
    "description": "Isolates and frames a selected channel in the Graph Editor.",
    "wiki_url": "http://wiki.blender.org/index.php?title=Extensions:2.6/Py/Scripts/Animation/Channel_Isolate_and_Frame",
    "tracker_url": "http://projects.blender.org/tracker/index.php?func=detail&aid=30339&group_id=153&atid=467",
    "category": "Animation"}




import bpy


class IsolateAndFrame(bpy.types.Operator):
    bl_idname = "graph.channels_isolate_and_frame"
    bl_label = "Isolate and Frame"


    @classmethod
    def poll(cls, context):
        return context.area.type == 'GRAPH_EDITOR'


    def execute(self, context):
        bpy.ops.anim.channels_visibility_set('EXEC_REGION_CHANNELS')
        bpy.ops.screen.region_flip('EXEC_REGION_CHANNELS')
        bpy.ops.graph.view_all('EXEC_REGION_WIN')
        bpy.ops.screen.region_flip('EXEC_REGION_CHANNELS')
        return {'FINISHED'}




def menu_func(self, context):
    self.layout.operator(IsolateAndFrame.bl_idname)




def register():
    bpy.utils.register_class(IsolateAndFrame)
    bpy.types.GRAPH_MT_channel.append(menu_func)


    kc = bpy.context.window_manager.keyconfigs.addon
    km = kc.keymaps.new(name = "Graph Editor", space_type = 'GRAPH_EDITOR')
    kmi = km.keymap_items.new("graph.channels_isolate_and_frame", 'V', 'PRESS', shift = True)
    kmi.active = True




def unregister():
    bpy.utils.unregister_class(IsolateAndFrame)
    bpy.types.GRAPH_MT_channel.remove(menu_func)


    kc = bpy.context.window_manager.keyconfigs.addon
    km = kc.keymaps["Graph Editor"]
    km.keymap_items.remove(km.keymap_items["graph.channels_isolate_and_frame"])


if __name__ == "__main__":
    register()

Hmm… I haven’t had that happen to me and I just finished up a project with multiple armatures. Weird. Have you tried resetting your prefs?

Just to give you some feedback regarding the current developments in this area:

  • editing multiple objects at once: As you know, Campbell has already written a patch providing the core functionality of this. We’ve talked a bit on IRC yesterday and he asked me to continue the work on that. There are a lot of corner cases that need a good design, but I will start to work on that soon together with the rest of the UI-team
  • advanced multi-number editing (as in do multi-number editing but skip button in the middle) - Campbell asked me about working on that as well. Shouldn’t take long to implement, I just need to find the time to start :confused:
  • button picker - that’s something that will likely be implemented within the widget project (at least Ton has this on his widget Todo list)

As you see, many of your requests are being worked on, you just have to wait a bit more :wink: I can’t tell you much about the other ones though

That’s amazing news! Thanks for your efforts on this! Hopefully this thread isn’t misinterpreted as a “bitch-fest”. I hope it remains a constructive feedback thread loaded with suggestions, tips and tricks for blender animators. Blender’s animation tools are REALLY good but the UI could use some streamlining. It’s awesome to see these developments taking place.

See if this works.

Quaternions… i thought i was the only one who didn’t like them :smiley:
i once spent almost 4 hours (an eternity by my standards) on an animation that i had to completely discard in the end because i could not get rid of the annoying flips that occurred in between keyframes.

another thing i miss is the ability to calculate root motion and have it apply automatically to my character’s motion. unity does this flawlessly, and i absolutely cannot live without it. there should be a built-in mecanim-like system to help do the heavy lifting in character animation.

there’s also the fact that blender can’t handle 50 shape keys without consuming a whole heap of RAM.

and i wish blender had a graft modifier that allowed me to replace parts of a mesh mid-animation. this is useful for morphing (eg turning a man into a wolf) and dismemberment or amputation

i also wish blender had tools for animating characters with clothes. one such tool would be one that allows the clothes to automatically follow the character’s underlying shape keys… like if the character breathes, i’d like the clothes to automatically follow
another such tool would be one that helped avoid poke-throughs during animations

but i guess the most annoying one is the fact that freestyle lines don’t animate well. the flickering is unbearable… it’s like watching Ed’, Edd’ ‘n’ Eddy. And i don’t hear anything like that coming to freestyle anytime soon

There’s also the particle system. it’s too rigid to work with during animations. compare it to unity’s shuriken and you’ll see what i mean

Sorry… i know you were probably expecting to hear about my troubles with f-curves and the dopesheet :slight_smile:

1 Like

Thank you! Its still not doing it automatically upon selecting the channel though. It should be triggered every time a channel is selected- so this should be in the form of a tick box (in the “view” menu), not a shortcut one has to repetitively press.
Also doesnt work on 2.72
This should be built in blender imo! It’s these small tweaks that save a lot of time on repetitive tasks.
It might seem like a small thing to a coder, but to animators who have to do this stuff many many times- it will save a lot of time and effort to have this. And you are not copying maya, other 3d software also has this. It’s a basic view feature. B3d has some catching up to do there. I believe it will earn you more animator users too.

:slight_smile:
If its so simple and such a low hanging fruit, how come it’s still not in trunk? Its a huge usability improvement! Seems like people have asked about it before too.

@khalibloo> These are also valid points. So thank you for bringing them up. I want developers to mainly notice the low hanging fruits that would make a huge difference. Stuff that would take them less time to implement, but will improve our animation workflow with blender massively.
@JulianSeverin > Great news!! Any plans of adding an automatic frame curves mode that the script almost does (if it actually worked on the new version)?

Something that I think would make animating in Blender much easier and more practical would be a timeline you can move keyframes around in, like Maya’s. Using the Dopesheet for this job works, but it’s not particularly smooth for blocking out the animation. The ease of just grabbing and moving keyframes for either the whole rig or just what you’ve selected whilst scrubbing through the timeline would make it much easier, smoother and more enjoyable to animate things. Well, until you get to the tweaking and polishing part using the Dopesheet and graph editor of course :stuck_out_tongue:

P.S: I know someone made a plugin to allow you to move keyframes in the timeline, but the graph editor doesn’t update as you move the keyframes around so the curves get messed up pretty quickly. Plus you can’t swap keyframes either without the graph editor going completely haywire :confused:

P.P.S: I believe f-curve cloning and mirroring is already coming to Blender soon, assuming I’m understanding the feature request correctly:

1 Like

@Chickenkeeper> The demo video seems to be showing off a copy>paste+flip functionality. This is vastly different from cloning an f-curve channel.

Cloning (alt+d) is different than duplicating (shift+d). I am proposing to get the advantageous workflow of cloning in blender to f-curves!

The thing is, in animation you have to duplicate a curve from one object to another and then offset it in many cases. Some examples include:

  • secondary actions (tail)
  • flipped animation of the other half (left foot>right foot)

What I am proposing is for blender to have a vastly better workflow than Maya, in regards of being able to actually use a clone a curve from one channel to another - instead of just copy and pasting.

The advantage of the clone is that it will adapt to the keyframe changes you make in the original. so in this regard the file is much easier to alter, its much less destructive. You can also layer on top of it different modifiers, transformation (to move it in time) and scale (to flip the curve or increase/reduce it). It’s all beautifully non destructive and you keep working only on one half the entire time! The clones just react accordingly - depending on how you’ve set them up with their own transformation/scale/modifiers.

This feature would be nice to have, however, my desire for it diminished severely once i realized that the top level of the dopesheet list essentially acts the same way. Just select the top key tick and it selects every key on that frame. Makes it very easy to re-time animations and is just as easy and fast as a timeline key editor.

In fact, you can set the dopesheet up in such a way as it can BE your timeline! Just make a dopesheet window, make it long and narrow like a timeline and only display that top level row. And now you have your timeline with editable keys.

EDIT: That being said, if you do this, then you lose a lot of timeline functionality. So yes, it would be great if you could combine dopesheet functionality with the timeline. :slight_smile:

BOOM! Headshot! Thanks! What did you have to do? It might help me edit it myself if this happens again in a newer version of blender.

I agree, it’s not a fully implemented solution. However, it gets the workflow down to 1 hotkey, so it’s a least “better” for now. Hope it helps you. It certainly helped me!

I probably don’t know enough of the Blender API to fix the channel thing. Fweeb looks like he updated it though (most likely more elegantly than I did).

@xrg, your fix is actually a little bit cleaner (well… fewer lines). And on a large number of animation channels, it may be marginally faster (assuming the graph.hide operator is written in C). In fact, I’m going to use your change over mine. I’ll push that to github in a minute.

I’d really like to have a selection handler available in the Python API (it would allow this script to work immediately upon selection), but I’ve been asking for that for a while and it’d be a bit non-trivial to expose.

blurymind , no, I don’t know of anyone who’s currently working on that :confused:

agree that animating in Blender is very nice, but also on many of the topics posted, some random additions

  • being able to set start / end frame from any animation editor
  • alphabetical (at least, but also manual) sorting objects in dope sheet / graph editor
  • objects + actions in dope sheet takes too much vertical space…!
  • could multiple actions be shown in action editor…?
  • a clean way to convert an NLA editing back to keyframes
  • smarter copy / paste -that creates channels and animation data-
  • operator to simplify fcurves -seen some scripts and a patch around-
  • a third color for values that have been modified but not yet keyframed
  • in viewport path editing like in motion trail addon
  • more parametric tools Âż?
  • lock time on by default
  • spacebar to play :stuck_out_tongue: