[RELEASED] Timeflow Animation System for Unity

A flexible animation system for artists and developers offering advanced curve editing tools, procedural animations, and dynamic behaviors with a focus on motion graphics and music synchronization.

Introductory Offer: 50% Off launch price! (first 2 weeks only)

Timeflow has been built from the ground up for artists by an artist with over 10 years in the making. Drawing inspiration from industry leading tools in animation, audio, and post production, the Timeflow toolset has been used in-house for nearly a decade in game and app development, as well as leveraging Unity as a production tool for creating and publishing high quality videos, VR content, and fulldome shows.

Timeflow introduces a new way of animating in Unity, using behavior components built on strong fundamentals with proven efficiency and performance. With Timeflow, you can create motion graphics, cut scenes, full scene choreography, camera edit sequences, or simply breath life into your game or app.
Easily add new animations and procedural behaviors to any object or property without limitations.

An integrated track-based timeline view provides users with an intuitive interface that includes rich editing and creative features. This can be used to animate individual elements or choreograph entire scenes in any type of Unity project, on any target platform.

Timeflow behaviors include:

  • Advanced keyframing and curve editing tools with linear, quadratic, and Bezier modes.
  • 3D Bezier node-based motion paths with velocity curves.
  • Procedural tween animations.
  • Blending between object and property states.
  • Sequencing Unity animation clips and Animator blend trees.
  • Procedurally generated motion paths.
  • Auto-rotation and auto-banking behaviors.
  • Dynamic follow and look-at.
  • Random and Perlin noise generation.
  • Dynamically placing objects on paths, terrains, and colliders.
  • Processing of pre-recorded and live MIDI and audio to drive audio-reactive behaviors.
  • Ability to link property channels to create simple or complex relationships.

The Timeflow view offers grid and snap features with built-in musical timing, as well as many time-saving and production-enhancing tools. Artists can fully work on and preview animations without having to enter play mode, allowing for fast iteration and real-time workflow. Animations can be edited while previewing and can easily be copied, pasted, and duplicated, and linked across multiple objects and properties with full undo support.

Timeflow can work alongside or separately from Unityā€™s built-in animation systems, and can be easily integrated with existing assets and animations. It is compatible with any third-party tools and project configurations. You do not need any coding or development experience to use Timeflow, but the full source code is included with extensible features for developers to create custom behaviors and specialized integrations.

Timeflow is a comprehensive animation solution that is easy to set up and use for artists and developers alike. Full online documentation with tons of examples and tutorial videos are available to help you get started immediately.

Invest in Timeflow today and unlock greater creative potential in your projects.

  • Supports Unity 2020 or later on all target platforms.
  • Compatible with all render pipelines: URP, HDRP, SRP, Custom RP.
  • Easy to set up and use for artists and developers, with no coding required.
  • Efficient workflow with no additional asset management.
  • Full previewing and productive workflow in edit mode.
  • Integrated timeline system with advanced creative and editing features.
  • Grid and snap to seconds, frames, timecode, and musical timing with BPM and time signature.
  • Audio synchronization and audio spectrum analysis.
  • Robust keyframe and curve editing tools with bulk selection and editing.
  • A full suite of procedural behaviors for dynamic motion.
  • Drive animation with MIDI and audio-reactive behaviors.
  • Following, look-at, and virtual parenting behaviors.
  • Dynamically link animated properties together with channel linking.
  • Leverage Unityā€™s animation capabilities with Animator and Animation components.
  • Synchronize and sequence Timeflow with Unity Timeline or use it separately.
  • Create forced frame rate and stop motion effects.
  • Fully supports copy, paste, duplicate, and undo.
  • Maximize productivity with markers, labels, display lists, quick select, and keyboard shortcuts.
  • Advanced tools for looping individual animation channels and the entire timeline.
  • Supports physics when animating objects with rigidbodies.
  • Animate materials, shaders, and global properties.
  • Animate volume properties, post-processing effects, visual effects, and more.
  • Built-in rendering system for outputting PNG and JPEG frame sequences.
  • Render support for any resolution, 360 stereoscopic VR, and fulldome formats.
  • Batch rendering.

