• Hi Guest!

    We are extremely excited to announce the release of our first Beta for VaM2, the next generation of Virt-A-Mate which is currently in development.
    To participate in the Beta, a subscription to the Entertainer or Creator Tier is required. Once subscribed, download instructions can be found here.

    Click here for information and guides regarding the VaM2 beta. Join our Discord server for more announcements and community discussion about VaM2.
ExpressionRouter

Plugins + Scripts ExpressionRouter

Download [0.18 MB]
  • Or before you load a preset or mood, you could trigger StopReset or StopAll for a smoother drop off. Then time your next trigger to load on another instance to get your timing how you want. So while one is ending your other is starting on another instance possibly. You can do a lot more advanced randomization with timeline triggers and using multiple instances if needed.
Thanks for the suggestions. StopAll isn't being smooth for me... I can work around by setting intensity min and max to 0 then waiting for the next cycle. I still think this feature(Mood transitions) will be in a lot of peoples use cases. lerping morphs to 0 then loading the next mood would be a really nice feature.

While I'm here, being able to filter for poses only would help. Currently I'm going back and forth between the plugin and morph UI to ensure I don't add any non poses and mess up my look.
 
Thanks for the suggestions. StopAll isn't being smooth for me... I can work around by setting intensity min and max to 0 then waiting for the next cycle. I still think this feature(Mood transitions) will be in a lot of peoples use cases. lerping morphs to 0 then loading the next mood would be a really nice feature.

While I'm here, being able to filter for poses only would help. Currently I'm going back and forth between the plugin and morph UI to ensure I don't add any non poses and mess up my look.

To add something code/logic based, I may need to see a scene file or mood file to see what you mean to test it against that when doing the update. If you could send me more details with something I can load in, I can look at it to see what kind of improvements can be made. If you can give me either a save scene or mood file or some inputs to enter and what is happening versus what you want to happen, I can see what can be done.
 
To add something code/logic based, I may need to see a scene file or mood file to see what you mean to test it against that when doing the update. If you could send me more details with something I can load in, I can look at it to see what kind of improvements can be made. If you can give me either a save scene or mood file or some inputs to enter and what is happening versus what you want to happen, I can see what can be done.
I I zipped up a scene with buttons to: load happy mood, load angry mood, stopAll, startAll

Notes:

1) load the happy mood -> when she starts to smile and show teeth, press stopAll.
- It looks like the smile morph continues to increase until it gets to the maximum, then instantly drops to 0. Ideally it would stop increasing and decrease over time to 0.

2) Load a mood -> stop all -> load another mood -> start all
- works fine (other than the stopAll drop off).

3) load happy -> load angry
- happy morphs keep playing, seems like some callback needs to be de-registered.
- only the angry morphs appear in the UI
-> Now stop all
- It does not fully set the morphs to 0, looks like the happy morph is straggling.

Here is a dropbox link to the scene without the AshAurn morph depends:

This one includes the morphs(280mb) (I'm not sure which var the poses came from so I included them all):
 
Last edited:
VamEssentials updated ExpressionRouter with a new update entry:

Version 4 Update

ExpressionRouter v4 Update


• Smoother Stop All

Expressions now fade out properly when you hit "Stop All"—no more snapping from min to 0. Active toggles also clean up correctly.


• Instant Random Mode
Random mode starts immediately now instead of with a long delay on start.


• Seamless MoodPreset Switching
You can now hot swap mood presets like happy ↔ angry with smooth transitions. Orphaned morphs no longer get stuck in the Morphs tab.


• Cleaner...

Read the rest of this update entry...
 
Two bugs I've encountered so far:
- Maybe I haven't understood their function yet, but the time and blend speed sliders lead to some very snappy expression blending when decreased (video). Looks to me like the blending processes might be overlapping but keeps resetting one of the morphs. This can be smoothened: for example lowering time can be fixed by increasing blend speed (and vice versa), however setting time to 0.2 and lower blend speed can not be increased high enough for this to work.

- When you have more than one person in a scene, have an active expression going on and (accidentally) switching person atoms at the top, all morphs get removed, but the expressions still keep playing forever. Re-selecting the original person atom doesn't fix this, only clearing/removing the plugin does.
Also I've found it a bit counter intuitive that clicking on "T1 Active" enables the expression, but toggling it off doesn't also deactive them.

Apart from that this plugin looks super polished and feels really powerful. I feel like I've only scratched the surface of what is possible with this. Excellent work!
 
Two bugs I've encountered so far:
- Maybe I haven't understood their function yet, but the time and blend speed sliders lead to some very snappy expression blending when decreased (video). Looks to me like the blending processes might be overlapping but keeps resetting one of the morphs. This can be smoothened: for example lowering time can be fixed by increasing blend speed (and vice versa), however setting time to 0.2 and lower blend speed can not be increased high enough for this to work.
View attachment 478946
- When you have more than one person in a scene, have an active expression going on and (accidentally) switching person atoms at the top, all morphs get removed, but the expressions still keep playing forever. Re-selecting the original person atom doesn't fix this, only clearing/removing the plugin does.
Also I've found it a bit counter intuitive that clicking on "T1 Active" enables the expression, but toggling it off doesn't also deactive them.

Apart from that this plugin looks super polished and feels really powerful. I feel like I've only scratched the surface of what is possible with this. Excellent work!

Thank you!

Can you go below .70 seconds in time
In all my testing so far going below .70 Time (sec) is generally not recommended unless you test it and can confirm you can get good results you can use with it. The reason being is it's based on seconds and that's less than a fraction of a second and way too fast to process/see well/use. It's showing what a micro second animation combination looks like and it's attempt at trying to generate it, so is typically not going to look very good. I have seen good results down to .50 Time (sec) with some morphs doing a clean Active start and Reset/Stop but when going lower it seems to not be very usable.

If you want very fast micro expressions, It should to be isolated and tested per tab with full Reset/Stop and start just to make sure everything clears, and then test settings that way before moving to next tab. There are processes in the code that go one after the other, so although it can technically do it, going back and forth with sliders could disrupt those processes where they can no longer keep up, and it messes up, where sliders lose real time tracking or connection. Essentially silently crashing it.

Adding feature for faster real time slider tracking/feedback/mid-cycle updates
Sliders silently crashing/losing live feedback when moving to very fast speeds and back while active is possible unfortunately. This may be one of those things where saying it supports real time slider updates when other plugins don't is a bit of a stretch in that it does but with some limitations. And I think this shows why it's maybe not a good idea in general to encourage or suggest real time slider feedback because in many instances a clean refresh or Reset/Stop may still be recommended or required. There are ways I could buffer against that on the back end but the trade off are usually not good. I think most developers would just put a limiter on it/hard cap to not allow it at all and limit micro second expressions because they are a high risk for silent crashing issues. I think for general public use, that's probably the most common approach. But I really did not want to do that incase someone finds a use case for it like robotic glitching, strange sci-fi/horror type expressions, twitching, etc.

I could also add more higher frame monitoring of changes so it tracks these real time slider changes faster and then attempts to change the expression cycle mid cycle to try to catch up, but that may still push it too hard requiring micro second tracking and micro second updating and I just don't think it's capable of doing that. And if it is, it would probably come at a high performance hit having it track and process that fast. I can look into it and do some tests to see what is possible but so far I have not seen a clear option that didn't involve a bad trade off for it.

Adding feature to change select person while morphs are active
In regards to the drop down change to Select Person while running, yes there are a few ways to silently crash the plugin and changing that drop down while running can do it. Your best option would be to have another instance for that other person. One of the biggest challenges with a plugin like this is managing active morphs once they are started. Hot swapping MoodPresets in (loading a MoodPreset in while active, then loading another in overwriting all boxes while still active) can clear the tabs while they are still running for example. So what you end up with are morphs that are triggered and pushed out there to do something actively, but then have no tracking of it anymore because tracking has been directed somewhere else and there is no log of it in the plugin anymore because it's wiped from the boxes. So I had to add an Active Morph Registry to track those orphaned morphs so they could be faded to min and then to 0. Basically tracking and finding the morphs not even in the plugin anywhere, but that where loaded on the previous LoadMoodPreset and changed out before they completed.

So the challenge with this is somewhat similar in that it would require all processes to be re-written to adjust for if Select Person is changed mid-cycle and mid-cycle changes are the most problematic with things crashing and breaking along the way. This is why some plugins don't even offer real time slider feedback at all. It requires a reload every time because of it being a mid-cycle change.

I think adding a feature to change Select Person mid-cycle would be a nice feature to have and I can look into it but I don't think it could be done in a good way without a trade off. And would just be much easier, cleaner and more reliable to just use another instance for that other person.

Adding enhancement for StopAll when Select Person is changed while active
I think what I can do for the next update is have it run StopAll if the Select Person is changed while active to avoid someone having to reload it. That could be useful in case someone starts it on the wrong person and wants to change it. So thanks for letting me know about that, that is a good catch.

I really do appreciate the feedback. If while you're testing out the plugin, you find something you really need for a scene, and can provide me with a use case example of how you are to use it, I can look at it further and test with your use case to see what's possible if you provide a scene example and/or mood preset example of how you'd use it. :)
 
Last edited:
Back
Top Bottom