User:Wayde Moss

Personal Info
Module: Animation & Rigging, developer focused on helping with the NLA system.

=Weekly Reports 2021 =

May 17 - 23
Patches:
 * D11330: Fix T88375: Bone Size Small After V3D.View_All
 * D11317: Fix T87160: DSE Keyframe Selection Now Selects Channels. Development halted due to design considerations.

Reviewed:
 * Fix T88359: Issue of object matrix order use in pose bake.

Misc (May need to make bug reports and look into more if intended): 
 * Grease Pencil: (with the DopeSheetEditor open, annotations and GP objects exists) Outliner GP layer selection affects DSE channel selection in unexpected ways.

Expected behavior Example: (DSE) Make an annotation channel active. (Outliner) select a GP object layer. (DSE) now properly shows annotation and outliner GP layer as selected

Unexpected behavior Example: (View3D) Ensure at least 3 GP objects exists (DSE) Make an annotation channel active. (DSE) Select a layer key from each of the 3 GP objects. (Outliner) Select a single GP layer (DSE) Unexpected, All GP layers become selected.


 * Grease Pencil Annotations: (same example) Selecting GP channel results in no active GP annotation. Then View3D Drawing (D + MClick) adds a new annotation. Debug builds print complaints about no active annotation.
 * Graph Editor: Key deselection deselects the whole curve even if some keys are still selected.
 * Mask DopeSheet: You can Box/Region select invisible keyframes, those in the mask row.
 * Image Editor, Mask Mode: In Debug builds, having (N) Mask Panel open significantly reduces playback performance even in simple blend files.
 * Graph Editor/DopeSheet: In the GE select a keyframe handle but not the Co. Switch to DSE, the same key is shown as selected. Press G to try and move the key. Nothing happens.
 * Grease Pencil and Mask DSE: Alt+B (Box Select, Axis=Channel_Range) doesn't work.

May 10 - 16
Commits:
 * NLA: Extract ..get_inverted_upper_snapshot

Patches:
 * Fix : Missing Depsgraph Relations Updates.

Looked into:
 * 'Transformation' constraint ... does not work if the "Target" object is being evaluated in "Local" space. Turns out it's confusing but intended behavior.
 * Alt-I in 3D Viewport doesn't respect active keying set. Intended behavior.
 * NLA corrupt animation when adding armature strips. Intended behavior.
 * Follow Path: Camera overshoots path end and drops indefinetely in Z direction. Due to recent commit.
 * Copy Rotation World Space to World Space flips when applying Mix Before, After or Legacy. Intended behavior.
 * Inverse Kinematic constraints only work for first bone. Seems intended but is an annoying limitation. Still need to look into further to be sure.

Misc (may need to make bug reports and look into further): Simple Repro Script (scene has single animated bone): import bpy action = bpy.context.active_object.animation_data.action action.groups[0].color_set = 'THEME05' CommandLine prints: `Error: Cannot edit bone groups for proxies or library overrides`
 * Armature Edit Mode: Why are bone group colors not active during this mode? Group colors are intended help distinguish between bones so it should be enabled in editmode too.
 * Graph Editor/Python: Changing Fcurve action group color through python no longer does anything (regression).
 * Inconvenience, Graph Editor: Euler filter applies to all keys instead of supporting selection-only. Work around: Apply Euler filter, copy euler keys in desired range. Undo. Paste euler filtered keys. (AnimState Discord Gustavo Ruivinho)
 * IK angle limits: Min can never be positive. Max can never be negative. This makes the limits useless for preventing knee pop, where the min angle needs to be positive.
 * Looked at how depsgraph works with intent to find a way to improve Action Baking performance. We need a way to create a temporary filtered depsgraph where, given a set of input objects/bones, a graph is created that ensures only their transforms are properly evaluated and does no more than that. Currently, the filter granularity is per object. In the common case, this leads to expensive meshes and modifiers being unnecessarily evaluated. The solution is non-trivial as a transformation depends on constraints and drivers, both of which may depend on mesh vertex parents or bezier curve objects. So mesh evaluation may still be required depending on the rig. Action Baking workflows are becoming more common. Reducing the time needed to bake would greatly help such workflows.

May 3 - 9 (Start of New Contract Period)

 * As of May 6th, started new contract period. Went through module and discussion to review what I missed and just generally catch up with development