Not Supported:

  • DOTS: Timeflow does not implement ECS and cannot be used in Subscenes, however it may still be used normally in projects that use ECS for other objects/entities.
  • Audio processing is not available in WebGL due to API limitations.

Package includes many examples with a buildable demo app.
Live Demo: Unity WebGL Player | Timeflow Demo App

Now available in the Unity Asset Store!

Comprehensive online documentation:

Excellent tutorial videos to help you get started immediately:

5 Likes

This looks awesome! :slight_smile:

But it keeps baffling me how often devs advertise a new asset and then ā€¦ donā€™t include the link to the asset. Clearly a lot of effort went into making this and you do want to sell it, am I right? :wink:

Yes, that is a critical part I suppose! :wink: Thank you for the comment and heads up!

Here is the link to the Unity Asset Store. I updated it in original post as well.

1 Like

Why require MIDI to use the .bytes extension? It adds an additional step to the workflow. I know that
Keijiroā€™s MIDI Animation Track can read .mid files. Thanks!

Thanks for the tip! I agree that if it can work with fewer steps, all the better.

The reason is that Unity requires the .bytes extension to recognize the file as a binary TextAsset. Otherwise, If the file has the .mid extension, it is imported as a default asset (unrecognized) and the data is unreadable (as MIDI).
https://docs.unity3d.com/2020.3/Documentation/Manual/class-TextAsset.html

However, I am sure this can be improved by creating an asset importer for the .mid file type so that it works without having to rename it .bytes. Iā€™ll investigate further and see if I can include it in the next update.

1 Like

Ok, so I came up with a quick solution. Rather than mess with the existing workflow, Iā€™ve added an AssetPostprocessor which converts any asset files with the .mid or .midi extension to .bytes automatically.

I initially tried using a ScriptedImporter (which is what Keijro has done), however I was still having issues reading binary data. Instead, automatically renaming the file to .bytes works readily.

This will be included in the next update (v1.0.2), but here it is for anyone who owns Timeflow and wants to add it manually:
Assets\AxonGenesis\Timeflow\Editor\MidiAssetPostprocessor.cs

// Copyright 2023 Axon Genesis. All rights reserved.
// AxonGenesis.com
// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.

using System.IO;
using UnityEditor;
using UnityEngine;

namespace AxonGenesis
{
    public class MidiAssetPostprocessor : AssetPostprocessor
    {
        static string[] extensions = new string[] { "mid", "midi" };

        private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromPath)
        {
            foreach (string assetPath in importedAssets) {
                bool convert = false;
                string path = assetPath.ToLower();
                foreach (string ext in extensions) {
                    if (path.EndsWith("." + ext)) {
                        convert = true;
                        break;
                    }
                }

                if (convert) {
                    if (!File.Exists(assetPath)) {
                        continue;
                    }

                    string destFile = Path.GetDirectoryName(assetPath) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(assetPath) + ".bytes";
                    Debug.Log("Converted " + path + " to .bytes:"+destFile);
                    File.Move(assetPath, destFile);
                    AssetDatabase.ImportAsset(destFile);
                }
            }
        }
    }
}
1 Like

Iā€™ve also added this as an option to the Timeflow Preferences. It defaults on to automatically rename MIDI files with the .bytes extension, however may be turned off for those who wish to maintain manual control over file naming. Although unlikely that someone would be using Keijiroā€™s MIDI tracks in the same project, this would permit both methods to coexist without stepping on toes (though separate instances of the MIDI assets would still be needed in that case).

1 Like

Thanks for your attention and help. I am impressed by the quality of videos you have released on YouTube.

1 Like

