Timeline
Hey AB. I have another question. If I had 2 anims ( say anim A and anim B ) that play in sequence, between each other. So, A->B->A->B and so on. IS there any way to randomize the length of the anims? So A might play for 2 seconds and then B for 1 second and then A again for 0.5 seconds and the B again for 1.4 seconds etc - you get the idea? I tried randomizing the speed, but its actually the blend time that determines how long an anim plays before switching to the next. And it doesn't seem like that value is exposed for each anim. Do you know if this can be done - or if there's another plugin I can use in a combination that could do it?

Thanks
 
Hey @Acid Bubbles
I was using Timeline in conjunction with the MVR FloatParamRandomizer plugin and noticed something peculiar. It seems all animations persist in the randomizer target list, even if they are deleted/renamed. I noticed this when I created a new anim in Timeline - which defaulted to the name 'Anim 1'. I renamed this to 'leg sway' and then added the randomizer to apply some variance to the anim speed. But in the randomizers Target dropdown, both 'Anim 1' and 'leg sway' were in the list.

As you can imagine, this could get quite messy if lots of animations are created and renamed. Is this an issue with Timeline, or the Randomizer?
 
Thanks! It was supposed to be working, but it was not :) I fixed it and will release the fix as part of Timeline 4 (or earlier if I have other fixes to release, when loading your scenes rogue triggers will be gone!)
 
Good to know a fix is on the way. Thanks!

I have another question: Is there any plan to expose the 'Next blend after seconds' parameter? It would be really helpful if this value could be randomized. As it stands, if I'm switching between 2 looped anims, the time between each transition is locked down by that parameter. If it could be randomized, it could really help in making things seem a bit less robotic with much more variance.

An example would be: say I have 2 simple looping anims. Each is an anim of a girl rubbing her breast in a different way. If I could randomize the above parameter, it would create enough variance to make it look more natural, then it would if it were simply switching from one to the other every 3 seconds.

Make sense?

To add... I am currently simulating the above using JayJayWons ActRandomizer plugin, which *almost* works. That plugin only seems to use the BlendDuration of the last selected anim in Timeline, unfortunately. So if the anims it's selecting from all have a different BlendDuration - its a no go.

EDIT

I have been playing around with this some more. I wanted to see if the BlendDuration issue above was exclusive to the ActRandomizer plugin. It turns out it's not.

Here's a little test:-
  • Add a cube to the scene with Timeline added to it
  • Create 2 looping anims within the same layer: anim1 and anim2. 1 moves up and down. 2 moves left and right. Each with a BlendDuration of 1s.
  • Add two button triggers to the scene, one to play anim1 and the other to play anim2.
Up to this point, everything working. Pressing the buttons triggers the anims and they transition nicely over 1s.

I add another animation layer and create anim3. This anim I give a BlendDuration of 0.1s. Now, when I click on the 2 trigger buttons, anims 1 & 2 play but the transition is 0.1s.

So it seems firing a Timeline animation using an external trigger ( button/plugin/etc ) will only ever use the BlendDuration defined in whichever animation is currently selected in Timeline - and will ignore the BlendDuration of the animation that is actually playing.

Sorry for the wall of text! I figured you would want to know the above?! I think allowing Timeline to work properly with external triggers would go a long way to helping me work past my initial query all the way at the top of this message!
 
Last edited:
@fishcakes I _mostly_ understand :D What you're doing with ActRandomizer is similar to what I'd like to eventually do with a "Clip Sequencer", i.e. manage all animations and transitions. But what you're describing really sounds like a bug :D Thanks for explaining it in details, it's helpful.

This being said, before I just fix the problem, I'm curious about how _you_ would like blend duration to work? Currently it's a "blend out" setting, would it make more sense for it to be a "blend in" time instead? I feel like it would make much more sense. That would be a breaking change though.
 
@Acid Bubbles That's a tricky question! There's no way of knowing whether a blend_in or blend_out would work best as it depends entirely on the animation. Sometimes an anim is designed in a way that controlling its blend_out time would be good. But other types of anim would suit a blend_in. I don't think there's a catch-all answer.

