Timeline
@vamurai With audio sync?? My first theory would be that it's because the audio takes some time to load, but the audio timer should still be fine, unless I misunderstood how Unity works... that would also explain why it works the second time. To be honest I'm very confused about this too. I need to review the timing of Timeline again (for the 5th time) I guess... Also, there's only one animation, right? Or are there other? Also I'm thinking _maybe_ it has something to do with FPS somehow, though the whole point of audio link is to be fps-independent. However, it could be that while Timeline plays at the right speed, the physics can't keep up so you get late movement. Could that be it? It would work when scrubbing because you start with physics already in the right place. Those are all theories though, that's the fun of fully dynamic, physics-based animation :| If you're willing and have some time (because recently I really don't, I've been trying to release Scripter and Keybindings for more than a week and I can't find the time to just open VaM and test it) you could add something like a cube and animate the alpha in sync, see if the cube and the hand are in sync. If they are, then it's Timeline. If not, then it's physics. (or animate the light, etc. as long as it's clearly visible).

My timing tests consisted of a beep every second in a long audio, and a flash every second in Timeline, and a log showing both the Audio Clip time and the Timeline time, and everything looked in sync, but there are many variables I might have missed.
 
@vamurai With audio sync?? My first theory would be that it's because the audio takes some time to load, but the audio timer should still be fine, unless I misunderstood how Unity works... that would also explain why it works the second time. To be honest I'm very confused about this too. I need to review the timing of Timeline again (for the 5th time) I guess... Also, there's only one animation, right? Or are there other? Also I'm thinking _maybe_ it has something to do with FPS somehow, though the whole point of audio link is to be fps-independent. However, it could be that while Timeline plays at the right speed, the physics can't keep up so you get late movement. Could that be it? It would work when scrubbing because you start with physics already in the right place. Those are all theories though, that's the fun of fully dynamic, physics-based animation :| If you're willing and have some time (because recently I really don't, I've been trying to release Scripter and Keybindings for more than a week and I can't find the time to just open VaM and test it) you could add something like a cube and animate the alpha in sync, see if the cube and the hand are in sync. If they are, then it's Timeline. If not, then it's physics. (or animate the light, etc. as long as it's clearly visible).

My timing tests consisted of a beep every second in a long audio, and a flash every second in Timeline, and a log showing both the Audio Clip time and the Timeline time, and everything looked in sync, but there are many variables I might have missed.
No worries at all. I can attempt to run the test you describe, it's a good idea and I'd be curious to see (and will report back with) the results if I can find the time. I've got to wrap this scene up (what's the point of an elf month scene if it's not released in elf month? haha) so for now, I'll probably just drop in LFE's audiosync plugin to get me by.

To answer your question though, I do have a number of other animations running. I have two animations with the same name each running on the male and female atoms in the scene. Everything about those animations is identical (length, playback options, etc.) Then I have another timeline animation running the "ambient effects." It's running... wait a minute. I made the environment before I started animating the scene. I'll but my stupid ass has another audio sync in THAT timeline animation. :rolleyes:

I will check that and report back. Fingers crossed that I've simply just wasted your time here. :confused:
 
Darn, that didn't seem to be it. I was hopeful for a second! Regardless, I still set the ambient sound to just be enabled by a trigger, rather than syncing audio. It's just some crickets and "night in the forest" style ambience, no need to have it synced to anything.

I'll try and run a couple of experiments and see if I can get you more detail. I actually just skipped LFE's audiosync and adjusted the start of the audio file to about half a second sooner. It'll be "close enough" for this release. ;)
 
Yeah, I really didn't expect audio syncing to be that hard. This or I just missed some very obvious things. In any case if you have something to go on I'll gladly take it and investigate further. My own tests worked fine but I know from feedback there are cases where it's not fine. Thanks and sorry :D
 
Alright, I've done a buuunch of testing, and here are the results I've come up with.

This scene doesn't have a ton of necessary timing, so I am just focusing on the two earliest instances. I took your advice and added a cube with an alpha adjustment which I timed to match the movement of the person atom.

The first is the quick "double pump" from the example before. Note: I've already moved the trigger in the audio track to account for the difference I'm seeing between the scrubbed audio and its timing on playback (hoping to release this scene soon!), just so we're clear on why my earlier description is now backwards from what I'm seeing here. Here is what we see with no scrubbing, as played with my Start button trigger.



And here it is again when I use the scrubber.




Looking at the cube, it is in time with her hand movement in both instances, but the audio is off.

For me, this seems less noticeable than a later movement that has the same problem though. I don't know if this is my timing, the type of movement, or because the movement is later in the scene so it's farther off but the difference is certainly there. Here's the scene as played with the button trigger, no scrubbing.



And here it is again with scrubbing.



That's as far as I got with those tests. I have also tried some other stuff that may or may not be of assistance tracking down a solution. I tried recutting the audio in Audacity so the track length is the exact length of the animation. I did this by adding a bunch of silence before and after the actual song so I could start the audio as soon as the animation starts. Most of my scenes are this way, where the audio begins right away, and then finishes when the animation finishes.

I tried making the other long timeline instance the exact length and renaming it to the same name as the main "action" animation, so they would all play together (double-checking that the real-time playback was on for all of them.) I also tried just disabling all timeline animation except for the two main animations on the person atoms (which are both named the same, same length, etc.)

I had a weird instance where I began to think that maybe Macgruber's PostMagic was somehow involved, as I was seeing inconsistent results with a PILE of effects I have turned on. In my latest tests, the entire atom that contains PostMagic is disabled, so I don't think it's related (although, now that I think about it, there's a blurb in there somewhere about making sure it's disabled entirely by restarting VaM, so maybe I should remove it entirely, save the scene as a test, and restart VaM...)

Anyway, sorry that this post is long, just figured I'd throw out that I've tried some stuff, and I'm leaning towards it being something in Timeline right now. I don't believe I ran into this in previous versions with the audio sync, so it might be worth looking at any code changes that have happened since v274/275?
 
Last edited:
Yeah, I really didn't expect audio syncing to be that hard. This or I just missed some very obvious things. In any case if you have something to go on I'll gladly take it and investigate further. My own tests worked fine but I know from feedback there are cases where it's not fine. Thanks and sorry :D
Haha, no worries! I was writing my reply when I got the notification there was another response in this thread. I knew it was you!

Good luck tracking this down, when/if you get time to do so. I've got a good scene to keep reproducing this in, so if you need me to test things, I will do my best to find time for it. I considered trying to look for the problem in one of my other scenes, then loading v280 to see if I can reproduce it outside of this scene. Might eliminate this specific scene as being part of the issue.

Thanks for all you do! Don't worry too hard about solving this one quickly, especially if you're working on other releases. I know all too well how that pressure to get projects done feels. I've got my workaround (haha, it's eerily similar to just running the scene from the start over and over again to time audio, like I did before this killer, free feature you added!) No skin off my back, truly!
 