Timeflow v1.0.2 has been released with the following updates:

Bug Fixes

  • Unable to drag keyframe values in Graph View on newly created channel
  • Null reference error trying to select keyframes after undo.
  • Adjustments to Time Offset are now undoable.
  • Fixed null reference error with Keyframe Tools when no events or keyframes are selected.
  • Fixed property listings for Visual Effects Graph exposed properties.
  • Fixed drag-and-drop copy of AudioTrack channel to correctly assign AudioSource reference

Examples

  • Demo App : An error message is now displayed in the editor if the Build Settings are not configured properly, to notify users of the setup required.
  • VFX : Added example scene showing how to animate properties of Visual Effect Graph.

Feature Updates

  • Render to Disk : Added ā€˜Generate Marker Rangesā€™ to create frame ranges from marker sections

  • Auto Bank : Added support for Flyby paths as movement input

  • MidiAssetPostprocessor : Files with the .mid or .midi extension are now automatically renamed with .bytes

  • Preferences :

  • Added option "Auto Rename Midi Files .bytesā€ to enable/disable the above feature

  • Added option "Show Looped Keyframesā€ to display ghosted keyframes on looped keyframe channels as a visual aid.

  • Keyframe Tools :

  • Added ability to apply time transforms to markers

  • Channel Menu :

  • Renamed ā€˜Convert to Keyframesā€™ to ā€˜Bake Keyframesā€™ to more clearly describe intent.

  • Added feature ā€˜Freeze Time Offsetā€™ to apply time offset to all keyframes in the channel, then resetting the time offset to 0.

  • Added feature ā€˜Expand Looped Keyframesā€™ to convert a loop into editable keyframes.

  • Added ā€˜Linked To/Insert Data Channelā€™ to insert a new data channel between linked channels.

  • Info Panel :

  • Improved multi-edit capability for all numeric forms.

  • Added undo support for changes to any value fields

2 Likes

Hi Axon,
I was curious I already have a ton of animations from the asset store. with your tool can I easily make characters play those one after another? Iā€™ve checked out your documentation and it seems the answer is yes, but wanted to make sure since I missed the 50% off it was for the first 2 weeks.

Hi @PlayBoxTech !

Yes, you certainly can playback animations using the built-in Animation or Animator components in Timeflow. However to avoid any confusion, Timeflow does not directly edit the content of those animations, but can be used to choreograph them using one of two methods.

As an example, here is an animated music video I created leveraging Unity animations. This was all created using Timeflow without the use of Unity Timeline nor Cinemachine.

The phoenix model was purchased in the Unity Asset Store. It originally was a secretary bird, which I modified, and it already came with a game-ready animation controller with tons of animations setup in a blend tree. I was able to animate this in Timeflow easily by setting keyframes to control the Animator exposed properties, basically acting as a remote control similar to how player input controls the character. This technique can also be used to create cut scenes or take over gameplay by overriding it with Timeflow animation channels, which can blend in or out to take or release control back to gameplay as cuts or smooth transitions.

Another example demonstrated in this video are the dancing human characters. This was using proprietary motion capture. The animations were imported as FBX files using the built-in Unity animation system, which is best suited for this type of animation data. A simple animator controller was setup with each of the dance variations, and then using Timeflow I was able to randomly assign animation and time offsets to characters, create prefabs, and then distribute them on the terrain and geometry (using Timeflowā€™s Place On Surface tool)

Both examples above use the Animator component, the bird with a complex blend tree, and the humans with a simple tree. However, another method in Timeflow is to play Animation Clips directly. This plays only 1 animation at a time, but can also play multiple animations back to back in a sequence on the same object (without blending). Using this technique you can use keyframing in Timeflow to playback 1:1 or time remap the animation clips for full control over playback speed.

In the Demo App (starting at 1:15) you can see Unity animations clips being choreographed by Timeflow with varying speed.

