ANIMAT: Widgetless, On-Model Animation in Blender UPDATE 1: 13 Oct. 2014

Hey folks,

So I’ve been working on this tool for a little while now, both conceptually and in actual coding, and I think it’s time to get some feedback from the community before release.

The tool I’ve been working on is an animation tool based on the workflow in Presto, Pixar’s animation suite. What that means is a method of animating your rigged and shape keyed models without the need for any viewport-cluttering widgets or digging around in the Shape Keys/N Panel to find the control that you need. Animation happens on model in a fast, intuitive way. Just click and drag on the mesh where you want things to move, and they move :smiley: It is completely driverless as well, meaning that shape key and bone transform values aren’t “locked” by their driving property, meaning that this tool allows for a combination of both artist friendly grab’n’pull, and technical by-the-numbers accuracy when necessary.

I’ve put together a little preview video to show off where things stand at the moment:

Some features aren’t in the main addon yet, but (almost) everything is coded and it’s just a matter of me squashing it all into one package.

Market release will be first (sorry, people who hate the Market) with a free version release coming shortly afterwards when I’ve decided what the feature set should be. Don’t worry: it won’t be crazy expensive as similar tools for other 3D packages are. I want as many people to be able to use this as possible between the free and premium versions.

This is the result of ~3 months of planning on paper + a little over 5 weeks of full time coding (including learning my way around the Blender API, and starting over a couple of times when better methods were found).

EXTRA SPECIAL thanks to CodemanX, LucaRood, and Campbell for pointing me in the right direction when I hit some mental and blender-related roadblocks.

Anyway, I’d love to hear your feedback and feature requests. Requests might not make it into release 1 if they’re too extensive, but my goal is to get everything reasonable into future releases that people would like to see.


Matt Heimlich

EDIT: Update 1

Nice job! Looks like you got around to this before I did :slight_smile:

looks really interesting!

some ideas;

could there be a way to have an overlay of the selected and active mesh part which you are going to move?
the possibility to have the greasepencil enabled for quick overpaintings would be neat.

ability to place small spheres to have if you want or need a visual presentation where the shapekey/bone starts and ends would be cool,
an implementation could even go so far, that it not only is just a visual representation but also has a select function which could mean that you get a lot more control in a smaller area without clicking on the wrong place…

an option to simplify the rig when you want to rotate the head or general pose of the figure and want to make sure that you not select for example a bone/shapekey from the mouth eye or whatever is there…

can you show an example where a hand gets moved with the arm? how is the FK/IK stuff solved?

and a probably stupid beginner question;
how would you do the eye transformation with the shapekeys so it doesn´t intersect the modelled eye?

myclay: Overlay/visual feedback is already on the list. I want to be able to highlight mouseover zones when holding a modifier key. This probably wont be in release 1 though, because I need to really brush up on my OpenGL and do some bgl study to get it right.

Not sure how I feel about spheres, since the whole point of the addon is to clear up visual clutter/need for widgets like that. I think the overlay will solve that problem, but I’ll keep it in mind.

IK/FK stuff is trickier, and I’ll probably leave that up to users to sort out. It will probably make the most sense to have multiple zones on the hand/foot/wherever and use one for IK movement and one for FK movement, and just have a good ol’ IK/FK switch somewhere in the UI. I guess technically you could even hook the IK/FK switch up to another ANIMAT object if you wanted to be extra fancy! But since IK/FK controls are so different between artists (and even between characters) it’s unlikely that there will be a one-size-fits-all solution. Luckily, this addon is flexible enough that there are lots of ways to tackle a problem like this.

As far as things like intersecting eyelids, that will likely remain up to the rigger to use some corrective shapes driven by bone rotations, just like it’s already done how.

It looks totally amazing Matthew !
I can’t wait to test it :smiley:

Really great feature !! I think it’s a must for animators.

Good luck with your release on the Market, a lot of hard work put in there I’m sure. Blender’s being taken to a new level:)

Looks awesome, Matt! I look forward to trying it out!

I was just going to submit a looooong comment on the youtube video, but figured you had a forum thread about it. Glad you do! This is just copy/paste.

This is very cool looking. I would have to see how you handle bone animation to make a decision, but as it looks now, it looks like a useful tool. My only hesitation is because the viewport feedback doesn’t look quite as smooth as I would like and feedback is slightly lagged behind input. Is this because it’s python or are there some hidden tricks and layers that inevitably pad it out?

These are some questions that came up while watching the video. A little background on myself: I am an animator, currently going to school at the Academy of Art. Very basically, I have learned workflow in Maya because that’s what the school wants us to use. I am therefore basing my opinions of workflow on what I have developed through my Maya animation experience. I don’t want to start a flame war here; that’s just what has happened the last three years.

Seeing as this is modal, will we still have access to the timeline or other time functions like frame change? At the very least, you should keep the arrow keys tied to frame change. Ideally, there would be a hotkey to allow scrubbing (I use T in Maya for viewport and graph editor scrubbing).

If you end up using hotkeys, can they be customized?

Could we also work in the graph editor (more generically, another window, not just a split panel) while in the mode? It would be kind of a pain in the butt to have to go into the mode, make your pose, exit, tweak in graph editor, go back into the mode, make large changes, exit mode, change frame, enter mode… You get the idea. As I’m training for the workforce, I need to be fast and there’s no way around that. The true test of this tool will be inclusion in workflow.