Feb 22 - March 21 (Summary Added in May)
End of contract period (March 16th)

Committed:
 * : Graph Editor: FCurve Show Extrapolation Toggle

Patches:
 * NLA: Extract nlasnapshot_blend_get_inverted_upper_snapshot. Apply review notes.
 * NLA: Keyframe Remap Through Upper Strips.

Task Designs:
 * : Improvements to "Bake Action..." Operator. Local development and planning.
 * Animation: Move Stashed Actions out from NLA to Outliner. Flesh out summary.
 * NLA: Strip Blend-space Transforms to Easily Align Actions. Flesh out summary.

February 15 - 21
Committed:
 * Fix: NLA Blends Non-Animated Upper Channel Values
 * Fix: NLA Blend Domain Enable All Typo

Patches:
 * Graph Editor: FCurve Extrapolation Visibility.
 * NLA: Extract nlasnapshot_blend_get_inverted_upper_snapshot. Added fix when input and output snapshots aren't the same pointer.

Investigated/Spent time on:
 * Looked into the more complicated features for Graph Editor: Fcurve extrapolation visibility. I think I've figured out a solution for accounting for Fcurve modifier properties (N Cycles, restricted frame range, limit fmodifier). A simple solution seems may be to create a range that only considers each FModifier. This is the range for the darkened fcurve segments. The range excludes the keyframe range.  Fcurve Linear extrapolation extends this range to infinity and Const extrapolation has no effect.
 * Worked towards Animation: Smart Bake Option for Bake Action. Which is added next week.

Issues found (may need to make proper tasks) 
 * Bake Fcurve doesn't preserve Extrapolation flag.
 * Oddity: Ghost Fcurves don't sample the entire fcurve, only what's in view. As a user, creating a ghost fcurve then zooming out will make the ghost fcurve useless.
 * The Limit Fmodifier hides keyframes despite them still being useful. Others do too.

February 8 - 14
Patches:
 * NLA: Extract nlasnapshot_blend_get_inverted_upper_snapshot. Applied review notes
 * NLA Tweak Mode: Evaluate Upper Stack. Apply review notes.
 * Fix: NLA Swap Operator Bugs.
 * Fix: NLA Duplicate Adds To Track Above Next Track.
 * Fix: NLA Apply Scale Sets Wrong Action Range. This might've given insight into NLA: D9696 Solve Workaround.
 * Action Bake: Explicit Option For Auto Frame Range.
 * Action Bake: Overwrite Option to "Replace Entire Range".

February 1 - 7
Committed:
 * NLA: Extract nlasnapshot_blend
 * NLA: Fix nlasnapshot_blend Misplaced Null Check. Related to above commit.
 * NLA: Fix Strip Truncate When Next to Transition.
 * Fix T85380: NLA Evaluation Missing Null Check.
 * NLA: Refactor Transition, Use Snapshot Blend Func
 * Fix: Disabled NLA Interferes with Action Eval

Patches:
 * Feature: NLA: Evaluate Whole NLA Stack in Tweak Mode. Abandoned. The core idea is still being implemented with simpler smaller patches instead.
 * Armature Animation Baking: Important performance patch. Author no longer available. Added patch that applied review notes.
 * NLA: Refactor Transition, Use Snapshot Blend Func. Rebased due to recent commits (above).
 * NLA: Extract nlasnapshot_blend_get_inverted_upper_snapshot. Rebased due to recent commits (above)
 * NLA: Strip Post-transform Horizontal Shuffle. Rebased.
 * Fix: NLA Blends Non-Animated Upper Channel Values. Introduced by NLA: Extract nlasnapshot_blend

Tasks:
 * Animation: Move Stashed Actions out from NLA to Outliner.

Investigated/Spent time on:
 * For further efficiency in, looked into extending Python collection.foreach_set and collection.foreach_get to accept a destination index offset. However, the cost of scene.frame_set alone is significantly more expensive than adding new keyframes so it doesn't seem worth while anymore.