Lastly, I just want to clarify that Timeflow is not designed to be a character animation system in that it doesnā€™t handle IK nor is it suited for the density of motion capture data, which is why it leverages the built-in Unity animation clips which already do a great job of that. Though there is nothing to prevent you from animating hierarchies or adding animation channels to anything you want in Timeflow. You can also combine Timeflow with Timeline to use all features of both systems simultaneously.

For more details, here are some links to the Timeflow documentation:

Animator Blend Trees:

Animation Clips:

Hopefully all that makes sense. Let me know if you have any further questions.

Best regards,
Stephen

Hey Axon,
I just wanted to say amazing work on Timeflow, itā€™s got a lot of really useful features that Iā€™m excited to try for a project Iā€™m working on. However, I wanted to ask if Timeflow is compatible with Cinemachine as Iā€™m the most experienced with this in Timelines and others I work with have experience as well. I noticed when adding assets to the Timeflow gameobject, when I tried right-clicking on the camera object that I had applied my Cinemachine components and scripts on in the Timeflow window, I noticed there wasnā€™t a cinemachine track and I wasnā€™t able to create a cinemachine shot clip. This track is necessary for controlling which camera is active via these shots and the actions of that camera.

I know you mentioned that in the video above it was created without the use of Cinemachine, Iā€™m just wondering if itā€™s compatible at all right now. Thank you!

1 Like

Thanks for your feedback! Iā€™m glad to hear that youā€™re getting some good use out of the toolset.

Yes, you can use Cinemachine with Timeflow, however Cinemachine tracks are managed in the Timeline window rather than directly in Timeflow. Timeflow integrates with Timeline so that they both play synchronized. Any of the Unity animation features/packages can be used in combination with Timeflow, so you donā€™t have to choose one workflow over the other.

Hereā€™s a screenshot showing a setup using Cinemachine cameras with a couple of Timeflow instances, though for a more basic setup you can use just 1 Timeflow instance and match the duration with Timeline. Once Timeflow has been added to Timeline, playing animation in either window syncs the other so you can work in either view as needed.

To set this up in your project, import the included package in the examples, which includes some scenes demonstrating the setup.
Assets/AxonGenesis/Timeflow/AddOns/TimelineIntegration.unitypackage

Thereā€™s also this tutorial video going through the process step by step:

https://www.youtube.com/watch?v=OckBlbSXvWs

Let me know if you run into any issues or have other questions.

Best,
Stephen

1 Like

Thank you so much for your helpful advice! Iā€™m trying to research different solutions of creating cinematics so understanding this plugin as well as others has me quite interested!

However Iā€™m running into an issue when importing this into one of the main projects I work on. As far as I can tell, what happens is that when I import the plugin into the scene, everything seems to be fine except the plugin itself hasnā€™t actually loaded in properly or installed properly, even though it says it has on the package manager. Nothing loads into the toolbar (such as the ā€œTimeflowā€) doesnā€™t appear in any dropdown, the scripts and monobehavior functions donā€™t appear to be on any script that normally should have them, and the only error I seem to get is "Assets\AxonGenesis\Timeflow\Behaviors\Audio\AudioSpectrum.cs(390,44): error CS0117: ā€˜AudioSettingsā€™ does not contain a definition for ā€˜outputSampleRateā€™.

What could potentially be the problem? This is an older project that was brought into a newer version recently that could potentially have some older plugins that could be causing conflicts, so Iā€™ll try to provide as much information as I can. Iā€™ll be including some pictures along with this post to give you some more context, the unity version Iā€™m running off of is 2023.1.3f1. If thereā€™s other details I can include to help paint a picture for this, please let me know. Thanks again!
9162146--1274732--01.jpg

9162146--1274741--upload_2023-7-21_7-15-36.png

Found the issue! Turns out there was an already existing ā€˜AudioSettingsā€™ script that was causing the plugin confusion when importing. Deleted it and everything was fixed.

