Search Unity

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,208
    What's wrong? I don't see any issues when I use that feature. Is the character not supposed to be brown? Are you using the PBR textures and models?
     
  2. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    I am trying to do this right now... I am making a DynamicSlotLibrary that you can use that will optionally load assets from everywhere (Resources, loaded assetBundles)- with the following code if you have a recipe that uses a slot that is in the Resources folder but which is not in the slotLibrary in you scene it will still work... There is alot of work to do on this though, so I only post for the purposes of contibuting/sharing/testing/playing...

    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections.Generic;
    3. using UMA;
    4. using System;
    5. using System.IO;
    6.  
    7. public class DynamicSlotLibrary : SlotLibrary {
    8.  
    9.     //extra fields
    10.     public bool dynamicallyAddFromResources;
    11.     public bool dynamicallyAddFromAssetBundles;
    12.     public string assetBundleNamesToSearch;
    13.  
    14.     /*void Awake()
    15.     {
    16.         Debug.Log ("I do Awake");
    17.         ValidateDictionary();
    18.         UpdateDynamicSlotLibrary ();
    19.     }
    20.     public void Start(){
    21.         Debug.Log ("I do Start");
    22.         UpdateDynamicSlotLibrary ();
    23.     }
    24.     public void OnEnable()
    25.     {
    26.         Debug.Log ("I do OnEnable");
    27.         UpdateDynamicSlotLibrary ();
    28.     }
    29.     public void Update(){
    30.         Debug.Log ("I do Update");
    31.         UpdateDynamicSlotLibrary ();
    32.     }*/
    33.  
    34.     public void UpdateDynamicSlotLibrary(){
    35.         if (dynamicallyAddFromResources) {
    36.             AddSlotsFromResources ();
    37.         }
    38.         if (dynamicallyAddFromAssetBundles) {
    39.             AddSlotsFromAssetBundles ();
    40.         }
    41.     }
    42.  
    43.     private void AddSlotsFromResources(int? nameHash = null){
    44.         SlotDataAsset[] foundSlots = Resources.LoadAll<SlotDataAsset>("");
    45.         for (int i = 0; i < foundSlots.Length; i++) {
    46.             if (nameHash != null) {
    47.                 if (foundSlots [i].nameHash == nameHash) {
    48.                     AddSlotAsset (foundSlots [i]);
    49.                 }
    50.             } else {
    51.                 AddSlotAsset (foundSlots [i]);
    52.             }
    53.         }
    54.     }
    55.  
    56.     private void AddSlotsFromAssetBundles(int? nameHash = null){
    57.         AssetBundleManifest thisAssetBundleManifest = new AssetBundleManifest ();
    58.         string[] assetBundles = thisAssetBundleManifest.GetAllAssetBundles ();
    59.         List<SlotDataAsset> foundSlotsList = new List<SlotDataAsset> ();
    60.         for (int i = 0; i < assetBundles.Length; i++) {
    61.             var assetBundleToSearch = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, assetBundles[i]));//From the docs BUT do asset bundles always get downloaded to the streaming asset path?
    62.             if (assetBundleToSearch != null) {
    63.                 SlotDataAsset[] foundSlots =  assetBundleToSearch.LoadAllAssets<SlotDataAsset> ();
    64.                 for (int ii = 0; ii < foundSlots.Length; ii++) {
    65.                     //maybe we could do with something here where AddSlotAsset returns a bool
    66.                     if (nameHash != null) {
    67.                         if (foundSlots [ii].nameHash == nameHash) {
    68.                             AddSlotAsset (foundSlots [ii]);
    69.                         }
    70.                     } else {
    71.                         AddSlotAsset (foundSlots [ii]);
    72.                     }
    73.                     //then if it returned false we could unload the asset directly?
    74.                     //AssetBundle.Destroy(foundSlots[i]);?
    75.                 }
    76.             }
    77.         }
    78.     }
    79.     public override SlotData InstantiateSlot(string name)
    80.     {
    81.         SlotData res;
    82.         try{
    83.             res = base.InstantiateSlot (UMAUtils.StringToHash(name));
    84.         }catch{
    85.             res = null;
    86.         }
    87.         if (res == null)
    88.         {
    89.             //we try to load the slot dynamically
    90.             var nameHash = UMAUtils.StringToHash(name);
    91.             if (dynamicallyAddFromResources) {
    92.                 AddSlotsFromResources (nameHash);
    93.             }
    94.             if (dynamicallyAddFromAssetBundles) {
    95.                 AddSlotsFromAssetBundles (nameHash);
    96.             }
    97.             res = base.InstantiateSlot (name);
    98.             if (res == null) {
    99.                 throw new UMAResourceNotFoundException ("SlotLibrary: Unable to find: " + name);
    100.             }
    101.         }
    102.         return res;
    103.     }
    104.     public override SlotData InstantiateSlot(int nameHash)
    105.     {
    106.         SlotData res;
    107.         try{
    108.             res = base.InstantiateSlot (nameHash);
    109.         }catch{
    110.             res = null;
    111.         }
    112.         if (res == null)
    113.         {
    114.             if (dynamicallyAddFromResources) {
    115.                 AddSlotsFromResources (nameHash);
    116.             }
    117.             if (dynamicallyAddFromAssetBundles) {
    118.                 AddSlotsFromAssetBundles (nameHash);
    119.             }
    120.             res = base.InstantiateSlot (nameHash);
    121.             if (res == null) {
    122.                 throw new UMAResourceNotFoundException ("SlotLibrary: Unable to find: " + nameHash);
    123.             }
    124.         }
    125.         return res;
    126.     }
    127.     public override SlotData InstantiateSlot(string name, List<OverlayData> overlayList)
    128.     {
    129.         SlotData res;
    130.         try{
    131.             res = base.InstantiateSlot (UMAUtils.StringToHash(name));
    132.         }catch{
    133.             res = null;
    134.         }
    135.         if (res == null)
    136.         {
    137.             //we do something
    138.             var nameHash = UMAUtils.StringToHash(name);
    139.             if (dynamicallyAddFromResources) {
    140.                 AddSlotsFromResources (nameHash);
    141.             }
    142.             if (dynamicallyAddFromAssetBundles) {
    143.                 AddSlotsFromAssetBundles (nameHash);
    144.             }
    145.             res = base.InstantiateSlot (name);
    146.             if (res == null) {
    147.                 throw new UMAResourceNotFoundException ("SlotLibrary: Unable to find: " + name);
    148.             }
    149.         }
    150.         res.SetOverlayList(overlayList);
    151.         return res;
    152.     }
    153.     public override SlotData InstantiateSlot(int nameHash, List<OverlayData> overlayList)
    154.     {
    155.         SlotData res;
    156.         try{
    157.             res = base.InstantiateSlot (nameHash);
    158.         }catch{
    159.             res = null;
    160.         }
    161.         if (res == null)
    162.         {
    163.             if (dynamicallyAddFromResources) {
    164.                 AddSlotsFromResources (nameHash);
    165.             }
    166.             if (dynamicallyAddFromAssetBundles) {
    167.                 AddSlotsFromAssetBundles (nameHash);
    168.             }
    169.             res = base.InstantiateSlot (nameHash);
    170.             if (res == null) {
    171.                 throw new UMAResourceNotFoundException ("SlotLibrary: Unable to find: " + nameHash);
    172.             }
    173.         }
    174.         res.SetOverlayList(overlayList);
    175.         return res;
    176.     }
    177.  
    178. }
    179.  
    It looks very different to the normal SlotLibrary because I cannot sus out how to make my class inherit from and add to the normal one (I am having a nightmare with that- PM me if you want some money to sort it out)
     
    Last edited: Mar 3, 2016
  3. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    In general, I prefer not to attach my camera directly on the player (or one if their bones), as they shake too much. I've attached a modified version of the Orbit Cam if you want to check it out. the "Target Bone" part should contain the path to the bone target, not just the bone name. For example, on my UMA demo, I use "Root/Global/Position/Hips/LowerBack/Spine/Spine1/Neck" to target the characters neck (was actually better than targeting the head).

    Edit:

    Oops. Missed the "First Person" part. So that script probably won't be helpful. Would still likely be better to not mount the camera directly on the bone though, but put on a script that would adjust the position each frame with some damping.

    As for seeing the teeth - don't add them to the avatar when you're in first person mode.
     

    Attached Files:

  4. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    Regards SlotLibrary.cs -- Is this an 'Example' script? It seems pretty fundamental to me, I dont think UMA works if you delete the Example folder. Shouldnt SlotLibrary, OverlayLibrrary and RaceLibrary and all deps be in UMA/Core?
     
  5. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    And 'SkeletonTools','UMAPackedRecipeBase' 'UMASlotVerifyWizard' and 'UMATextRecipe'...
    I know I can move them myself but the point is that UMA should work without the Example folder. Right now you have to have it because 'Core' scripts seem to be in there...
     
  6. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,685
    I might be remembering wrong, but one thing that can look like that is when you use a texture made for gamma space while you're in linear space.

    So if you are using legacy UMA while in deferred / linear, it might look like that. Legacy UMA (UMA1) was designed to be used in forward / gamma.

    EDIT: You may need this additional plugin to activate PBR for UMA, if what you're doing is migrating from UMA1 to UMA2 ...
    https://www.assetstore.unity3d.com/en/#!/content/42601
     
    Last edited: Mar 3, 2016
  7. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    "UMA" is the base core stuff to combine meshes and textures. All the rest of that stuff (the avatars, the libraries, etc) are just sample code. Yes, everyone's using them because it's really complicated without them, but still just sample code.
     
  8. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    I'm a bit devastated by this discovery I must say. I thought UMA was a system that made modular characters possible in a game, but it turns out, currently, UMA is only capable of creating modular characters in the editor....

    Because of my lack of understanding starting out (which is nobody's fault but my own) I have spent MONTHS making my game work with UMA only to understand now that it cant do what I needed in the first place- which is modular characters that the end user can download bits of.

    I suppose I did not know what I was asking but I need to sort this out and PLEASE if anyone is up for making UMA do this lets collaborate and make it happen
     
  9. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    Ok so its more complicated. I see from what you are saying that if a developer downloaded UMA and deleted the 'Example' folder, so long as they made their own versions of evrything in it, it would probably work. But that is a bit like saying if a Unity developer downloaded Unity and deleted the 'Demos' folder, even though Unity would be completely screwed, the developer should know that and create his own versions of the scripts required to make Unity work- or just not delete the 'Demos' folder
    My point is simply that UMA should work completely with all its functionality if you delete the Examples folder
     
  10. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    Yes - at it's core it's an SDK for modular characters, not a full solution -- but that also makes it very flexible. A lot of people don't need that level of flexibility. Some people just want to pre-create avatars, and use them as-is. That's what DynamicAvatar is for. Some people need a bit more--runtime customization, etc. That's why I made the CharacterAvatar (which derives from DynamicAvatar). It's sort of "UMA For RPG's".
     
  11. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    Basically I am totally and utterly screwed now, so I will do what ever it takes to make UMA capable of loading assets from assetBundles and share this with the community. It would be great though if I could have access to one or two of you wizards, just to bounce my code of and get some guidance if I am going in the right or wrong direction...
     
    Moerk75 likes this.
  12. h8spaCec4EspUdE

    h8spaCec4EspUdE

    Joined:
    Jan 8, 2015
    Posts:
    9
    Thanks for yours' replies. I am using UMA2 and unity5.
    I find that after changing the following code seems to solve the problem.
    TextureProcessPROCoroutine.cs > destinationTexture = new RenderTexture(..., RenderTextureReadWrite.Linear) > RenderTextureReadWrite.sRGB.

    The render texture sampling for normal map seems needed to be done in sRGB space.
     
  13. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    What version of Unity are you using? From what I read in the docs, it doesn't seem like converting a normal map with RGB color conversions is appropriate. I wonder if there is a Unity bug here?

    Edit - From the documentation:

    However, if your render texture will contain non-color data (normals, velocities, other custom values) then you don't want Linear<->sRGB conversions to happen. This is the Linear read-write mode. When this mode is set on a render texture, RenderTexture.sRGB will return false.

    Not arguing with what you're seeing, just that I'm not seeing this issue, and the docs seem to say using sRGB on normals is incorrect. Maybe it needs to be reported/fixed
     
  14. h8spaCec4EspUdE

    h8spaCec4EspUdE

    Joined:
    Jan 8, 2015
    Posts:
    9
    I am using Unity 5.3.3p1, deferred, linear.
     
  15. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    I notice that the class RaceData in RaceData.cs is marked as partial but if I try to extend it in any way (even just making a cs file with a class that is declared as 'public partial class RaceData' with nothing else in it) makes RaceData break completely. with the error 'Assets/UMA/Example/Scripts/RaceLibrary.cs(9,12): warning CS0436: The type `UMA.RaceData' conflicts with the imported type `UMA.RaceData'. Ignoring the imported type definition'

    Does anyone know why?
     
  16. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    Yeah, Unity makes some of this kind of fun. You can't see it in the Unity editor, but your application is compiled in several passes. Things under "Standard Assets" (like RaceData) get compiled into the first pass. If you extend the class, your extension has to be in the first pass also.
     
  17. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    Bingo! Ok thats fantastic. BUT RaceInspector is NOT marked as partial (in the same way that RecipeEditor is for example) so if I add things to RaceData using the partialness of it I can't make those things show up in the inspector... Is this by design or is this an oversight?
     
  18. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    Does RaceInspector need a RaceInspectorBase do you think? Like how do we get any extra stuff into OnInspectorGUI in RaceInspector? you cant even add stuff to RaceInspector because that wont enable you to use them in another partial class...
     
  19. DirtyHippy

    DirtyHippy

    Joined:
    Jul 17, 2012
    Posts:
    224
    I am not sure I understand this statement. You certainly can change character equipment, or even DNA, at run-time. This is the primary purpose of UMA IMHO. Editing characters at design-time and saving them is more of a nice side effect. There are plenty of games that use UMA right now - 7 days to die and reign of kings are two examples, both of which allow customization up front and modular equipment changes at run-time (and since I have implemented this as well, I know it works with the exception of a non-breaking, known UMA bug that I hope will eventually get fixed).
     
  20. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    Yeah what I am talking about is that you have to define everything in your Slot/Race/Overlay Library in the game you release. Right now UMA cannot dynamically gather what slots/overlays/races the user has downloaded AFTER they download the initial executable- correct me if I am wrong...
     
  21. DirtyHippy

    DirtyHippy

    Joined:
    Jul 17, 2012
    Posts:
    224
    If all UMA does is use these asset libraries for is a lookup registry, it would be pretty trivial to load the asset bundle, and then load the slots/overlays and add them to the overlay/slot library dynamically. I don't know if that would work, but it would be the first thing I would try.
     
    hopeful likes this.
  22. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    I had to jump through some hoops to get something similar to this working with the recipe editor. What are you changing on the Race?
     
  23. Moerk75

    Moerk75

    Joined:
    Apr 16, 2013
    Posts:
    22
    I have a question about the elven ears. Are they replacing the existing ears through code or?. I mean in the separated characters there are only 7 slots.
     
  24. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    You can create a recipe that contains the ears (if you use the Modular Head). You can manage recipes easier if you use the Character System here: http://forum.unity3d.com/threads/uma-character-system.371051/
     
    Moerk75 likes this.
  25. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    My thinking is that right now in your characterSystem the Avatar defines the base recipes of a Male and Female Race- this seems a bit topsy turvy to me. The Race already defines its own Expression set so why not its base recipe? Also the Wardrobe Enum is set in stone and I dont think it should be. What I was going to do was set this in the Race aswell. Then with a wardrobe slot, instead of setting the 'Sex' you would assign compatible races and the races would define the wardrobe enum which you could then set (except it would not actually be an enum anymore obviously)...

    So long story short I need to extend the RaceInspector but there is currently no way of doing that...
     
  26. alfchee

    alfchee

    Joined:
    Jun 14, 2012
    Posts:
    19
    Hi, I have a question about the animations that can be used in UMA. Actually I have a stock of animations but it seems it cannot be used because of the Avatar does not fit, when the animation should be playing, the character get freeze and sinks from the waist on the floor.

    How can I avoid that?
     
  27. SecretAnorak

    SecretAnorak

    Joined:
    Mar 19, 2014
    Posts:
    177
    That usually happens if you forget to switch your anims or you avatar over to humanoid.
     
  28. tomi-trescak

    tomi-trescak

    Joined:
    Jul 31, 2013
    Posts:
    78
    Dears, I am trying to create my new race but I cannot make the seams to close when animated. Please see the attached gif. I do transfer weights from the Unified model (this on behaves correctly). But the moment I start to animate the Separated model, the seams break. Any advice? Thanks!

     

    Attached Files:

  29. tomi-trescak

    tomi-trescak

    Joined:
    Jul 31, 2013
    Posts:
    78
    I have one more question about texturing UMA. My avatars have three textures albedo/normal/metallic But no matter what I select for UMA avatar only the base texture is applied to tohe generated avatar. Please see the screenshot. Left is how it is supposed to look. Right is what comes out of UMA. Please do not mind the eyes.

    [EDIT] When I save the UMA as prefab, using PowerTools UMA is displayed correctly.

     

    Attached Files:

    Last edited: Mar 15, 2016
    Moerk75 likes this.
  30. Moerk75

    Moerk75

    Joined:
    Apr 16, 2013
    Posts:
    22
    I get the same issues with seems and texture
     
  31. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,685
    Is it a linear space issue? If so, maybe something in the UMA2 package got broken ...?

    I believe Unlogick fixed the prefab-making process in Power Tools as a separate thing, so that might be why making a prefab still works.
     
  32. SecretAnorak

    SecretAnorak

    Joined:
    Mar 19, 2014
    Posts:
    177
    Hi there.

    Don't get too excited just yet, I've still got a long way to go but:



    That's the easy part... If I ever manage to unravel and simplify custom DNA creation I want a Nobel prize.

    In case you're wondering, yes, that is an Orc straight out of Mixamo Fuse, complete with his own skeleton.
     
  33. Moerk75

    Moerk75

    Joined:
    Apr 16, 2013
    Posts:
    22
    Looks promising SecretAnorak.

    About the posts on issues with seems and texture can someone please answer so we know if it's a bug, or a mistake in the creating process please?
     
  34. SecretAnorak

    SecretAnorak

    Joined:
    Mar 19, 2014
    Posts:
    177
    Hi, I've had the exact same issue while experimenting in MAX. Now, I can't comment on other modelling packages but I seem to have solved it for now.

    UMA is very fussy about bone weights and normals at the edges you are joining, so you have to be careful how you copy them across. In MAX there are 2 methods of skin weight transfer.
    • "Vertex" mode is great for blending weights on clothing but causes this exact same error back in UMA.
    • "Face" mode transfers the weights exactly as long as your faces match. This should be the case with both your unified and separated model. Back in UMA the separated meshes stitch together perfectly.
    I have no idea how skin weight transfer works in Blender or MAYA, but it was my ham fisted attempts at weighting without understanding what each mode did that caused the problems.

    Hope that helps.
     
    Last edited: Mar 23, 2016
  35. SecretAnorak

    SecretAnorak

    Joined:
    Mar 19, 2014
    Posts:
    177
    Don't despair David, where there is a will there is a way. Have a look at this little script and have a good think about what you're trying to do:

    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using UMA;
    4.  
    5. public class Libmaker : MonoBehaviour {
    6.    
    7.     public GameObject LibraryContainer;
    8.     public SlotLibrary sLib;
    9.  
    10.     // Use this for initialization
    11.     void Start () {
    12.         LibraryContainer = new GameObject("SlotLib");
    13.         LibraryContainer.transform.parent = this.gameObject.transform;
    14.         sLib = LibraryContainer.AddComponent<SlotLibrary>();
    15.         sLib.AddSlotAsset(Resources.Load("Torso/WerewolfMaleTorso_Slot") as SlotDataAsset);
    16.        
    17.     }
    18.  
    19. }
    If I can dynamically create libraries from slots in the resource folder,... I can rule the world,........mwahahahaha..!
     
    hopeful likes this.
  36. SecretAnorak

    SecretAnorak

    Joined:
    Mar 19, 2014
    Posts:
    177
    Hi Tomi,

    I'm messing around with race models at the moment if you're still struggling with seams, PM me and I'll see what I can do for you. :cool:
     
    hopeful likes this.
  37. Moerk75

    Moerk75

    Joined:
    Apr 16, 2013
    Posts:
    22
    Please do tell if you find a solution since I have the same exact problem. I have not tested if the mesh gaps on animation but the transitions between the separated parts are alike and the weird display of texture is spot on.
     
  38. SecretAnorak

    SecretAnorak

    Joined:
    Mar 19, 2014
    Posts:
    177
    Again, PM me and I'll have look at your models. I'm sure we can find common ground amongst modelling packages. I'm fairly confident that if I can get it into Max then I can get it to work.

    As a side note, I have always stuck with Fernando's rather cool legacy shader. Granted, the new standard shader is delicious, but the UMA legacy shader is very, very impressive in terms of optimisation and shouldn't be discarded if you want a lot of characters on screen.

    I'll have a good look at the standard shader with UMA, I see no reason why it shouldn't work.
     
    Last edited: Mar 25, 2016
    Moerk75 likes this.
  39. davidosullivan

    davidosullivan

    Joined:
    Jun 9, 2015
    Posts:
    387
    Hey @SecretAnorak, I have been working on this for a few weeks now in conjunction with @Jaimi and I think I am close to a solution... I have made versions of Slot/Race/OverlayLibrary that are dynamic and look for things they dont have as an UMA requests them, and they can also look in downloaded assetBundles. This essentially means that your Slot/Race/OverlayLibraries could be empty and the UMA's that needed things would make them self populate.

    What Jaimi has been doing is a great 'Wardrobe' system that makes it easy for the user to customise their character, and right now I am just making this able to use multiple races (not just the UMA ones) and 'assetBundle' aware too so that the end user and the developer can save character Recipes and the game will know what assetBundles it needs to get in order for those characters to create themselves (if for example userA sends their character to userB).

    I am hoping to get this available to all soon, but I need some help with things like, memory leaks and efficient coding and forwards/backwards compatibility... I'm just going to send a PM to @UnLogick to see if he might help us out but I am not hopeful, all the UMA Devs seem to have disappeared...
     
    runningbird, Moerk75 and hopeful like this.
  40. SecretAnorak

    SecretAnorak

    Joined:
    Mar 19, 2014
    Posts:
    177
    Wow, that sounds very impressive. I guess I should read the whole thread before posting daft answers. :rolleyes:

    I'd love to see a more accessible front end on UMA, making it easier for new users. You and Jaimi need to be applauded for picking up the flag.

    Keep up the good work :)
     
    runningbird, hopeful and Moerk75 like this.
  41. UnLogick

    UnLogick

    Joined:
    Jun 11, 2011
    Posts:
    1,745
    Oh I'm still here, I've been answering all direct questions, but I admit it's been slow lately. :)

    I've recently had the opportunity to play the Black Desert mmo and I think uma would be a really good match to build a character customization as versatile as theirs. If you haven't tried it, ask someone to give you a 7 day pass and try it out, it's really something!
     
    Moerk75, runningbird and hopeful like this.
  42. makeshiftwings

    makeshiftwings

    Joined:
    May 28, 2011
    Posts:
    3,350
    Lots of animations I have make the hands clip through the hips on the female UMA body. Is there a way to modify the Mecanim avatar that gets generated to put limits on the shoulders to stop that from happening as much?
     
  43. Jaimi

    Jaimi

    Joined:
    Jan 10, 2009
    Posts:
    6,208
    Have you tried modifying the rig in Mecanim, and the re-extracting the TPose? The rig is in /UMA/Content/UMA/Humanoid/FBX/Female
     
    hopeful likes this.
  44. makeshiftwings

    makeshiftwings

    Joined:
    May 28, 2011
    Posts:
    3,350
    Ah ha! That worked. Thank you.
     
    hopeful likes this.
  45. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,685
    Should there be a formal change to the female UMA, so manual adjustment by users is less needed?
     
  46. UnLogick

    UnLogick

    Joined:
    Jun 11, 2011
    Posts:
    1,745
    Elbows and wrists distance to body is an overall problem. Perhaps the dna converter should be altered to take this into account and move them out a bit if the dna values requires this.
     
    hopeful, Teila and SecretAnorak like this.
  47. SecretAnorak

    SecretAnorak

    Joined:
    Mar 19, 2014
    Posts:
    177
    I can only agree. I am doing something similar with a "ClassicHuman" DNA pack I'm working on. A small tweak to the upper arm rotation does the trick.
     
    hopeful and Teila like this.
  48. makeshiftwings

    makeshiftwings

    Joined:
    May 28, 2011
    Posts:
    3,350
    Yeah, I changed the upper arm rotation's lower limit from -60 to -40 and that stopped it from clipping through the hips. But I don't know if that's necessarily the best way to do it... ideally the model and skeleton should be able to handle generic mo cap of female animations on their own; maybe the proportions are off in the width of the shoulders vs the width of the hips.
     
  49. UnLogick

    UnLogick

    Joined:
    Jun 11, 2011
    Posts:
    1,745
    The problem is that depending on the dna values the animations will clip through or look correct, so the pose needs to be adjusted by dna.
     
  50. Subtellite

    Subtellite

    Joined:
    Apr 2, 2016
    Posts:
    15
    I have a strange problem...
    I'm using a mysql login system, if player doesn't have character he/she can create it and it puts it in database as "text" type. After that on login it connects to mysql database and checks if user has a character, if he doesn't it sets UMA string from database to PlayerPrefs string. Then it goes to game scene, where it loads uma on start and uses Load from playerprefs string.

    So here is the problem. It inputs in database correctly but it doesn't load from database correctly.
    I tried to save same UMA in text file on character creation, than executed it and when I compared lines in text file and in database they were the same...
    But it doesn't load correctly, I get bunch of errors that some values are null and etc.

    I tried to replace the string in UMA from database with one from text file (same one).
    After I have replaced it in database and used same load from database it loaded correctly.

    I can't seem to understand possible issue here, since strings look exactly the same, just the one saved to text file loads correctly even when it is in database, but the one saved directly to database doesn't seem to work correct.

    I have followed SecretAnorak's tutorials because they are awesome. I'm using his type of save/load.

    I have found the problem. When it saves directly to database I there is difference in \
    {\"height\":128,\"headSize\":128,\"headWidth\":128,\"neckThickness\":128
    for example, the one directly stored looks like:
    "height":128,"headSize":128,"headWidth":128,"neckThickness":128,"armLength":128,"forearmLength":128

    Gotta fix that but gotta figure out what caused this to be removed while inserting...
     
    Last edited: Apr 3, 2016