Expression Randomizer v1.8.0 beta release
Added 2023-04-12 19:42:36 +0000 UTC
Hi, this one's a bit of a random release. (Heh heh.)
A few days ago, as I was working on the promo video for Naturalis, I realized I want the characters in the video to have dynamically changing, natural looking expressions without having to manually animate them. I started using the ExpressionRandomizer_1.7 plugin - created originally by Extraltodeus way back in the day, improved upon by hazmhox and published by Timbo with the FC (free content) license.
It quickly started feeling like the plugin had a ton of potential and a lot of easy pickings - and some not so easy but still worthwhile - as far as bug fixes and usability improvements, so I spent a few days developing such an improved version.
The original plugin can be found here: https://hub.virtamate.com/resources/expression-randomizer-by-extraltodeus.28738/
This improved version will be released by Timbo as an update to that same hub resource in about 1 week. (Hence the author of the var package is also VamTimbo rather than myself.)
This Patreon beta release is pretty much ready for release, but I wanted to give you guys a short exclusive access period. (The license is Questionable, will be updated to FC for the public release.)
I'm also hoping to get some feedback on it - especially the three included presets. Please try it out and tell me if the presets work for you, and let me know if you can think of ways to improve them! 🙏
Improved built-in presets + Usage tips
- Idle: a subtle, slowly changing smile expression
- Flirt: very expressive - some lip biting, smiling, narrowing the eyes, raising eyebrows, flirty looks
- Enjoy: eyelid movement, mouth opening and closing, simple smiles - to express satisfaction/pleasure with a bit of surprise mixed in
These are intended to be useful general purpose expressions for use in VAM scenes, but you can very easily build upon them, save your own presets and load those dynamically during a scene's playback. Go wild!
The better morphs you have available, the better results you will get. But the built in morphs are actually pretty good when combined dynamically and randomly.
Use Glance by acidbubbles for realistic eye movement and better blinking: https://hub.virtamate.com/resources/glance-realistic-head-driven-eye-motion.5461/
Randomize the plugin's parameters further with FloatParamRandomizerEE, making the expressions even more dynamic: https://hub.virtamate.com/resources/floatparamrandomizeree.20883/
You can also combine multiple ExpressionRandomizers on the same atom, as long as they're adjusting different morphs.
Change log TL;DR
Besides the above presets, the main improvements are:
- 2 slots for storing user presets in plugin memory & scene
- save and load from file
- vastly improved UI design and user experience
- vastly improved UI performance, no more massive fps drops when loading a lot of morphs into the UI
- improved randomness, better transitions
- lots of small fixes and general improvements
Full change log
User presets and preset file saving/loading
- 2 slots to save presets in plugin's memory, these are also stored to the scene and the overall person plugins preset
- save and load presets to/from file (location: Saves/ExpressionRandomizer/Presets)
- load both the memory and file presets with triggers in the scene
Improved UI design and usability
- redesigned UI, but still more or less recognizable when comparing to the original
- no need for scrolling
- paging for the morphs list - much easier to navigate!
- region selection popup: filtering is much more powerful now with region, text filter or both (and active only filter as well)
- morphs are sorted alphabetically
- collision trigger popup is now scrollable and opens upwards
- etc., lots of small usability considerations to make sure actions feel intuitive
Morph initial states:
Generally the initial states of morphs should be 0 and disabling the plugin's control over morphs should restore that. The earlier version didn't take some situations into account:
- morphs are restored to their initial values when the plugin is disabled
- initial state is updated when the morph is toggled back on again - in case the morph was adjusted elsewhere/manually while it was not adjusted by the plugin
- morphs are saved to scene JSON in their initial states so that loading the scene doesn't put the initial state to whatever generated expression was active when the scene was saved
Other:
- selecting None on collision trigger popup now correctly clears the trigger action from the previously selected collision trigger
- ensure the custom collision trigger action is removed when plugin is removed
- respect Freeze Motion/Sound
- exclude Joint Correct JCM morphs, Torso region morphs, Hands region morphs, and any morphs with bone morphs (animation not recommended)
Improved UI performance
- a lot fewer UI elements are created, and there is no longer a big framerate drop when having the UI open if lot of morphs are installed
- UI elements are created on demand when entering the UI for the first time
- UI loads much more quickly when a lot of morphs are installed
Improved randomness, better transitions
- "Random chances for transitions" is now enabled by default
- the random chance now applies per-morph, rather than on the entire set of selected morphs - on some frames you might get morphs A, B and D to update, on other frames you might get B, C and D to update, etc., making expressions more dynamic
- transition smoothly from one preset to another, or when toggling individual morph on/off - possible to trigger presets or morphs as part of a scene's playback without it looking jerky
Other
- identified morphs are not stored in memory, no need to constantly find the morphs to adjust from among all loaded morphs on the installation (should be a bit fewer hiccups)
- removed the weird "animatable morphs" implementation, no idea what that even was and it didn't seem to do anything
Enjoy it!
-everlaster