Is this referring to only Unity packages that pertain to Timelines? What about something thatā€™s separate from that and itā€™s own alternative to Timelines such as Slate Cinematic Sequencer? Am I able to use the workflow of that package with Timeflow? Iā€™m in the process of researching both and Iā€™m curious about the differences between the two.

It should work without conflicting with any Unity or 3rd party packages, as long the code is namespaced. All code in the AxonGenesis directory (except for a few special exceptions) uses the AxonGenesis namespace.

It sounds like the script defining AudioSettings was not in a namespace and therefore was causing ambiguity with the built-in definition of AudioSettings. The solution for now would be to add a namespace to any custom scripts.

This behavior will be improved in the next update Timeflow v1.1.0 coming soon. Iā€™ve added an assembly definition which encapsulates the code to prevent conflicts with any scripts defined in the main assemblies. It allows external scripts to reference Timeflow, while Timeflow scripts only reference the specific assemblies it depends on.

2 Likes

Timeflow v1.1.0 Released!
Jul 27, 2023

UPDATE NOTICE: Please remove the previous version of Timeflow before installing this update to ensure a clean install, as file names and structures have changed. Backing up your project before modification is advised.

  • If you previously installed MidiJack, please remove it from your project and import the included AddOns/MidiJack package instead, which has some minor changes to improve integration.

Improvements

  • An Assembly Definition has been added to speed up compilation and improve package compatibility.
  • The Player Scripting Define Symbols USING_URP and USING_HDRP are no longer required and may be removed from Player Settings, since this is now handled automatically by the assembly definition.
  • The MidiJack plugin has been included in Timeflow/AddOns as a separate package. The MIDIJACK scripting define symbol is still required to use this add-on. Please note that MidiJack is included under the license terms provided on GitHub: GitHub - keijiro/MidiJack: MIDI input plugin for Unity
  • Revised usage of public, private, protected, and internal keywords to improve code clarity and reduce complexity for integration.
  • Sealed all classes which should not be derived from for improved performance.
  • Optimized calls to set shader globals using IDs instead of strings.
  • Optimized use of Camera.main
  • Optimized update call behavior for significant improvements to runtime speed.

New Features

  • Added support for animating Rigidbody2D MovePosition, MoveRotation, and AddForce.2D and 3D rigidbodies are supported by Keyframer, Follow, Noise, and PlaceOnSurface.
  • Hold the Alt key while dragging the vertical dividers for the Values and Offsets columns to move them independently, preserving the layout positions of the other panels.
  • AudioClips can now be dragged and dropped from the Project view into the Timeflow view, automatically setting up a new game object with the necessary components.
  • Flyby channels can now be duplicated to other objects (including Velocity and Rotation channels if in use) by dragging and dropping the channel in Timeflow.

Bug Fixes

  • Fixed null reference and GUIClip errors after recompiling scripts.
  • Timeflow Demo App: Fixed audio feedback with live microphone input for audio reactive demo.
  • Fixed calculation error with musical measures notation affecting accuracy of display.
  • Fixed object selection order when using the up and down arrow keys in the object display list.
  • Fixed darker rendering with VR 360 format due to gamma

Hey Axon,
I just wanted to bring to your attention that update v1.1.0 may have broken Webgl builds, as after updating from v1.0.2 Iā€™ve noticed that I get the compile error ā€œā€˜AudioSpectrum._WaitForDevice()ā€™: not all code paths return a valueā€. This happens on both the project that Iā€™ve been working from as well as completely empty projects. Switching back to Windows, Mac, Linux builds fixes this error.

1 Like

Thanks for reporting it! Iā€™ll be posting a minor update soon to fix this and a few other issues. In the meantime, you can grab this package here to fix the AudioSpectrum error.
https://www.dropbox.com/s/5knst1q69158voj/TimeflowPatch_v1.1.1a.unitypackage?dl=0

1 Like