Having said that, like you, my feeling is that a blend_in would suit more scenarios than a blend_out, if you had to choose one over the other. But that would be a disaster for all the existing scenes that already use Timeline.:(

I would suggest keeping the blend_out for now, as so many creators are used to it this way and it doesn't seem to stop us from creating some cool stuff. But if you could look into fixing the issue where anims fired via an external source will use the BlendDuration of the anim currently playing ( not the anim currently selected in the UI ), as I outlined above. That would be awesome!

Also, to go back to my original query, is it possible to expose 'Next blend after seconds' as a storable that can be manipulated externally?
 
Well, if it's broken and just use whatever's configured in the "current" animation, I guess it wouldn't be that bad a breaking change... Maybe for Timeline 4. As for the "next blend" storable, I'm not sure. I understand what you're trying to do and it makes sense, I'm just thinking that instead of customizing next blend, I could implement blend randomize (that's actually very simple) or add a "Play *" storable (as well as a "Play Prefix/*" storable) and have a "master" that decide how to sequence stuff, e.g. using a "master" timeline. I have many requests regarding sequencing and I'd like to avoid making a mess of it by having tons of triggers. Would randomize work for you?
 
That sounds feasible. In a nutshell, anything that allows me to randomize the time it takes for the next anim in the sequence to trigger would be great - however you might choose to do it. :)

One more thing to consider is how non-looping anims work and the relationship between speed and next blend. Currently, the speed can be changed but the next blend time is locked down - so this limits the possibility of using speed on these types of anim. An anim might be 2 seconds long with a next blend time of 1.5 seconds - but if the speed is increased to 2.0, the anim will finish before the next blend time is reached. Ive been thinking that ( for non-looping anims ) next blend might work better as a percentage of total anim time rather than an absolute time. so we could say the next blend happens when the anim is 75% complete. This way changing the speed will not affect which point the animation switches to the next.

The above is just a thought and not so critical. But still, worth thinking about.
 
Last edited:
I consider the blend time not being adjusted against the speed to be a bug, actually. I just didn't get to it yet (My time to actually work on Timeline these days is pretty much minutes per day, sometimes an hour if I'm very lucky, but with no brain juice left from my day so things tend to take more time than they should! But for what it's worth, I appreciate feedback, positive or negative, as long as it's constructive.

So, my plan: add the next animation time range option (randomize), adjust blend time and next animation time against speed, and use blend "in" instead of blend "out" and use that to solve the "only the current animation blend time is being considered". I'll try to include this all in Timeline 4, I'm "very" close from being done with it. Note that very still means days though.
 
Excellent. I really appreciate you taking the time to consider my feedback. It sounds like everything you propose will sort out any issues I had.

Out of curiosity - do you have much contact with MvR? I'm wondering what bearing VaM 2.0 will have on Timeline. I know 2.0 will have a new animation system, but beyond that, there's little information. Do you foresee a need for Timeline with 2.0 and beyond?
 
I don't have any special status in the VaM community, so everything is pure speculation. Most of Timeline is VaM-independent, except for the existence of "free controllers", float params / morphs storable model, and the UI model. When VaM 2.0 is out, there will be a _ton_ of work to build everything that was made up to now, so I'd be very surprised if there was full tooling for animation day 1. What's possible is that there will be some vam-level animation facilities and structures that we can use, and certainly something like Timeline will have a lot of re-engineering (if it still has it's place). So, we'll see! But I think _animations_ is something desirable to have in the future, so regardless of whether Timeline is used in part or not in that ecosystem, _something_ will have it's place.
 
Cool. I appreciate your thoughts.

Before I leave you alone for a while ( I promise! ) I have a question regards trigger tracks. It seems a trigger cant be fired on the first frame of the track ( by the same token, the last frame also ). I can only get a trigger to fire after the first frame. Is this by design? If so, what's the reason?
 
