Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice
  3. Join us on November 16th, 2023, between 1 pm and 9 pm CET for Ask the Experts Online on Discord and on Unity Discussions.
    Dismiss Notice

UMA - Unity Multipurpose Avatar on the Asset Store!

Discussion in 'Assets and Asset Store' started by FernandoRibeiro, Dec 24, 2013.

  1. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    Yes - UMA is a library for generating characters from pieces. It combines them into a single mesh (when possible) and creates texture atlasses for it.

    UMA has some example meshes and races that come with it, and it's pretty easy to use those (and get costumes from the asset store). it's also pretty easy to retarget clothing from other packages (or create your own).

    However, making a brand new race is a more advanced feature and has a bit of a learning curve.

    If you have a set of meshes already that you like (with 10 heads, 10 body parts, etc), and don't need to add all the adjustment DNA (bones for morphing), then you could likely get it set up in UMA with minimal hassle.
     
    K1kk0z90_Unity likes this.
  2. K1kk0z90_Unity

    K1kk0z90_Unity

    Joined:
    Jun 2, 2013
    Posts:
    90
    Thank you very much for your answer @Jaimi !
    So if I want to change a body part (e.g. the Head) with another mesh, how should I proceed? Could you please point me to the correct documentation to study how to do it? I'm currently studying on this wiki: http://umawiki.secretanorak.com/ but documentation is quite minimal. Does it have something something to do with the concept of Slot what I want to achieve?
    Thank you again.
     
  3. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    Let's start at the beginning - do you already have heads/bodies/artwork that you've created or purchased? Will you be using a 3rd party set of races, like O3n? Or will you be using the example art that comes with UMA as your base?
    Will you be using premade wardrobe items like those from willbgameart, or Arteria? The latter is by far the easiest.

    Here are some basics as well:

    Base UMA:
    Slots: These are individual mesh pieces. They can be combined together into one skinned mesh by the Generator.
    Overlays: These are the textures and materials that go onto a slot. You can layer these to achieve various effects (ie, put dirt/blood over the top, etc).
    DNA: These are the adjustments that are made to the character as part of the recipe.
    Recipes: This is a group of DNA, slots, and their overlays that are combined to create an avatar.
    Race: This is the base definition for a single modifiable entity. It has a base recipe that is the default look for any character that uses this race. It also defines what wardrobe slots are available for that race.

    You can use "Base UMA" without anything else. To do so, you would need to manage all those pieces above. But there is also a part of UMA that does all that for you (DCS):

    DCS:
    Dynamic Character Avatar: This is the avatar that you use in your game. By default, the avatar looks like the base race recipe. Avatars can be saved/restored to strings or files, and re-purposed - so you can pool them.
    The avatar is built from his base race recipe + DNA + Wardrobe.

    Wardrobe: This is the group of wardrobe items (recipes) that the avatar is "wearing". Note: this can include things like makeup, different ears, in addition to clothing.

    Wardrobe Recipe: This is a group of slots and overlays that are combined to create a single wearable piece of equipment or clothing. It can contain multiple slots and overlays.

    Wardrobe Slot: This is basically a "mount point" for Wardrobe recipes. A maximum of one wardrobe recipe can be added to a wardrobe slot -- for example, if an avatar had "blue capri pants" on his legs, then adding "red denim bellbottom pants" to his legs would remove the "blue capri pants".

    Also, we have a slack channel that is easier to go back and forth on if you're interested in joining. Just PM me your email address & name, and I can add you.



     
  4. Sorn

    Sorn

    Joined:
    Jul 17, 2013
    Posts:
    14
    Question and apologies if it's already been asked:
    1. Is there any way to find 'sharedcolors' off of a UMATextRecipe reference?
    Maybe I'm being daft, but I can't see it for the life of me.
     
  5. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    On a UMATextRecipe, the data is packed as JSON in a string. So you can either read the "recipeString" and parse that, or you can load that using PackedLoad() into a UMAPackRecipe and get the shared colors from there.
     
  6. Sorn

    Sorn

    Joined:
    Jul 17, 2013
    Posts:
    14
    Oh very nifty, thank you very much.
     
  7. Sorn

    Sorn

    Joined:
    Jul 17, 2013
    Posts:
    14
    Another for you fine gentlemen:
    I'm using a MeshHideAsset for the Warlock Mask off willb's project.
    Then I'm suppressing the Mask's slot when I equip a Helmet.
    But the Mask's MeshHideAsset isn't disappearing when the Mask is suppressed by the Helmet.
    So I get the Mask to disappear and the Helmet shows up fine, but the suppressed nose and brow regions of the head are still missing.
    Is this a bug? Or is there maybe some dirty flag I'm missing? Or just not a feature maybe?
     
  8. kenamis

    kenamis

    Joined:
    Feb 5, 2015
    Posts:
    386
    It's a known bug. I have it already on our trello list to fix for the next version. I can find a fix for it this weekend and post it on the forums in the meantime.
     
    hopeful likes this.
  9. kenamis

    kenamis

    Joined:
    Feb 5, 2015
    Posts:
    386
    @Sorn

    this is in "DynamicCharacterAvatar.cs" in function "BuildCharacter", the collection of meshHide assets was moved to it's own loop over the recipes and checks if the slot is suppressed.

    Code (csharp):
    1.  
    2.             if ((WardrobeRecipes.Count > 0) && activeRace.racedata != null)
    3.             {
    4.                 foreach (UMATextRecipe utr in WardrobeRecipes.Values)
    5.                 {
    6.                     if (utr.suppressWardrobeSlots != null)
    7.                     {
    8.                         if (activeRace.name == "" || ((utr.compatibleRaces.Count == 0 || utr.compatibleRaces.Contains(activeRace.name)) || (activeRace.racedata.IsCrossCompatibleWith(utr.compatibleRaces) && activeRace.racedata.wardrobeSlots.Contains(utr.wardrobeSlot))))
    9.                         {
    10.                             if (!SuppressSlotsStrings.Contains(utr.wardrobeSlot))
    11.                             {
    12.                                 foreach (string suppressedSlot in utr.suppressWardrobeSlots)
    13.                                 {
    14.                                     SuppressSlotsStrings.Add(suppressedSlot);
    15.                                 }
    16.                             }
    17.                         }
    18.                     }
    19.                 }
    20.  
    21.                 foreach (UMATextRecipe utr in WardrobeRecipes.Values)
    22.                 {
    23.                     //Collect all the MeshHideAssets on all the wardrobe recipes
    24.                     if (utr.MeshHideAssets != null && !SuppressSlotsStrings.Contains(utr.wardrobeSlot))
    25.                     {
    26.                         foreach (MeshHideAsset meshHide in utr.MeshHideAssets)
    27.                         {
    28.                             if (meshHide != null && meshHide.asset != null)
    29.                             {
    30.                                 if (!MeshHideDictionary.ContainsKey(meshHide.asset))
    31.                                 {   //If this meshHide.asset isn't already in the dictionary, then let's add it and start a new list.
    32.                                     MeshHideDictionary.Add(meshHide.asset, new List<MeshHideAsset>());
    33.                                     MeshHideDictionary[meshHide.asset].Add(meshHide);
    34.                                 }
    35.                                 else
    36.                                 {   //If this meshHide.asset is already in the dictionary AND the meshHide isn't already in the list, then add it.
    37.                                     if (!MeshHideDictionary[meshHide.asset].Contains(meshHide))
    38.                                         MeshHideDictionary[meshHide.asset].Add(meshHide);
    39.                                 }
    40.                             }
    41.                         }
    42.                     }
    43.                 }
    44.  
     
    Sorn and hopeful like this.
  10. Sorn

    Sorn

    Joined:
    Jul 17, 2013
    Posts:
    14
    Works perfectly. Thank you very much.
     
    kenamis likes this.
  11. Sorn

    Sorn

    Joined:
    Jul 17, 2013
    Posts:
    14
    I seem to be losing sharedcolor information on wardrobe recipes when I restart Unity.
    I establish the shared color sets I'd like and then test them and everything is fine.
    Then I restart Unity and some of the wardrobes have lost the values, while others are fine.
    Anyone else experiencing something similar?
     
  12. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    Are you losing shared color names?
    If you turned off "automatic updates" when editing, you have to manually save them.
    If that's not what is happening, then there is a bug somewhere in the detection and saving. There's a button to force save the shared color collections ("save collection") if that is the case.
    Let me know if this is the case, and I'll look into it.

    If the color names are still there, but you're losing the value of the colors, then that's undefined behavior. It has to merge all the shared colors together, so you can't count on it keeping the values.
     
  13. Sorn

    Sorn

    Joined:
    Jul 17, 2013
    Posts:
    14
    You got it exactly there, was my fault.
    I was editing their recipestrings via my custom editorwindow and not calling for them to be saved to their assetfiles. I suppose if I then inspected the wardrobeRecipe or changed a variable on it, it saved, but if I didn't, it didn't save heh.
    This is my first foray into scriptableobjects lol, sorry about that :)
     
    Last edited: May 28, 2018
    hopeful likes this.
  14. diegosdias

    diegosdias

    Joined:
    Jul 26, 2016
    Posts:
    12
    I am working on a VR Platform and would love to use UMA on UWP.
    I read on the thread that the support is on the roadmap of the 2.8 version.
    Is there an estimated date for the update? (If there is a test version of it, I would gladly help to test)
     
  15. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    No, sorry. We'll probably ship 2.8 without it, and push it to 2.9, as Unity has removed some functionality from UWP that UMA uses, so it's getting significantly harder to support.
     
  16. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,628
    UMA 2.8? What new goodies are in that? :)

    (BTW, the UMAwiki says the latest version is 2.5.)
     
  17. kenamis

    kenamis

    Joined:
    Feb 5, 2015
    Posts:
    386
    Nothing major that I see, mostly just bug fixes and optimizations. The slot assets will now be binary serialization and the option to have the corresponding mesh be serialized as binary without changing the project settings (so the rest can stay as text). I found this makes a huge difference for large meshes and lots of blendshapes in terms of speed and garbage. Also the Global Library is faster with the binary serialization. Jaimi added the initial features of a nice race updating editor tool.
    Personally, I'd like to get scriptable render pipeline supported in 2.8, but no guarantees. I think I'm pretty close.
     
    cwmanley, Bantichai and hopeful like this.
  18. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,628
    Sounds wonderful! :D
     
  19. Aaron2348

    Aaron2348

    Joined:
    Dec 12, 2016
    Posts:
    326
    Hi , I'm new to Uma. So far It seems good for character optimization, I'm confused about Dk Uma though what is it for?
     
  20. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,628
    DK UMA is a branch from UMA 1, though I imagine they've updated with UMA though the years.
     
    Aaron2348 likes this.
  21. Aaron2348

    Aaron2348

    Joined:
    Dec 12, 2016
    Posts:
    326
    Thanks hopeful, but what is the purpose of Dk does it make Uma learning easier for new users?
     
  22. TeagansDad

    TeagansDad

    Joined:
    Nov 17, 2012
    Posts:
    955
    No, it absolutely does not. ;)

    DK has its own system for managing races and clothing slots that is conceptually similar to the Wardrobe Recipes and Dynamic Character System that are now part of the core UMA package.

    DK predates the DCS, but I don't see much need for it anymore. It was a complex system built on top of another complex system and it adds yet more dependencies to your project.
     
    Aaron2348 likes this.
  23. Aaron2348

    Aaron2348

    Joined:
    Dec 12, 2016
    Posts:
    326
    Thanks, well do you know anywhere I can get solid tutorials to learn all that's to know regarding UMA?
     
  24. kenamis

    kenamis

    Joined:
    Feb 5, 2015
    Posts:
    386
    SecretAnorak has been making some amazing tutorials;

    https://www.patreon.com/secretanorak/overview

     
    twobob, hopeful and Aaron2348 like this.
  25. Firlefanz73

    Firlefanz73

    Joined:
    Apr 2, 2015
    Posts:
    1,300
    Hello,

    I have a Problem with my "Talking Heads" which are a UMA head that is using SALSA to make lip sync talk.
    https://forum.unity.com/threads/sal...expression-system.242135/page-19#post-3523771

    After upgrading to Unity 2018.1.3f1 it looks like this (with 2017 before it was okay):



    I see an error message:

    Exception: Bone not found.
    UMA.UMASkeleton.GetRotation (Int32 nameHash) (at Assets/UMA/Core/StandardAssets/UMA/Scripts/UMASkeleton.cs:615)
    UMA.PoseTools.UMAExpressionPlayer.Update () (at Assets/UMA/Core/StandardAssets/UMA/Scripts/UMAExpressionPlayer.cs:88)

    I put a break point into and the nameHash given in this case is "0".

    The stack trace Looks like this:
    > Quaternion UMA.UMASkeleton:GetRotation (Int32)+0x0 at C:\Unity\Biotopia3D\Assets\UMA\Core\StandardAssets\UMA\Scripts\UMASkeleton.cs:606 C#
    Void UMA.PoseTools.UMAExpressionPlayer:Update ()+0x29 at C:\Unity\Biotopia3D\Assets\UMA\Core\StandardAssets\UMA\Scripts\UMAExpressionPlayer.cs:88 C#

    Do you have an idea why headHash is "0" and how to fix it?
    It is the latest UMA develop Version from GitHub from yesterday, but after upgrading to Unity 2018 and with an older UMA Version I had the same problem.
    Was there a name of a bone or an animation changed Maybe? I would assume that, but in Unity 2017 it was okay...

    Thanks a lot!
     
  26. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    Hi Firlefanz, I tested the internal scenes with the expression player, and didn't have any issue. No bone names have changed. I'm guessing that something must have happened during your scene upgrade, or perhaps there is a problem in SALSA itself. I'll see if I can get that going.

    Jaimi

     
  27. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    I added Salsa + RandomEyes, and had it working in 2018.1 without issue. At this point in time, I'm thinking something has gone wrong in your project. Have you added any slots or done anything else? Recreated the t-pose or anything?
     
  28. Firlefanz73

    Firlefanz73

    Joined:
    Apr 2, 2015
    Posts:
    1,300
    Thanks a lot for helping me again Raimi :)

    For creating only head I use the following (the last part is the most important, the top part is Slots and overlays only):

    Code (CSharp):
    1.     private void CreateHeadSlots (string EyesSlot, string EyesOverlay, string EyebrowOverlay, string MouthSlot, string MouthOverlay, string FaceSlot, string FaceOverlay, Color skinColor)
    2.     {
    3.         try {
    4.             if (string.IsNullOrEmpty (EyesSlot) || string.IsNullOrEmpty (EyesOverlay)) {
    5.                 if (IsMale) {
    6.                     EyesSlot = "MaleEyes";
    7.                     EyesOverlay = "EyeOverlay";
    8.                 }
    9.                 else {
    10.                     EyesSlot = "FemaleEyes";
    11.                     EyesOverlay = "EyeOverlay";
    12.                 }
    13.             }
    14.             if (string.IsNullOrEmpty (MouthSlot) || string.IsNullOrEmpty (MouthOverlay)) {
    15.                 if (IsMale) {
    16.                     MouthSlot = "MaleInnerMouth";
    17.                     MouthOverlay = "InnerMouth";
    18.                 }
    19.                 else {
    20.                     MouthSlot = "FemaleInnerMouth";
    21.                     MouthOverlay = "InnerMouth";
    22.                 }
    23.             }
    24.             if (string.IsNullOrEmpty (FaceSlot) || string.IsNullOrEmpty (FaceOverlay)) {
    25.                 if (IsMale) {
    26.                     FaceSlot = "MaleFace";
    27.                     FaceOverlay = "MaleHead01";
    28.                 }
    29.                 else {
    30.                     FaceSlot = "FemaleFace";
    31.                     FaceOverlay = "F_face 1 overlay PBR";
    32.                 }
    33.             }  
    34.  
    35.             umaData.umaRecipe.slotDataList [0] = slotLibrary.InstantiateSlot (EyesSlot);
    36.             umaData.umaRecipe.slotDataList [0].AddOverlay (overlayLibrary.InstantiateOverlay (EyesOverlay, eyeColors [activeEyeColor]));
    37.  
    38.             umaData.umaRecipe.slotDataList [1] = slotLibrary.InstantiateSlot (MouthSlot);
    39.             umaData.umaRecipe.slotDataList [1].AddOverlay (overlayLibrary.InstantiateOverlay (MouthOverlay));
    40.  
    41.             umaData.umaRecipe.slotDataList [2] = slotLibrary.InstantiateSlot (FaceSlot);
    42.             if (skinColor != Color.black) {
    43.                 umaData.umaRecipe.slotDataList [2].AddOverlay (overlayLibrary.InstantiateOverlay (FaceOverlay, skinColor));
    44.             }
    45.             else {
    46.                 umaData.umaRecipe.slotDataList [2].AddOverlay (overlayLibrary.InstantiateOverlay (FaceOverlay, skinColors [activeSkinColor]));
    47.             }
    48.         }
    49.         catch (System.Exception ex) {
    50.             Debug.LogWarning (string.Format ("Error in CreateHeadSlots Eyeslot {0} MouthSlot {1} FaceSlot {2}",
    51.                 EyesSlot, MouthSlot, FaceSlot) + ex.ToString ());
    52.         }
    53.     }
    This is calling it:

    Code (CSharp):
    1.     public void CreateTalkingHead (ushort npcNumber = 0)
    2.     {
    3.         Color SkinColor = Color.black;
    4.         try {
    5.             if (IsMale) {
    6.                 umaData.umaRecipe.SetRace (raceLibrary.GetRace ("HumanMale"));
    7.             }
    8.             else {
    9.                 umaData.umaRecipe.SetRace (raceLibrary.GetRace ("HumanFemale"));
    10.             }
    11.  
    12.             CreateHeadSlots (EyesSlot, EyesOverlay, EyebrowOverlay, MouthSlot, MouthOverlay, FaceSlot, FaceOverlay, SkinColor);
    13.  
    14.             //Zusatz
    15.             if (!string.IsNullOrEmpty (EyebrowOverlay)) {
    16.                 if (IsMale)
    17.                     umaData.umaRecipe.slotDataList [2].AddOverlay (overlayLibrary.InstantiateOverlay (EyebrowOverlay, hairColors [activeHairColor]));
    18.                 else
    19.                     umaData.umaRecipe.slotDataList [2].AddOverlay (overlayLibrary.InstantiateOverlay (EyebrowOverlay, hairColors [activeHairColor]));
    20.             }
    21.             if (!string.IsNullOrEmpty (EarSlot)) {
    22.                 umaData.umaRecipe.slotDataList [7] = slotLibrary.InstantiateSlot (EarSlot);
    23.                 umaData.umaRecipe.slotDataList [7].AddOverlay (overlayLibrary.InstantiateOverlay (EarOverlay, skinColors [activeSkinColor])); //ElvenEars
    24.             }
    25.  
    26.             //umaData.umaRecipe.slotDataList[2].AddOverlay(overlayLibrary.InstantiateOverlay("MaleHair02", HairColor));
    27.             if (activeHairShape > 0 && (!IsPlayer || string.IsNullOrEmpty (helmetSlot))) {
    28.                 if (IsMale) {
    29.                     if (activeHairShape < 10) {
    30.                         umaData.umaRecipe.slotDataList [15] = slotLibrary.InstantiateSlot ("M_Hair " + activeHairShape);
    31.                         umaData.umaRecipe.slotDataList [15].AddOverlay (overlayLibrary.InstantiateOverlay ("Hair1", hairColors [activeHairColor]));
    32.                     }
    33.                     else if (activeHairShape > 9) {
    34.                         umaData.umaRecipe.slotDataList [15] = slotLibrary.InstantiateSlot ("MaleHairSlick01");
    35.                         umaData.umaRecipe.slotDataList [15].AddOverlay (overlayLibrary.InstantiateOverlay ("MaleHairSlick01_Overlay", hairColors [activeHairColor]));
    36.                     }
    37.                 }
    38.                 else {
    39.                     umaData.umaRecipe.slotDataList [15] = slotLibrary.InstantiateSlot ("F_Hair " + activeHairShape);
    40.                     umaData.umaRecipe.slotDataList [15].AddOverlay (overlayLibrary.InstantiateOverlay ("Hair1", hairColors [activeHairColor]));
    41.                 }                          
    42.             }
    43.             else if (!string.IsNullOrEmpty (BeingData.HelmetOrHairSlot)) {
    44.                 umaData.umaRecipe.slotDataList [13] = slotLibrary.InstantiateSlot (BeingData.HelmetOrHairSlot);
    45.                 if (BeingData.HelmetOrHairSlot.ToLower ().Contains ("hair"))
    46.                     umaData.umaRecipe.slotDataList [13].AddOverlay (overlayLibrary.InstantiateOverlay (BeingData.HelmetOrHairOverlay, hairColors [BeingData.ActiveHairColor]));
    47.                 else
    48.                     umaData.umaRecipe.slotDataList [13].AddOverlay (overlayLibrary.InstantiateOverlay (BeingData.HelmetOrHairOverlay));
    49.             }
    50.             if (IsMale && activeBeardShape > 0) {
    51.                 umaData.umaRecipe.slotDataList [16] = slotLibrary.InstantiateSlot ("M_Beard " + activeBeardShape);
    52.                 umaData.umaRecipe.slotDataList [16].AddOverlay (overlayLibrary.InstantiateOverlay ("Hair1", hairColors [activeHairColor]));
    53.             }      
    54.         }
    55.         catch (System.Exception ex) {
    56.             Debug.LogWarning ("Error creating UMA Talking Head " + ex.ToString ());
    57.         }
    58.     }
    And all that is called by this:

    Code (CSharp):
    1.     void GenerateHead (ushort npcNumber)
    2.     {
    3.         try {
    4.             IsMale = Globals.GetGender (npcNumber);
    5.             //UnityEngine.Debug.LogWarning ("UMAMaker GenerateHead: " + npcNumber);
    6.             // Create new gameobject and add uma
    7.             if (generator == null) {
    8.                 Initialize ();
    9.             }
    10.            
    11.             umaDynamicAvatar = gameObject.GetComponent<UMADynamicAvatar> ();
    12.             if (umaDynamicAvatar == null)
    13.                 umaDynamicAvatar = gameObject.GetComponentInChildren<UMADynamicAvatar> ();
    14.             if (umaDynamicAvatar == null)
    15.                 umaDynamicAvatar = gameObject.GetComponentInParent<UMADynamicAvatar> ();
    16.  
    17.             doSave = true;
    18.             if (umaDynamicAvatar == null) {
    19.                 umaDynamicAvatar = gameObject.AddComponent<UMADynamicAvatar> ();
    20.  
    21.                 // Initialise avatar and reference
    22.                 umaDynamicAvatar.Initialize ();
    23.                 umaData = umaDynamicAvatar.umaData;
    24.  
    25.                 // Setup morph references
    26.                 umaDna = new UMADnaHumanoid ();
    27.  
    28.                 // Attach our generator
    29.                 umaDynamicAvatar.umaGenerator = generator;
    30.                 umaData.umaGenerator = generator;
    31.  
    32.                 // Setup slot array
    33.                 umaData.umaRecipe.slotDataList = new SlotData[numberOfSlots];
    34.  
    35.                 // Setup morph references              
    36.                 umaData.umaRecipe.AddDna (umaDna);
    37.             }
    38.             else { //here for salsa stuff which already contains umaData
    39.                 umaData = umaDynamicAvatar.umaData;
    40.                 umaDynamicAvatar.umaGenerator = generator;
    41.                 umaData.umaGenerator = generator;
    42.                 // Setup slot array
    43.                 umaData.umaRecipe.slotDataList = new SlotData[numberOfSlots];
    44.                 // Setup morph references
    45.                 umaDna = (UMADnaHumanoid)umaData.umaRecipe.GetDna<UMADnaHumanoid> ();
    46.             }
    47.             // Create
    48.             CreateTalkingHead (npcNumber);
    49.  
    50.             umaDynamicAvatar.animationController = animController;
    51.  
    52.             // Generate our DMA
    53.             umaDynamicAvatar.UpdateNewRace ();
    54.         }
    55.         catch (UnityException ex) {
    56.             UnityEngine.Debug.LogError ("UMAMaker GenerateHead Error: " + ex.ToString ());
    57.         }
    58.         umaData.Dirty (true, true, true);
    59.     }
    I guess the error has to be here then. But I did no Change and in Unity 2017 it worked with the same UMA Version (latest develop from GitHub 2 days ago) and the Version before, too.

    Any idea? Thanks a lot!
     
  29. Firlefanz73

    Firlefanz73

    Joined:
    Apr 2, 2015
    Posts:
    1,300
    There is no exeception or something unexpected in this. And the heads Looks good, until the first Animation starts, then they start deforming just like in the Picture above.

    PS: I have complete UMA also Talking in my intro, they still work. The Problem is when I only have the heads.
     
    Last edited: Jun 9, 2018
  30. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    Have you tried pre-generating the bones for the heads with the bone builder?
     
  31. Firlefanz73

    Firlefanz73

    Joined:
    Apr 2, 2015
    Posts:
    1,300
    Nope. How do I do that? Sounds interesting.

    I also tried to get the Ragdoll sample working, but failed (do not see a single uma, all seem to have no uma data).
    This Looks extremly interesting too :)

    PS: At the end, I have

    umaDynamicAvatar.UpdateNewRace ()
    umaData.Dirty (true, true, true

    Wasn't that to rebuild complete?
     
    Last edited: Jun 9, 2018
  32. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    Run the bone builder, and add your character gameobject to it. It will ask you for a base recipe. (just select the "humanmale base recipe" from the popup. That will pregenerate all the required bones.

    As for the ragdoll, the scene should load and work. It does use the DynamicCharacterAvatar, though. I think you can probably make it work with the old DynamicAvatar, if you add the "PhysicsHDRecipe" text recipe to the recipes on it though.
     
  33. Firlefanz73

    Firlefanz73

    Joined:
    Apr 2, 2015
    Posts:
    1,300
    Thanks a lot Raimi!

    Doing Bone builder from the Unity menu on the prefab does not help, on the gameobject dynamically added to the scene it also does not seem to help.

    For testing I added to UMAExpressionPlayer in Update method:

    Code (CSharp):
    1.         void Update()
    2.         {
    3.             if (!initialized)
    4.             {
    5.                 Initialize();
    6.                 return;
    7.             }
    8.             if (headHash == 0)
    9.             {
    10.                 umaData.Dirty(true, true, true);
    11.                 Transform jaw = umaData.animator.GetBoneTransform(HumanBodyBones.Jaw);
    12.                 if (jaw != null)
    13.                     jawHash = UMAUtils.StringToHash(jaw.name);
    14.  
    15.                 Transform neck = umaData.animator.GetBoneTransform(HumanBodyBones.Neck);
    16.                 if (neck != null)
    17.                     neckHash = UMAUtils.StringToHash(neck.name);
    18.  
    19.                 Transform head = umaData.animator.GetBoneTransform(HumanBodyBones.Head);
    20.                 if (head != null)
    21.                     headHash = UMAUtils.StringToHash(head.name);
    22.             }
    23.  
    24.             // Fix for animation systems which require consistent values frame to frame
    25.             Quaternion headRotation = umaData.skeleton.GetRotation(headHash);
    26.             Quaternion neckRotation = umaData.skeleton.GetRotation(neckHash);
    if (headHash == 0) is now every frame, this does not seem to help. Is there a way to re-attach the bones with the script somehow?

    I got the Ragdoll Scene working now, thanks. This is very interesting :)
     
  34. dudedude123

    dudedude123

    Joined:
    Aug 24, 2013
    Posts:
    128
    I had setup the model as the wardrobe and it still wont appear on the UMA 2018-06-10_19h18_39.png 2018-06-10_19h19_13.png
     
  35. Bantichai

    Bantichai

    Joined:
    Nov 6, 2016
    Posts:
    138
    Can I just ask, has anyone else experienced massive slowdown in the editor with 2.7? 2.6 seemed quite fast, after I placed the DCS prefab in the same scene I work with, but even with that my memory shoots up to 80% from 30% with UMA 2.7 installed.
     
  36. twobob

    twobob

    Joined:
    Jun 28, 2014
    Posts:
    2,058
  37. Bantichai

    Bantichai

    Joined:
    Nov 6, 2016
    Posts:
    138
  38. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    If you haven't yet, you might want to turn off "also show unindexed types"
     
  39. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    I don't really understand what is going on. Do you have any trouble with any of the sample scenes? The "DCS asset bundle" sample scene has the expression player loaded, can you check if that has any of the issues?

     
    Firlefanz73 likes this.
  40. Firlefanz73

    Firlefanz73

    Joined:
    Apr 2, 2015
    Posts:
    1,300
    I'll try when I am home, Thanks Jaimi.
     
  41. Firlefanz73

    Firlefanz73

    Joined:
    Apr 2, 2015
    Posts:
    1,300
    This one is working. There are three uma singing or moving their mouth somehow :)

    Is there a way to force Standard uma bones into the gameobject by script?
     
  42. ZeonIr

    ZeonIr

    Joined:
    Feb 23, 2014
    Posts:
    15
    Hi can i please get Full DNA tutorial joints / blendshapes for UMA 2.7


    i wanna change face by blendshapes/morphs and make eye move and blink i got model that works in UMA
    tho im stuck on DNA and blendshapes/morphs

    i wanna do some parts by blendshapes and some by joints.

    SecretAnorak Videos old
    Text info old
     
  43. Deatonjc

    Deatonjc

    Joined:
    Apr 22, 2017
    Posts:
    25
    having some trouble importing a mesh to uma followed the steps in the tutorial and in the documentation just when i go to apply my recipe the avatar ceases to load.. also im using max which doesnt have any tutorials in google search.. what can i do?
     
  44. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    Secretanorak has some max tutorials. Theyre older, but the process to make a slot (mesh piece) is the same. Start with this one:

     
  45. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    Theres some newer race creation videos by secretanorak on his youtube page. You might also want to join the slack, theres several people on it who have made new races. Pm me for an invite if you want to join.

     
  46. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    Youd have to write it, but it woykd be possible. I think maybe somethong is wrong with your slot though, or maybe the animation that is playing?
    Not really sure.
    You might try creating the heads using a dcs avatar, and using the bonebuilder on that, to see if you get different behavior.
    If youre using the power tools, make sure the bones arent being stripped out.
     
  47. Deatonjc

    Deatonjc

    Joined:
    Apr 22, 2017
    Posts:
    25
    thanks jaimi but looks like i need help creating a texture.. the old button in the tutorial is no longer there
     
  48. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,171
    Not sure what you're missing. This video shows the overlay creation, is this where you had problems?



    What were you trying to do?
     
  49. Deatonjc

    Deatonjc

    Joined:
    Apr 22, 2017
    Posts:
    25
    ya i had to right click and create a material under uma.. still having trouble loading the mesh the error says it was destroyed
     
  50. kenamis

    kenamis

    Joined:
    Feb 5, 2015
    Posts:
    386
    Can you post the exact error message or a screenshot?