Timeline

Plugins Timeline v6.2.4

Features

- SmoothMoves by GargChow is now built-in
- Greatly improved "Real Time" (now plays much more closely to audio and clock time). To preserve compatibility, previously created scenes using Real Time will use "Legacy Real Time" mode.
- Keybindings shortcut to make a backup of the current animation, and restore it (one animation can be backed up at a time).
- Import now supports creating new layers on an existing segment when possible
- Avoid calling end-of-animation triggers during blending. Do not call triggers when blending in before reaching frame 0 (so no more weird end-of-animation trigger calls when blending)
- Move the 3D curves in the Curves view; that allows seeing them in the Smooth and Reduce screen too, making it more obvious what it does to your animation.
- New defaults system in More, Defaults (Record and Reduce screens only)
- Order groups in the dope sheet in alphabetical order
- Keybindings shortcuts: Keyframe_Add_AllSelected to keyframe all selected targets
- Recording: When a non-looping animation has a next sequence, show the marker at the next animation's position
- Recording: Record from current scrubber position (clears keyframes after) and remain in position after record stop
- Add Animation: Option to automatically assign as the next animation in sequence
- When loading an animation with a shared segment, select the first non-shared segment by default
- Logging screen: Show the playing animation in the VaM's main UI help text
- Record: When recording float params, return to the Record screen when recording is complete
- Advanced keyframe tools: Keyframe pose only affects selected targets when a selection exists (otherwise, it affects all control targets)
- Improved plugin loading times

Bug fixes

- Fix create animation on other atoms not using the current animation as a reference (resulting in out of order animations and wrong copy keyframes source)
- Fix that prevents adding invalid control to an animation (e.g. gens controls on a female)
- Fix poses being applied during editing in the the middle of an animation when Apply on transition is on
- Fix for loading scenes that had previous errors resulting in duplicated tracks
- Fix for Coroutine couldn't be started because the the game object 'Curves' is inactive
- Correctly update float param sliders after cut or paste
- Fix float param slider rounding values during recording
- Stop running garbage collection when recording for a smoother recording start (won't freeze for a second)
- When creating an animation, select it in other atoms
- When adding animations in all atoms, correctly sync the position, copy settings, copy keyframes and create an all layer options
- Improved readability of the Import screen
- When deleting an animation, select the previous one instead of the first one
- Fix instead range / reset range not working in the Targets tab
- Fix force-apply min/max range of morphs on load not working anymore
- Fix nasty NullReferenceException crash when collapsing groups (thanks @GossamerVR for the help!)
- Allow grouping triggers, controls and morphs in a single group
- Create custom groups of targets (separate morphs and controls by your own grouping names)
- When importing, assign animations to an existing compatible layer or create a new segment (new import screen)
- Support for linking AptSpeaker and RhythmAudioSource audio sources
- Moved frame navigation to the bottom to reduce confusion with animations navigation
- Next / Previous Animation triggers now work on the first layer of the current segment
- When using -1 on "Play next in", always reduce the value by one loop
- Prevent negative values on randomize fields
- Do not check for missing morphs every frame, improve performance of animations when morphs are missing
- Fix sequencing not working since v6 on peer atoms (when playing on atom A, atom B sequencing will not work)
- Fix other gender morphs being replaced by current gender morphs on load when available (resulting in sometimes both being modified, e.g. mouth stays open when it should be closed)
- Fix Keyframe all targets not working on non-person atoms
- Fix Keybindings OpenUI commands not closing other plugins UI (thanks @everlaster#7004)
- Fix comply not being applied correctly (thanks @unnamed_plugins#7507)
- Fix Next / Previous Frame trigger not working on paused animations
- Log a message when peer sync is off and logging for peers is on (to help understand when peer sync doesn't work)

Example grouping and frame nav changes:

1663087978794.png
- Fix new animations copying position setting into rotation
- Fix sequence randomize group using own group name instead of specified group name
- 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
Top Bottom