Technically yes, you can do this, but there is no (exact) functionality to support this out of the box. However, you can implement it pretty easily by using the TextToLipsync add-on in the downloads portal. It is doing pretty much what you are asking except according to an amount of text input, which might be exactly what you are ultimately wanting anyway.
No worries! Many thanks for your time looking into this, and describing options in SALSA I didnāt see before.
I have other setups to compare with, and will get to know better how to use SALSA in my project.
Hello.
Iām experiencing a strange behavior with Salsa, Animator and Parent Constraint.
Salsa alone is working correctly. Head and Eye are processed and the character looks around randomly, blinking his eyes.
I then add a hat gameobject that I want to attach to the head of the character. So I add a Parent Constraint component to the hat gameobject.
When I play, Salsa is again generating the head movements and the attached hat is following correctly the head.
All is OK til this point.
Now I add an animator controller to the character in order to animate it using animations imported with the character FBX.
When I play, Salsa is again generating the head movements but the attached hat is no more following the movements (it doesnāt move at all). During play, if I uncheck the Animator Controller active state, immediately the hat starts to follow the movements of the head; as soon as I activate the Animator, the hat stops to move.
One important note: the animation doesnāt contain any keyframes for the head bone (I mean the animation doesnāt animate the head bone).
Hello, this isnāt really a SALSA Suite question as much as probably an Animator or constraint question that likely will get you more expertise in a related forum for those processes. However, there are a couple of things to consider. First, if your animation contains a property for the head bone, even if the keyframes are zero, it will āanimateā (lock) the bone to zero. Depending on when Constraint operates (Update, LateUpdate, etc) may factor into this. SALSA Suite operates in the LateUpdate cycle to override any conflicting Animator/Update operations. If constraint operates in Update, it will track with the Animator changes and not with SALSA Suite changes. If the head bone is a property in your animation, you would need to remove it (from all clips in the Controller, active or not). If constraint operates in LateUpdate, but happens to run before SALSA Suite updates, the same would occur. Be aware, if you have an animation state/clip in the controller that isnāt in use or isnāt active, but has animation properties for the bone, it will set/lock those properties to zero.
In my testing, it appears Constraint seems to run in Update (or is running before SALSA Suite in LateUpdate). If Animator has an active clip that animates the bone in question, Constraint follows that animation and not the LateUpdate changes made by SALSA Suite. If Animator has an active controller without a clip (or a clip without properties for the bone) AND a clip that is not the active state with properties for the bone, Constraint is locked to the zero position of the bone. Again, this isnāt a SALSA Suite issue, this is an Animator/Controller/Clip/State issue with Constraint. There are some forum threads out there that discuss this issue. Most are old, but the issue remains an issue. Unity seems to maintain the stance that if you wish to force influence onto a property in a clip, you must do so using LateUpdate (which we do). Constraint does not appear to be compatible with that philosophy. https://discussions.unity.com/t/645479
ReadyPlayer.me OneClick v2.6.0
Newly supported character system, ReadyPlayer.me is now available via our downloads portal.
This OneClick supports the latest (as of this post) iteration of the RPM (ReadyPlayer.me) SDK using the glTFast importer. RPM updated their importer from GLTFutils and in the process changed their implementation of blendshape weights to 0 - 1 verses the Unity standard of 0 - 100. If you notice your models donāt really respond correctly, check your blendshape weight range in the SkinnedMeshRenderer. If your weight ranges are 0 - 100, you are using models imported via the old importer.
UPDATE (2023-07-05):
The RPM OneClick requires specific morph exports. See our documentation for more details.
NOTE: This OneClick requires an update to the OneClickBase file (v2.6.0). That package is also available on the downloads portal. If you receive a console error stating you are trying to access OneClickBase with an incorrect number of parameters, you need to update your OneClickBase set.
ALWAYS BACKUP YOUR PROJECT BEFORE INSTALLING THIS OR ANY OTHER ASSET/ADD-ON.
I believe this package is pretty solid, but since it is the first release, we are calling it beta. If you experience issues other than blendshape weight ranges or a console error indicating you are trying to access OneClickBase with the wrong parameters, please send us an email with your Invoice number and a detailed description of the issue you are experiencing.
UPDATE: The RPM OneClick setup is designed around having the appropriate blendshapes available. Without the correct shapes, some visemes and emotes will not work correctly. If you do not want to edit your OneClick file, these are the shapes used in the Avatar Load Config:
Create Custom OneClick v2.6.3
Formerly known as ādump OneClick settingsā. Now more betterer.
Still in beta, but much more feature complete. This script will now create a set of OneClick files based on the name of the GameObject you are creating it from. It will create a OneClick for any of the main modules, you donāt have to have all 3 present.
Caveats for use:
For SALSA and EmoteR, creates a complete OneClick for any configuration you have created using bones and/or blendshapes.
For Eyes, the OneClick is based on a simple, common use scenario at this point. Head & Eyes using bones and Blinks/TrackLids using blendshapes. This is the most common setup for Eyes, so it is what weāve started with.
Depending on your model architecture, it may be necessary to edit your custom OneClick to search for appropriate SkinnedMeshRenderers, blendshapes, bones, etc. However, if the architecture is identical, the OneClick should work as-is. We have no way of knowing if you have different mesh, bone, blendshape names between models.
Usage:
Configure a model with SALSA and/or EmoteR and/or Eyes (within the caveat expectations above) and name the root GameObject the name you want for your custom OneClick (i.e. MyOneClick001).
Select the GameObject.
Then select menu: GameObject > Crazy Minnow Studio > SALSA LipSync > Tools > Create OneClick File-set.
Note: if you repeatedly execute the ācreateā command, it will overwrite existing scripts of the same name. If you want different versions, rename your GameObject accordingly.
Result:
Three files will be created. An Editor script and two runtime scripts: OneClickMyOneClick001Editor, OneClickMyOneClick001, OneClickMyOneClick001Eyes. You will then be able to apply this OneClick on another model with the same architecture using menu: GameObject > CrazyMinnowStudio > SALSA LipSync > Custom OneClicks > MyOneClick001.
ALWAYS BACKUP YOUR PROJECT BEFORE INSTALLING THIS OR ANY OTHER ASSET/ADD-ON.
I believe this package is pretty solid, but since it is the first release, we are calling it beta. If you experience issues please send us an email with your Invoice number and a detailed description of the issue you are experiencing and we will look into it.
Get the package from our downloads portal. It is called Tool: Create Custom OneClick
Thanks very much for your hints. The reading of the linked post was illuminating on how the Animator works. I removed the head bone from the animation clip (it was not animated at all there) and all is working now.
Thanks
Thank you for your support.
Through my own investigation, Iāve found that the minimum value appears to be calculated according to the following formula:
actual min = ((max - min) / 100 * min) + min
I understand that there is no clear ETA at the moment, but I would appreciate it if you could give me an idea of when the next bug-fix update is roughly scheduled for.
Hello, I have found the issue and am implementing a solution. The issue is not in calculating the min value, it was in the progression calculation of the lerp value. I have a solution that fixes the bug, simplifies the code, and works as originally intended, but I have to test against several scenarios to ensure this doesnāt break something else. My main concern is why the code was doing what it was in the first place. It has been a very long time since I have touched this portion, so I donāt want to shoot from the hip here and break something else. This is the last fix I want to include in the next bugfix, so it shouldnāt take long ā maybe sometime next week. If you send me your invoice number and a reference to this thread, I can send you a build to test earlier.
SALSA LipSync Suite v2.5.5.135
BugFix Release ā Available Now on the AssetStore
Weāve rolled up another set of very fringe bug-fixes in this release. Iāve also rolled the most current OneClickBase (as of this post) into this version. So, unless there are more changes to Base, you shouldnāt need to download it from the portal. But always check in the portal to see what it recommends.
EXPECTATIONS:
If you are upgrading an existing project, read the release notes and make a backup of your project before you upgrade SALSA Suite!
If you find bugs or documentation issues, please let us know, we will knock them out as quickly as possible. Please ensure youāve checked the Release Notes and latest documentation and ensure you have the correct (latest) Add-On/OneClick versions. It is best if you email us (assetsupport@crazyminnow.com), including as much detail as possible, screenshots and/or video, any errors received, versions of everything, and always include your Unity Invoice Number.
AWESOME - I have been using your plugin for years. I will enjoy opening up a new project and begin using the UPDATE! Thanks again for you work. I use it in VR now.
Thank you very much for your prompt response to the bug fix.
I have confirmed that it is working as expected.
I look forward to our continued cooperation.
Hello,
Weāre having quite an issue with animations & blendshapes.
We have some animations controlling blendshapes of our character, they work perfectly fine.
BUT, when we play an animation WITHOUT BLENDSHAPES from the animator of our character, then the blendshape are froze and we canāt modify them via script etc. Which causes that our Salsa lip animations are very buggy. The lips move but they seem to always try to go back to closed mouth which creates a lot of jitters.
Having a character with an animator that has just one animation using some blenshapes seems to freeze the blendshapes when the animator is on.
Just to clarify a bit more, I have this animator with two animations:
CEO_IwantToStart with face blendshapes
T-pose without face blendshapes
When the state is on āT-poseā I would except to be able to modify the blendshapes, but I canāt. I can only modify the blendshapes that are not used in the animation āCEO_IwantToStartā
Hello, this may not be the most helpful thread for this question since it isnāt really a SALSA Suite issue, but is an issue with any attempt to modify blendshapes (or any animatable properties) that are included in an animation clip, whether the clip is active or not. This is the way Unity operates. See this thread (mentioned further up this forum thread (post #2425)): Animator locking animated value even when current state has no curves/keys for that value and in post #2428 our customer replies that removing the conflict resolves the issue.
First and foremost, it is best to eliminate conflict in animation influences. If you have two or more systems trying to animate the same thing, there is going to be an issue. One or the other will work, or they will fight, or something else strange may happen. As pointed out in the linked thread, if you have an animation clip, active or not, it will freeze the properties whether the clip is active or not.
You can try to use persistent mode with SALSA and EmoteR to override any influence that operates in the Update cycle. SALSA Suite operates in the LateUpdate cycle. I also have an update to SALSA Suite that will help it to operate more smoothly when persistence is not enabled, but there are external influences in conflict ā as long as they operate in the Update cycle. I expect this to be posted sometime next week.
Also note, I have seen some references to CC character animations being uneditable due to a script present that restores any changes to default. I donāt recall where that was, but Google would be your friend if you have such an issue while trying to resolve your conflicts.