I have the feeling that there's a time difference that accumulates when using audio link, which is weird but by far my best explanation. And, just in case... your speed is 1.0 right? I'll have to create something like a 5 minutes audio clip of "1, 2, 3, 4.." because it's surprisingly hard to match audio and video and be sure that it's okay and not your brain playing tricks :D...
 
I have the feeling that there's a time difference that accumulates when using audio link, which is weird but by far my best explanation. And, just in case... your speed is 1.0 right? I'll have to create something like a 5 minutes audio clip of "1, 2, 3, 4.." because it's surprisingly hard to match audio and video and be sure that it's okay and not your brain playing tricks :D...

I double-checked, and yeah, it all looks to be in order. These settings are identical in both atoms. If there are other audio related settings that I'm missing (or any of these look "wrong") let me know!

1679582207513.png
1679582218267.png
1679582225917.png

1679582233921.png


I noted the "Audio Link" thing in the edit tab, which I'd never used before. I went ahead and looked at the documentation on your github page for it to see what it was about. Here's a fun little thing, I don't know if it helps or not: If I set the Audio Link to the MusicAudio atom then play the scene using a button trigger (which normally works) it's out of sync the same way that the scrubbing is. At a just an eyeball estimation, it's the same amount of "time off" (the music is delayed slightly.) This happens if I enable Audio Link and have the Audio Controller run the audio, and also if I switch off the audio controller and have the music start using a standard trigger on the Trigger controller (which is how I assume this is supposed to be used.)
 