January 25 - 31
Patches:
 * : NLA: Extract nlasnapshot_blend
 * : NLA: Refactor Transition, Use Snapshot Blend Func.
 * : NLA: Extract nlasnapshot_blend_get_inverted_upper_snapshot.
 * : Nla Refactor: nlaeval_blend_flush, remove redundant branch. Abandoned. No longer relevant.
 * : Fix: DSE Set Ipo/Easing Ignores Hidden Channels.
 * : Fix T82234: NLA: Action Track Hold Forward Inconsistency. Patch already existed. Rebased onto recent commits.
 * : Animation: Smart Bake Option for Bake Action. Fixed indentation problems. Decided against preserving old (built-in automatic) operator panel drawing to avoid creating an implicit dependency.
 * : Cleanup: Nla: Refactor nla.c functions. Made review-ready, removed new warnings, removed user-side functional changes, etc.

Investigated/Spent time on: * Action Editor: Stash Action Operator. (First commit for stash action support) * Game animation workflow improvements. * Action editor - saving (animation) actions is error prone and counter intuitive- DATA LOSS is too likely!. * Response to the "Action Fake User" issue. * Action Management Roadmap - 2015 Version. In summary, stashed actions is a solution to saving the link between actions and objects. This solution is better than Fake Users for this reason. So when bones are renamed, related actions are properly updated too. For game animators, they can make a lot of actions at a time without worry of Blender automatically deleting them. Storing stashed actions in the NLA was a quick hack since the NLA data already properly handled Action references.
 * Moving action stash out from NLA editor and data to outliner and its own separate data. Researched why it's in the NLA at all. Found:

Issues found (may need to make proper tasks) 
 * Nla NlaEvalStrip has unused members related to the track. Did not submit patch to allow more important NLA patches to be reviewed. Otherwise a low-priority dependency patch would've been created.
 * Nla fmodifier listbase join/split can be generalized to any listbase. Not submitted for the same reason above.
 * NLA nlastrip_evaluate and variants would be better named: nlasnapshot_blend_strip. Not submitted for the same reason above.
 * Crash: Deleting the active object action from the outliner, undo, then try to delete it again. Crash.

January 18 - 24
Patches:
 * Fix T84486: Nla Disable "Sync Length" After Split. Fixes When a strip is cut and edited in nla editor for a library override character, the strip returns to its original length without the cut. blender 2.92 alpha.
 * NLA Tweak Mode: Evaluate Upper Stack. Updated
 * CollectionProperty: Keyframe Insert Using Element Name. Updated.

Investigated/Spent time on: (Todo/Make design tasks):
 * Feature: NLA: Evaluate Whole NLA Stack in Tweak Mode. Roughly and locally re-implemented patch to account for recently committed patches while considering future needs. Worked towards splitting into multiple patches to try and simplify reviews.
 * Sound track in NLA editor doesn't mute at the end of the NLA strip. Looked into whether it was a bug. Found that the support never intended.
 * Make a task about changing NLA transition and meta implementation. They should support nested tracks. For transitions, instead of an implicit L/R strip, it should use the first and second track. This allows strips to overlap time-wise and allow for more uses when combined with meta strips that also support nested tracks. This implementations also removes a lot of UI problems related to transitions and their special handling.
 * For non-trivially invertibility of transitions, there's a potential solution. They're trivially invertible when the transition time is 0 or 1. As an animator, it may only make sense to edit while all transitions evaluate completely to one side. For example, transitions are similar to blend trees and those are used to blend walks into runs. Although forcing transitions to evaluate completely to one side is limiting, the resulting edit-space remains intuitive for the animator to work with. So the limitation is acceptable in this case. In the future, transitions can be extended to support more than 2 strips and a separate transition time from general scene evaluation time.

January 11 - 17
Committed:
 * Fix T81533: NLA Properly Draw FModifiers
 * Nla Refactor: Split animsys_evaluate_nla
 * Nla Refactor: is_fcurve_evaluatable
 * NLA: Redundant NlaEvalChannel Valid Mask Write
 * Nla: Rename NlaEvalChannel->valid to domain

Patches:
 * NLA: Fix Strip Truncate When Next to Transition.
 * NLA: Cleanup: Nla: Refactor nla.c functions.
 * NLA: NLA: Strip Post-transform Horizontal Shuffle.
 * NLA: NLA: Strip Post-transform Vertical Shuffle and Auto-Grow Track List.
 * NLA: Fix T81533: NLA Properly Draw FModifiers. (apply review notes)
 * NLA: CollectionProperty: Keyframe Insert Using Element Name. (bugfixes introduced by patch)

