2024-02-01 Animation & Rigging module meeting

The meeting was on 2024-02-01T17:00:00Z. It is open for everybody interested to join the video call (link below).

Present: Christoph Lendenfeld, David W (Studio Galt Mocap), Demeter Dzadik, Felipe G, Jason Schleifer, Jeremy Bot, Luciano Muñoz, Nate Rupsis, Nathan Vegdahl, Nitin Rawat, Sybren Stüvel

People present are referred to by first name for brevity. Others are referred to by full name.



Names are from the Git log.



Technical Documentation

User Manual

Short-term goals / Ongoing Work

  • High Prio bugs:
  • Christoph:
  • Nathan:
    • Nathan wants to schedule a meeting with whoever is interested to go over the MVP UX mockups for the new animation system and gather feedback and ideas.
      • Nate & Luciano are interested in joining.
      • Nathan will coordinate in #animation-module.
    • Where to upload the mockups?
      • Nathan: create a design task on projects.blender.org & attach there?
      • Sybren: maybe upload them to Blender’s Google Drive, and link them there. We should have a shared place there already for Animation & Rigging, if not we should make it.
    • Nathan’s weekly report
  • Sybren:
  • Animator meeting at Blender HQ:
    • Sybren demonstrated his prototype for a new ‘Copy Global Transform’ mode. Animators are enthousiastic.
    • Discussed what should happen in the layered animation system, when strips are used to limit the effect of FCurves. Basically: what happens when a strip animates a property, but that strip is not active on the current frame? Mentioned potiential answers were:
      • Keep track of all properties that are animated by a layer. Any property that is not animated by a strip on the current frame is reset to its zero value. This is predictable, but for objects snapping everything back to the origin may not be desired.
      • Use constant interpolation between & outside strips.
      • Do not introduce strips to the data model yet, just work with keys on layers. Strips might be handled differently when we have more experience with “basic” layered animation. There’s also still the idea of having “named ranges” of keys, which could be used for strip-like manipulation without having FCurves pop in and out of existence at the strip boundaries.
      • Module responses: good idea to focus on stripless layers first.
    • Sybren’s random idea: Separate “layer” for “unanimated values”, that define the base values for layered animation. By default implicitly the default value of the properties, but any property can be “pushed to unanimated” to set its reference value for that animation.

Patch Review & Decision Time

  • Layered Animation and deletion operators.
    • Delete of Layer and Strip is currently implemented (branch), and are fairly straight-forward to understand what happens (whatever is on them is deleted too).
    • Delete of an Output is open question.
      • Sybren: Is it clear enough that this will delete all animation defined for that output? Since it’s a new concept, are we sure this is clear? How to deal with this?
      • Nathan: maybe a naming thing?
      • David: “unattach” vs. “delete”.
      • Sybren: ok, I’ll build low-level function to delete, and leave the rest to UX/UI design.
  • #117287: Anim: Ease to Ease operator
    • There is some discussion about improving UX/usability of the operator.
    • Christoph: effectively this should be a 2D slider, because the operator really has two parameters to tweak (‘sharpness’ and ‘bend’). The current ‘Ease’ operator is also used to linearise certain animation.
    • Nathan & Sybren: maybe just add a separate operator for that linearisation, so that it’s clear which operator is for what.
    • Sybren: hotkey for toggling the slider between the two parameters? Jason: like Tab or something.
    • Christoph will try to make it before 4.1, but not sure if he can make that.
    • Sybren: Let’s keep the ‘Ease to Ease’ as a PR, and only land it & replace the ‘Ease’ operator when it’s done in a way that will be the final UX. So likely for 4.2.
    • Nate: people already have Animaide, so they already have the ease-to-ease functionality. Waiting is fine.
    • Nathan: the flipping between ‘slider properties’ will need some collab with the UI module as well.
    • Luciano: the breakdowner already has keys to toggle which properties are blended (G to only do locations, for example), so it’s already quite close to what we need.
  • To decide: do we keep using this Jitsi instance, try out another Jitsi instance, or go back to Google Meet?
    • So far Jitsi worked well, but there were issues with video not being visible for many people (audio still fine).
    • On the previous Jitsi instance, people were anonymous by default, and it was unclear where to change your name. Jitsi on today’s instance doesn’t allow joining anonymously, so immediately gives popup for entering your name.
    • Sybren: I like Jitsi, but it’s a video call, I want to see people.
    • Nathan: it’s hard, because I don’t really want to go back to Google. Felipe agrees.
    • Luciano: Discord? The video streaming is super nice.
    • Nate: I’m indifferent. Biggest plus for jitsi is the chat history.
    • Nathan & Sybren: unfortunately, not ok to go to such a closed platform.
    • Nathan: do you need a Google account to join Google Meet? Sybren: nope, you can just type your name & join.
    • Nathan: maybe the video issue is not a fundamental issue of Jitsi, and just a configuration? We might get in touch with the people hosting the service and see what they can do for us.
    • Decision: Sybren will contact waag.org and see what they can do.

Demo: Copy Global Transform ‘Iterative’ prototype

Sybren demonstrated the new ‘Copy Global Transform’ approach, which should work even when there are constraints on the bone/object.

This is limited to “offset” constraints, i.e. ones that combine with the existing transform. If they completely overwrite the transform (like Copy Location, disable “Offset”, 100% influence) there is nothing that can be done to move that bone/object to another location.

  • Sybren: this works by ‘wiggling’ the location & rotation properties in the direction that brings the bone closer to where it has to go. It’s just a sequence of tiny wiggles.
  • Sybren: This is just a prototype, once implemented in C++ it will go faster.
  • Denis: Looks good, I currently use IK FK snapping scripts that are less than perfect.
  • Demeter: sometimes you want to tweak something other than the thing you want to align, would that be possible?
  • Sybren: in theory, yes, because of the distinction between the ‘wiggle this’ numbers and the error function. Might be hard to expose this to Python in a really flexible way, though.
  • Christoph: will we be able to use this to copy-paste world-space animation as well?
  • Nate: Seems like a great retargeting tool
  • Sybren: in the future, that should be possible.

Help Needed

Next Meeting

The next meeting will be on Thursday 2024-02-08T17:00:00Z. Again it will be open for everybody who’s interested. The provisionary meeting agenda will be updated before the meeting.