Last edited:
Release day!

Before I started packaging everything up and getting the release ready, I decided to try a couple more tests, just to be sure. The big, obvious one was running it in VR to make sure all was cool. Lo and behold, the sync in VR is the same "delay" as when you scrub on the timeline, haha. Of COURSE it is. So I tried rolling all of the timeline versions in the scene back to 275, to see if maybe I could just mitigate that way.

The first weird thing that happened was when I reloaded the plugin to 275 on the male Atom, it worked just fine. When I tried it on the female Atom, all of her animations disappeared. Strange. So I reloaded the scene and tried a simple "reload" of the plugin, rather than replacing it. Same thing, all animations disappear. So I exported all of the animations, loaded 275, then imported them and the scene seems to work fine. Just a very strange occurrence, I think. The other atoms I have with timeline (some firelight and the ambience-controlling atom) also reload with 275 no problem.

Anyway, with 275 in there, ALL animation seems to be syncing the same way scrubbing is. When I start it with a button trigger, when I scrub, and when I view it in VR, they're all now in sync. I just have to move the music a hair and I think I'll be good to go.

Just figured I'd drop an update, in case it helps. Once this scene is released, I should have some more time to help look at the syncing issue, if you need it!
 
Last edited:
I'm so confused! :D So, what Audio Link does is actually continuously set the time of Timeline to be the same as the audio link... so it _should_ work perfectly. But you say even that doesn't :| And it works fine with 275? I think this used the "old" implementation of real time, which was notoriously broken. So.... I'm very confused. I need to make something to help diagnose that issue... like play a "beep" every second so you can _hear_ the Timeline timing. I feel like maybe it's simply because Unity's audio introduces a delay that is not counted in the play time of the audio source or something like that... I feel like this whole issue actually has nothing to do with Timeline, and is with Unity's audio: https://forum.unity.com/threads/sound-is-played-with-a-delay.541693/

Still... I'd like to figure this one out eventually.
 
I'm so confused! :D So, what Audio Link does is actually continuously set the time of Timeline to be the same as the audio link... so it _should_ work perfectly. But you say even that doesn't :| And it works fine with 275? I think this used the "old" implementation of real time, which was notoriously broken. So.... I'm very confused. I need to make something to help diagnose that issue... like play a "beep" every second so you can _hear_ the Timeline timing. I feel like maybe it's simply because Unity's audio introduces a delay that is not counted in the play time of the audio source or something like that... I feel like this whole issue actually has nothing to do with Timeline, and is with Unity's audio: https://forum.unity.com/threads/sound-is-played-with-a-delay.541693/

Still... I'd like to figure this one out eventually.
I will get cracking on it. My new scene is up, so I'll dedicate some time to doing some real tests for it. Timeline is my whole world, so I'm willing to do whatever I can to lend a hand to make it the best it can be!
 
