Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

[RELEASED] Timeflow Animation System for Unity

Discussion in 'Assets and Asset Store' started by AxonGenesis, May 25, 2023.

  1. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    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: https://axongenesis.com/timeflowdemo/

    Now available in the Unity Asset Store!
    https://u3d.as/31KB

    Comprehensive online documentation:
    http://axongenesis.gitbook.io/timeflow

    Excellent tutorial videos to help you get started immediately:
    https://youtube.com/playlist?list=PLj9iuW_W4QL8EDGGs0pZPoEzNdtk_J_mS
     
    Last edited: May 25, 2023
  2. CodeSmile

    CodeSmile

    Joined:
    Apr 10, 2014
    Posts:
    5,508
    This looks awesome! :)

    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? ;)
     
  3. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    Yes, that is a critical part I suppose! ;) 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.
    https://u3d.as/31KB
     
    CodeSmile likes this.
  4. MikeChr

    MikeChr

    Joined:
    Feb 2, 2018
    Posts:
    43
    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!
     
  5. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    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.
     
    MikeChr likes this.
  6. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    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

    Code (CSharp):
    1. // Copyright 2023 Axon Genesis. All rights reserved.
    2. // AxonGenesis.com
    3. // THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
    4. // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    5. // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
    6. // PARTICULAR PURPOSE.
    7.  
    8. using System.IO;
    9. using UnityEditor;
    10. using UnityEngine;
    11.  
    12. namespace AxonGenesis
    13. {
    14.     public class MidiAssetPostprocessor : AssetPostprocessor
    15.     {
    16.         static string[] extensions = new string[] { "mid", "midi" };
    17.  
    18.         private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromPath)
    19.         {
    20.             foreach (string assetPath in importedAssets) {
    21.                 bool convert = false;
    22.                 string path = assetPath.ToLower();
    23.                 foreach (string ext in extensions) {
    24.                     if (path.EndsWith("." + ext)) {
    25.                         convert = true;
    26.                         break;
    27.                     }
    28.                 }
    29.  
    30.                 if (convert) {
    31.                     if (!File.Exists(assetPath)) {
    32.                         continue;
    33.                     }
    34.  
    35.                     string destFile = Path.GetDirectoryName(assetPath) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(assetPath) + ".bytes";
    36.                     Debug.Log("Converted " + path + " to .bytes:"+destFile);
    37.                     File.Move(assetPath, destFile);
    38.                     AssetDatabase.ImportAsset(destFile);
    39.                 }
    40.             }
    41.         }
    42.     }
    43. }
    44.  
     
  7. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    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).
     
  8. MikeChr

    MikeChr

    Joined:
    Feb 2, 2018
    Posts:
    43
    Thanks for your attention and help. I am impressed by the quality of videos you have released on YouTube.
     
    AxonGenesis likes this.
  9. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    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
    https://axongenesis.gitbook.io/timeflow/reference/version-history
     
    MikeChr and adamgolden like this.
  10. PlayBoxTech

    PlayBoxTech

    Joined:
    Mar 19, 2018
    Posts:
    11
    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.
     
  11. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    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:
    https://axongenesis.gitbook.io/timeflow/reference/examples/animator-blend-trees

    Animation Clips:
    https://axongenesis.gitbook.io/timeflow/reference/examples/animation-clips

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

    Best regards,
    Stephen
     
  12. acMacav

    acMacav

    Joined:
    Apr 1, 2018
    Posts:
    12
    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!
     
    AxonGenesis likes this.
  13. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    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:


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

    Best,
    Stephen
     
    acMacav likes this.
  14. acMacav

    acMacav

    Joined:
    Apr 1, 2018
    Posts:
    12
    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!
    01.jpg

    02.jpg

    upload_2023-7-21_7-14-51.png

    upload_2023-7-21_7-15-36.png
     
  15. acMacav

    acMacav

    Joined:
    Apr 1, 2018
    Posts:
    12
    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.
     
  16. acMacav

    acMacav

    Joined:
    Apr 1, 2018
    Posts:
    12
    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.
     
  17. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    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.
     
    Last edited: Jul 26, 2023
    acMacav likes this.
  18. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    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: https://github.com/keijiro/MidiJack
    • 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
     
  19. acMacav

    acMacav

    Joined:
    Apr 1, 2018
    Posts:
    12
    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.
    upload_2023-8-5_13-2-34.png
     
    AxonGenesis likes this.
  20. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    acMacav likes this.
  21. cpkcpk

    cpkcpk

    Joined:
    Dec 13, 2019
    Posts:
    48
    Hey, just found Timeflow and it looks amazing! Is it possible to render stereoscopic 360 PNG image sequences with transparency in HDRP/URP? Unity Recorder still doesn't support this in SRPs, and every other asset I've tried has issues.

    Unity Recorder has an "Include Alpha" checkbox for this when PNG is selected, but stereo only works in built-in pipeline.

    Thanks!
     
    Last edited: Aug 6, 2023
    AxonGenesis likes this.
  22. DragonCoder

    DragonCoder

    Joined:
    Jul 3, 2015
    Posts:
    1,677
    Fascinating stuff!
    Wonder, can the Timeline editor be shown and used ingame too by any chance?
     
    AxonGenesis likes this.
  23. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    Yes! With the right settings it is possible to render VR360 stereoscopic with alpha channel, in both URP and HDRP.

    Here are some example renders:
    https://axongenesis.com/images/forum/Timeflow_URP_V360_Stereo_Alpha.png
    https://axongenesis.com/images/forum/Timeflow_HDRP_V360_Stereo_Alpha.png

    One caveat is that you cannot use post processing with this setup.

    For both URP and HDRP, double check that the render textures are set to R8G8B8A8_UNORM.

    To configure the render scene, both left and right cameras need to be set with Background Type as Solid Color (or "Color" in HDRP), black with 0 alpha.

     
    cpkcpk likes this.
  24. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    Great question! The answer is no, unfortunately. The editor UI and functionality is highly dependent on the Unity editor.

    While there is a fair amount of functionality at runtime to control playback and manage objects, most editing features are editor-only and excluded from builds to optimize runtime for playback.
     
    DragonCoder likes this.
  25. cpkcpk

    cpkcpk

    Joined:
    Dec 13, 2019
    Posts:
    48
    Thanks for getting back to me, sounds great! I've been struggling for years to get 360 stereoscopic out of HDRP for compositing purposes.

    Yep I imagined post processing wouldn't work with this setup. I assume you would use a default HDRP sky, and a volume with overrides for fixed exposure, and turning off bloom, vignette, chromatic aberration etc? This is how I set it up with the VR Panorama 360 asset, but the cubemap seams are still very noticeable.
     
    AxonGenesis likes this.
  26. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    The best solution I've found so far, and the current setup used in the examples, is to apply post processing as a second render pass. It all happens during the same render frame and is about as fast as normal, but does require more memory. The first pass renders the stereoscopic image to an equirectangular render texture (without any post processing) and then a separate camera with post processing renders an image plane mapped with the render texture. Layers are used to separate each camera pass.

    This setup also requires a render texture with the format R32G32B32A32_SFLOAT to preserve HDR so that bloom and other post processing filters work. Of course, any post processing filters that require depth won't work.

    I've found that I can get perfectly seamless renders by disabling post processing for the cubemap camera and avoiding the use of any shaders or 3rd party tools which don't work with cubemap and/or stereo rendering. I test these things early on as I'm building a scene to make sure there are no issues.
     
    Last edited: Aug 7, 2023
    cpkcpk likes this.
  27. acMacav

    acMacav

    Joined:
    Apr 1, 2018
    Posts:
    12
    Thanks for helping me out so quickly on that Webgl issue Axon! I've been using Timeflow for a bit now and it's very useful for being able to create detailed animations in such a shorter amount of time than I'm used to in Unity!

    However I had a question about cutscenes. We have a game that is dependent on many small cutscenes within a single Unity Scene (about 60 in total with about 10 per scene). We'd like to use Timeflow for many of these. How would you recommend setting up a Scene hierarchy to handle this?

    upload_2023-8-15_10-25-51.png

    This is the hierarchy one of our scenes follows, with each cutscene and their assets/content being under the main "Cutscenes" gameobject. We're more than willing to structure our hierarchy to make this work, we're just curious to know what we would need to do to work with multiple cutscenes.
     
    AxonGenesis likes this.
  28. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    Glad to help!

    Great question! There are special considerations when working with multiple cutscenes in the same scene.

    The scene hierarchy doesn't matter so much if you are only using one Timeflow. However, it is generally recommended to place Timeflow on a parent group above all animated objects. This is because each TimeflowObject (per GameObject) can only belong to a single Timeflow instance, which it determines by looking up the hierarchy, or defaulting to the first active Timeflow if none is found in the hierarchy above it.

    If there are objects animated with Timeflow which always remain animated regardless of cutscenes, then these could be in a separate instance.

    For cutscenes, I recommend using one Timeflow and separating each cutscene in time using markers. Each marker region would need to be set up with adequate time and probably some extra padding to provide flexibility for later adjustment. So you would end up with a sequence of cutscenes ordered one after the other with some extra time padding between them. The markers then would be a list of all of the cutscenes. To play each one you would simply jump to and play the related marker region.

    Essentially, when Timeflow is playing it takes over the game objects for cutscene playback, and when stopped it relinquishes control back to gameplay. Only the properties animated are affected. In some cases, smooth transitions can be animated into and out of each cutscene, for example to smoothly move objects or the camera to a specific position.

    During cutscenes it may also be a good idea to disable the relevant user input to avoid conflicts. Most games I have played do this and give the player the ability to skip the cutscene by pressing a button.

    This workflow is something I intend to improve. In my past projects I used a state machine to control Timeflow based on the game state. I often used one Timeflow continually playing for environment animations and background music, and another Timeflow for animating scene objects with transitions in and out of gameplay.

    That code is not production ready and needs to be rebuilt, however I would like to help you further by providing a simplified solution to use in the interim. I will follow up here shortly with a script and example which you can use with Unity events or via scripting to easily integrate with your own setup.

    If you have any other questions or want me to clarify anything, let me know!
     
    acMacav likes this.
  29. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    Hi @acMacav

    As promised, here is a controller script and example scene. This depends on the Timeflow example assets using URP and includes some scripts for basic gameplay. This will all be included in the next update and I may refine it some more, but in the meantime please import this package (for use with Timeflow 1.1.0).
    https://www.dropbox.com/scl/fi/san9...ypackage?rlkey=fvdc6fqww3jo17b1orgiz8a3b&dl=0

    I plan to make a video walking through this example and will share it when ready. Until then, hopefully you are able to look through the scene and understand what is going on so you can get things going in your project.

    To test it, open the Cutscenes scene and enter play mode. Use the WASD keys to move the player (blue capsule) to any of the the 3 colored pads. As soon as the player touches one, it triggers the corresponding cutscene animation. Additional logic is also performed by Unity Events configured in the editor.

    upload_2023-8-15_17-33-31.png

    All of the cutscenes are animated with the same instance of Timeflow, separated by marker regions. Each region is defined by a start and end marker, with extra time padding between them. The padding is a bit overkill in this example, but I thought it would be useful as a starting point.

    upload_2023-8-15_17-33-46.png

    With this setup it is easy to preview and edit animations in edit mode. Double-clicking on a marker sets the work area and frames the region in time. You can also use the arrow icons in the upper right to step through markers.
    upload_2023-8-15_17-40-10.png

    The TimeflowController script provides a useful interface to manage the playback of Timeflow and uses Unity Events to setup custom logic without additional coding, though it can certainly be used via script too. In the screenshot below, you can see that the SkipButton UI element is shown or hidden based on whether a cutscene is playing. Pressing the Skip button causes the time to fast forward to the end of the cutscene with an optional outro time (Skip Duration).
    upload_2023-8-15_17-36-22.png
    You'll also notice that the events in the above screenshot also enable/disable the player input controller, so that the player cannot move while the cutscene is playing.

    Each of the pads has a trigger collider and a simple TriggerEvent script which uses Unity Events to notify the TimeflowController. The OneShot mode is best suited for a cutscene and means that the marker region plays just once through and when it reaches the end playback stops automatically.

    upload_2023-8-15_17-43-40.png

    For the Player object, I setup a Follow behavior which is animated in each cutscene to reposition the player at the designated positions with a transition controlled by Follow.OverallBlend in a keyframe channel. When the blend value is at 0 the Follow behavior has no effect, and at a value of 1 it is fully on target. Animating the blend value form 0 to 1 transitions the player from wherever it is in the scene to the desired location.

    There are of course many things that could be improved, but hopefully this gives you a decent starting point. I'd love any feedback and any ideas to make it easier and/or more robust. I plan on creating a more sophisticated cutscene manager in the future.

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

    P.S. You may have to go to Preferences>Timeflow to enable Expose All Properties as I noticed that the Follow behavior was not being listed in the context menu when adding a new animation channel (making its parameters inaccessible). This will be fixed in the next update.

    Best,
    Axon
     
    Last edited: Aug 16, 2023
    acMacav likes this.
  30. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    acMacav likes this.
  31. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    Timeflow v1.3.0 is now available!
    https://assetstore.unity.com/packages/tools/animation/timeflow-animation-system-247895

    Release Notes:
    UPDATE NOTICE: Please remove the previous version of Timeflow before installing this update to ensure a clean install, as file names and structures may have changed.

    Examples by default use the built-in render pipeline. Additional packages are included for URP and HDRP.

    New Features
    • Render To Disk:
      • Fully revamped!
      • Optimized render speed with much faster render times!
      • Use RenderToDisk to render any scene even when not using Timeflow.
      • Video encoding is now supported!
        • Encodings automatically run in the background using ffmpeg.
        • Fully customizable settings for any encoding type using scriptable objects.
        • Queue any number of renders and encodings to be processed in order.
      • Stereoscopic rendering is now supported for all render modes.
      • Implemented post processing for VR180 and fulldome stereoscopic modes with examples included.
      • Revamped all examples in Timeflow/Examples/Scenes/Rendering.
      • All render setups now have camera rig prefabs that can easily be added to any scene.
      • Rendering now automatically sets the game view to the correct size and scale.
      • Added drop down menu with common render sizes for quick setup.
      • Replaced TextMeshPro overlay options with property mappings for use with any display type.
      • Directory paths can now be defined using the wildcards $PROJECT or $ASSETS to create paths relative to the current Unity project, or $CUSTOM to define your own path in the Timeflow Preferences.
    • Realtime fulldome and fisheye camera rigs are now included as prefabs
    • Optimized Behaviors: Added updating option to only update when Timeflow is playing (instead of always updating).
    Fixes
    • RenderToDisk:
      • Fulldome Shader: Fixed alpha values rendered in soft edge mask.
      • Improved fulldome rendering by reducing texture memory allocation.
      • Improved render quality with reduced banding by setting all render textures to float space.
      • Fixed Cubemap Faces mask dropdown menu to select which directions are rendered.
      • Improved inspector GUI layout and information display.
      • Automatically sets Game View scale to avoid scaling issues with renders.
      • Fixed render Pause button.
      • Fixed estimated completion time displayed in console log.
    • Timeflow View:
      • Fixed null reference errors in Timeflow view when the only active instance is deactivated.
      • Fixed issue with keyframes set to linear not being draggable in the graph view.
      • Fixed channel loop state not being saved when set on prefab objects.
      • Fixed bug with TimeflowObject component being added to prefabs when opened to edit.
    • Visual Effect Graph: Fixed missing int and bool property mappings.
    • Fixed initialization issue with objects outside of Timeflow hierarchy not updating in editor upon scene opening.
    • Renamed AxonGenesis assembly definition to Timeflow and moved it in the Timeflow folder.
     
    acMacav likes this.
  32. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    Timeflow v1.3.1 is now available!
    https://assetstore.unity.com/packages/tools/animation/timeflow-animation-system-247895

    Release Notes:

    New Features
    • Render To Disk:
      • Added EXR and TGA image formats for render output.
      • Added HDR option to use floating point render textures for output (supported by EXR).
      • Added Stop and Stop All buttons when encoding videos to kill current or all processes. This will abort the encoding in progress.
    Fixes
    • Render To Disk:
      • Removed the Dome Resolution option since the render textures and output size determine the final resolution (use any supported by your graphics card)
      • Fixed Cubemap Faces drop down - was only showing for stereoscopic setups
      • Fixed Metadata field - was not allowing direct input when Auto checkbox is off.
     
    acMacav likes this.
  33. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    1.4.0 Released!
    https://u3d.as/31KB

    New Features
    • Timeflow Context Menu:
      • Added options to set keyframe tangents Linear Left and Linear Right.
    • RenderToDisk:
      • Time ranges can now be set with multiple options including markers, seconds, and more.
      • Increased fulldome tilt range from 0 to 360 degrees.
      • Game view size is only set if the component is enabled and active in the hierarchy.
      • Added filename prefix and option to use scene name.
      • Added Edit Mode Resolution to reduce the resolution of the game view when not rendering.
      • Added ability to chain RenderToDisk instances to render multiple setups in the same scene, by assigning the Render Next field.
    Fixes
    • Render To Disk:
      • Fixed memory leak when using Screen Capture mode - image buffer was not being disposed of properly resulting in eventual crash.
      • Fixed bug with starting frame numbers being offset by 1.
    • TimeValue:
      • Changed name of timing mode ‘Never’ to ‘End’ (used for repeating operations such as Tween).
      • Added ‘Frames’ mode to enter specific frame numbers.
      • Fixed modes ‘Object Start’ and ‘Object End’ to save TimeflowObject reference.
    • Delete Time Global:
      • Fixed bug with marker times being adjusted incorrectly.
    • Channel Links:
      • Links now re-enable when selecting a link mode other than ‘Off’.
     
  34. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    1.4.1 Released!
    https://u3d.as/31KB

    New Features
    • RenderToDisk:
      • Added ‘Perfect Loop’ option which skips rendering the last frame for perfect loop animations to prevent rendering duplicate frames (when the first frame matches the last frame).
      • Added button ‘Abort After Current Render’ to stop rendering after the current range finishes. This also stops the RenderQueue from continuing. Use this to interrupt a render while allowing the current range to finish.

    Fixes
    • Fixed potential stack overflow when re-initializing Timeflow in edit mode.
    • Fixed a memory leak with internal object lists.
    • Fixed issue with irregular update potentially causing jitter in edit mode playback.
    • Fixed crash that occurs entering play mode on a demo app scene. A warning is displayed in the console if the demo app scenes have not been configured properly.
    • Render To Disk:
      • Fixed bug with disabled render range still rendering if it is first in the range.
      • Fixed repeated ‘Render Queue Finished’ log entries when waiting for video encodings at end of render.
    • Animation Clips:
      • Channel value is now properly displayed in the values column.
    • Motion Path:
      • Fixed Velocity channel calculation and output value.
     
    acMacav and adamgolden like this.
  35. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    1.4.3 Released!
    https://u3d.as/31KB

    New Features
    • Command key (instead of Control) can now be used on macOS for Timeflow window shortcuts.
    • Added preference 'Scroll Time Without Alt Key' to allow scrolling the time view without the scroll wheel alone.
    • Added MidiCloner, and experimental feature for cloning prefabs based on MIDI channel data.
     
  36. AxonGenesis

    AxonGenesis

    Joined:
    Jun 24, 2016
    Posts:
    84
    1.4.4 Released!
    https://u3d.as/31KB

    Fixes
    • Fixed a bug causing the info panel and display list to disappear when clicking the foldout icon.
    New Features
    • Added an example scene 'AudioToKeyframes' showing how to convert audio amplitude to keyframes using Audio Sample and channel link.