What about rigs that already use widgets? Could the tool build on that or would the rig need to be made FOR the tool? Or could you make a rig with one less layer and not use widgets at all?

How are settings stored? Are they stored internally in the blend or custom properties or an addon sidecar file?

Anyway, those are my thoughts so far. It’s looking very promising already and I will buy it to support development. I’m looking forward to its release, for sure.

Wow! This is really cool.

It seems to me like a big step toward having a “machinima” plugin for Blender.

I would love to see something equivalent to iClone or Moviestorm implemented in Blender. That way we could quickly rough out a “pre-viz” and also have all of Blender’s capabilities when needed.

looks like a really great thing :wink: good job.

I’m practically speachless, @m9105826. A real artist’s tool!

Even though I have been working in 3D off and on for almost 30 years, my training was all in ‘analog’ art, so that’s the way I think, especially when trying to animate.

Perfect! Exactly what we need. One request: don’t trim down the free version to much. People like me, who can’t afford to buy addons love these free ones, and this one looks great!

Using this setup, how are keys set? If you’re an autokey animator, I see this working really well… but if you prefer an explicit keying workflow, ANIMAT seems like it might be troublesome to use (outside of maybe using keying sets), especially on secondary/tertiary animation passes.

Thanks for the thought out post!

Animating with bones it just like animating with shape keys, and very similar to a normal bone workflow minus the need to actually see the bones. Each “zone” is limited to controlling two channels/transforms, but I’ve yet to find a case where just setting multiple bones wasn’t very intuitive (i.e. hand controls on hand, arm twist control slightly higher up on the wrist).

The viewport feedback is a combination of a couple of things:

  1. I was recording and Camtasia takes up some GPU power.
  2. The ‘delta’ value used to calculate input value from mouse events is probably a bit high. This will be user controllable though, so you can set the tweak distance to your liking.
  3. The mesh in the video has a subsurface modifier, so that’s updating every frame as well. Not much I can do about this, but when OSD implementation is done this will solve itself. For now, working on SDS mesh is still pretty snappy in my use, and is absolutely real time with a base mesh, at least on my setup. I’ve aimed to have the addon itself be as streamlined as possible, and its calculations are really almost a 0 hit on system resources.

Timeline controls with the keyboard work just fine at the moment, all inputs related to viewport nav and timeline moving are set to just pass through. Scrubbing with the mouse and controlling f-curves are something I’ll have to look into a bit more as that’s a use case I hadn’t yet considered.

Currently the only hotkey being used is the ‘I’ key to insert keyframe(s) which is hardcoded. I’d like to stick with the standard Blender key here, but if enough people want to be able to change that, I’ll look into adding that as an option as well. The hotkey for starting the actual animation mode is already configurable from the Object Mode keymap in the user preferences, but controlling modal key events is a little bit different.

The tool works perfectly with already rigged models! All that needs to be done is to define your zones, and then you can turn off/delete your widget layer and work as usual. Nothing special needs to be done to make a rig ANIMAT-ready, in fact I’ve been using the Sintel rig for my experiments and I haven’t run into any issues. Think of ANIMAT as an animation workflow enhancer, rather than a new workflow that you’ll need to adapt to. It’s really just a tool to speed up workflow and make character control more intuitive for artists.

Finally, I went through a lot of headaches to make sure that this is all data stored inside of the .blend itself. Nothing needs to be reloaded to make things work again when you reload your files. The list data is stored as a custom property of your object, and all zone data is stored via a collection property.

Feel free to ask any other questions you have!

Actually, autokeying has been the biggest headache for me! It’s looking like there’s a depsgraph issue here where values aren’t evaluated/keyed until they are set manually. My current solution is to store a list of bones/keys that have been altered since the operator was started, and hitting ‘I’ while animating just keys those values. I’m very open to suggestions here though, since animation is among my less strong 3D skills compared to modeling/sculpting. What would you animators like to see in terms of workflow?

WOOOOOW GREAT!!! YOU ARE THE MAN !!! Gosh this is so coooool!!! …how production ready is it ? And by that i mean even a working alpha 0.01 would do :smiley:

Very nice! I’ll likely be buying this, though it would be nice to see it integrated into trunk at some point. The way I see it, the market is a great way to pay people to develop useful software/plugins that can eventually be integrated down the road.

I’d like to see an auto-mirror function built in based on the naming convention (.L and .R) It would save a lot of time.

Some way of visually indicating when you’re in the ANIMAT mode would be nice. Otherwise, I could see myself forgetting to hit Esc quite a bit.

erikscott: There will be a header notice in the release so that you know you’re in ANIMAT mode. It will also list controls/shortcuts.

I’m already on the case for auto-mirror, but there are a lot of corner cases to keep in mind as far as verts that might be .0000001 off of mirror, .l instead of .L, etc. but it’s definitely on the feature list!

enilnacs: I’m aiming to make it as production-ready as possible! It’s likely version 1.0 will be limited to local files because -_- Blender’s proxy/link system. But my goal is to have use cases like that covered by the second release.

There was talk on the bf-animsys mailing list about changing up the proxy system for Gooseberry, but I think that discussion kinda petered out (Thisone in particular). Since it looks like blender essentially renames the rig object to “%GROUP_NAME%_proxy” perhaps you could get user input the group name and have the path to the attribute changed. Blender can already detect or return feedback whether there’s a linked library in the file, so maybe you could poll that checker. I’m just thinking out loud here; feel free to ignore.