Search Unity

UMA - Unity Multipurpose Avatar on the Asset Store!

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

  1. pegassy

    pegassy

    Joined:
    Sep 28, 2017
    Posts:
    49
    I had done that earlier. However, I cannot preconfigure blinking and such when I add it through the Utility Recipes. There is actually a prefab named "UMADynamicCharactarAvatarWithExpressions", which just seems to be an object with the Dynamic Character Avatar and Expression Player on it. How do I go about changing component values if I add it through Utility Recipes?

    Thank you.
     
  2. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    I'm not sure where that prefab came from, but I can't find it in the UMA distribution. As well, I looked at the initialize() function in UMAExpressionPlayer.cs, and it shouldn't be throwing an error when it can't find the UMAData:

    Code (CSharp):
    1.         public void Initialize()
    2.         {
    3.             blinkDelay = Random.Range(minBlinkDelay, maxBlinkDelay);
    4.  
    5.             if(Camera.main != null)
    6.                 _mainCameraTransform = Camera.main.transform;
    7.  
    8.             if (umaData == null)
    9.             {
    10.                 // Find the UMAData, which could be up or down the hierarchy
    11.                 umaData = gameObject.GetComponentInChildren<UMAData>();
    12.                 if (umaData == null)
    13.                 {
    14.                     umaData = gameObject.GetComponentInParent<UMAData>();
    15.                 }
    16.                 if (umaData == null)
    17.                 {
    18.                     return;
    19.                 }
    20.             }
    21.  
    22.             if ((expressionSet != null) && (umaData != null) && (umaData.skeleton != null))
    23.             {
    24.                 if (umaData.animator != null)
    25.                 {
    26.                     Transform jaw = umaData.animator.GetBoneTransform(HumanBodyBones.Jaw);
    27.                     if (jaw != null)
    28.                         jawHash = UMAUtils.StringToHash(jaw.name);
    29.  
    30.                     Transform neck = umaData.animator.GetBoneTransform(HumanBodyBones.Neck);
    31.                     if (neck != null)
    32.                         neckHash = UMAUtils.StringToHash(neck.name);
    33.  
    34.                     Transform head = umaData.animator.GetBoneTransform(HumanBodyBones.Head);
    35.                     if (head != null)
    36.                         headHash = UMAUtils.StringToHash(head.name);
    37.                 }
    38.                 initialized = true;
    39.             }
    40.         }
    Is it possible you have some older code in there somehow?
     
  3. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    Most likely it's broken GPU skinning. Unity has trouble with "GPU Skinning" in some versions and on some drivers. They thought they had fixed it in 2018.3.9, but it appears its only fixed for some driver versions. You can disable GPU Skinning in your player settings.
     
    hopeful likes this.
  4. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    Not that I'm aware of. I can never actually get the WebAssembly stuff working on my site, so I can't even test it.
     
  5. pegassy

    pegassy

    Joined:
    Sep 28, 2017
    Posts:
    49
    I have recently deleted all UMA files and reinstalled it from Asset Store, so I do not think I may have any old files.

    However, I just checked again now and the prefab with expressions is indeed in the legacy folder:

    upload_2019-6-26_10-43-22.png

    So, how may I change the properties of the expression player if I add it through the recipe loader?
     
  6. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    I was able to compile the current version for WebGL into a folder, and open it in Microsoft Edge (Chrome doesn't support loading from file). I had to increase the memory allocation to 1024.

    webglvers.jpg
     
  7. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    The slot executes a script:

    Script.jpg

    in the OnDNAApplied function, at the bottom, set any properties you need to set.
     
  8. pegassy

    pegassy

    Joined:
    Sep 28, 2017
    Posts:
    49
    Thank you so much.

    I have discovered that if I leave the UMA Expression Player on the character deactivated, and then add the recipe to additional recipes, it simply activates the component in when I hit play, it keeps my previous choices, and does not give the error.
     
    Last edited: Jun 26, 2019
    Jaimi likes this.
  9. ChickenHero

    ChickenHero

    Joined:
    Jul 18, 2016
    Posts:
    79
    If I specify the memory size, the error will not appear but the character will not be displayed.

    Is there anything missing from my procedure?
    1. Create a new project and import UMA 2.8.1.
    2. Create a script to specify memory size in Asset / Editor.
    3. Press "Add Build References" button of "UMA Global Library". (All sample races are set.)
    4. Open "UMA DCS Demo-Simple Setup" and add Scene in Build Settings.
    5. Changed "Compression Format" to Disabled in "Project Settings".
    5. Build start.
    6. Open the file after build on Edge.

    The script that specifies the memory size used this.
    Code (CSharp):
    1. using UnityEditor;
    2. using UnityEngine;
    3.  
    4. [InitializeOnLoad]
    5. class EnableThreads
    6. {
    7.     static EnableThreads()
    8.     {
    9.         PlayerSettings.WebGL.memorySize = 1024;
    10.     }
    11. }
     
  10. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    Only difference is that I set the memory size in the player settings using the dialog (see below).
    But this appears to be missing in later versions of Unity... So perhaps it's not needed anymore?

    But it sounds like something is happening when it tries to build the character, something is missing. You might want to look in the javascript console to see if there are any errors. You might also try rebuilding the global library from the project.

    PlayerSettingsWebGL.jpg
     
    Last edited: Jun 27, 2019
  11. Yerkisk

    Yerkisk

    Joined:
    Jul 28, 2015
    Posts:
    38
    We have an issue that has been plaguing us for quite a few months now, and no matter what we've tried so far we have been unable to get rid of it.

    We get a Null Reference Exception at UMA.DynamicUMADna.ValidateValues at set_dnaAsset. This makes our Android players crash and it seems to happen every 1 in 50, so really hard to figure out what is causing it. Here's the code we're using to create the UMAs :

    Code (CSharp):
    1. public bool characterCreated = false;
    2.  
    3.     private bool rebuildCharacter = false;
    4.  
    5.     public DynamicCharacterAvatar avatar;
    6.  
    7.     private string UMARecipe = "";
    8.  
    9.     void Update()
    10.     {
    11.         if(rebuildCharacter)
    12.         {
    13.             avatar.BuildCharacterEnabled = true;
    14.             rebuildCharacter = false;
    15.         }
    16.     }
    17.  
    18.     void OnEnable()
    19.     {
    20.         avatar.CharacterCreated.AddListener(OnCharacterCreated);
    21.     }
    22.  
    23.     void OnDisable()
    24.     {
    25.         avatar.CharacterCreated.RemoveListener(OnCharacterCreated);
    26.     }
    27.  
    28.     public void SetupBio(string uma)
    29.     {
    30.         UMARecipe = uma;
    31.  
    32.         avatar.BuildCharacterEnabled = false;
    33.         rebuildCharacter = false;
    34.  
    35.         if (characterCreated)
    36.         {
    37.             LoadAvatarFromRecipe();
    38.         }
    39.         else
    40.         {
    41.             SetLoadRecipe();
    42.         }
    43.     }
    44.  
    45.     private void LoadAvatarFromRecipe()
    46.     {
    47.         var asset = ScriptableObject.CreateInstance<UMATextRecipe>();
    48.         asset.recipeString = UMARecipe;
    49.  
    50.         avatar.LoadFromRecipeString(asset.recipeString);
    51.         rebuildCharacter = true;
    52.     }
    53.  
    54.     private void SetLoadRecipe()
    55.     {
    56.         var asset = ScriptableObject.CreateInstance<UMATextRecipe>();
    57.         asset.recipeString = UMARecipe;
    58.  
    59.         avatar.SetLoadString(asset.recipeString);
    60.         rebuildCharacter = true;
    61.     }
    62.  
    63.     protected void OnCharacterCreated(UMAData data)
    64.     {
    65.         characterCreated = true;
    66.     }
    We're not building in a thread as we're waiting for the update to set the build option to true. When we want to create one UMA, we call the SetupBio with the UMA Recipe string (previously obtained from a avatar.GetCurrentRecipe() call). Anything above that you guys see that could cause this kind of NRE to happen?
     
  12. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    Can you do a debug build, and give us a stack trace where it is blowing up?

    Also this code:

    Code (CSharp):
    1.     private void LoadAvatarFromRecipe()
    2.     {
    3.         var asset = ScriptableObject.CreateInstance<UMATextRecipe>();
    4.         asset.recipeString = UMARecipe;
    5.         avatar.LoadFromRecipeString(asset.recipeString);
    6.         rebuildCharacter = true;
    7.     }
    Doesn't need to create an asset. You can just load the string like this:

    Code (CSharp):
    1.     private void LoadAvatarFromRecipe()
    2.     {
    3.         avatar.LoadFromRecipeString(UMARecipe);
    4.         rebuildCharacter = true;
    5.     }
    I'm wondering if the problem is related to switching races. The Female race had some additional DNA that the male did not have. Is there a way you can see if that is the case?



     
  13. ChickenHero

    ChickenHero

    Joined:
    Jul 18, 2016
    Posts:
    79
    I did not understand the cause well, but when I created a project with Unity2018.2.21f1 and converted it to Unity20019.1.7f1, the characters were displayed in the WebAssembly build with Unity2019.
    It seems that changing memory from script doesn't matter either.
     
  14. Ne0mega

    Ne0mega

    Joined:
    Feb 18, 2018
    Posts:
    755
    Any way to select occluded faces for mesh hide asset? Inverse would only let me select everything occluded, in this case eyes and mouth, but I want to separate eyes and mouth, and I have had no good results with using texture select.

    (Oh, looks like box select will penetrate and select occluded areas, so works for me for now)
     
    Last edited: Jun 30, 2019
  15. Yerkisk

    Yerkisk

    Joined:
    Jul 28, 2015
    Posts:
    38
    I'll try to get a stack trace. The problem is that since it's on our user's devices (never seem to happen while in the editor) it's a bit harder to reproduce constantly.
    Also, we do instantiate a male avatar and then load the recipe string no matter the sex in the recipe, and it does seem to happen when we have a mix of male and female avatars loaded that way. Should we use two different prefabs, and instantiate the male or female version based on the race identified in the recipe before loading the recipe string? We were under the impression that the load recipe would take care of that. Or switch the race before loading the recipe string maybe?
     
  16. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    The Load should definitely be taking care of that - that's why I'm curious about the stack trace, it might help us figure out where it's gone wrong. Like you, I've done this in the editor and in PC builds a thousand times with no problems, so it's difficult to figure out where it might be. Someone had this specific issue a few months back as well, and I'm not sure what the final solution was (or if there was one). For now, I'd say to try loading the separate prefab and see if that solves it - that in itself would be helpful to know.
     
  17. Ne0mega

    Ne0mega

    Joined:
    Feb 18, 2018
    Posts:
    755

    I am looking in the Crowd Generator, (UMA Core Demo - Crowd Recipes) can not find any documentation on it, but it does indeed seem to be swapping overlays, before pushing them to the final slot. Maybe saying "swap overlays/build wardrobe recipes" was incorrect, since I did not mean the "build wardrobe recipes" part?

    It appears to use recipe fragments which share the same slot.. still not sure how it all goes together, but it does appear possible.

    Basically I want to generate random characters, save them, then load them later when the scene is re-visited. My current challenge (for the past month) is wanting the hair, eyebrows, face and beard all share the same texture space, but also be swappable.
     
    Last edited: Jul 2, 2019
  18. egherbaz

    egherbaz

    Joined:
    Sep 21, 2012
    Posts:
    34
    @Jaimi: when I made a char with parts, and 1 of those parts change, will all the char rebuild or just that part that im changing? will be the same performance to have the model separated in parts than to have just 1 body and use the mesh hide utility? and for the textures, what is better? to have just one big texture that contains all the parts and use the overlay or to have small textures for each part? what i want to know is, will only the overlay load when it change? or will both textures rebuild when an overlay change? for example, lets say that the main texture that holds the parts is 2048x2048 but the overlay is just 64x64, does the code use the texture in mem and just load the 64? or the code rebuild all no matter if the main texture is already loaded in mem. (btw i tested with non power of 2 overlays and works fine but don't know if that is a good practice)
     
  19. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    The core demos are all non-DCS, and are from the original release of UMA. In this model, there are slot names, but no framework to say what a slot is, so it's "whatever you want it to be". There are 3 random crowd generation scenes:

    1. UMA Core Demo Crowd - which uses a "UMACrowdRandomSet" to specify slots and overlays to generate a crowd.
    2. UMA Core Demo Crowd Recipes - which uses a UMARecipeMixer to mix UMATextRecipes.
    3. UMA DCS Demo - Random Characters - which introduces the "RandomAvatar" and the "UMARandomizer", which lets you specify races, DNA ranges, wardrobe items, etc.

    Both 1 & 2 are the "UMA Core" (original UMA) examples. If you use those, you have to manage the slots/overlays, and you can't use the new features (like Mesh Hide assets, automatic slot hiding, avatar shared colors, Wardrobe, base races, etc. etc). If you don't need those features, and you want to manage all the mesh pieces and overlays, then this is still a viable route.

    #3 is using the new DCS randomizer. It uses a "UMARandomAvatar" and a set of "UMARandomizer" objects to specify races, wardrobe items, DNA, and colors. In the end, this creates a DynamicCharacterAvatar (DCA). The UMARandomAvatar contains a function:

    public void GenerateRandomCharacter(Vector3 Pos, Quaternion Rot, string Name)

    It uses a prefab that you assign and generates a random DCA (from the UMARandomizers assigned), names it, and places it at the pos and rotation specified. Since it uses a prefab, you can write your own script to hook into the CharacterCreated event on the DCA, and then save it to a string (using GetCurrentRecipe).

    Note that a DCA can also write over overlays if you create additional Wardrobe Items for the overlays and assign them to the slots. An example of this is the face and beard.

    The existing base race has a face slot, and a face overlay. On this, you can layer another face using a wardrobe recipe by adding the existing face slot, and the new overlay to it. Same thing with a beard. The extra face slots are "merged out" during the build.
     
  20. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    If you are using a DynamicCharacterAvatar, and you change any wardrobe item, then the entire character is rebuilt and the texture atlases are recreated. This is so you get the fastest possible rendering character.

    When hiding items, there are three ways to do it. In order of best to "not so best", they are:

    1. Suppressing wardrobe items. This is done at the highest level. This is so you can say "When I put on pants, ALWAYS hide any Underwear". In this case, any underwear textures and slots are tossed out right at the beginning of the build. This is more of a conceptual thing - no geometry involved. The items never get evaluate or merged, they are simply discarded right off. This is the fastest, as it happens BEFORE the recipe is generated.

    2. Hiding slots.This is done in a second pass after all recipes have been merged and the recipe is generated. The completed recipe is scanned for any hidden slots, and they (and their overlays) are removed. This is useful for removing parts of the base race - for example, gloves that completely cover the hands can simply remove the hands. This is not as fast as suppressing items, but it works at the individual slot level, and happens AFTER the recipe is generated, but BEFORE the mesh and textures are generated.

    In both of those cases, the mesh parts (slots) that are removed are never added to the Skinned Mesh. You have a skinned mesh with the minimum number of triangles and vertexes.

    3. Mesh Hide assets. Mesh Hide assets happen during the Mesh generation itself (at the end of the build chain). All the recipes have been merged, and the UMA is scheduled to be built. The Combiner gets the Mesh Hide information that it accumulated during the recipe build, and then it removes specific triangles they specify from the mesh itself. The vertexes are still there, it's just they're not submitted to render.

    Each of these have their place, and for speed 1 > 2 > 3. But the tradeoff is convenience. Mesh Hide assets have a larger footprint, take a bit longer, but man are they convenient. You don't have to worry about covering extra stuff during the modelling process, etc.

    So that was sort of a long way of saying "Mesh hide assets are slightly slower" It's better to use #1 and #2 when you can. But depending on what you are displaying, number of characters, your target devices, memory usage, etc - it may not matter. Combine all 3 methods - that's what I do.
     
  21. egherbaz

    egherbaz

    Joined:
    Sep 21, 2012
    Posts:
    34
    so it does not matter if i use one big texture and overlay it or use small textures for each slot because no matter what it will rebuild all to make the atlas.
    and what about using non power of 2 for the overlays? for example the benefit of using a large texture is that i can for example make the head using like 1024*900 pixels on the main texture, and not 1024 x 1024, even i tested already and is working, is it a good practice to not use a power of 2 texture on the overlays?
    BTW i forgot to say that im using .dds format, as i understand .dds does not need any processing from unity
     
  22. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    Well, if you use smaller textures and divide your character up into slots, then the overlays for those slots can be removed when using #1 and #2, saving space in the Texture atlas.
    Overfilling the texture atlas isn't a good idea, it will result in some textures being shrunk down to fit. This can lead to some serious loss of quality in some cases. I've been meaning to work on the resize algorithm for this but haven't found the time yet.

    When using NPO2 textures, you might have some small funny artifacts at the lower mip levels, or when the atlas is overfull. In theory they're slightly slower when rendering, but in this case, it's only happening during the atlas build anyway, so likely doesn't matter. I'd say to go for it unless you see a problem on your target device.
     
  23. egherbaz

    egherbaz

    Joined:
    Sep 21, 2012
    Posts:
    34
    thank you very much for your time

    till now i didn't detect any artifact with the NPO2, could be, as you said because they are tiny and i don't see them xD.
    I have another question, forgive me if it is a stupid one, but in the case that my wardrobes always replace the entire base mesh, do i still need to register the base mesh as slot? or can i handle the base mesh as a wardrobe slot too?
    For example my base mesh are nude legs, but always my pants wardrobes will replace those nude legs
     
  24. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    There has to be a base race recipe, but I haven't tested it with a blank recipe. In theory it should work.
     
  25. egherbaz

    egherbaz

    Joined:
    Sep 21, 2012
    Posts:
    34
    Thanks Jaimi, I will try that blank recipe.
     
  26. Ne0mega

    Ne0mega

    Joined:
    Feb 18, 2018
    Posts:
    755
    You will not get animation to work until all bones have a skinned mesh renderer.
    I tried a text recipe not exactly blank, but with just mouth and eyes.
    You have to add more wardrobe recipes to your DCA to complete the Avatar, or animations dont work.
     
  27. egherbaz

    egherbaz

    Joined:
    Sep 21, 2012
    Posts:
    34
    Thanks for the info, but in my case, all bones will always have a skinned mesh on them, no matter if the skinned mesh is a wardrobe slot or a base mesh slot, because a wardrobe can just be a texture overlay or it can be a slot (skinned mesh) with its overlay.

    I just asked that question because i have to decide how to register my models
    1 way is by making a base nude model, then dress it by overlapping the wardrobes (which will add more poly count to the model if i need to show some polys of the base mesh) w/o counting that i have to test animations to check that wardrobes don't intersect the base mesh .
    2nd way is by just making the wardrobes, and if i have to show skin parts, I'll just make what they call a texture adjustment on the wardrobe (to be able to change just the skin color). that way i only add to the rendered char the poly count of the wardrobe and not both (base mesh and wardrobe). following what Jaimi said, replacing wardrobes is faster, and I saved the time to check animations for mesh intersections.
    Anyways I have to test xD
     
    Last edited: Jul 2, 2019
  28. egherbaz

    egherbaz

    Joined:
    Sep 21, 2012
    Posts:
    34
    What is the use of UMA Asset Collection?
     
  29. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    That's from before the global library. It was a way of grouping races/slots/overlays so you could quickly add them to a scene library.
     
  30. ledentsov

    ledentsov

    Joined:
    Feb 8, 2017
    Posts:
    145
    Hello,
    I have created a custom Race and a custom base recipe for it (UMAData.UMARecipe). Also there are few additional recipes (UMAData.UMARecipe). These recipes have different slots and layouts for head, eyes, mouth and etc.
    I can modify my custom race by setting the "Base Race Recipe" to one of these and it works well with the "UmaDynamicCharacterAvatar". But there are some difficulties when I need to have more than one "UmaDynamicCharacterAvatar" on the scene with the various recipes. Modifying "Base Race Recipe" field of the race doesn't work in this case.
    What is the right and easiest way to have multiple characters on the scene from the same race but with different base recipes?
     
  31. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    A DynamicCharacterAvatar is designed to have one race with one base race recipe. It sounds like you are wanting to have multiple races. You can create as many races as you want, each with different base race recipes. You can then mark them compatible with your first race (on the racedata), and they can share wardrobe items, etc.
     
  32. DeadSeraph

    DeadSeraph

    Joined:
    Sep 8, 2017
    Posts:
    97
    Hi guys. Running into an issue with recipes. All I'm trying to do is just alter the texture of one of the existing shirts UMA comes with (just trying to get a handle on how the system works before I dive into creating more complex stuff). When I select the recipe, and try to pick the new texture I made, it won't let me select it. It will just default back to the original. I've created the new texture based on the old one, and just multiplied a color layer and some text over top of it and exported it as a different texture, so it shouldn't be a problem with the UV's or something.

    The texture is the exact same size as the original, and same format (png), but it doesn't want to let me pick it. I tried turning off the "transparency is alpha" box on the new texture but that didn't seem to make a difference. Shouldn't I just be able to drop it into the albedo of the recipe to change it quickly?

    Also, is it possibly to copy and paste recipes for quick editing like this, or do you have to create a new one from scratch every time?






    (in the second screenshot I've highlighted the default texture and the texture I'm trying to replace it with).

    Thanks in advance.
     
  33. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    You don't actually change the textures in the Wardrobe editor itself. You need to change the overlay.

    You can either create a new overlay (duplicate the existing one in the project, renaming it, AND renaming the overlay name, and adding it to the global library, and then replacing the overlay in the recipe).

    OR (the easy way, but changes the existing overlay so any other recipe that uses it is changed also) - press the "Inspect" button on the overlay, that will open up a new inspector window, and you can change the texture out in that window.

    Also, you should be able to copy/paste the recipes. I usually just select the recipe I want to copy, and hit Ctrl-D to duplicate it. Be sure to rename it, and add it to the library.

     
  34. DeadSeraph

    DeadSeraph

    Joined:
    Sep 8, 2017
    Posts:
    97
    Thanks Jaimi that's exactly what I needed to know. You guys are super helpful :)
     
    hopeful likes this.
  35. ledentsov

    ledentsov

    Joined:
    Feb 8, 2017
    Posts:
    145
    Thank you for clarification. Yes it works if I create multiple races. But I thought there is a way don't create the race for each base recipe.
     
  36. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    You could always stuff everything into a utility recipe and swap that out. But the races were created to specifically make this easier so you didn't have to do that kind of stuff.
     
  37. PandaLiv

    PandaLiv

    Joined:
    Jul 4, 2019
    Posts:
    1
    Hello Again! So we integrated the latest branch and didn't find anywhere you could add predefined DNA to the wardrobe. Just that you could load it in the DynamicAvatar. Is the feature still not added or did we misunderstand or miss something? :)
     
  38. btckey

    btckey

    Joined:
    Nov 1, 2012
    Posts:
    40
    I really like your UMA 2
    How can I reduce assembly weight for WebGL
    What can be removed, optimize
    I need only one race: woman or man
    What components, scripts need to use to create only a male without clothes

    if i create using avatar.ChangeRace("HumanMaleDCS"); Build weight 115 megabytes
    that's a lot
     
    Last edited: Jul 4, 2019
  39. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    This hasn't been completed yet.
     
  40. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    You'll need to review all the textures and slots in the global library, and remove the ones that are not needed.
     
  41. arteria

    arteria

    Joined:
    May 31, 2007
    Posts:
    2,189
    New BattleWizard release from Arteria3d today



    & With Torso Armour



    Pack Contains:

    • 8 Slots
    • 8 Overlays
    • 8 Wardrobe Recipes
    SLOTS Included & Overlays & Wardrobe Elements for:

    • Tabbard
    • Hood
    • Torso Armour
    • Shoulder Armour
    • Gauntlets
    • Belt
    • Boots
    • Cape
    Pack costs $25,but any customer who email arteria3d@live.co.uk with the code '4th' can purchase for just $9 today only

    Product Page:
    https://arteria3d.myshopify.com/products/battle-wizard
     
    Firlefanz73, hopeful and Jaimi like this.
  42. egherbaz

    egherbaz

    Joined:
    Sep 21, 2012
    Posts:
    34
    If I have a base Head with blendshapes for facial expressions, and I have another different head but with the same topology and same facial expressions, what is recommended: use it as another blendshape or use it as a wardrobe?
    between facial bones and blendshapes, which one you recommend most?
     
  43. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    Generally, I swap out heads as wardrobe items.
    I usually prefer using bones for everything, as that makes creating add-ons easier. The only thing I would use Blendshapes for is the face itself - so this is kind of up to you.
     
  44. egherbaz

    egherbaz

    Joined:
    Sep 21, 2012
    Posts:
    34
    Yes Jaimi, I use the blendshapes only on the face, for the rest I use bones, I mean if for example I want big hands I use a boneAdjust.

    One more question: do I need to put on the slot build the seemless mesh every time that I register a wardrobe? or that is only for registering the base parts?
     
  45. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    The seams mesh is for when you've taken a unified mesh, and then cut it up into individual slots. You put the original mesh in the seams mesh field, and the partial mesh in the slot mesh field, and it will find and fix the normals on the slot mesh (which get messed up by the slicing and dicing process in Blender).

    If you haven't done that, you shouldn't be using the Seams mesh, as it will possibly mess up the normals.
     
  46. egherbaz

    egherbaz

    Joined:
    Sep 21, 2012
    Posts:
    34
    So I only have to use it if at any time i get seems on the model?
     
  47. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    Yeah. But also you only need to use it when you're generating a slot that is part of a whole as well. You almost never need to use it for anything except the base race parts (head/torso/etc).
     
    egherbaz likes this.
  48. digimbyte

    digimbyte

    Joined:
    Jun 23, 2012
    Posts:
    58
    I have a question regarding the Global Library and how to manage those assets.
    we have been looking at using UMA as our player base framework but custom recipes has had me concerned.



    The project I am working on involves player made content and has well over 10k assets of clothing and attachments in our database. is that going to be a problem for UMA?
    All the content needs to be loaded and unloaded dynamically. and in the long run, we have no idea how many items we may have, potentially over 4 million or more and it probably isn't ideal to handle the Global Library as demonstrated in the above video and I was interested if there are work arounds or solutions?
     
  49. arteria

    arteria

    Joined:
    May 31, 2007
    Posts:
    2,189
    (Thankyou to UMA Team for allowing us to post these packs here)

    New pack released today



    SPECIAL FREEBIE Today
    Any customer who emails arteria3d@live.co.uk with the code 'UMA Friday' within the next 12 hours, can receive this pack for free, as a special thank you to the UMA team and community

    To check out Arteria3d's other UMA costumes - check out the link below too

    https://arteria3d.myshopify.com/collections/uma
     
  50. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    The Global Library is there for the people who don't need to dynamically add things to their project.
    UMA can also dynamically download and load new content from Asset Bundles.

    There are sample asset bundles included, as well as a sample scene "UMA DCS Demo - Using Asset Bundles"
    Please review the "UMA Asset Bundles" chapter in the documentation for more information.