# Animation & Rigging Regression Scenarios
🤖: could/should be an automated test.
For building the final test scenarios: make them more user-oriented than test-oriented. Like animating a bouncing ball with various specific steps, so that many tests are covered by this one "being an animator" flow.
## Animation
### Already-Animated File
These tests all use `sky-walkcycle.blend`. It can be downloaded from https://download.blender.org/ftp/sybren/animation-rigging/sky-walkcycle.blend
#### Playback Dependence on where Playback is Started
- Open `sky-walkcycle.blend`
- It should have object `GRP-Sky_proxy` as the active object, in Pose Mode. Bone `IK_foot.L` should be the active bone.
- Switch Properties editor to the Bone tab.
- **Viewport**
- Hover mouse in left-hand Viewport.
- Press Space.
- Should play in both Viewports, and in the Dope Sheet.
- Should NOT play in the Properties editor.
- Press Esc.
- **Properties** editor
- Hover mouse in Properties editor
- Press Space.
- Should play in both viewports, the Dope Sheet, and the Properties editor.
- Press Esc.
- In **Playback menu** (bottom left, footer of Dope Sheet)
- Un-check all checkboxes in the "Play In" section.
- Test the following scenarios, by hovering the mouse over an editor, pressing Space, seeing what plays, and pressing Esc to stop playback:
- Left-hand Viewport: should play back in that Viewport and the Dope Sheet.
- Dope Sheet: should play back in both Viewports and the Dope Sheet.
- Properties editor: should play back in the Properties editor and the Dope Sheet.
- **Drivers** editor:
- Switch left-hand viewport to Drivers.
- Hover over Dope Sheet, press Space.
- The Drivers editor should NOT play back (its X-axis does not represent time)
- Press Esc to stop playback.
**TODO:**
- Test multiple windows.
- Test different editor types.
- Test A/V sync.
#### Motion Paths
- Open `sky-walkcycle.blend`
- It should have object `GRP-Sky_proxy` as the active object, in Pose Mode. Bone `IK_foot.L` should be the active bone.
- Go to Properties editor, Armature tab
- Open Motion Paths panel, ensure:
- Path Type: In Range
- Calculation Range: Scene Frame Range
- Step: 1
- Un-check Bake to Active Camera
- Press 'Calculate', and press 'Calculate' again.
- Motion Path should be visible.
- Scrub through time in the Dope Sheet.
- Frames 0 & 1: entire motion path should be green.
- Scrub to the right, more of the path should become red.
- At the end frame: all of the path should be red.
- Press Space to play back animation, the motion path color should be consistent with what you saw when scrubbing.
- Press Esc to stop playback.
- In the Properties editor, press the 'X' next to the 'Update Path' button.
- The Motion Path should disappear.
- Press Ctrl+Z to Undo
- The Motion Path should reappear.
- Press Ctrl+Shift+Z to Redo, the Motion Path should disappear again.
- Change the settings to:
- Path Type: Around Frame
- Calculation Range: should be disabled
- Frame Range Before: 3
- After: 3
- Press 'Calculate', and press 'Calculate' again.
- Scrub through time in the Dope Sheet.
- The Motion Path should now be shorter, showing 3 frames before & after the current frame.
- The Motion Path should be consistent with the test using 'In Range'/'Scene Frame Range'
- Be sure to also test the extreme frames, not just the middle of the range.
- Test Updating
- Turn OFF auto-keying (footer of Dope Sheet)
- Go to frame 15
- In the right-hand Viewport, press G to grab, and move the foot up.
- While moving, see that the motion path is NOT updated.
- Click LMB to confirm the move.
- Press I to key the new foot position.
- See that the motion path is NOT updated.
- Press the Update Path button, and see the Motion Path is updated.
- Press Ctrl+Z to Undo 4x (until the foot moves down again).
- Check that you are still on frame 15.
- Turn ON auto-keying (footer of Dope Sheet)
- In the right-hand Viewport, press G to grab, and move the foot up.
- While moving, see that the motion path IS updated. but only on frame 15.
- Click LMB to confirm.
- See that now the motion path for the frames surrounding frame 15 is also updated.
**TODO:**
- Check with Object animation.
- Check with multiple motion paths, and the 'Update All' button.
- Check with motion paths on an unanimated bone, and manipulating/re-animating its (grand)parent bone.
#### Slider Operators
- Open `sky-walkcycle.blend`
- It should have object `GRP-Sky_proxy` as the active object, in Pose Mode.
- Select bone `IK_foot.L` (for example via the outliner).
- In the 3D Viewport, press 'A' to select all bones.
- In the Dope Sheet, hover the mouse over the keyframes.
- Press 'Alt+A'/'Option-A' to deselect all keys.
- Press 'B' for box select, then in the Summary line select keys on frames 8-12.
- Delete keys
- In the Dope Sheet, press 'X' to delete those keys. There should be a popup, choose 'Delete Keyframes'.
- The keys should be deleted.
- Press Ctrl+Z/Cmd+Z to undo.
- Press the 'Delete' (on mac Fn+Delete) key to delete the keys. This should NOT produce a popup.
- The keys should be deleted.
- Frame Navigation in the Dope Sheet
- Go to frame 10.
- Press the Up arrow.
- You should be on frame 7.
- Press the Down arrow.
- You should be on frame 13.
- Blend to Neighbour slider operator
- Enable Auto-Keying (footer of Dope Sheet).
- Press Up & Down a few times to toggle between frames 7 and 13, and remember the poses for those frames.
- Go to frame 10.
- In the 3D Viewport menu, choose Pose → In-Betweens → Blend to Neighbor.
- The pose should not change.
- Move the mouse to the left.
- The pose should blend to the pose of frame 7.
- Move the mouse to the right.
- The pose should blend to the pose of frame 13.
- Press 'E' and move the mouse to both extremes.
- The pose should be exaggerated now, and allow extrapolation beyond usefulness (this will break the character).
- Press 'E' again.
- The pose should be limited to the range of frames 7 & 13 again.
- Look at the slider percentage in the Viewport header.
- Move the mouse, and see how fast the percentage changes.
- At a certain percentage (not the extremes), hold Shift.
- See that holding & releasing & holding Shift again does not change the shown percentage.
- While keeping Shift held down, move the mouse.
- See that the percentage now moves slower for the same mouse movement.
- Release Shift.
- Type '6' and '0'.
- The slider percentage should be at 60%.
- Press Enter to confirm.
- The character's left foot should be forwards, but not at the extreme.
- The Dope Sheet should show that new keys were inserted.
- Scrub the Dope Sheet.
- The character should show the pose you just inserted on frame 10.
**TODO:**
- Check other slider operators.
- Check with Object animation.
- Check mid-way an NLA stack (currently likely doesn't work, but with layered actions, at some point it should).
### Keying Things
- Open `sky-walkcycle.blend`
- It should have object `GRP-Sky_proxy` as the active object, in Pose Mode.
- Switch to New Action
- Ensure the Dope Sheet is in Action mode.
- In the Action menu, choose Replace with New Action
- Check an Action "Action" is assigned, with slot "Sky", and that there are no keyframes shown.
- Keying Sets
- In the header of the Dope Sheet, disable the "Only Show Selected" filter.
- In the footer of the Dope Sheet, choose the "Whole Character" keying set.
- In the 3D Viewport, press I.
- Check that the Dope Sheet shows a key on the current frame for all control bones.a
- Hover over the left-hand Viewport and press Shift+F5 to switch it to the Python Console.
- Paste `len(C.object.animation_data.action.layers[0].strips[0].channelbag(C.object.animation_data.action_slot).groups)` and press Enter.
- Check that it outputs `120`.
- Press Shift+F5 again to switch back to the Viewport.
- Go to frame 11.
- Enable auto-keying (footer of Dope Sheet).
- In the 3D Viewport, move `IK_foot.R` up.
- Check the Dope Sheet, it should have inserted a key for the foot, but not for other bones.
- Check that the newly-inserted keys are selected, and the other ones are deselected.
- Go to frame 15.
- In the 3D Viewport, press I.
- Check that this inserts keys for all bones again.
- Check that the newly-inserted keys are selected, and the other ones are deselected.
- Hover over the Dope Sheet, press 'A' and then the 'Delete' key to delete all keyframes.
- In the footer of the Dope Sheet, choose the "Available" keying set.
- Select bone `IK_foot.R`.
- Go to frame 15
- In the 3D Viewport, press I.
- See that no keys were inserted.
- In the right-hand Viewport, press N to show the side-bar.
- Hovering over Location, press I
- Check the Dope Sheet, and see that a key was inserted.
- Check that the newly-inserted keys are selected.
- Go to frame 5
- Move `IK_foot.R` to another location.
- In the 3D Viewport, press I.
- Check the Dope Sheet, and see that keys were inserted.
- Check that the newly-inserted keys are selected, and the other ones are deselected.
- In the Dope Sheet, press G to grab the selected keys, and move them to frame 1.
- Play back the animation, and see movement from frames 1-15.
**TODO:**
- Dope Sheet key insertion & manipulation.
- Graph Editor key insertion & manipulation.
### To Be Fleshed Out
- Pose Library
- Usage:
- Apply Pose
- Blend Pose
- TODO: prepare file + precise instructions + viewport-render the final pose of the character for reference.
- Editing/maintaining library:
- Create Pose in current file + apply it
- Push Pose to asset library + apply it
- Edit metadata of pose in asset library (so not current file)
- Auto-IK
- Test on Rigify → Human metarig
- With(out) X-Mirror enabled.
- Transforming keys
- Graph editor
- Select keys & transform (grab, rotate, scale from 2D cursor)
- Also with(out) handles
- Different handle types
- TODO: get Action from production file
- Dope Sheet
- Retime keys, also with different kinds of data (like F-Curve keys + Grease Pencil frames)
- 🤖 Copy-Paste Keys
- One-to-one
- Array-to-array
- Many-to-many
- Nothing selected when pasting
- Framing keys (select all, hit 'frame' button, should zoom out)
- Graph Editor
- "Normalize" mode
- Ghost curves (button is between the filter options in the header)
- Channel list manipulations
- Filtering by name
- Selection syncing (select bone → selects channel group, and vice versa)
- Reordering channels (groups, individual F-Curves, non-continuous selection of channels, slots)
- Group & ungroup
- Copy Global Transform
- Copy & Paste, with(out) mirroring
- Relative Copy/Paste
- Relative to object
- Relative to bone of specific armature
- Relative to only bone name, so of currently-active armature
- Paste & Bake
- Fix to Camera
- Use operator
- Use 'trashcan' to delete generated keys
## Rigging
- Weight Painting
- Painting
- Locking
- Auto-normalisation
- With mirroring (should also deal with flipping group names)
- Manually editing vertex weights
- Smoothing & other operators
- Armature Editing
- Edit two instances of the same Armature
- Edit with X-mirror on
- Create half an armature, use Symmetrize to create the other half
- Should only duplicate 'sided' bones
- Should duplicate constraints
- Should copy rest pose of selected bones to their mirrored counterparts (even when all bones already existed).
- Try out the operators in the left-hand toolbar.
- Drivers
- Add driver, edit its F-Curve (should behave as driver curve, not property-animating F-Curve)
- Creating IK/FK blend system
- Shape Keys
- Lattice deformation (also with shape keys)
- Bone Collections
- Showing/hiding/solo'ing
- Nesting collections (with visibility togglging)
- Coloring