Hey AcidBubbles,
thanks for this crucial plugin. I'm starting to fiddle around with it and it's awesome! But i encounterd two downsides I'd love to have:
1. Is it possible to start a random animation from a segment by trigger? And i mean not by transitioning. I have several looping anims that are not supposed to transition own their own, and i want to switch to another one randomly by trigger (i.e. VAMStory), either by a blend or pose snap. The only way to init a random pose seems to be via transition after x seconds, which is not what i want. Am I missing something?
2. I'm working a lot with controller states set to off or locked, be it position, rotation or both. Mainly because position of and rotation on results in a naturally swinging movement of the limbs. But in another, following anim i like the controller beeing on (or locked) again. It seems the controller state isn't accessible as a target, so that i could set it to the value i need for the next anim. Guess it's because it is not a float value, but an enum. I know, if i snap to the next anim via pose this isn't an issue, but it would be great for blending anims. I know, too, that this isn't exactl trivial, because if you'd just set it to off after a locked or on state, you'd get unsatisfying results, and the other way round, too. In the first case you'd had to start setting it to on, and then slowly increase the spring from 0 to the desired value. This could either be handled by TImeline automatically (I've already set up the logic for that in an unreleased plugin if you're interested), or be done by the user, since the spring is available as a target. If only we had the controller state to our hands...

Aside from these (tiny) complaints, you've done an outstanding job with this masterpiece!
Cheesy
 
Last edited:
@CheesyFX Hi! Thanks :D

