# 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