No worries, I appreciate having other brains on this :D Trigger tracks are activated even though the animation is not playing. This was a puzzle since you usually want scrubbing to "work" (i.e. play sounds, things like that) but if they would activate on every scrub (i.e. on every play too) it would play the sound of the start trigger at _every frame_. So I chose the approach of "if the current frame is within this trigger, the start will only activate when entering". That's much less surprising when using it, but like you have seen it makes "first activation" weird. My other idea was to disable triggers when scrubbing altogether, which would be a shame but would make the "activate when playing" work. Triggers activate whenever they are within the start/end range, which means playing from the middle of a trigger sequence will do the "start" event. Anyway that's how VaM works (I'm using the built-in trigger engine). Otherwise I'd have to build something custom :|
 
Right... yeah. I understand. Tricky to deal with for sure. Its not a massive deal as I can always fire a trigger 0.1s into the anim - which isn't really perceivable to the eye/ear.

Ive actually been using trigger tracks as master sequencing tracks - mainly to circumvent the "next blend" issue we talked about earlier. By using the trigger track as a master track, to fire animations in sequence, I can change the speed of said master track which gives the same results as changing the "next blend" values for the anims triggered. So, firing the first anim on the first frame of the trigger track was something I was trying to do and couldn't. But as per your explanation, I can see why that's the case.
 
I plan on looking at this problem again in Timeline 4, but right now I still have the same issue. One option that I'm contemplating is activate a "scrub mode" when scrubbing, active for like 1s, and when scrub mode finishes, triggers would deactivate. So any sound on "end" would play at weird times, but otherwise play and scrub would behave better. But yeah, I'd _really_ like to use built-in triggers as there's a lot of work in re-implementing that (and the UI)...
 
@Fedexguy usually if you have multiple versions it's fine. Scenes will use the version they were created with, new scenes and scenes for which the version cannot be found will use the latest. I try very hard to keep things backward compatible, though I'm human and might break a thing or two once in a while :D
 
Hello, apologies for what is probably a newb question. I'm trying to import one timeline animation into another (in this case the Hannah into the idle moves) so I can make sort of a master animations list in one place. As I understand it, new animations that cannot run simultaneously should be imported as new animations within the same layer. If that's correct, that makes sense, but when I create a new animation with no targets and attempt to import I get the error that the targets are in use elsewhere in the animation, and if I try to add the targets manually within the same layer the same targets don't show up (presumably because they're in use elsewhere). So I'm a little at a loss as to the correct way to do compilations of animations within a single instance of timeline. Using 178 here.

Thanks for any direction.
 
Hi @AlienMisery ! No worries, I understand the confusion (I didn't find a way yet to make it both flexible and clear).

In short, a layer = a set of targets. A layer "contains" multiple animations. For example, the "hands" layer could contain hand positions and finger position float params. Another layer could contain head position and facial expressions.

So if you export an animation containing the targets for hands and head, and try to import it in the one described higher, you'd have a conflict. I cannot load it in either layer! So there's the error.

Long story short, to import an animation, it has to "fit" with the layers structure. It'll automatically add missing targets as long as they're not "reserved" already by another layer.

Hope that makes sense! This would not be an issue if there was yet another "layer" over layers, but at this point it would require more work than I can afford to make it understandable in the UI. Maybe for a Timeline 5, given a capable clip sequencer.
 
Thanks for your response Acid Bubbles, really appreciate it.

If I'm understanding, this is specifically an issue with importing additional completed animations into an existing plugin instance where those targets re already in use, and theres no way to bulk import a new complete animation. I could, however, build new animations using the same targets from scratch, which appears to be the case for the idles import - wherein multiple distinct animations within the same layer are using the same targets. Am I right there?

Again thanks for the awesome tools.


Hi @AlienMisery ! No worries, I understand the confusion (I didn't find a way yet to make it both flexible and clear).

In short, a layer = a set of targets. A layer "contains" multiple animations. For example, the "hands" layer could contain hand positions and finger position float params. Another layer could contain head position and facial expressions.

So if you export an animation containing the targets for hands and head, and try to import it in the one described higher, you'd have a conflict. I cannot load it in either layer! So there's the error.

Long story short, to import an animation, it has to "fit" with the layers structure. It'll automatically add missing targets as long as they're not "reserved" already by another layer.

Hope that makes sense! This would not be an issue if there was yet another "layer" over layers, but at this point it would require more work than I can afford to make it understandable in the UI. Maybe for a Timeline 5, given a capable clip sequencer.
 
Hi, thanks for this awesome plugin and the other resource contributions and community support!

A question - currently to 'start' the animation timeline and make it active in a scene, I have to use a ui button with action to 'play if not playing'. I would like it to simply start/play with the scene load/open, without having to depend on the user to press(or miss pressing) an initial ui button. What would you recommend to fix? Is there a way to add initial actions on scene load similar to a ui button press or something in the timeline plugin settings, etc?

Thanks
 
@thx1138 there's an autoplay option which should play when loading the scene. Unless it's not working anymore? (Can't validate right now). Otherwise in general you can make a non-looping animation pattern with triggers on start, that should be very reliable (if auto play doesn't work).

And thanks a lot for the nice words :D
 
Thanks for the tip, found the 'autoplay on load' under the timeline anim Edit button and works great.
 
Back
Top Bottom