1. You can use the trigger "Play Prefix/*" which will show up if your animations you want to randomize have the same prefix (i.e. something with a slash). When you play that animation, the whole segment will also switch, and other layers will play at their first animations, unless you use animations set (check the wiki for this, animation sets are more advanced but you shouldn't need that). Also, note that you might want to disable the "Preserve Loop" toggle if you want the animation to switch immediately, otherwise it'll wait to smoothly switch loops while maintaining the coherence of animations.
2. You really have to use Timeline's pose system for that. It won't blend though, but it will be easy and always work (check my scene The Boss, I also use VamOverlays to nicely transition things). If you do want to do that, you can reduce the weight of the controllers you don't want animated and use triggers to change the controller state. Controller weight can be found in the right panel of Targets when you expand it. Timeline also has Controller Weight triggers that you can animate (yes, Timeline can animate itself!) if you prefer.

Feel free to complain (actually this was asking for help, not complaining, which is perfectly fine!)
 
Also, note that you might want to disable the "Preserve Loop" toggle if you want the animation to switch immediately
Ha, I have never known what that toggle was for, and I have been through the wiki for things several times. Good to know!
 
another awesome one i used timeline for also
"touch your mate™ by kiwi :p" touching experience for desktop users
you can move your char at ego / first person with WSAD & Mouse easy :D
upper right is sound switch (you can turn on sound on redgifs videos)

and here the announcement trailer for the bondage mech
 
here, am done with my testfield
my support comes this month into your hands acidbubble <3
here, look that awesome stuff what i can do with your amazing plugin <3 i love you for that
thx in advance for all your work again
dont forget to turn the sound on


this scene is sadly only avaiable at my patreon side, coz this :cautious: vamhub rule you only can release 3 things at a week thing (updates include that sadly)
...
 
@Acid Bubbles Thanks for your detailed answer!
1. Thats exacltly what i needed, thanks for the hint.
2. Your right, i can switch the states via trigger-track. It's tedious, involving a lot of triggers, and i have to think ahead which anims are supposed to transition to or follow the ones with different controller states, but it's doable. But if all anims are supposed to play randomly, then all i can do is to put all triggers on all anims, which isn't exactly efficient or convenient. I still think it would be awesome if you could implement a smooth transition between the states. As i said above, i already have a fairly reliable logic for that, so please write me a message if you are willing to evolve timeline in this regard. The main problem i see is integrating non-float targets into the system. For my needs it would be sufficient if they were separate from the usual targets, allowing the user to set them only once as an attribute of the animation. The blending could then be done automatically during the specified transition time, if necessary. The states could also be restricted to On, Off and Locked, since the parenting is already handled separately from vanilla VAM. This makes the logik a lot easier.
Greetings
Cheesy
 
update update update, look what you can do with this awesome plugin eh, have i sayd today that iam in love with timeline? xD
god i love it for real, have a nice day acid <3 later then

09c release advertisement vid
 
Last edited:
Hey AcidBubbles,

I've had lots of fun using your plugin lately, but i also had a hard time to accomplish some things i have in mind. Mainly because there seems to only be limited trigger/action functionality.
Is there a way to force a pose snap when selecting a pose via action? And no, i don't want to toggle "Apply pose on transition" because that would apply to all transitions leading to this pose. Let's say I have a smooth transition B>A, but C>A isn't possible (or not implemented yet). So if I'm on C I want to snap, otherwise not. The only solution seems to be to have 2 copies of A, one with "Apply pose on transition" and one without. I also tried the different "Stop" actions prior to triggering the anim (to mimic the plugin UI behaviour), but with no success. I also noticed that the stop action didn't always act on all persons.
I just saw that there is a "apply pose" action exposed to Keybindings. So you probably only had to register the associated action.

About the "play" action: Is it correct that it acts like the "play all" button in the UI? Is there a way to only trigger "play" or switch from "play all" to just "play" via trigger? The reason is, that I have multiple main poses, each with different sub poses. The sub poses are chained randomly if "play all" is active. Now I want the user to be able to disable this feature and keep the current sub pose for some time. Essentially like pressing the middle play button in the UI.

About the "next" feature:
Why is there no "Next Segment" action? I find the "Next Animation" a bit useless (for my workflow), because with "next", i want to jump or transition to the next main pose, not the next pose in the list. But how I am supposed to order my animations to accomplish that? Say I'm on anim A2 and by the press of a button i want to jump to the next main pose B0. But the next in the list is usually A3. Even if I order them like A0,B0,C0 followed by all sub poses, the result would be messed up. I know i could create a button triggering B0 directly, and if pressed, hide it and show a new one triggering C0 and so on. But i really want to avoid that. I hate navigating through that trigger hell.
If there was a "Next Segment" I could separate all main poses to different segments and order them correctly, so that "Next" has an actual meaning to it.

Right now I'm writing a scene manager plugin to drive timeline, so that i only have to use one "Next" and "Previous" button. The simpe plugin tracks the current main pose and also takes care of the possible transitions. But i want my plugin to decide, if there should be smooth transition or a pose snap, depending if a transition is available. But that does not seem to be possible without having lots of duplicated anims (see above).
It also would be nice if I could extract info about the containing animations. Iteration through the list of Play actions would be possible, but only if i used unique names across all segments. Sadly, if i have A in different segments i get only one "Play A" action and no reference from which segment it originates. Would you generally recommend naming anims with a prefix, like "seg1.A" etc?

I'm sorry, I know I'm complaining a lot. I really love your work and you owe me nothing. But maybe you find some of my thoughts useful for future updates. The past weeks i had many other ideas how timeline could be further improved. Let me know if you're interested!

Cheesy
 
@CheesyFX I see the problem, and yeah right now you can do that by having two animations. You could however have something like Layer A with Anim WP (no pose) and Anim NP (pose), and Layer B with Anim 1 (your actual animation) and have them all share the same animation set (in Edit or Sequence, I'm not sure right now). Then if you play WP or NP, it'll always play Anim 1 with it, so you don't have to clone the whole animation. But yeah it's starting to get complicated :D

There _should_ be a segment option in the play next menu. But keep in mind, if you switch to the animation of another segment, it will switch the whole segment anyway.

And I don't see that as complaining, Timeline's pretty complex, and I know there's a _ton_ of things I could do, sadly I didn't get tons of help (understandably, it's not easy to contribute to it) so I'm doing my best to help find workarounds.

If you're courageous, you could also check Scripter or LogicBricks (depending whether you're comfortable doing scripting) to drive the logic, though usually I can make things work with just Timeline. For example, could have Anim 1, Anim 1 -> 2, Anim 2 -> 1, Anim 2 so Next / Prev have transition animations with their own triggers and logic.
 
Back
Top Bottom