- Fix crash when adding a new Timeline instance to an atom (major)
- Support preserve loop from looping to non-looping
- Allow exporting all animations when using a single segment
- Fix crash when importing animations
- Detect invalid segment sequence and still load the scene
- Fix randomize group weight 0 not saving
- Fix some drop downs opening upwards hiding the filter text field
- Fix loading a scene on initial load may not correctly load trigger receivers
- Select specific segments, layers and animations using Keybindings (Select_Segment#1, etc.)
- Allow deleting the shared segment
- Show the "(Randomize)" sequence target even when only one animation is present
- Fix AutoPlay not working when only one segment exists
- Show a warning when using Auto Play on multiple segments in the diagnostics
- Show the segments drop down when only the shared segment exists
- Add a log when a trigger tries to change an uninterruptible animation
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
- Fix saving pose not including the node and physics state
- Fixes a bug introduced in v5.3.1 breaking sequencing (sorry!)
- Do not record the release even when the animation recording completes
- Do not save non-pose morphs, hair and clothing references when saving a pose
- When adding a node, do not switch it to "on" automatically unless both rotation and position are off. Otherwise just show a warning.
- Give priority to grab when animating a grabbed control
- When parenting is enabled, behave like ParentHoldLink; continuously update the position even when Timeline is not playing. Can be disabled in Options.
- Global weight storable (reduces the "strength" of Timeline). Weight affects distance traveled, not physics.
- Additional log when a pose is applied on transition
- Show an error message when using Controller on a SimpleSign inside a subscene
- Fix multiple randomized group weight issues (old scenes loading with value 0, slider disabled when Next Animation is not set to a group, and other smaller problems)
- Fix Previous/Next (keybindings and storables) ignoring animations order changes
- Fix removing the animation name group not actually removing the group behind the scenes
- Fix record markers showing before the countdown
- Fix animation pattern not scrubbing in sync (make sure loop is enabled on your animation pattern)
- Fix preserve loop sequence towards longer animations starting in the middle of it
- Make Next/Previous animation behave exactly like Next/Previous [Main Layer] (it just didn't work before)
- Show sequencing info in Animations tab
- Fix missing animation set when creating anim with carry settings
- Fix "Crop/Extend at (begin)" keeping the very first frame (this was by design but is unintuitive)
- Fix split at scrubber not populating the second animation with the remainder triggers
- Fix restore min/max range not working for morphs
- Fix increase range behavior on morphs using "10x" instead of "Increase"
- Fix import mocap resize toggle ignored
Back
Top Bottom