Tuesday, August 23, 2011

GSoC11 - End of "Summer" Report

I guess I'd better make a little summary of the stuff that I've been working on this year as part of my Google Summer of Code Project, so here goes...

Main Highlights (or a list of the features that I remember or can find links showing that I'd been working on them ;):
  1. Refactored Animation Channel Filtering Code
    • Easier and cleaner to extend, read, and develop for; basically consolidating 3-4 years of "organic evolution" to a system that was only intended to do a one small part of what it currently does
    • Split up "visibility" filtering flags used by this system, fixing some ancient/long standing 2.5 bugs [post]
    • Added missing support for Texture and Node animation [post]
    • Timeline "Only Selected Keyframes" option now filters by selected bones too (in Pose Mode) instead of only for selected Objects
  2. General Animation Editor Usability Tweaks
    • Reviewed + designed/trialled new icons for the visibility and muting toggles. Now using speaker icon for mute, and eye for (graph edit) visibility. [post]
    • Flattened out hierarchy for accessing Material, Particles, and Texture animation data, removing intermediate "list expanders" which were just adding an additional click [post]
    • Streamlined header filtering option icons - the rarely used datablock filters are now hidden behind a "filters" toggle, which search takes center stage. [post]
    • Modified default filtering options based on what most of our animators use (and/or optimised for primary use cases of the editors). [post]
    • Animation channels can now be renamed by Ctrl-Clicking on them. [post]
  3. Improved hotkeys for Animation Editors and Animating
    • Swapped Shift-T and T; T is now Set Interpolation, and Shift-T is Time-Slide
    • Rearranging animation channels is now PageUp/Down (single step), and Shift PageUp/Down (to top/bottom)
    • Jump between keyframes using Up/Down Arrows, Jump +/- 10 frames using Shift-Up/Down Arrows, and Jump between start/end frames using Ctrl-Shift Up/Down/Left/Right. [commit]
    • Reviewed area in which hotkeys for Markers apply in Animation Editors. Adding and renaming markers can now be done anywhere in an an animation editor again (though removing, duplicating, and deleting can still be done only in the region around the scrollbar, to avoid hotkey conflicts). This makes it more convenient to do lipsyncing using markers again
  4. Icons Galore!
    • Added dedicated icons for Keying Sets and Drivers [post]
    • Icons in the DopeSheet and Graph Editor mode selectors [post]
  5. Animation Editing Tools
    • Auto-clamped handles can now be set per handle (or more precisely, per keyframe) instead of being a weird per curve setting only. [post]
    • Added options to "Extrapolation" operators which create/remove Cycles FModifiers, making it easier to cycle animation again, but without having to go through adding/removing the modifiers manually.
    • Actions are now created by default WITHOUT single users! [post]
    • Deleting last keyframe deletes the associated action too
    • "Animated Transforms to Deltas" (available from Object->Transform menu) operator solves the old "all my duplicates of an animated object disappear" scenario. [post]
    • Paste Pose tool, "On Selected Only" option is now on by default [post]
    • Select Grouped by Keying Set [post]
    • Import Keying Set from File Operator/Button 
    • Clear User Transforms restored
    • Cleanup of transform updates code - broken down into separate smaller functions
  6. Graph Editor Tweaks
    • Made the drawing of the active/selected curves clearer by drawing them thicker, making it easier to see the curve you're editing. [post]
    • Fixed problems with low-res rendering of curves resulting in severe chunky-line artifacts, which were especially noticable when zoomed in
    • Fixed up the "Active Keyframe" numerical input for editing keyframes, so that values can be seen/edited in terms of the units they appear elsewhere, and with properly updating handles. [post]
  7. NLA Editor Tweaks
    • Added "compact" drawing options for NLA, which can be used to fit more strips on screen to retime many at a time. [post]
    • Clearer indication of "solo" mode, including new icons [post]
    • Cleaned up displayed text, reducing clutter. Removed "ActiveAct:" from action lines, stopped prefixing "Act:" to new action strips, only show frame numbers when retiming strips
    • HomeKey works
    • Added "Sound Clip" strip for 3D Sound GSoC project
  8. Animation Evaluation and Rigging
    • RNA updates now get called by animation system. So things like animating modifiers works now. [post]
    • "Local Space" for Drivers matching the "Local Space" used by Constraints (i.e. the one that people have been expecting all along). [post]
    • "Expressions" can now be created by clicking in any numerical text field, typing a hash '#' followed by the Python expression (i.e. a simple math equation, perhaps referring to the current frame number). [post]
    • "Range Masks" and "Influence" (including blendin/blendout) for FModifiers, making it easier to combine and modulate them. [post]
    • Distance Limit Constraint now has a "For Transform" option, like the other Limit constraints, so that it can get applied at transform time to the local translation values. [post]
    • Head/Tail setting for Distance Limit Constraint, and other tracking constraints
    • Ctrl-R for Set Rotation operator for bones
    • Bone Group sorting and reordering patch committed
  9. Outliner Tweaks
    • Refactored Outliner code, splitting into separate files [post]
    • Added various options for managing actions and animation data from the RMB context menu in Outliner [post]
  10. Assorted Bugfixes (too many to list all here, but here are some important ones)
    • Inserting Delta Keyframes (using entry in Insert Keyframes menu) wasn't working
    • Merge bones refactor - to fix freezing issues
    • Paste pose doesn't replace all properties (losing existing)
    • Visual Keying fixes
As for things that I've got on my todo list still that I intend to tackle in the next few weeks (probably after merge to trunk, as some of these might require a bit of work on the side still)
  • Fix keyframe insertion so that "tweaking layers" in NLA is a feasible prospect
  • Speed up keyframe + curve drawing in Graph Editor
  • Finish work on some new "extend" modes for NLA which will allow the active action to keep working extending cyclically past its extents, even when applied atop some existing NLA tracks
  • Attempt to get a more generic "text" strip for sequencer up and running. Current "titlecard" strips probably won't get merged to trunk.
Some stuff I didn't get around to working on this time; "nice to have" but probably a bit too much for now
  • PyConstraints
  • NLA Baking
  • Improved F-Samples support (for mocap/baked data storage, editing). Quite a major undertaking in itself, which coursework in the second half of the project really didn't allow me to get stuck into.
  • Extend handles on NLA Strips. Extent of changes required turned out to be far too great


  1. such an awesome array of new tools for animators, the world round. Cant wait for a trunk merge!

  2. Stunning job! You're awesome!!!

    By the way, did the "branches and salad branch" idea ease the future merging of all your work into trunk? Was it a good idea? For us users certainly was! The chance to test related works on single builds, or even all at once!

    Cheers! And enjoy your "free" time!!!

  3. congrats and thank you!

  4. thank you for all these work! so many useful stuff!

  5. Thanks for all of this! You're part hero, part coder.
    What would it take to make object level visibility a float, instead of boolean? (so I can animate the visibility of an object, regardless of it's material - likely tie the object's visibility to z-transp, or something.) *without having to do it in post*

  6. Thanks! Really cool!

  7. Awesome work! Any chance having Blender Timeline editor grab-able keys in the future?

  8. Without guys like you, Blender would not be possible and thus a lot of indie game projects would not have the art they need to reach completion.

    Thank you for your efforts, they are very greatly appreciated by me and all my colleagues.

  9. Everyone loves what you guys are usually up too. This kind of clever work and exposure!
    Keep up the terrific works guys I've added you guys to my blogroll.
    my page :: blender reviews