Search Unity

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

QuickLod - Fast asynchronous lod system

Discussion in 'Assets and Asset Store' started by chillersanim, Mar 29, 2014.

  1. melonhead

    melonhead

    Joined:
    Jun 3, 2014
    Posts:
    603
    thank you for the quick answer, just what i was looking for!!!
     
  2. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    As the upcomming GroupSwitch feature is nearly finished, here's a preview:
    http://tirelessart.ch/quickcode/quicklod/demo/

    In the second demo, the collision trigger and distance trigger is implemented.
    The collision triggers (red) can be triggered with the tiny cube at the cursor position.
    The distance triggers (blue) can be triggered by moving the scene camera into their range.

    When at least one trigger is triggered, some white cubes at the center will be visible.

    I just have to implement some editors and polish the system, then I'll upload the new version to the Asset Store.

    Greetings
    Chillersanim
     
    twobob and hopeful like this.
  3. kurylo3d

    kurylo3d

    Joined:
    Nov 7, 2009
    Posts:
    1,123
    My main concern is performance. And no one has answered the main question. Does quicklod out perform unity pros LOD system?
     
  4. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @kurylo3d

    I honestly can't say which one is faster.
    But there are some points which need to be considered.

    C++:
    The Unity system probably uses C++, while QuickLod is written in C#.
    That makes the Unity system the better choise unless you are using Unity 5.

    Integration:
    The Unity system is integrated in Unity and probably has some additional data that allows it to work much faster.
    Just as a tought, the system could access PhysX or render data to get the distance to the camera.

    Time complexity:
    I don't know how the Unity system works internaly, but when we assume that it's a simple algorithm, that just calculates the distance every x frames for each object, then the system would have a linear time complexity.

    QuickLod has some initial overhead per object thanks to precalculations, but just once per object. Afterwards it calculates the distance only for a defined amount of objects, ignoring objects far away, priorizing nearby objects etc. The time complexity of QuickLod is thus better, but there's a initialization cost.

    Conclusion:
    If performance is your only issue and you're not creating a huge world, I would recommend you to stay with the Unity system.

    Greetings
    Chillersanim
     
  5. kurylo3d

    kurylo3d

    Joined:
    Nov 7, 2009
    Posts:
    1,123
    What if i do plan on creating a huge world liek batman arkham city. And i am using unity 5. Also do your LODs get batched?
     
  6. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @kurylo3d

    QuickLod is optimized for huge worlds.
    Thanks to the asynchronous approach, you can use millions of objects and QuickLod won't slow down the scene.
    Also dynamic loading and unloading of objects is supported, so you could stream the city if you want.

    Just as a remark.
    When you are creating a city with a lot of objects hiding other objects, then perhaps InstantOC is the better choise, unless you don't want all those extra colliders.

    QuickLod supports dynamic batching, static batching probably doesn't work duo to mesh switching.
    There's currently no custom batching integrated.

    Greetings
    Chillersanim
     
  7. kurylo3d

    kurylo3d

    Joined:
    Nov 7, 2009
    Posts:
    1,123
    Thanks for the info. Does instant OC support static batching? :p
     
  8. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @kurylo3d

    No, as far as I know InstantOC does not support static batching.

    Static batching from Unity doesn't work with any lod system at all, as changes made to the mesh filter or mesh renderer aren't reflected on the combined mesh.

    But it would be possible to create your own mesh batcher which updates the meshes when a lod object has changed.
    To get notified when a lod object has changed, just register to the "ActiveLodLevelChanged" event in the LodObjectBase class. (see API documentation)

    Greetings
    Chillersanim
     
  9. kurylo3d

    kurylo3d

    Joined:
    Nov 7, 2009
    Posts:
    1,123
    What about unitys default LOD system, doesnt that support static batching?
     
  10. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @kurylo3d

    I just tried in Unity5 Pro which was provided to test QuickLod with the new Unity.
    It seems that LodGroups break static batching as well.

    I assume the dynamic batching feature isn't sufficient for your game?

    Greetings
    Chillersanim
     
  11. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,630
    I'm not sure if this will do what you're looking for, but have you checked Mesh Baker LOD?
     
  12. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    I did some performance testing in Untiy 5 with QuickLod vs. Unity LodGroups.
    The results are quite cool!

    Test description:
    I tested with three base objects:
    • Unity LodGroups with 5 lod levels (as in the demo scene)
    • LodObjectReplacement with 5 lod levels
    • LodObjectMesh with 5 lod levels
    All testing was done with the upcoming version of QuickLod 1.6
    I measured the CPU main time, the time was taken after the framerate stabilized from loading the new objects.
    The profiler was turned off, only one lod source was used and the camera was not moved during the whole test.
    The lod distances for all levels were nearly equal.

    Test results:
    400 Objects:
    • Unity LodGroups: 1.0ms
    • LodObjectReplacement: 1.1ms
    • LodObjectMesh: 1.1ms
    2500 Objects:
    • Unity LodGroups: 3.1ms
    • LodObjectReplacement: 3.3ms
    • LodObjectMesh: 2.9ms
    10'000 Objects:
    • Unity LodGroups: 4.3ms
    • LodObjectReplacement: 4.5ms
    • LodObjectMesh: 4.9ms
    22'500 Objects:
    • Unity LodGroups: 5.2ms
    • LodObjectReplacement: 4.5ms
    • LodObjectMesh: 5.0ms
    40'000 Objects:
    • Unity LodGroups: 6.2ms -> Throws error: "group < 0x7fff"
    • LodObjectReplacement: 4.5ms
    • LodObjectMesh: 5.0ms
    100'000 Objects:
    • Unity LodGroups: 9.9ms -> Throws error: "group < 0x7fff"
    • LodObjectReplacement: 4.6ms
    • LodObjectMesh: 5.1ms
    Conclusion:
    With only a few objects, QuickLod is on the same level as Unity LodGroups.
    But when we add more objects, then you can clearly see that QuickLod produces stable results, while Unity LodGroups use more and more performance.

    To note is also, Unity LodGroups throw errors when there are more than 32k LodGroups in the scene.
    QuickLod on the other hand has been sucessfully testet with over 1'000'000 objects at once in Unity 4 and 5.

    Remarks:

    The error which is thrown was reported here.
    Please take these numbers with caution, I only did a few tests on a single computer, so the numbers can vary!

    Greetings
    Chillersanim
     
    Last edited: Mar 5, 2015
    red2blue and hopeful like this.
  13. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    So, the next version is finished, and is being uploaded right now.

    Here are the most interesting improvements made:
    • Trigger based group switch
    • Custom triggers can be created by implementing a simple interface
    • Distance based child switch (simple version of group switch)
    • Improved performance, there's nearly no algorithm that hasn't seen an optimization
    • LodObjects don't impact the framerate anymore as the Update method has been removed
    • All reported bugs are now fixed, even some which weren't reported.
    QuickLod is compatible with Unity 4.3 to 5 and given the numbers above, it's still a great choise if you want to optimize your game!

    Next step for me will be to improve the website, API documentation and perhaps I'll be able to create some videos.

    Greetings
    Chillersanim
     
    twobob likes this.
  14. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,630
    Is there a misprint here? Should LodObjectMesh read 3.9 instead of 4.9?
     
  15. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    It's not a misprint but rather a very simple test.
    I can't tell what caused the difference between LodObjectMesh and LodObjectReplacement, as the underlying code is exactly the same.

    I wouldn't take the exact numbers to serious, as they aren't very precise.
    What they really tell you, is that QuickLod is independend of the amount of objects in the scene, while Unity LodGroups use more and more ressources when you add more objects.
    Also what we can see, is that relatively seen, QuickLod is even fast as Unity LodGroups with only a few objects and much faster with many objects.

    For the statistic nerds of you:
    QuickLod: O(1)
    Unity LodGroups: O(n)
    See here for explanation

    Greetings
    Chillersanim
     
  16. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    @hopeful

    After doing some research, it looks as if disabling components is slightly less effective than disabling the whole object.
    The additional 0.4-0.5 ms for LodObjectMesh vs. the LodObjectReplacement is probably caused by the invisible objects.

    When disabled, the LodObjectMesh object has two active components: LodObjectMesh and MeshFilter
    The LodObjectReplacement on the other hand has only one active component.

    I think the CPU overhead is not that big of a difference.
    When you add your own components, the CPU difference noted will be negligible.
    What you also should consider: The memory usage and the instantiate/destroy time is way better for the LodObjectMesh.

    I hope this information helps you to choose the correct LodObject for your purposes. :)

    Greetings
    Chillersanim
     
  17. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,630
    I appreciate you looking into all of this and making a highly efficient LOD solution with lots of options. :) I'm still a long way from using QuickLod, as it will probably be something I implement in the last stages of development, and I'm still working my way through a lot of other gnarly issues. Moving to U5 with its removal of all the old indie restrictions is helping me, but it hasn't changed my view on handling LOD.

    My plan is still to use QuickLod along with InstantOC to jointly manage dynamic environments, and I've recently added SimpleLOD to my suite of LOD managers, in particular for its ability to create quality LOD models at runtime (as well as in editor).
     
    twobob likes this.
  18. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,630
    Version 1.6 is out! :)
     
  19. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Yes, 1.6 is out. :)
    Take a look at it, there's much new stuf available!

    Please tell me what you think about it, where you have problems, etc.

    Greetings
    Chillersanim
     
  20. twobob

    twobob

    Joined:
    Jun 28, 2014
    Posts:
    2,058
    By "Optimized code for GC" do you mean there is no run-time garbage? or something else.
    (I already bought it, so no need to "sell me" ;) )
    I could just run it through the profiler in a slew of test situations - or ask here - this seemed quicker.

    Many thanks
     
  21. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @twobob

    Edit:
    My old answer wasn't correct, so I'll try again ;)

    I'm not sure how much garbage is produced by QuickLod.
    I've tried some tricks to reduce the garbage, but I'm rather sure theres still some left.

    I will take a deeper look into the profiler and come back to you then.
    Many thanks for the correction.

    Greetings
    Chillersanim
     
    Last edited: Mar 23, 2015
  22. twobob

    twobob

    Joined:
    Jun 28, 2014
    Posts:
    2,058
    Okay, thanks for that info. The donnetpearls page is an oldie but a goody.
     
  23. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello

    I just wanted to inform you, that QuickLod will be in the 24h sales at the 15th of April, 2015.
    So if you want to buy QuickLod, you may want to wait until then.

    Greetings
    Chillersanim
     
    hopeful and twobob like this.
  24. Ghosthowl

    Ghosthowl

    Joined:
    Feb 2, 2014
    Posts:
    228
    I had an issue with building with the new version because of this error:

    Code (csharp):
    1.  LodManagerBase.cs does not contain a definition for `IsEditorSource' and no extension method `IsEditorSource' of type
    Turns out there was a line (1368) in LodManagerBase.cs that had a IsEditorSource out of the UNITY_EDITOR preprocessor directive: 'if(source.enabled && !source.IsEditorSource)'

    I deleted this and set it as: 'if(source.enabled)' to stop the error. I'll let you come up with a better fix :p
     
  25. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @Ghosthowl

    Thank you for that information.
    I'll fix it in the next release.

    In the meantime, you can replace the code: (Line 1368)
    Code (CSharp):
    1. if (source.enabled && !source.IsEditorSource)
    2. {
    3.     this.RegisterSource(source);
    4. }
    with this:
    Code (CSharp):
    1. #if UNITY_EDITOR
    2. if (source.IsEditorSource)
    3. {
    4.     continue;
    5. }
    6. #endif
    7.  
    8. if (source.enabled)
    9. {
    10.     this.RegisterSource(source);
    11. }
    Your fix will also work, but the editor LodSources can be double registered, what can cause some overhead in the editor.

    Greetings
    Chillersanim
     
    Ghosthowl likes this.
  26. Ghosthowl

    Ghosthowl

    Joined:
    Feb 2, 2014
    Posts:
    228
    Thanks @chillersanim !

    I hadn't looked into the code much so I knew there was a better was of doing this aside from my quick fix, hence my last line. Appreciate this official fix however and so quickly, wow! Great support.
     
  27. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello all.

    I completely reworked the QuickLod webpage.
    The information is now (mostly) up to date, the design has been changed and everything has been cleaned up.

    If you got some spare time, please take a look at it and let me know what you think about it.
    I'm not a web designer, so all kind of feedback is welcome!

    The website can be found here:
    http://tirelessart.ch/quickcode/quicklod/

    Greetings
    Chillersanim
     
    red2blue likes this.
  28. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Just as a reminder.

    Those who want to buy QuickLod should do it NOW.
    QuickLod is on sale until tomorrow and you get 65% off.

    So if you weren't sure whether you would use it or not, just grab it while it's on sale.

    Link

    Greetings
    Chillersanim
     
  29. akhil96

    akhil96

    Joined:
    Oct 12, 2014
    Posts:
    32
    can it be used with simple lod at *runtime because containing many lods of same meshes may lead to increase in data size.
     
  30. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @akhil96

    I haven't tried them together.
    From the description of SimpleLod, it generates meshes also at runtime.
    As long as the meshes are available, QuickLod can manage them.

    I'll take a closer look at SimpleLod as soon as I've got some time left.
    When I know more, I'll let you know.

    Greetings
    Chillersanim
     
  31. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @akhil96

    As promised, I tested QuickLod together with SimpleLod.
    It works relatively well, as SimpleLod just creates meshes and stores them.
    You can either use the LodObjectMesh or the LodObjectReplacement to manage those meshes.


    upload_2015-4-15_17-14-13.png

    With mesh replacement
    • Generate the meshes using option a.
    • Replace the LodSwitcher (from SimpleLod) with the LodObjectMesh (from QuickLod)
    • Define the meshes.
    You'll probably need to define the meshes by hand, as SimpleLod has an inconsisten mesh naming.
    upload_2015-4-15_17-17-10.png

    With object replacement
    • Generate the meshes using option b. from the Simple Lod screen.
    • Replace the LodSwitcher with the LodObjectReplacement
    As the child objects follow the naming convention, QuickLod can automatically setup the LodObjectReplacement.
    upload_2015-4-15_17-18-45.png

    Runtime generation
    I haven't found any information about generating the meshes at runtime.
    If you have, please let me know so I can look into it.

    Greetings
    Chillersanim
     
  32. akhil96

    akhil96

    Joined:
    Oct 12, 2014
    Posts:
    32
    i too dont know much about the runtime usage of simple lod , i need to contact the author for that.

    but is there a feature with quicklod to use quicklod at runtime or else we need to add lod meshes by hand.
     
  33. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @akhil96

    You can access the lod level settings of any default LodObject by the Lods property.

    I made an example code which requires a mesh filter and a lod object mesh.
    You can reuse this class when you want.
    It's not optimized but should give you an idea how it works.

    Code (CSharp):
    1. using QuickLod;
    2. using QuickLod.Containers;
    3. using UnityEngine;
    4.  
    5. public class SetupLOM : MonoBehaviour
    6. {
    7.     public int LodLevels = 3;
    8.  
    9.     public void OnEnable()
    10.     {
    11.         var meshFilter = gameObject.GetComponent<MeshFilter>();
    12.  
    13.         if (meshFilter == null || meshFilter.sharedMesh == null)
    14.         {
    15.             return;
    16.         }
    17.  
    18.         this.SetupLodObjectMesh(meshFilter.sharedMesh);
    19.     }
    20.  
    21.     /// <summary>
    22.     /// Setup the lod object mesh component (adds it)
    23.     /// </summary>
    24.     public void SetupLodObjectMesh(Mesh mesh)
    25.     {
    26.         // Get the lod meshes
    27.         var newMeshes = this.GetMeshes(mesh, this.LodLevels);
    28.  
    29.         // Get or create the lod object mesh
    30.         var lodObjectMesh = gameObject.GetComponent<LodObjectMesh>();
    31.         if (lodObjectMesh == null)
    32.         {
    33.             lodObjectMesh = gameObject.AddComponent<LodObjectMesh>();
    34.         }
    35.        
    36.         // Setup the lod levels
    37.         var lods = new LodStructureMesh[newMeshes.Length];
    38.         for (var index = 0; index < newMeshes.Length; index++)
    39.         {
    40.             lods[index] = new LodStructureMesh();
    41.             lods[index].Lod = newMeshes[index];
    42.         }
    43.  
    44.         lodObjectMesh.Lods = lods;
    45.         lodObjectMesh.RecalculateDistances();
    46.     }
    47.  
    48.     /// <summary>
    49.     /// Generates a list of lod meshes
    50.     /// </summary>
    51.     /// <param name="baseMesh">The original mesh (is used as first lod mesh)</param>
    52.     /// <param name="amount">The amount of lod meshes to generate in total</param>
    53.     /// <returns>Returns the generated lod meshes</returns>
    54.     public Mesh[] GetMeshes(Mesh baseMesh, int amount)
    55.     {
    56.         var result = new Mesh[amount];
    57.         result[0] = baseMesh;
    58.  
    59.         var prevWeight = 0.5f;
    60.  
    61.         for (var i = 1; i < amount; i++)
    62.         {
    63.             result[i] = LODMaker.MakeLODMesh(result[i - 1], prevWeight);
    64.             result[i].name = result[0].name + "_Lod" + i.ToString();
    65.             prevWeight += prevWeight / 2f;
    66.         }
    67.  
    68.         return result;
    69.     }
    70. }
    71.  
    Greetings
    Chillersanim
     
  34. nasos_333

    nasos_333

    Joined:
    Feb 13, 2013
    Posts:
    12,918
    Hi

    Is this asset doing occlusion, or is only distance based elimination ?

    Thanks
     
  35. ozoner

    ozoner

    Joined:
    Jun 8, 2009
    Posts:
    85
    Quick question will this work with Oculus ?. Thank you.
     
  36. stationx

    stationx

    Joined:
    Jul 9, 2012
    Posts:
    251
    hi there...one quick question; so your system currently only shows this grid with al green / red spheres.

    How about a demo with a terrain, hills and a super huge amount of rocks? That is what I am trying to create.
    Also; how can I assign different types of rocks to a map?
    Regards! Tom
     
  37. Project-Mysh

    Project-Mysh

    Joined:
    Nov 3, 2013
    Posts:
    223
    Another question,

    This asset comes with any smooth LOD transition? Unity 5 LODgroups implemented the cross-fade and percentage.
     
  38. movptr

    movptr

    Joined:
    Mar 21, 2015
    Posts:
    2
    Hello,

    I'm interested in buying QuickLod because it's on sale. Doing some research, there seems to mainly be two options for LOD: QuickLod and Simple LOD. What features does your asset support that Simple LOD does not? I'm kind of on the fence between the two. But of course I'm leaning towards QuickLod because of the sale. However, according to Simple LOD, Simple LOD can do more than just LOD: atlases, decimate, supports skinned meshes. I really just want one solution that can handle it all.

    Thank you!
     
  39. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello all.
    Thank you for your interest in QuickLod.


    @nasos_333
    This asset only uses distance based lod.
    When you want dynamic occlusion culling, you can combine it with InstantOC

    @ozoner
    Yes it works with oculus.

    @stationx
    I'm working hard on a new and better demonstration scene.
    A boulder scene wouldn't be that much different to the current sphere demo.
    Do you have something in mind that's not covered by the scene demo?

    @Project Mysh
    A fading system is in progress and will most likely come with the next version.

    @movptr
    Both systems have different goals and strengths.
    Simple LOD is great in creating and optimizing meshes for later use (such as lod levels)
    QuickLod is great in managing those meshes and thus optimizing the scene.

    So when you don't want to buy both systems, you can decide between these two possibilities:
    • Have optimized meshes and assets but only a basic lod system (usable for small scenes)
    • Make your lod levels by hand but have an extended lod system with component management and such.(usable for all scenes)
    In my eyes, the best solution would be to use both, Simple LOD to create the lod meshes and QuickLod to manage them.
    It's up to you.


    If you have further questions, feel free to ask me again. :)


    Greetings
    Chillersanim
     
  40. stationx

    stationx

    Joined:
    Jul 9, 2012
    Posts:
    251
    hi Chillersanim!
    Yup! What would be the best approach with this asset to generate a ultra insane huge amount of rocks, rocks and more rocks for a desert type of scenario. In your demo scene you are generating a grid. So what can I do to control this placement of al these meshes? Also, I noticed that we can stil have a huge amount of drawcalls. In my scene where performance already is critical any 50 drawcalls + is too much.
     
  41. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,630
    I think Mesh LOD uses an asteroid field in their demo. Not just rocks, but moving rocks. ;)
     
  42. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    @stationx
    I'll look into the demo idea of yours.

    As for the placement, the grid placement used in the demo scene is only a simple placement using a grid.
    If you want finer controll or something that uses the terrain data, then you most likely have to create a new placer script.

    QuickLod supports dynamic batching, a custom batching is not implemented.
    If you want to reduce draw calls, you can combine bunches of nearby rocks together, that should help.

    @hopeful
    Can you send me a link to that demo scene?
    I couldn't find the asset in the asset store anymore

    Greetings
    Chillersanim
     
  43. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,630
    Sorry ... was misremembering. Mesh Baker (not Mesh Baker LOD) has a video demo using an asteroid field.
     
  44. I am da bawss

    I am da bawss

    Joined:
    Jun 2, 2011
    Posts:
    2,574
    I am interested, and curious at this extension.
    What's the reason to make this compatible with "Instant OC"? I thought Instant OC is also a LOD extension?
     
  45. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @I am da bawss

    InstantOC is focused on occlusion culling, but the LOD part of it is really basic.
    QuickLod on the other hand offers no occlusion culling but is very specialized in the LOD part.
    Both systems are specialized in their own technique, but no technique covers every possible optimization.

    To give you an idea of what both systems can do, here's a quick comparison (the list's probably not complete)
    QuickLod:
    • Multiple lod object types
    • Component management
    • Support for very large scenes
    • Editor support
    • (more)
    InstantOC:
    • Occlusion culling
    • (probably more)
    So I think using both systems together leads to the best optimization.

    Hope this answers your question.

    Edit:
    Hopeful made a much more complete (and more objective) summary to this toppic.
    Please read it if you want a comparison of the different lod systems.

    Greetings
    Chillersanim
     
    Last edited: Apr 16, 2015
    I am da bawss likes this.
  46. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,630
    My understanding of the situation is this: InstantOC is more of a dynamic occlusion culling plugin. Which is helpful (crucial, really) if you have a large dynamic environment. It has a form of LOD included, linked to the occlusion, and the author is working with chillersanim to help get the two plugins to be more perfectly interoperable because there are instances where you want a hand-off on LOD.

    For example, QuickLOD has a good method of proximity based LOD. InstantOC's LOD is linked with its raycasting. So if your game is based more on a horizontal plane with a forested or urban terrain, IOC is generally going to work very well for both occlusion and LOD. There are significant edge cases, though. Like, if you raise up on the Y axis - to where you can see tiny trees, buildings, or whatever in the distance - you'll likely have to greatly increase the number of raycasts in order to hit the colliders on all those objects in a timely fashion, and even so you're likely to get a lot of models popping into view. That's where a proximity based system like QuickLOD shows its strength, as every object can be rendered with its proper LOD with an efficient distanced based algorithm, and no collider is needed (for the purpose of LOD).

    SimpleLOD, which was mentioned before, is another great plugin that overlaps a little with QuickLOD, but which also has a nice synergy. Its main emphasis is on decimating models in editor and at runtime. So again, it is great for dynamic situations. If you have a procedurally generated system running - like UMA, for instance - at runtime you can send your freshly generated main model to SimpleLOD and it will make your LOD models on a background thread. It has a LOD switching system appended to it, but mainly SimpleLOD is about efficient, high quality decimation. You could use InstantOC, QuickLOD, and SimpleLOD together in the same project to efficiently render LOD levels for procedural models that are not occluded.

    SECTR: VIS is another occlusion product that a lot of people have. My impression is that it is probably most useful for dynamic indoor situations, but I'm willing to hear from people who have experience with using it on terrain and with aerial views. DunGen, a popular procedural dungeon generator, has a link to VIS built-in that seems to work very well. As a method of occlusion and LOD management, VIS and QuickLOD should complement each other.

    Mesh Baker LOD is another LOD product that has potential to cooperate with some of the aforementioned plugins. It requires Mesh Baker, which combines meshes and atlases materials. The prime virtue of Mesh Baker LOD, as I understand it, is that it can create those atlases on the fly, so it can batch objects you are using at the moment at runtime.

    SmartLOD is an older plugin that will read LOD models off disk if needed, relieving memory pressure. (The downside, as noted elsewhere in this thread, is that if you aren't holding the LODs in memory, retrieving them off disk is slow.)

    My apologies if I missed an asset in this field or if I misconstrued something. I was mainly going off memory.
     
    Last edited: Apr 16, 2015
  47. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @hopeful

    Wow, that's quite a summary.
    I couldn't have explained as good as you did hopeful.
    In fact, I think this is a great summary to tell the differences between all those available systems, so when someone asks again in the future, I'll just link them to your post.

    Thank you very much :)

    Greetings
    Chillersanim
     
    hopeful likes this.
  48. big_march

    big_march

    Joined:
    Mar 2, 2015
    Posts:
    38
    Hi,
    I just find there's a lot of GC when game running! Have you noticed this problem?

    ---update---
    This problem exist both on editor and mobile phone.
     

    Attached Files:

    • GC.png
      GC.png
      File size:
      6.9 KB
      Views:
      945
  49. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    Hello @big_march

    Yes I'm aware of this problem.
    I'm working on a solution, but I can't say when it will be available.

    If this is a urgent issue for you, please pm me, so I can send you a solution as soon as I have one.

    Greetings
    Chillersanim
     
  50. chillersanim

    chillersanim

    Joined:
    Mar 31, 2013
    Posts:
    219
    If you want to combine QuickLod with SimpleLOD, you probably want to read this blog post.
    It's a very interesting post about how you can simply combine both systems to get the benefit from both with minimal work.

    I was made aware of this blog post by Michael Urvan who wrote a review on the asset store.
    He's also the author of the blog post.

    Greetings
    Chillersanim