2.0 Release Notes
Release date: 10th January 2024
File Version Bump
Scenes created in Cavalry 1.5.6 or older will be converted when opening them in Cavalry 2.0. The file will be copied to a new scene which will need saving – you'll notice the legacy scene will be named <yourSceneName> [Converted].cv
on opening. Any scenes saved in 2.0 onwards will not be fully compatible with any previous versions of Cavalry.
macOS Version Bump
Minimum requirements on macOS have been bumped to macOS 11 for the 2.0 release.
What's new in Cavalry 2.0?
Introducing:
- Cameras - Create a 2.5D environment to add depth to Compositions.
- Pre-Comp Overrides - Override attributes contained within Compositions to create templates.
- Component Shape - Collect Layers and promote attributes to create a simplified, custom container.
- Background Rendering - Hand off rendering to continue working in parallel.
- Tapered Strokes - Taper the width of a stroke along a Path.
- Big performance improvements.
- A new Particle system is now available as an Experimental Feature.
- And much more...
New Features
General
Features
- Pre-Comp Overrides - Promote a Layer's attributes so they can be accessed and overridden from the Pre-Comp itself making it possible to add variation to several versions of the same Pre-Comp.
- Track Mattes - mask Shapes with Alpha Mattes.
- A new Transform Only Motion Blur option for Shapes.
- Particle Distribution to position Shapes onto Particles.
- Animation Offsets - layer additional animation on top of any existing keyframe animation.
- Increment and Save added to the File menu.
- Palette Generator in the Color Window.
UI/UX
- Upgrades to the JavaScript Editor :
- Find and Replace text.
- Auto-indentation.
- Helpers for inserting matching brackets and double quotes.
- Snippet Editor.
- Motion Paths - Preview the position and speed of a Shape in the Viewport.
- Locking Layers Prevents Selection in the Scene Window option added to the Preferences window.
- When hovering Shapes in the Viewport, Pre-Selection Highlighting now appears. The level of detail is adaptive to the complexity of the Shapes being hovered. For example, rather than highlighting every character in a paragraph, simply show bounding boxes for the words or the entire Text Shape.
- The View menu now includes a Show Layer Names on Hover option.
- Labels now appear in the Viewport for selected Shapes.
Rendering
- Background Rendering - Hand off rendering so you can continue working in parallel.
- New Sprite Sheet render format.
- The WebP image format can now be imported as an asset and exported as a File Format.
- Alpha Add Blend Mode to help with fixing seams between adjacent edges.
- Retime Compositions at render time. See the Compositions tab on the Render Manager page.
Shape Editing
- Split Path at Selection command added to the Shape menu.
- Point Alignment added to the Align Window.
Shapes
- Component Shape - Components are Layers that contain a collection of other Layers. Attributes from those Layers can be promoted to the Component in order to create a simplified custom user interface.
- Tapered Stroke - Create a tapered stroke along a path. See Common Attributes (Stroke tab).
- Segment Path - This replaces the Trim Path Utility (experimental feature) which has now been removed.
- Merge - Create a Shape containing a closed Path from two Shapes containing open Paths.
- Super Shape added to the Basic Shape.
EXPERIMENTAL
Particle system including a Shape, Emitters and Modifiers.
Behaviours
- Auto-Animate - Add a variety of animations to Shapes with only a few keyframes.
- Auto-Crop Behaviour - Crop Shapes based on their bounding box.
- Wave Deformer - Create looping wave distortions along open and closed Paths.
- Chop Path - Chop a Shape into several slices.
- Travel Deformer - Reposition the start points for all Contours within a Path.
- Value3 Behaviour.
- Value3 Blend.
Utilities
- Camera - Add a Camera to a Composition to create a 2.5D environment.
- Radius Utility - Generate the radius for a circle which encompasses several Shapes.
- Value3 Array.
- Several Utility Layers have been added for use with the Particle Shape:
EXPERIMENTAL
Emitters - Define where Particles appear from and how many are added to the Composition:EXPERIMENTAL
Modifiers - Fields which can be used to change a Particle's Attributes.
Effects
- Background Blur Filter - blur the areas of a Shape that sit within another Shape.
- Checkerboard Shader - add a checkerboard pattern to a Shape.
Scripting
- JavaScript Layers now support Point Data (Distribution Points) and Layer data.
API Module
- unParent()
- isVisible()
- getCustomAttributeName()
- getAllLayerTypes
- getAllSceneLayers
- getActiveCamera()
- hasActiveCamera()
- getSelectionBoundingBox()
- getAttrParent()
- getAttrChildren()
- addPreCompOverride()
- removePreCompOverride()
- listPreCompOverrides()
- move()
- backgroundRender()
- backgroundRenderAll()
- encrypt()
Cavalry Module
- degreesToRadians()
- radiansToDegrees()
- boundingBox() now outputs variables for centre, top, bottom, left and right.
- New methods for the Cavalry Module's Path Class:
- empty() - Return if a path is empty or not.
- pointCount() - Return the number of points in the path.
- contains() - Return if the point specified by x,y is inside the path (only works on a closed path).
- pathData() - Return an array of verbs and points representing the path.
- length() - Return the length of the path.
- pointAtParam() - Return a point object with x,y variables that corresponds to a position a given parameter along the path.
- tangentAtParam() - Return a point object with x,y variables that corresponds to a tangent a given parameter along the path.
- angleAtParam() - Return an angle in degrees representing the tangent a given parameter along the path.
- paramAtLength() - Given a length, return the corresponding parameter value for that length value.
- findClosestPoint() - Find the closest point on a path.
- offset() - Grow or shrink a closed Path.
- trim() - Reduce the length of a Path by clipping it from its start/end points.
- resample() - Rebuilds the path by sampling points based on a desired 'edgeLength'.
- lineIntersections - Returns an array of points at which the path and line intersect.
- pathIntersections - Returns an array of points at which this path and the given path intersect.
- relax - Relax the points in the path away from each other.
- smooth - Smooths the points by averaging their positions.
- scatter - Scatter points inside the path via dart throwing. Points are relaxed by default.
- A new Line Class including several new methods.
- A new Mesh Class including several new methods.
- A new Material Class including several new methods.
- A new Matrix Class including several new methods.
Deformer Module
Note - the Mesh Module has been renamed to Deformer Module. Existing scripts using mesh.
will be backwards compatible.
- meshDepth
- meshCountAtDepth()
- getMeshesAtDepth()
- setMeshesAtDepth()
- getMeshAtDepthAtIndex()
- setMeshAtDepthAtIndex()
- setTransformAtDepthAtIndex()
- clearTransformAtDepthAtIndex()
- centrePivotAtDepthAtIndex()
- setMaterialAtDepthAtIndex()
- highestDepthWithPath()
Script UIs
- Container show()
- Container move()
- Container showAsPopover()
- setMinimumWidth()
- setMinimumHeight()
- setMaximumWidth()
- setMaximumHeight()
- getThemeColor()
- Modal()
- geometry() function.
Context Module
CLI
Enhancements
General
- The Frame Behaviour has a new 'Seconds' interpolation.
- Beta Features have been renamed to Experimental Features to try and avoid the confusion between beta builds (e.g. Cavalry 2.0 beta 7 ) and the features.
- Sorting is now supported in the Assets Window.
- Group selection/interaction in the Viewport has been improved:
- Clicking and dragging any Shape within a Group will now move the whole Group.
- Double clicking a Shape will drill down to that hierarchy level.
- Hold S to select a child of a Group.
- Right click a Shape within a Group to select a parent within that hierarchy.
EXPERIMENTAL
Trails can now automatically inherit colours from a Particle Shape.- A Shape's Opacity is now respected when used as the Input Shape to a Duplicator.
- The Mesh Explorer has had a facelift and now includes thumbnail previews.
- The Notes feature in the Scene Window now has a yellow background colour to improve contrast.
- When creating a Pre-Comp from the
Composition > Pre-Compose
menu (or via the contextual menu in the Scene Window) the new Pre-Comp will inherit the parent Composition's FPS. - New Flow Rows/Columns attribute for the Grid Distribution.
- Subdivide has an option to improve the resulting curve at the ends of open Paths.
- There's a new Preference to determine whether locked Layers are also locked in the Scene Window.
- Points are now represented in the Viewport when using the Add Divisions Behaviour with Editable Shapes.
- If an Editable Shape is being deformed, the original path is now drawn along with the deformed path.
- Bracketed image sequences (e.g.
filename (1).png
,filename (2).png
,filename (3).png
...) can now be imported to the Assets Window. - New Blur Align option added to the Composition Settings window.
- New improved defaults for the Drop Shadow Filter.
- A new option in the Render Manager to include (or not) the Composition Background in an SVG file.
- Scene Presets have been renamed to Demo Scenes (they were never really 'presets'!).
- Several new Text transitions added to the Demo Scenes using the Auto-Animate feature.
- Several new JavaScript examples added to the Demo Scenes.
- Bevel now handles the penultimate points on open paths in a more predictable way.
- A warning is now thrown in the Message Bar when missing fonts are detected.
- Hierarchy is now respected when importing SVG artwork as Editable Shapes.
- Resample Path has a new Corner Angle attribute to help preserve corner points.
- Option/Alt + dragging a Pre-Comp in the Viewport will now create a second reference of the Pre-Comp (e.g. remain linked to the existing Composition) rather than create a new copy of the Composition.
- Get Sub-Mesh Transform now has a new Use Bounding Box attribute in order to support Words and Lines for Text Shapes.
- It's now possible to disable Attribute Expressions.
- A new additional control will appear when Keyframe Layers are in use to reflect the combined values of all layers.
UI/UX
- Connections can now be made by dropping a connection onto a Shape in the Viewport.
- The Font menu for a Text Shape now renders the list using the font. Fonts that are not supported fall back to the default.
- The Attribute Editor now includes:
- 'Sticky headers'.
- Animated scrolling.
- Color divider added to the header.
- Dividers to better group common attributes.
- Improved indenting for Generators (e.g. a Duplicator's Distribution).
- Improvements to the UI for Arrays.
- Show/hide attributes dependent on 'mode' (see Auto-Animate).
- New 'inline help' messages.
- Procedural Animation Curves are now previewed in the Graph Editor.
- Magic Easing settings can now be accessed in-line by double clicking a keyframe in the Scene Window.
- The pop up window that appears when double clicking a keyframe in the Graph Editor now contains more options including Magic Easing, interpolation and bezier handle lengths.
- Improvements have been made to 'constraints' for handles in the Graph Editor. Previously, constraints imposed on moving bezier handles (e.g. moving a handle past other keyframes) were overly aggressive which could result in the 'double clicking an animation curve to add a new keyframe' feature resulting in inaccurate curves in certain cases. Similar improvements have also been made to the Graph Attribute curves (e.g. Falloffs).
- Recently added Layers now appear as 'quick add' shortcuts in the Attribute Editor for a Shape's Deformers and Filters attributes.
- New hotkeys for setting a Shape's Fill/Stroke colors by clicking a color swatch in the Color Window.
- New commands to close a Composition or 'other' Compositions added to the Composition menu.
- The Enable Time Remapping command is now available from the context menu in the Scene Tree and Time Editor.
- It's now possible to constrain the proportions of several attributes. For example, if a rectangles's Width = 100 and Height = 200, setting Width to 200 will also set Height to 400 when the constraint is active.
- The Shift + F hotkey now fits to the Frame Range in the Graph Editor to match the Time Editor.
- Improvements to the preservation of animation curves when deleting keyframes in the Graph Editor.
- Improvements to the preservation of the graph curve when adding points in the Graph Attributes (e.g. Falloff).
- Entering partial valid hex codes now auto-complete (e.g. entering AB will result in #ABABAB).
- Icons have been added to the contextual menu for the Assets Window.
- Improved highlight contrast for editing values/strings/labels.
- Double clicking a Pre-Comp will now load its UI into the Attribute Editor – this is consistent with how any other Layer works in the Scene Window. Either clicking the
Open
button or Option/Alt + Cmd/Ctrl + double clicking a Composition Layer's row in the Scene Window will open that Composition (making it the active Composition). - A Control with Null option is now available when right clicking on a row in the Attribute Editor. This creates a Null and connects its Position to the row's attribute.
- A Get Info option now appears when right clicking in the Viewport which provides information about the Shape under the cursor. Clicking a menu item will copy its value to the clipboard.
Scripting
API
- getBoundingBox() now outputs variables for centre, top, bottom, left and right.
- preCompose() - 'name' is now an optional argument.
- keyframe() in the API now also returns the keyframe's Id.
Deformer
- getBoundingBox() now outputs variables for centre, top, bottom, left and right.
Performance
- Many optimisations have been made in Cavalry 2.0. Speed improvements will be dependent on the Scene but on average you can expect to see ~200% increase in playback speed. Performance improvements will be most noticeable in complex scenes where we have observed up to ~600% speed improvements. Simple Scenes should see at least a 10% improvement in playback performance.
- Opening large Scenes is now much faster. In our tests a 2000 Layer Scene load time is now ~22x faster.
- Selecting large numbers of Layers is now ~100x faster.
Notable Bug Fixes
- Count for Per Contour is working as expected again for the Path Distribution.
- Path Offset is now correctly handling holes again.
- Holding Option/Alt + dragging to duplicate a Shape when the Select tool is set to 'Individual' no longer causes double transforms.
- MP4 and WebM movies are now loading via the Image Cache which means they use far less RAM when loaded.
- Fixed a bug when double clicking in the Graph Editor to create new keyframes.
- When copying Layers that are connected to the Composition by default (e.g. a Composition Constraint is connected to Resolution) to a different Composition, those Layers will be connected to the new Composition's attributes.
- Fixed a bug when making connections from an Animation Control via the Scene Window pop-up menu.
- Render Tokens using Custom Time Formats which included / or : as separators (e.g.
<%X>
) now use -. - Viewport decorators (e.g. FPS) no longer draw when using Viewport Caching.
- The 'New Beta Available' pill should only appear if there actually is a beta newer than the one currently installed available.
- Shapes using Blend Modes no longer blend with the Composition's checkerboard.
- Input connections from a Spreadsheet's Row Count can now be accessed from the attribute it is connected to.
- The Blur Filter no longer clips the Y axis.
- Fixed Spacers no longer break Layout Groups.
- Caching for Forge Dynamics simulations has been fixed.
- The Reverse Animation command is now working again.
- Character Spacing for centre and right aligned Text now works as expected.
- When adding Time Remapping to Pre-Comps which are offset in time, the keyframes are now correctly placed at the start/end of the Pre-Comp.
- A crash caused when an image sequence was found at the root of an Image Smart Folder has been fixed.
- Fixed an issue in the macOS Save dialogue where hitting Return after quitting Cavalry with an unsaved Scene open was not respecting the default (Save) option.