Features
Audio scrubbing, audio sync and live triggers
This will make animations that must sync to music or speak much easier to make, and behave as expected same on other computers with lower performance.
- Audio triggers will play from the right point when playing an animation midway
- A small audio clip will be played when scrubbing when the animation is not playing
- Playing audio clips time will be adjusted when scrubbing
- You can link an animation's time with an audio source, which means the animation time will be synced with the audio clip (guaranteed audio sync)
Segments
Segments are a new concept that should greatly simplify animating multi-steps scenes. In short, each segment can define it's own layers. For example, if you have an animation that has a layer for the upper body only, and then another animation that needs a layer for hands, a layer for the head and a layer for the lower body, each segment can define those. Only one segment can play at a time, making them self-contained and predictable.
There's also the concept of a "shared segment" (maybe I'll think of a better name) that contains animations and layers that will be allowed to play independently of the segment. For example, you can have a "breathing" layer that will play on all your segments.
I'd love to hear if that all made sense to you! I'm convinced this will be extremely useful but it's also probably hard to guess how this works just from the interface.
- Create, play and sequence segments
- Create, play and sequence the shared segment
- Copy a segment
- Send a layer to the shared segment
- Ability to reorder and delete segments and layers
- Copy target tracks and paste them in other segments will automatically add the target track
- Blend using the first animation's blend in time of that segment
- Keybindings integration (next/previous segment)
- Blend controls into non-animation and vice-versa
- Transition segments (single-layer animation)
- Create segment from current animation (to migrate existing animations to segments)
Smoother blending
- Blending algorithm changed for smoother transitions
- Increased default blend duration to 1s
Export and import segments with no conflicts
This is a work in progress, but the idea is to allow people to import animations and have them "just work". Both the code and how to provide that conceptually isn't fully fleshed out, so you might want to wait before exploring that.
- Export the current animation, layer, segment, or all segments
- Import animations as a new segment
- Optionally export the pose as an animation pose instead of applying the pose when importing
Add and animate controls and storable floats on other atoms
This means you can add anything from your scene to a single Timeline instance. I recommend making one Timeline instance per atom, but in some cases, you might want to animate an object (e.g. a CustomUnityAsset) as part of your Person animations; or you might want to animate a group of objects together; that is now possible.
- Ability to add controls from other atoms
- Ability to add float params from other atoms
Trigger to disable animated controllers
This allows disabling Timeline on a specific control, e.g. to allow another plugin to take over. Because it's using a float param, you can smoothly blend in our out how Timeline affects a control.
- Change an animated control's weight for all animations at once using a trigger
Time offset
This feature allows you to define an offset for an animation; same-name animations will run with a different starting time, when playing, scrubbing, or sequencing. For example, if you want to have the hip and head run on perfect timing, and then tweak the head to have a slight delay, you can change the Time offset field in the Sequence tab. You can change it in real time.
- Time offset per animation (offsets start time, real time adjustments)
Usability and UI improvements
There are many smaller things that I think are worth mentioning, though they are not as "sexy" as the main features
- Create a dedicated Pose tab with instructions
- Triggers track now added to all animations of a layer
- Ability to rename trigger tracks
- Now syncs with real (clock) time instead of game (Unity) time by default
- Separate drop down for segments, layers and animations; segments and layers drop downs hidden when none exist
- Apply poses only when needed, and apply the keyframes even when there is a pose
- Show currently playing animation in bold in animations drop downs
- Improve the triggers UI in the Targets tab, easier to see and use
- Simplify the Sequence tab by removing loop and moving fade options in the fade section
- Split Add Animation screen for animation, layer and segment and improve the UI
- Focus on layer, which prevents other layers from playing (Keybindings only: Timeline.ToggleFocusOnLayer)
- Poses will apply even when not on the layer that has the pose (when using the same animation name of animation set)
- Create animation on all layers at once
- Create all animations from the current layer when creating a new layer
- When creating new animations in a group, if it wasn't yet created on this layer, automatically suggest the next name in that group
- Preserve length for non-looping animations, i.e. when triggered, they will wait for the end before sequencing
- Automatic layer name suggestions when creating layers
- Create multiple animations without leaving the create animation screen
Bug fixes
- Fix some missing name validation when creating animations
- Fix broken UI on CyberpunkRemote, CyberpunkMouse, CuberpunkComputer
- Fix the Stop trigger not broadcasting to peers
- Add missing fields when copying animation settings (weight, randomize fields)
- Different layer speeds not taken into account when scrubbing
I'm still upgrading the wiki, but you can already find some information in it! https://github.com/acidbubbles/vam-timeline/wiki