Search Unity

SimpleLOD user support thread

Discussion in 'Assets and Asset Store' started by Orbcreation, Nov 25, 2014.

  1. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    Hi everyone,

    For my own project I will allow endusers to upload their own 3D models. But these models are bound to be immense in terms of number of vertices and triangles. Some of them will have to be reduced, all of them will need reduced LOD levels for distant viewing and most of them will need many sub meshes to be combined.

    Since many developers run into the same problems when they download some model from the internet or the asset store that often contain way too many vertices for its purpose, I decided to turn the programs into a package.

    SimpleLOD will combine the meshes of all child objects in 1 mesh with a submesh per shared material. You can then reduce the number of triangles by setting the compression level.
    With 1 click you can generate 3 LOD levels and add a LODSwitcher component to your gameobject. This way any gameobject (skinned meshes as well) can be made LOD ready.

    There are many mesh combine packages, but most of them do not support skinned meshes. SimpleLOD does support skinnedmeshes. So you can have an avatar model, several clothes meshes and several items that will all be combined into 1 skinned mesh, provided that they all use the same skeleton.

    Of course there are also very good alternatives that generate your LOD meshes. But SimpleLOD produces very good results, supports skinned meshes, contains all source code, has no DLL's and uses no external services.

    And of course the end result will be better when you model everything by hand.
    But not everyone is a master 3D modeler and not everyone can afford those programs. This package is for those people that want an easy solution for a complex problem.

    When you want to use it at runtime (like I do) you can make use of the GameObject extension methods:
    myGameObject.CombineMeshes();
    Will combine all meshes in all child gameObjects into 1 mesh with submeshes for each unique shared material.

    myGameObject.SetUpLODLevels();
    Will create 3 LOD level meshes, add a LODSwitcher component and make your gameobject ready to go. Optionally you can set compression levels and switch distances

    myGameobject.SetUpLODLevelsAndChildrenWithLODGroup()
    If you prefer to use Unity's LODGroup component instead, this method will set it all up for you.

    The mesh compression algorithm is described here
    The documentation can be found here
    The webplayer demo can be found here
    The asset store package can be found here

    Simple LOD runs entirely inside Unity. The source code is all included and written in C#. There are no DLL's or hidden stuff.

    Note: Reducing triangles is a complex process and is bound to take some time, varying exponentially from a few milliseconds for small meshes up to several minutes for meshes with 64K vertices. This action is only needed once, since the reduced mesh is stored in your project folder.




     
    Last edited: Nov 25, 2014
    twobob likes this.
  2. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    The following question reached me on Facebook: You can put in the plugin SimpleLOD a simple bar that simplifies a model for Number of triangles instead of using a number as now?

    This is a good suggestion, but not very easy to achieve. In order to specify a desired number of triangles instead of a compression value, we'd need to compute weight values for each triangle (we do that now as well) and then order the triangles by this weight. Then remove / flatten the triangles in the order of their weight until the desired number is reached.

    However, when you flatten 1 triangle, you immediately change the shape of the adjacent triangles. And so their weights need to be recomputed. The ordered list of triangles then needs to be reordered and things will become very slow.

    Only by ignoring the effect to the adjacent triangles could this work, but that would have a negative effect on the quality of the end result.
     
  3. zugsoft

    zugsoft

    Joined:
    Apr 23, 2014
    Posts:
    441
    Hello,
    I just bought your Asset, and as I said you by email, I bought some Asset(drawcall pro, spritebaker) and I waste my time and money in $45 assets!!
    So, I tried your Asset, and for moment I only use your CombineMesh, my drawcall was 195, and now I have 145.
    Great product for moment, I will try your LOD system in few hours
     
  4. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    Hey Menfou, I am about to lay the last hand on version 1.1
    It is 3 times faster and the end results are much much better. If you send me an email i will send you this beta version. Because it may take a while before the update is in the asset store (review process and testing)

    This goes for everyone that just bought SimpleLOD: If you want to try out 1.1 beta, send me an email with your purchase receipt attached.
     
  5. Rajmahal

    Rajmahal

    Joined:
    Apr 20, 2011
    Posts:
    2,051
    Does this also Atlas the textures of all submeshes? Does it preserve animations of skinned meshes that are combined?
     
  6. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    @Rajmahal, It does not make a Texture Atlas for you. If you want this, there are other good tools for that. It does merge the meshes of child objects into a single mesh, that contains a submesh for each shared material that was used in any of the children.

    If you have a skinned mesh with animations, those will still work on the generated LOD levels for that mesh.

    If you have a skinned mesh and a child object with another skinned mesh, you can merge those meshes into 1 skinned mesh, provided that they use the same bones. The animations will still work, but since the meshes are combined, you cant run an animation only on a part of the skinned mesh.

    In the demo there is an example of Unity's Ethan character (skinned mesh) that has separate sunglasses (also a skinned mesh). They are combined into 1 and Ethan LOD 0, 1, 2 and 3 can still run, but you can't let him take off the sunglasses or make him wave them around, since the sunglasses have become part of the same mesh.
     
  7. zugsoft

    zugsoft

    Joined:
    Apr 23, 2014
    Posts:
    441
    I tried your LOD system, and I can say it's very easy to use, only 1 click to combine my house(50 gameobjects) , and 1 click to create 3 LODs.
    In my scene I have 10 houses, I compared my scene with and without your SimpleLOD.

    With SimpleLOD on my Windows Phone Mobile 28fps , without only 17fps.
    On my computer 91fps with SimpleLOD, and 61fps without.
    I see the Drawcall is highter with SimpleLOD , but the framerate is better.

    I tried 2 Texture Atlas Assets, and I wasted my time and money because all 3D Assets I bought was not really well UV textured.
     

    Attached Files:

  8. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    Wow! thanks for your support! I'm glad it works out for you. (It would really help if you'd give the product a few stars in the AssetStore)

    But your game looks pretty good! I especially like the smoking buildings in the background and also fire bullet icon. The road that ends near the camera can probably be fixed by making the near clip pane of your camera a little smaller.

    I see the drawcalls are indeed higher, which is weird, because when you render 50 gameobjects for 1 house, you'd expect a lot more drawcalls then with 1 gameobject. Unless all 50 gameobjects use different materials, in which case you end up with a mesh with 50 submeshes. And maybe you use occlusion culling? That might prevent a lot of those 50 gameobjects to be rendered, whereas you have 1 big gameobject now.

    As for the texture atlas options: I think you are right and it would be a very good addition to the product. You could merge meshes, generate LOD levels and create texture atlases at the same time. That could totally work as a one stop for all option. Let me think about how to do that properly a bit. I will also try out a few 3rd party packages to see how well/poor they do their job. And I vaguely believe I read or heard something about this from Unity as well. It could be a 5.0 option.
     
  9. zugsoft

    zugsoft

    Joined:
    Apr 23, 2014
    Posts:
    441
    A big gameobject can't be batching.
    It's why the Drawcall increase.
     
  10. Rajmahal

    Rajmahal

    Joined:
    Apr 20, 2011
    Posts:
    2,051
    Adding a texture atlas process to this would make this an insta-buy for me. Would love to have all that functionality baked into one. It would drastically reduce the time involved in my workflow.
     
  11. Sir-Spunky

    Sir-Spunky

    Joined:
    Apr 7, 2013
    Posts:
    135
    This looks really nice, and fantastic price!

    If I generate objects procedurally at runtime, say many different houses, could I then use this at runtime to get different LOD levels set up automatically for each house? I assume the performance is not good enough to generate it on the fly, but I was planning to do most generation in the beginning anyways and save the result. Unless it's possible to run generation stuff in a separate thread or similar, but I know too little of that stuff. If the performance is not good enough, I might have to pre-build large chunks of buildings and generate their LOD in the editor in advance, but your tool would still be very useful.

    Also, you mentioned skinned meshes. Do you think this would work with the UMA character creation kit for setting up LOD levels for their dynamically generated characters?

    And one final question :) Does it work with Unity Free, or does it require Pro?

    Thanks, keep up the good work!
     
    hopeful likes this.
  12. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    @menfou Ah ok, you're right
    @Sir Spunky I use this myself at runtime too. The user uploads a 3D model, I import it with SimpleOBJ or SimpleCollada and then automatically generate LOD's for it. So yes, you could procedurally create houses and make LOD's for them.
    You can find a code example here
    But beware that your houses are not too big (in nr of vertices) because for big meshes it may take a bit too much time to execute it. A small mesh with something like 5K vertices should be done in a second or so. This execution time increases exponentially when the mesh is bigger.
    It might be faster to create LODs for chunks or for child objects first (as they are smaller en use exponentially less execution time) and then merge them together.
    You can run it in a separate thread but it would still slow your game down.
    I haven't tested the UMA characters yet, but they should not give you any problems.
    SimpleLOD should also work with Unity Free
     
    Last edited: Dec 5, 2014
    Sir-Spunky likes this.
  13. Sir-Spunky

    Sir-Spunky

    Joined:
    Apr 7, 2013
    Posts:
    135
    That's great, thanks!
     
  14. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    (If someone does test SimpleLOD with fully dressed UMA characters, please report back. It sounds like this should work, but UMA can be weird.)
     
    Sir-Spunky likes this.
  15. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    I tested UMA for you and it all worked fine. The UMA characters were created at runtime, so I couldnt use the editor tools and had to write a little script to reduce the meshes.
    This is the script:
    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using OrbCreationExtensions;
    4.  
    5. public class UMATest : MonoBehaviour {
    6.  
    7.     bool lodsMade = false;
    8.  
    9.     void OnGUI() {
    10.         if(!lodsMade) {
    11.             if(GUI.Button(new Rect(2,2,100,25), "Make LODs")) {
    12.                 CreateLODs();
    13.             }
    14.         }
    15.     }
    16.    
    17.     void CreateLODs() {
    18.         SkinnedMeshRenderer[] smrs = gameObject.GetComponentsInChildren<SkinnedMeshRenderer>();
    19.         foreach(SkinnedMeshRenderer smr in smrs) {
    20.             Debug.Log(smr.gameObject.name);
    21.             smr.gameObject.SetUpLODLevelsWithLODSwitcher(new float[3] {0.4f, 0.2f, 0.1f}, new float[3] {0.5f, 1f, 1.5f}, true);
    22.         }
    23.         lodsMade = true;
    24.     }
    25. }
    26.  
    It took about 10 seconds to create 15 lod levels for 5 characters, compressing the meshes from 10K to 1.5K:
    Schermafbeelding 2014-12-08 om 09.30.34.png


    I didn't try to tweak the compression values for optimal result, but this what what I got:

    LOD 0: 10k triangles per character
    Schermafbeelding 2014-12-08 om 09.33.24.png
    LOD 1: 3.5K triangles per character
    Schermafbeelding 2014-12-08 om 09.33.02.png


    LOD 2: 2K triangles per character
    Schermafbeelding 2014-12-08 om 09.34.10.png
     
    crudeMe, Sir-Spunky and hopeful like this.
  16. Nanako

    Nanako

    Joined:
    Sep 24, 2014
    Posts:
    1,047
    just to confirm, i can use this at runtime, right? call it from scripts and such?

    i have a need for a pretty simple mesh decimator, and this sounds about right. A lot of the others on the market seem to have way too many features (and too high a cost :p) for my needs and situation. I just want to remove redundant faces from pretty simple shapes
     
  17. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    @Nanako Yes sure. Various methods are added to the default GameObject class. I just posted an example for the UMA avatars 1 post higher in this thread. There are also some examples in the online documentation
    Let me know if you need any help.
     
  18. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    SimpleLOD is now implemented in my own 3D website builder. Check out the blog post here: http://orbcreation.com/orbcreation/page.pl?1211
    (Also uses SimpleOBJ and SimpleCollada for importing models and Texture2D Extensions for manipulating textures)

    Screenshot_2014-12-10_17-08-21.jpg
     
  19. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    Nice model :)
     
  20. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    If a child transform had a negative scale, that part of the merged mesh would be turned inside out, because the triangles flipped over.
    This is now fixed and submitted to the asset store for approval. Contact me if you don't have the time to wait for asset store approval and I will email it to you.
     
    hopeful likes this.
  21. Teila

    Teila

    Joined:
    Jan 13, 2013
    Posts:
    6,595
    UMA LODs sold me on this product!! Thanks for testing.

    Question though, did you combine the clothing with the mesh? In our case, we want the player to be able to switch clothing so could we create LOD's separately for clothing and avatar?

    Could we combine the clothing LOD's ahead of time and allow the players to use the combined LOD clothing meshes when the place them on their character? Can we create the LOD's for the UMA characters during character creation since the character size, skin color, etc., will be generated then?

    Sorry for the questions and hope they make sense. :) I have been looking for an LOD solution for UMA for a while now.
     
    Whippets and hopeful like this.
  22. Whippets

    Whippets

    Joined:
    Feb 28, 2013
    Posts:
    1,752
    Yes, very valid point, Teila. I think to be useful for UMA PCs you'd need to build your PC at runtime as usual, and then create the LODs. I'm not sure if this tool can be used (or is freeze free) for runtime use.
     
  23. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    EDIT: Yeah, I've been trying to think of how you could at least get it to work for NPCs, but you'd basically lose all the advantages of UMA.

    The LODs would have to be created at runtime, wouldn't they?
     
    Last edited: Dec 18, 2014
  24. Whippets

    Whippets

    Joined:
    Feb 28, 2013
    Posts:
    1,752
    No, your thinking is correct, certainly for some types of game. Teila and I were just checking a few finer points, as the ability to LOD UMA characters would be a massive bonus for MMOs
     
  25. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    UMA had already combined the clothes with the body into 1 mesh before I made the LOD's

    UMA creates the meshes at runtime. I am assuming you only allow the user to switch clothes, not edit the body shape. Because if you do, I don't see how you can bake LODs beforehand.

    You could make a character without any clothes and a character without a body.
    That way you have 2 meshes at runtime. You could probably save those meshes on a server or in your project folder. Then bake the LOD levels for them and when the user picks clothes, you merge the meshes together.

    I tested making 2 copies of the green troll in the example. One with a body only and one with only clothes. That works, but reassembling them is more tricky. I couldn't replace the SkinnedMeshRenderer.bones of the clothes copy with the SkinnedMeshRenderer.bones of the body. It seemed to ignore that. I guess it should be possible though.

    If you want the user to also edit the body shape, I guess the only way is to shrink wrap the clothes and then merge the meshes. All at runtime, so that will probably freeze the screen significantly. In that case you might as well create the characters and their LOD's at runtime. I measured the time it takes to create the LOD's for the demo troll character:
    LOD 1: 1.4 seconds
    LOD 2: 0.5 seconds
    LOD 3: 0.2 seconds
    You could of course run this in a separate thread.
    Schermafbeelding 2014-12-18 om 20.53.15.png
     
  26. Whippets

    Whippets

    Joined:
    Feb 28, 2013
    Posts:
    1,752
    Interesting :) Is it possible to run the LODing tool in a separate thread? That would certainly prevent freezing, and allow the tool to create the LODs.
     
  27. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    Most of the time my players are indoors and in those conditions LOD would not be needed. The UMA body would either be rendered or not.

    But when outdoors, where distances are likely to be greater, it might be good to generate some LOD 3s ...?

    EDIT: Or I suppose I should say "decimated 2-3k models."
     
    Last edited: Dec 18, 2014
  28. Teila

    Teila

    Joined:
    Jan 13, 2013
    Posts:
    6,595
    The body shape would be changed only at character creation. After that, it would stay the same. However, clothing could be changed at any time and one could have a variety of clothing using slots. So a player could change the shirt or the pants or both. Might be tough to make all those combinations before hand.
     
  29. Teila

    Teila

    Joined:
    Jan 13, 2013
    Posts:
    6,595
    I think you could use it for NPCs if you made prefabs ahead of time and spawned them or simply placed them in the game like any other NPC. In our situation, that is probably better then letting UMA procedurally generate NPCs in game.
     
  30. Whippets

    Whippets

    Joined:
    Feb 28, 2013
    Posts:
    1,752
    When a character changes clothes you rebuild the UMA, so at that point, LODs can be rebuilt too (especially if it can be done in a separate thread).
     
    Teila likes this.
  31. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    Well ... on PC, but surely not on mobile ...? Or at least it would take longer.

    And on PC, if you had 60 unique NPCs, it could take a minute to decimate them.
     
  32. Teila

    Teila

    Joined:
    Jan 13, 2013
    Posts:
    6,595
    We are talking about the player character in a multiplayer environment, not an NPC. I doubt the NPC would change clothes during the game, at least mine won't. :)
     
  33. Tiny-Man

    Tiny-Man

    Joined:
    Mar 22, 2014
    Posts:
    482
    This asset is just what I need. Looks very effective.
    Ill be sure to pick it up when I get a bit more $
     
  34. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    What I mean is that you wouldn't be able to have an UMA crowd generator crank out 20 random "urban guy" models at runtime for a street scene and still get them decimated for LOD ... at least, not without maybe a minute of lag on a core as penalty. Which is not a horrible scenario, but it is one you'd have to plan for if you were going to attempt it.

    If a game design allows for having generic or "clone" NPCs, it's not an issue.
     
  35. Teila

    Teila

    Joined:
    Jan 13, 2013
    Posts:
    6,595
    Our game isn't one that needs 20 random guy models. :) It wouldn't suit the style of the game and honestly, I don't trust UMA to pump out the types of NPCs I would want.

    Your idea is cool but you are right, it wouldn't work probably with the LOD asset.
     
  36. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    @Orbcreation, Sorry for the minor thread hijack ... but this is the most promising solution to UMA's LOD problem that I've seen. If models can be decimated at runtime in a separate thread (possibly even on mobile), that's a significant consideration.
     
    Teila likes this.
  37. Teila

    Teila

    Joined:
    Jan 13, 2013
    Posts:
    6,595
    I agree with Hopeful. I wonder if the UMA guys know about this? Orbcreation may just have solved a major problem. :)
     
  38. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    I have put a very simple demo online here http://orbcreation.com/UMATest/UMATest.html

    There are 2 buttons to create the LOD's for the 5 UMA characters. One where the execution is halted and one where the LODs are created in a background thread. You have to wait a bit to see the results, but the UMA's keep swinging back and forth. Use the mouse scroll wheel to move the camera.

    I made some changes to the SimpleLOD code to achieve this and added a new method to GameObject
    Code (csharp):
    1.  
    2. public static IEnumerator SetUpLODLevelsWithLODSwitcherInBackground(this GameObject go, float[] lodScreenSizes, float[] maxWeights, bool recalcNormals)
    3.  
    To call it you implement this line in your own code:
    Code (csharp):
    1.  
    2. // dont forget to put this at the top of the code file.
    3. // using OrbCreationExtensions;
    4.  
    5. StartCoroutine(myGameObject.SetUpLODLevelsWithLODSwitcherInBackground(new float[3] {0.4f, 0.2f, 0.1f}, new float[3] {0.3f, 0.8f, 1.5f}, true));
    6.  
    These changes will be submitted to the Asset store for review with the next version. Contact me if you need it earlier than that.
     
    Teila and hopeful like this.
  39. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    I posted about SimpleLOD and its possible application for UMA on the UMA thread on Dec 8. But no one responded, so maybe it was overlooked.

    EDIT: I made a new post on the UMA forum with a link to the SimpleLOD/UMA demo above. (I really like that demo!)
     
    Last edited: Dec 19, 2014
    Teila likes this.
  40. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    Together with Teila and her programmer we wrote a sample script to use SimpleLOD for UMA characters. It runs directly after the UMA characters have been created or updated.

    This is the script you can drop on your UMA character (you need SimpleLOD for this to work):
    Code (csharp):
    1.  
    2. using UnityEngine;
    3. using System.Collections;
    4. using System.Collections.Generic;
    5. using UMA;
    6. using OrbCreationExtensions;
    7.  
    8.  
    9. public class AutoBakeLODs : MonoBehaviour
    10. {
    11.   // points to switch between LOD's (computed as model size / screen size)
    12.   public float[] lodRelativeScreenSizes = new float[3] { 0.4f, 0.2f, 0.1f };
    13.   // compression levels to bake LOD 1, 2, 3
    14.   public float[] lodCompressionLevels = new float[3] { 0.3f, 0.9f, 3f };
    15.   // Switch off if you want the normals to stay untouched in the LOD meshes
    16.   public bool recalculateNormals = true;
    17.  
    18.   private bool umaDataDelegateSet = false;
    19.  
    20.   // If you have different access to the UMAData, it is best to use that, because using
    21.   // the Update function for this purpose is not the most wonderful solution
    22.   void Update() {
    23.     if(!umaDataDelegateSet) {
    24.       UMAData umaData = gameObject.GetComponent<UMAData>();
    25.       if(umaData != null) {
    26.         // Add delegate to perform actions after the UMA character has been updated
    27.         umaData.OnCharacterUpdated += new System.Action<UMAData>(CreateLodInBackground);
    28.         umaDataDelegateSet = true;
    29.       }
    30.     }
    31.   }
    32.  
    33.   // Bake LOD meshes for the character and add a LODSwitcher component
    34.   // Is called after the UMA Character is created or updated, due to the
    35.   // delegate umaData.OnCharacterUpdated
    36.   void CreateLodInBackground(UMAData obj)
    37.   {
    38.     // Find the child object that holds the SkinnedMeshRenderer
    39.     SkinnedMeshRenderer skinnedMeshRenderer =
    40.       obj.gameObject.GetComponentInChildren<SkinnedMeshRenderer>();
    41.     // Bake LOD's in a separate background thread
    42.     StartCoroutine(skinnedMeshRenderer.gameObject.SetUpLODLevelsWithLODSwitcherInBackground(
    43.       lodRelativeScreenSizes,
    44.       lodCompressionLevels,
    45.       recalculateNormals));
    46.   }
    47.  
    48.   // Use this function instead if you want to bake the LOD meshes in the main thread
    49.   // This will halt the screen for about 2 seconds (depending on mesh size and hardware)
    50.   void CreateLodInMainThread(UMAData obj)
    51.   {
    52.     // Find the child object that holds the SkinnedMeshRenderer
    53.     SkinnedMeshRenderer skinnedMeshRenderer =
    54.       obj.gameObject.GetComponentInChildren<SkinnedMeshRenderer>();
    55.     // Bake LOD's in main thread (will stall game execution)
    56.     skinnedMeshRenderer.gameObject.SetUpLODLevelsWithLODSwitcher(
    57.       lodRelativeScreenSizes,
    58.       lodCompressionLevels,
    59.       recalculateNormals);
    60.   }
    61. }
    62.  
     
    hopeful and Sir-Spunky like this.
  41. virror

    virror

    Joined:
    Feb 3, 2012
    Posts:
    2,960
    This looks really cool! Especially that it works with UMA, i guess your using your own system for managing the actual LOD levels?
     
  42. Teila

    Teila

    Joined:
    Jan 13, 2013
    Posts:
    6,595
    Fantastic!! Thanks for such a great asset. :) Glad we could help in a small way.
     
    eridani likes this.
  43. eridani

    eridani

    Joined:
    Aug 30, 2012
    Posts:
    655
    I agree, will you ever add texture atlasing to your asset? Thank you
     
  44. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    Is there ever any reason to choose to create the LOD in the main thread? It seems to me that I'd always pick to do it in a background thread.
     
  45. Orbcreation

    Orbcreation

    Joined:
    May 4, 2010
    Posts:
    230
    @virror: Yes, it adds a LODSwitcher component, which is a very lightweight, handy utility. You can also use something else of course, because you can access the meshes.

    @eridani: Yes, I plan to add this in the next few months. But you have to understand that although this asset is cool and I get a lot of feedback, I only sold 15 copies of it. (15 x $30 minus 30% for Unity and minus dutch taxes) / hours spend makes about $0.50 per hour. Ha, ha!! So I need to work on my own projects as well.

    @hopeful: If you target WebGL as I do in my own project, you can not use threads.
     
    chelnok likes this.
  46. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    Aha! I figured there was a good reason.

    Luckily I will be able to use background threads. :)
     
  47. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,638
    Well ... it's only been on sale for about a month, right? Hardly anyone knows about it.

    You ought to sell a lot more if you can get it spotlighted by Unity in the asset store, or featured in a Unity sale.

    I think this is the kind of asset a lot of people could use.
     
    Phelioz likes this.
  48. Teila

    Teila

    Joined:
    Jan 13, 2013
    Posts:
    6,595
    Just purchased your asset! Thanks again.

    Btw, I just discovered this 5 days ago. I saw it in the forum list but because the name is similar to others, I ignored it for weeks. Not sure what made me click on it but glad I did.

    I really think if this asset is noticed by more people, it will sell very well. Anyone using UMA and concerned with optimization or using a larger number of characters in their scene will need it. Not only that, but it is great for simply adding LODs quickly to their game for any mesh.

    There might be cheaper LOD options out there and LODs are included in Pro, but none of them seem to do what this one does, save lots of time.
     
    runningbird likes this.
  49. Dennis59

    Dennis59

    Joined:
    Jan 8, 2013
    Posts:
    66
    It's not really clear what is meant by "This is the script you can drop on your UMA character" since the UMA will not exist until run time. What I did was to add AutoBakeLODs.cs to the UMA race assets in UMA/UMA Assets/Races. Add it to both the Male_Unified and Female_Unified game objects contained in the race prefabs. Also, since this places the AutoBakeLODs script further down in the character hierarchy change line 24 to:
    Code (csharp):
    1.  
    2. UMAData umaData = gameObject.GetComponentInParent<UMAData>();
    3.  
     
    hopeful likes this.
  50. Ascensi

    Ascensi

    Joined:
    Sep 7, 2013
    Posts:
    565
    I just purchased this too! Orbcreation, when/if the Asset store reps ask to make your asset go on sale, that's when you will see a major increase in sales.. it just needs to be more visible on the asset store page for people to discover it.

    Is this asset compatible with Unity 5?