Search Unity

SALSA Lipsync Suite - lip-sync, emote, head, eye, and eyelid control system.

Discussion in 'Assets and Asset Store' started by Crazy-Minnow-Studio, Apr 23, 2014.

  1. Tech-Labs

    Tech-Labs

    Joined:
    Feb 5, 2014
    Posts:
    105
    Hi!
    So I'm trying to get Salsa working with Dissonance and Netcode to sync the Salsa lipsync over a network so all players can see the other avatars' lips move. I'm using Reallusion CC4 characters.
    I've followed the Salsa-Dissonance setup (https://crazyminnowstudio.com/docs/salsa-lip-sync/addons/using-with-dissonance/ ). Replacing the Hlapi objects with the Network Object scripts. I've also overruled the ServerIsAuthorative on the Animator component on the avatar so I can controller animation on the clients without the server.
    The project is fresh, all new downloads. Including the One-Click setups.
    I start a server and a client. The server instantiates the avatar, spawns it with my client ID (so it is the owner).
    My network animator works as I see the chosen animation on the client mirrored on the server.
    Dissonance is properly connected.
    Using the <Is Debug> flag in the SalsaDissonanceLink, I see in the console that the Salsa Dissonance link is working on the client.
    What I do see is that the server keep looking for Dissonance player ID of the client in the method WaitSalsaDissonanceLink. That method apparently only sees it's local Dissonance ID and not the remote one, so the server never says that Salsa and Dissonance are linked.
    Using <Use Local Lip Sync> in the SalsaDissonanceLink I can also see the lips on the client move as they should.
    However, I do not see the lip sync mirrored in the server. So for some reason the salsa changes to the blendshapes are not synced over the network.

    Does this have anything to do with the fact that although I am syncing the Animator, Salsa affects the blendshapes directly (not through the Animator) and thus the blendshapes are not synchronized?

    Can you please point me in the right direction and help me find how to solve this?

    Cheers,

    Marco
    Unity 2021.3.22
    Dissonance 9.0.1
    Salsa 2.5.4.125
    Windows 11
    Reallusion CC4 character
    Unity Netcode for Gameobjects 1.2.0
     
    Last edited: Apr 13, 2023
  2. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    Hi @Tech-Labs, SALSA working with Dissonance does not sync the blendshapes via the net code. It works by attaching to the serialized audio for each avatar and letting the SALSA instance on each avatar process the serialized audio. Something in the configuration is not quite right if SALSA isn't linking up by finding the player id. I would suggest checking with the Dissonance guys to find out what might be wrong. Also, keep in mind, for the remote avatars, the SALSA configuration needs to be set to external analysis. It gets the data directly from Dissonance, which is what the SalsaDissonanceLink script is for.

    Hope that helps,
    D.
     
  3. Tech-Labs

    Tech-Labs

    Joined:
    Feb 5, 2014
    Posts:
    105
    Just to let everyone know where my "mistake" was.
    After talking (Discord) to the people of Dissonance it turns out that using the NfgoPlayer component only works on Network Object that are marked as IsPlayer. For me it doesn't really matter whether they are or not, so instead of SpawnWithOwnership I now use SpawnAsPlayer for my avatars. Now the Salsa-Dissonance link works fine!
    Thanks!
     
    Crazy-Minnow-Studio likes this.
  4. Seth-Robinson

    Seth-Robinson

    Joined:
    Aug 24, 2013
    Posts:
    11
    Hey, here is an example of using AI stuff with Salsa, it uses Whisper, GPT-4. It worked great!

    Full source code (well, you need to buy and copy the Salsa stuff into the project if you want the lipsync to work) is here on github.

     
    Crazy-Minnow-Studio likes this.
  5. kilik128

    kilik128

    Joined:
    Jul 15, 2013
    Posts:
    909
    3 time i ask question about autosetup for readyplayerme ?
     
  6. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    Hello. It is being tested. I will post here when it is ready.

    Thanks,
    D
     
  7. XyrisKenn

    XyrisKenn

    Joined:
    Dec 8, 2015
    Posts:
    92
    Greetings. I'm experimenting with Jitter and global timing to finesse lip sync in Unity.
    These settings are mostly ok, except the avatar moves lips during silent moments, and looks a bit like a goldfish opening and closing their mouth.

    I've tried adjusting silence and turning it off/on without effect. I haven't yet found the source settings to prevent this. Might you suggest please, which settings(s) to look at?

    Context: CC3 and CC4 characters, combining exported expression animations + SALSA lipsync.
    Unity 2021.3.22 HDRP.

    Thank you.
     

    Attached Files:

  8. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    Hello! It might be that your audio has a noise floor that SALSA is picking up on. You can raise the floor using the Dynamics scaled cutoffs section. Raise the left value up to something that is above the floor, but still detects the audio you want. Hope that helps!
    upload_2023-5-12_14-59-24.png

    D.
     
    XyrisKenn likes this.
  9. XyrisKenn

    XyrisKenn

    Joined:
    Dec 8, 2015
    Posts:
    92
    Ah, thank you. I tried settings this higher, but to no effect. The audio is received from Azure text to speech.
    If I deactivate the Salsa component then re-activate during runtime, the looping lip animation stops.
    This almost appears to be a loop of a few phonemes.
    I'll match all settings with another avatar that is closer to defaults to test.
     

    Attached Files:

  10. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    Ah, OK, so you are leveraging a custom audio filter chain insert to access the audio? If this is the case, it sounds like your buffer isn't being filled with "zeros" during silent periods or when the TTS stops.

    D.
     
  11. XyrisKenn

    XyrisKenn

    Joined:
    Dec 8, 2015
    Posts:
    92
    Currently I'm using RT-Voice + Azure + SALSA. The text comes from ChatGPT; the avatars have facial expression animation loops driven from a behaviour tree, and I use persistence in Salsa + Lips-only Process Queue. o_O:cool:
    I set the avatar as Audiosource and use the Speak command from in once the Chat text is returned.

    I might be missing a step, like adding an additional component. This process is revealing the "shaping" possible with SALSA to reduce choppiness or timing to suit the character of the model.
     
  12. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    OK, so not MS's Cognitive Services. So your audio is coming back as a complete clip and not streamed. SALSA only analyzes the AudioSource clip while it is playing. So some data has to be pouring through the AudioSource for the lips to be moving. Sometimes when using a microphone, which uses a circular buffer, the "playback head" pointer can get mismatched with (in front of) the "record head" pointer and produce the symptoms you see. But, I cannot think of how listening to a normal AudioSource clip is causing animation in SALSA for silent audio.

    Now, considering your animation loops, it is possible you have an animation that affects the "mouth" that SALSA is not controlling and therefore, you are are seeing that animation. When you are seeing the silent-lip-movement, try disabling your animator to see if the movement stops.

    D.
     
  13. XyrisKenn

    XyrisKenn

    Joined:
    Dec 8, 2015
    Posts:
    92
    Thank you for replying and your advice. I do notice the lips do not move (correct) until the audio from Azure is received and played through that avatar's audiosource via RT-Voice and the Azure prefab.
    After the Azure-provided audio finishes, we have the Goldfish Effect ;) I'll try disabling animation and see what the effect is.

    My other avatars with settings closer (or same) as the one-click Add-ons also use the same Behaviour tree and animation loops, but the also have most of the Process Queue items selected. I'll compare these.
     
    Last edited: May 13, 2023
  14. XyrisKenn

    XyrisKenn

    Joined:
    Dec 8, 2015
    Posts:
    92
    Follow up: turning off behaviours and animations didn't affect the mouth blendshape loop.
    Turning off the Queue Processor stops the loop; turning QP on again continues the mouth movement.
    Disabling Salsa then turning it on again stops the mouth looped motion.

    Next test: I'll reimport a CC4 character and redo the scenario, to see if I mixed presets with CC3 or iClone.
     
  15. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    OK, good, now, disable the AudioSource to see if there is something that is popping that you can't really hear. If disabling the AudioSource makes the fish mouth stop, something is being fed into there that you don't want. You can also watch the analysis values in SALSA to see if it is getting something (option only available when running):
    upload_2023-5-14_11-57-49.png

    upload_2023-5-14_11-57-59.png

    upload_2023-5-14_11-58-10.png

    Additionally.watch the blendshapes in the SMR and see what blendshape(s) is(are) moving. If it is in the QP, you should (maybe) see it cycling in there as well; although that might be going too fast to show up in the list.

    D.
     
    Last edited: May 14, 2023
  16. XyrisKenn

    XyrisKenn

    Joined:
    Dec 8, 2015
    Posts:
    92
    These are great tests. Thank you for pointing these out.
    - Disabling audiosource has no effect on fish mouth.
    - Analysis value remains at 0, no bar on the display.
    I'll check docs for what the SMR is.

    Question: Ideally I'd like to keep expression animation curves around the mouth, like (slightly) smiling, frowning, neutral, while SALSA drives the lip sync phoneme tracking.
    The goal is to overlap expression with words, if there is a way to select the balance between them?
    For example:
    Animation curves own smile left & right, while SALSA owns lip motion, and a slider to blend between the two to balance for them. I find lip motion often doesn't need to be exact to feel like it's real.
    Note:
    This is what Visemes do; I wonder if persistent animation balance can be controlled, and if Visemes influence blendshapes on both sides of the mouth.
     
    Last edited: May 15, 2023
  17. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    SMR = SkinnedMeshRenderer, which is where the blendshapes are interfaced. If the AudioSource is disabled and the fish mouth continues, it must be driven by something else (not SALSA). Only other thing would be EmoteR? I see you don't have an EmoteR linked to SALSA, but do you have one running and perhaps the emote is on random or cyclic firing. Other option might be a misconfigured viseme that has min as non-zero, which would leave the blendshape enabled at the end of animation, but wouldn't cycle it. So I'm at a loss.

    To answer your question, you can do what you are looking for and sounds like you're somewhat there. SALSA technically works better with EmoteR since conflicts are handled in the QP hierarchy. But it would work with animations as long as SALSA is able to write to the animation last per frame. This may or may not be possible depending on how animations are driven. SALSA Suite runs in the LateUpdate cycle. So as long as your animation writes in Update, then SALSA can override it when necessary and merge back to it when not in use. They only other way to deal with it, if it isn't possible to guarantee SALSA writes last, is to *not* use the same blendshapes in SALSA that you are using in your animation.

    I've pretty much exhausted ideas at this point. If EmoteR isn't enabled and there aren't any misconfigured visemes, it will be necessary for you to send me your project. Preferably as small of a sample of your project as possible that still demonstrates the problem. Send it to our support email address with your Invoice number and a reference to this thread and I'll be happy to take a look.

    D.
     
    XyrisKenn likes this.
  18. hahasohano

    hahasohano

    Joined:
    May 15, 2022
    Posts:
    3
    I am currently using EmoteR in my Unity project (Unity version: 2021.3.18f, SALSA LipSync Suite version: 2.5.4).

    I am encountering an issue related to blend shape values and minShape that I could not find any existing discussion or solution for in the forum.

    In my project, I am using the following code to manually trigger an emote:
    emoter.ManualEmote(emoteName, ExpressionComponent.ExpressionHandler.RoundTrip, 1f);

    The issue arises when I set a minShape value that is not zero. When minShape is set to 0, upon the completion of the emote, the blend shape value correctly returns to 0. However, when I set minShape to a value other than zero, for instance 0.5, I observed that the blend shape value does not return to the minShape value of 0.5 upon the completion of the emote. Instead, it returns to 0.75.Additionally, I tested this behavior with both 'Cubic Out' and 'Linear' easing settings and observed the same result in both cases.

    I am unsure if this is an intended behavior or if there is an underlying issue that I am not aware of. I would be grateful if anyone could provide insight into this behavior and if there is any solution or workaround to ensure the blend shape value returns to the minShape value after an emote finishes playing.

    Thank you for your assistance.
     
  19. DavidBVal

    DavidBVal

    Joined:
    Mar 13, 2017
    Posts:
    206
    Hello, I am a new user, my models are UMA. Can SALSA be used to simulate talking without any audio files? in my case no syncing is needed, just a randomized movement of lips that feels like talking, all I need to control is the length and also inserting expressions here and there.
     
  20. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    Hello @hahasohano, this is not intended behavior and I can reproduce your issue. Typically, the min/start is 0 unless it is merging back to an external influencer (i.e. Animator, higher QueueProcessor priority, etc.). I will have to dig in and see what is causing this. Thanks for pointing it out. I don't have an ETA at this point because I don't know what the issue is. But hopefully I can get it into the next bug-fix update.

    Thanks,
    D.
     
  21. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    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.

    Hope that helps,
    D.
     
  22. XyrisKenn

    XyrisKenn

    Joined:
    Dec 8, 2015
    Posts:
    92
    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.
     
    Crazy-Minnow-Studio likes this.
  23. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    OK, let us know if you have any more questions.

    D.
     
  24. Giocas

    Giocas

    Joined:
    Oct 15, 2013
    Posts:
    4
    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.
    upload_2023-5-22_12-25-59.png
    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).

    Any help please. I'm stuck on this.
     
  25. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    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://forum.unity.com/threads/ani...ate-has-no-curves-keys-for-that-value.440363/

    D.
     
  26. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    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.

    Get the package(s) from our downloads portal.

    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:
    upload_2023-7-3_15-1-54.png

    Enjoy!
    D.
     
    Last edited: Jul 5, 2023
  27. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    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

    Enjoy!
    D.
     
    TymNetwork likes this.
  28. Giocas

    Giocas

    Joined:
    Oct 15, 2013
    Posts:
    4
    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
     
    Crazy-Minnow-Studio likes this.
  29. hahasohano

    hahasohano

    Joined:
    May 15, 2022
    Posts:
    3
    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.

    Thank you in advance for your help.
     
  30. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    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.

    D.
     
    hahasohano likes this.
  31. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    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.

    Thanks and enjoy!
    D.
     
    TymNetwork and hahasohano like this.
  32. TymNetwork

    TymNetwork

    Joined:
    Jan 16, 2014
    Posts:
    84
    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.
     
    Crazy-Minnow-Studio likes this.
  33. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    The new update should fix the bug you were seeing.

    Thanks,
    D.
     
  34. hahasohano

    hahasohano

    Joined:
    May 15, 2022
    Posts:
    3
    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.
     
    Crazy-Minnow-Studio likes this.
  35. Ceciaman

    Ceciaman

    Joined:
    Jul 30, 2013
    Posts:
    52
    there's a way to recording SALSA with VR Panorama 360?
     
  36. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    Hello, Please provide more details about what you are wanting to do.

    Thanks,
    D.
     
  37. gogomomusu

    gogomomusu

    Joined:
    Nov 26, 2014
    Posts:
    5
    Hi,

    After trying sometimes to install, but OneClick Addons do not appear in the component menu. Do you have any idea?

    I think it used to be working a little bit before, so I do not know why it is not working now.

    I use Unity 2019.4, my target is Reallusion CC character.

    Anyway, if OneClick does not work, there should be manual ways to use the components for CC character, right?

    Can you tell me it too?

    Thanks,
     
  38. gogomomusu

    gogomomusu

    Joined:
    Nov 26, 2014
    Posts:
    5
    Sorry, I found it in GameObject!
    Thank you for now.
     
    Crazy-Minnow-Studio likes this.
  39. alexis78963_unity

    alexis78963_unity

    Joined:
    May 9, 2019
    Posts:
    14
    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"

    Anybody knwos what can be done about this? It seems that we cannot use Salsa with a character that has animations with blendshapes?
    Linked to this Unity topic: https://forum.unity.com/threads/ble...ator-controller-existing.704009/#post-5799244
     
  40. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    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)): https://forum.unity.com/threads/ani...ate-has-no-curves-keys-for-that-value.440363/ 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.

    UPDATE: Please also read our detailed document discussing animation conflicts from external influences.

    Hope that helps,
    D.
     
    Last edited: Jun 26, 2023
    alexis78963_unity likes this.
  41. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    SALSA LipSync Suite v2.5.5.142
    BugFix Release -- Available Now on the AssetStore

    A couple more fixes. One corrects an issue introduced in the last release (2.5.5.135) where using a OneClick errored, admonishing us for calling DontDestroyOnLoad from an Editor script. That is now fixed. Another resolves some jittery animation when the Suite is configured with a OneClick and has some conflicting external influences. This should be fixed now and will likely get even more rework in the near future. Basically, if the QueueProcessor ran last in the stack, influence wasn't being detected properly. As the fates may have it, when using a OneClick, the QP was the first component added which meant the last to run in the stack.

    Also added a very slight performance improvement for detecting influence on BoneControllers. Every little bit helps.


    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, video and/or screenshots, any errors received, versions of everything, and always include your Unity Invoice Number.

    Thanks and enjoy!
    D.
     
  42. dgoyette

    dgoyette

    Joined:
    Jul 1, 2016
    Posts:
    4,195
    It looks like the OneClick approach in newer versions of Salsa don't work correctly if users choose to place their Salsa install in a non-default folder in their project.

    I've just updated Salsa from 2.5.4.125 to 2.5.5.142. After doing so, the OneClick for CC3/CC4 works differently in an unexpected way.

    Specifically, when I the OneClick, it no longer adds an Audio Source. Instead, I get this message in the console:

    It looks like the reason for this is that the OneClick setup process is trying to find an Audio Clip in the project at a very specific path, but it's not finding it. The code is:

    Code (CSharp):
    1.         private static void ApplyOneClick(GameObject go)
    2.         {
    3.             SalsaOneClickSetup(go, AssetDatabase.LoadAssetAtPath<AudioClip>(OneClickBase.RESOURCE_CLIP));
    4.             EyesOneClickSetup(Selection.activeGameObject);
    5.         }
    The path it's trying to use to find
    OneClickBase.RESOURCE_CLIP
    is:
    Assets/Crazy Minnow Studio/Examples/Audio/Promo-male.mp3
    . However, I don't put Salsa directly under Assets. I put it into Assets/3rd Party/Crazy Minnow Studio. Because of that, it doesn't find the clip, and falls back on expecting "External Analyis".

    For now I'll try keeping Crazy Minnow at Asset root, but this should probably be fixed. (I didn't have any issues with older versions of Salsa being kept at whatever directory organization I wanted.)
     
  43. dgoyette

    dgoyette

    Joined:
    Jul 1, 2016
    Posts:
    4,195
    Also, do one clicks really need to unpack prefabs? I'll explain a workflow that makes me think it doesn't really need to, but you can correct me.

    Let's say I have an FBX model in my project (Kyle.fbx), and I save it as a prefab (Kyle.prefab). Now I make a Variant of that prefab. (Kyle2 Variant.prefab):

    upload_2023-6-29_14-6-52.png

    Now I drop Kyle2 Variant into my scene, and use a OneClick on it. It warns me it needs to unpack the prefab first. Okay. What it's done is change the prefab from being "Kyle2 Variant.prefab" back to being just "Kyle.prefab".

    If I had instead performed the OneClick on Kyle.prefab, it would have unpacked the object to just being Kyle.fbx.

    And interestingly, if I has started with Kyle2 Variant, and performed the OneClick twice, it will double unpack it down to being Kyle.fbx. (Keep going one more time and now it's not even an FBX anymore, just some random gameobjects.)

    So what's going on with this need to unpack prefabs? I could understand if you're righting with annoying prefab stuff, but even if I'm in Prefab edit mode, it still tells me I need to unpack the prefab first. But given that when it unpacks Kyle2 Variant, it's still applying salsa to a prefab, it's not clear to me why it think it needs to unpack things.

    The unpacking is annoying in cases where you want to run the OneClick on an existing prefab that might already be in scenes. I get it if it's really necessary, but is there an example of what goes wrong if you don't unpack? And if so, why does it seem to work fine to apply to a prefab that was a variant?
     
  44. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    Hi, as you discovered, the configuration is altered because it cannot find the demo file. You can edit the RESOURCE_CLIP path to your new path if you like and that will solve your issue. The change to external analysis is a design choice that tries to address custom OneClick creation and official OneClick creations and keep the "one-click" aspect of it all. I have some further changes for the custom OneClick creation that may require changes to the Base again, so I'll take another look at it. For now, I'd recommend editing your Base file with the new location if you still want to use the audio clip and I'll try to implement something more friendly to your scenario.

    Thanks,
    D.
     
  45. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    These OneClicks were originally written back in the Unity 2017 days and prefabs weren't as..."flexible" back then and there really was only an unpack option to work with them in this way. Or rather, it was the easiest and accepted solution to the problem of adding references to the prefab that it knows nothing about. Prefabs are a lot more complex now and perhaps there is another way to do it. I'll have to look into it a bit more, this is the first we've heard about this chain effect happening.

    I just did a quick test on a prefab and a variant (in our base dev 2019.LTS project), applying a OneClick without unpacking and it seemed to work just fine without throwing errors. So, off the cuff, it looks like unpacking isn't necessary now. So, I would say you could remove the prefab check code from the OneClickEditor file and resolve your issue. Of course, this does not apply the prefab changes, you'd need to do that (or create a new prefab/variant) after applying the OneClick. I haven't tested this beyond that but it looks safe enough from this 10,000 foot view. :)

    D.
     
    dgoyette likes this.
  46. dgoyette

    dgoyette

    Joined:
    Jul 1, 2016
    Posts:
    4,195
    Thanks. I'll give that a shot.

    One other thing I ran into that you might want to address in a future version of the CC4 OneClicks: It seems that the standard approach of importing CC characters into Unity (Reallusion's / Soupday's "CC/iC Unity Tools HDRP" package) will duplicate some SMRs as it's setting up the characters. Here you can see that it takes the "Female_Brow" SMR, and makes a copy of it, which it names "Female_Brow_Extracted0". (One of these is the simpler, texture-based brow, while the other is the 3D haircard-based brow. They use different materials, so the importer splits them up.)

    upload_2023-7-1_0-30-39.png

    Anyway, the OneClick's AddSmrSearch is looking for
    ^.*_Brow$
    , so it doesn't find the one with _Extracted0 in the name. This seems like an easy fix by updating the regex:

    Code (CSharp):
    1. AddSmrSearch("^CC_(base|game)_Body(_Extracted\\d)?$");
    2. AddSmrSearch("^.*_Brow(_Extracted\\d)?$");
    3. AddSmrSearch("^Chin_.*$");
    With that change, the OneClick finds the _Extracted0 SMRs as well, and all is well.
     
    Crazy-Minnow-Studio likes this.
  47. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    OK, gotcha. Appreciate the info!

    D.
     
  48. alexis78963_unity

    alexis78963_unity

    Joined:
    May 9, 2019
    Posts:
    14
    Hello and thank you so much!
    The Persistence feature worked perfectly for us! It was exactly what we were looking for.

    Thanks also for all the explanations and resources, I only saw now the link you put in your update, but I'll definitely look into it. Really useful.

    Best,
    Alexis
     
    Crazy-Minnow-Studio likes this.
  49. dgoyette

    dgoyette

    Joined:
    Jul 1, 2016
    Posts:
    4,195
    Quick question regarding Slate Cinematic Sequencer (and using Salsa in Edit mode in general):

    I’m using Slate for cutscene, and it seems that there doesn’t even need to be a custom clip for doing this with Slate; simply using an Actor Audio Clip is enough. And in Play mode, it works fine. However, I can’t seem to get the lip sync to work in Edit mode, when previewing the cutscene.

    Any idea of Salsa works in the editor when playing a cutscene in Edit mode? Or is it play-mode only?
     
  50. Crazy-Minnow-Studio

    Crazy-Minnow-Studio

    Joined:
    Mar 22, 2014
    Posts:
    1,399
    SALSA has its own editor mode preview, by enabling it, it might work.
    upload_2023-7-4_10-11-48.png

    This drives emotes as well, but not Eyes. It is also very heavy due to the Inspector, so expect runtime to be much smoother.

    D.
     
    dgoyette likes this.