Investigated/Spent time on:
 * Fix T84586: missing Outliner redraws for certain NLA operators. (user-side review)
 * Feature: NLA: Evaluate Whole NLA Stack in Tweak Mode. Doing another pass of splitting into simpler patches while considering future needs

Issues found (may need to make proper tasks) 
 * LibOverride: Add initial support for adding new NLA tracks. Raised concerns due to issues with NLA.(I should've made proper bug reports)
 * Duplicating strips then undoing causes new strips to be in a temp-meta.
 * Stashed actions should not be stored in the NLA system. It causes conflicts with the library override system (both assume first N tracks are their territory). Would be more ideal to store stashed actions elsewhere and display them in the outliner instead.

January 4 - 10
Patches:
 * CollectionProperty: Keyframe Insert Using Element Name. Apply review notes

Investigated/Spent time on:
 * NLA: Fix Dragging Strips and/or Remove Transitions (Solution 1). Roughly figured out implementation but won't properly split into separate patches and submitted until next week. Slowed down by a few issues due to.
 * F-curve editor displays incorrect curve for reversed NLA strips. Drawing is not the only issue. In general, existing code-base does not properly handle reversed fcurve keyframe manipulation.

Issues found (may need to make proper tasks) 
 * NLA transform op creates metas out of sequences of strips which removes users ability to use strip gaps for proper placement.
 * Transitions are problematic by design. They can barely be treated like normal strips which leads to issues with their transform op. Transitions would be easier to handle if the strips they operate on were nested within the transition itself. That would remove transition's special boundary logic, transform interference, and prevents them from becoming invalid when adjacent strips are moved.
 * NLA Swap strips doesn't work for 2 adjacent strips when they're not the first strips in a track.
 * NLA Swap strips deletes a strip (memory leak) when swap results in overlap with each other and no other strip.
 * NLA Split metastrip ungroups the meta strip instead of actually splitting.
 * NLA Split broken for repeated strips.
 * NLA Apply Scale broken when strip action bounds doesn't match strip bounds. Action bounds changed to include all keyframes.
 * NLA scaled strips affects sensitivity of dragging keyframes in DopeSheet and Graph Editor.
 * NLA Strip Transform Extend broken. Dragging vertically deletes strip?
 * NLA why is "Cyclic time" not grouped with "strip time" ui property?

= Weekly Reports 2020 =

December 28, 2020 - January 3, 2021
Submitted Patches:
 * NLA: Remove Hold resetting between Hold_Forward Behavior
 * NLA: Strip Evaluate Held Strips Even When Not First Strip
 * Fix : NLA Properly Draw FModifiers

Reviewed
 * Directly select animation curves in the graph editor
 * Armature Animation Baking: Important performance patch

Investigated/Spent time on:
 * F-curve editor displays incorrect curve for reversed NLA strips. Non-trivial to solve as it's not just a display problem. None of the graph editor tools properly handle reversed fcurves.

December 21 - 27
Submitted Patches:
 * NLA Tweak Mode: Evaluate Upper Stack. Should probably stop submitting NLA patches until existing NLA patches are accepted to avoid having to fix conflicts when patch dependencies are accepted.
 * NLA: Action Track Hold Forward Inconsistency. Not properly submitted to avoid having to apply the fix twice.

Investigated/Spent time on:
 * Planned further splitting of (Feature: NLA: Evaluate Whole NLA Stack in Tweak Mode) into evaluate upper stack, potentially refactor action clip evaluation into snapshots to allow pre-blend processing  (Blend-space transform),  proper keyframe remapping through action clips, through metas, and finally through transitions which will be immediately abandoned due to complexity of properly supporting keyframe remapping in the future. May leave action clip eval refactor to a patch that's more closely submitted with  (Blend-space transform) for context.
 * Another review pass on Chris L's patches Implementation: Modal Key Manipulation Operators. Can no longer review any further until he makes changes.
 * 2.80 Pose Breakdowner doesn't work in Add NLA Strips. Fix will have to wait until NLA exposes API to blend strips based on caller-given strips and snapshot for the broken-downed properties.

December 14 - 20
Submitted Patches:
 * Animation: Smart Bake Option for Bake Action

Investigated/Spent time on:
 * Review pass on Chris L's patches Implementation: Modal Key Manipulation Operators