*** Version 1.7 (12.03.2016)

New features:

  • Class: Util.cs for list and array extension methods
  • Component: LodObserverBase.cs as interopt service for event handling of LodObjectBase events
  • Component: LodObserverHideBehaviour.cs for disabling components when the LodObject is hidden (usefull for disabling cpu intensive components)
  • Component: LodObserverLamp.cs for managing lamp properties based on the relative or absolute distance, or the current lod level
  • Feature: Now you can enable and disable components based on the distance
  • Feature: Now you can fade out lamp intensity based on the distance
  • Feature: Now you can fade out lamp range based on the distance
  • Feature: Now you can disable lamps based on the distance
  • Feature: Create your own observers with the LodObserverBase and let it do the event handling for you

New files:

  • Util.cs
  • Observers/LodObserverBase.cs
  • Observers/LodObserverHideBehaviour.cs
  • Observers/LodObserverLamp.cs
  • Editor/Observers/LOLEditor.cs   

Modified:

  • Behaviour: Registering and unregistering of lod objects is now done directly instead of in every Next() method call of the LodManagerCubic
  • Behaviour: LodObjectBase class now has a static collection of all alive LodObjectBase instances for faster access
  • Code: In class LodObjectBase added functionality to inform observers that the lod object has beed activated
  • Code: In class LodObjectBase added property indicating whether the lod object can accept event subscriptions
  • Code: Got rid of all LINQ querries and references
  • Performance: Reduced GC caused by updating cell levels by a factor of 10
  • Performance: Replaced certain collections for faster access
  • Performance: Removed redundant code

Fixed bugs:

  • Fixed critical compiler error
  • Fixed bug that caused flickering effect from LodObjects when it was a child of a moving LodSource
  • Fixed bug where the object culling was not precise enough in certain cases
  • Fixed bug where lod objects with DontSave flag wouldn’t be registered correctly
  • Fixed bug where a call to the method HandlePositionChange on a LodObjectBase instance could cause it to be incorrectly managed by the LodManager afterwards
  • Fixed bug where LodObjectMesh, LodObjectSkinnedMesh and LodObjectReplacement would overwrite the current lod level when excluded from the manager

*** Version 1.6 (08.03.2015) ***

New features:

  • Component: GsGroupSwitch.cs for hiding object groups depending on trigger inputs
  • Component: GsDistanceTrigger.cs as a distance based trigger
  • Component: GsCollisionTrigger.cs as a collision based trigger
  • Component: LodObjectChildSwitch.cs which enables and disables all child objects depending on the distance
  • Feature: The GroupSwitch feature has been implemented, it’s especially usefull to cull interior objects and remove them from all calculations.
  • Feature: Added a GameObject option: „Quick Lod/Add to group switch“ to add the selection directly to a groupswitch in the scene
  • Feature: Added a GameObject option: „Quick Lod/Remove from group switch“ to remove the selection directly from all group switches in the scene.
  • Interface: IGsTriggerBase.cs as for all triggers. Implement it and directly use your component as a trigger.
  • Struct: IntVector3.cs which works as a normal vector but with integer values
  • Struct: IntBounds3.cs which stores a bounding box with integer values

New files:

  • LodObjectChildSwitch.cs
  • Containers/IntVector3.cs
  • Containers/IntBounds3.cs
  • GroupSwitch/GsGroupSwitch.cs
  • GroupSwitch/GsCollisionTrigger.cs
  • GroupSwitch/GsDistanceTrigger.cs
  • GroupSwitch/IGsTriggerBase.cs
  • Editor/GroupSwitch/GroupSwitchSelector.cs
  • Editor/GroupSwitch/GsEditor.cs
  • Editor/GroupSwitch/GsHierarchyHelper.cs
  • Editor/GroupSwitch/GsTriggerSelector.cs
  • Editor/GizmosModels/QLRangeSphere.obj
  • Editor/Materials/QLManagedObjects.mat
  • Editor/Materials/QLRangeColor.mat
  • Editor/Materials/QLRectangle.png
  • Editor/Materials/QLRectangleActive.mat
  • Editor/Materials/QLRectangleInactive.mat
  • Editor/Materials/QLRimHighlightShader.shader

Modified:

  • Behaviour: Improved the visual feedback for ranges, now using a mesh with material instead of Gizmos
  • Behaviour: Changed the way managed objects are highlighted to make them much easier to find
  • Behaviour: Custom editor scripts now store the state of all expanders
  • Code: In class LodObjectBase added method GetOptimalLevelDistances(float, int):float[] which calculates optimal cull distances
  • Code: In class LodManagerBase added virtual property OptimalSourceBorder:float which returns an optimal border with for lod sources to use
  • Code: In class LodManagerBase added virtual method HandleSourceMovement(LodSource, Vector3):void which handles the source movement
  • Code: In class LodManagerCubic added method WorldToCellPosition(Vector3):IntVector3 to get the cell index in which the given point lies
  • Code: In class LodManagerCubic added method CellToWorldPosition(IntVector3):Vector3 to get the center point of the given cell position
  • Code: In class LodManagerCubic added method RecalculateGridSpace():void to recalculate the grid space depending on the scene
  • Code: In class LodManagerCubic added method RecalculateCellSize():void to recalculate the cell size depending on the grid size
  • Performance: Improved the algorithm to determine which cells are active, optimised the time complexity from O(n) to O(1)
  • Performance: Improved the underlying data structure for storing objects, improving the access time a lot
  • Performance: Improved many small algorithms
  • Performance: Changed the way existing cells are deactivated, now they are deactivated over multiple frames, removing short spikes
  • Performance: The chunk levels are now only recalculated when a lod source moves from one cell to another
  • Performance: Removed the Update method from the LodObjectBase class which improves the performance a lot!
  • Refactoring: Modified the methods RecalculateDistances() in LodObjectReplacement and LodObjectMesh to use the new base method.
  • Refactoring: Replaced Linq queries with code in time critical code parts for better performance.
  • Refactoring: Replaced some lists with sets to improve lockup performance
  • Refactoring: Modified some code in order to speed up the garbage collection.
  • Refactoring: Changed the way lod objects are managed to allow them to get registered and deregistered when the lod level changes
  • Refactoring: Changed the way lod objects check for position changes and improved the performance a lot.
  • Refactoring: Cells now store which camera is relevant for them, which reduces the impact of multiple cameras
  • Refactoring: The amount of priority levels is now adjustable with the constant: LodManagerBase.PriorityLevelAmount:int

Fixed bugs:

  • Fixed bug that prevented the LodObjectMesh to correctly setup the lods when the given mesh had no number
  • Fixed bug that crashed unity when a new LodManagerCubic was added to a scene without QuickLod components
  • Fixed bug that prevented the LodManager to be exclusive when the game was started or stoped with a disabled LodManager
  • Fixed editor bug that prevented LodSources to work in the game view when they were disabled in the editor settings
  • Fixed editor bug that caused lod objects not to register to the LodManagerCubic when resizing the grid
  • Fixed editor bug which lead to unpredicted results when a LodManager was reset
  • Fixed rare bug that could prevent cells to be removed when an object was removed from them

*** Version 1.5 (16.01.2015) ***

New features:

  • Component: LodObjectSkinnedMesh.cs for skinned mesh renderer
  • Feature: Added support for multiple scene views in the editor
  • Feature: The class LodObjectBase.cs now offers some events for extended notifications
  • Feature: The class LodManagerCubic.cs can now handle cell sizes for each axis individual
  • Feature: The class LodManagerCubic.cs can now highlight all managed lod objects
  • Feature: The class LodSource.cs now also has a local distance multiplier.
  • Feature: The class LodSource.cs can now observe camera components
  • Feature: The class LodSource.cs can now update the ViewAngle:float and LocalDistanceMultiplier:float depending on the FoV
  • Feature: The class LodSource.cs now uses a custom border width when using the falloff mode [HardWithBorder]

New files:

  • LodObjectSkinnedMesh.cs
  • Containers/GridColumn.cs
  • Containers/GridRow.cs
  • Containers/GridCell.cs
  • Editor/QLEditorTools
  • Editor/Materials/QLManagedObjects.mat

Modified:

  • Behaviour: Improved general performance by caching values and optimizing algorithms
  • Behaviour: Automatic recalculating of the grid space now also considers the size of the owner
  • Behaviour: Changed the algorithm to draw the grid. It should be clearer to use now.
  • Behaviour: Optimized the way the LodSource handles distance multipliers
  • Behaviour: Optimized the way the grid is being managed.
  • Behaviour: In class LodManagerBase, the property Sources now only contains the lod sources which should be used (now reflects editor settings)
  • Code: In class LodObjectBase added method GetLodAmount():int which returns the amount of lod levels that are setup
  • Code: In class LodManagerBase added virtual method NextStep():void which can be used as update notification for game and editor
  • Code: In class LodManagerBase added static method UpdateLodObjectDistance(LodObjectBase):void which recalculates the distance for the given lod object
  • Code: In class LodManagerBase added static method UpdateLodObjectDistance(LodObjectBase, IEnumerable):void, same as other, but with custom lod source collection
  • Code: In class LodManagerCubic added property CellSize:Vector3 which is new used to define the cell size
  • Code: In class LodSource.cs added property LocalDistanceMultiplier:bool
  • Code: In class LodSource.cs added property UseGlobalDistanceMultiplier:bool
  • Code: In class LodSource.cs added property ObserveCamera:bool
  • Code: In class LodSource.cs added property ObservedCameraComponent:Camera (readonly)
  • Code: In class LodSource.cs added property UpdateAngleMarginFromCamera:bool
  • Code: In class LodSource.cs added property UpdateLocalMultiplierWithFoV:bool
  • Code: In class LodSource.cs added property DefaultCameraFoV:float
  • Code: In class LodSource.cs added property BorderWidth:float
  • Code: Grid components now store their parent for faster access
  • Refactoring: Rewriten most API documentation with a loot of examples
  • Refactoring: In class LodManagerBase changed property ViewportObject:GameObject to ViewportObjects:GameObjects[] (Changed type and name)
  • Refactoring: In class LodManagerBase changed property ViewportSources:LodSource to ViewportObjects:LodSources[] (Changed type and name)
  • Refactoring: In class LodSource.cs added method GetDistanceToCell(Vector3, float) which replaces GetDistanceToChunk(Vector3, float)
  • Refactoring: Replaced class ChunkXReference.cs with GridColumn.cs
  • Refactoring: Replaced class ChunkYReference.cs with GridRow.cs
  • Refactoring: Replaced class ChunkZReference.cs with GridCell.cs

Obsolete:

  • File: Containers/ChunkXReference.cs
  • File: Containers/ChunkYReference.cs
  • File: Containers/ChunkZReference.cs
  • Method: In class LodSource.cs the method GetDistanceToChunk(Vector3, float) has been replaced by the method GetDistanceToCell(Vector3, float)
  • Property: In class LodManagerCubic.cs the property ChunkSize:float has been replaced by the property CellSize:Vector3

Fixed bugs:

  • Fixed stuttering when using multiple scene views
  • Fixed bug where lod objects wouldn’t deregister from cell properly when moving
  • Fixed bug where empty cells could cause unwanted overhead

*** Version 1.4 (21.06.2014) ***

New features:

  • Compatibility: Now compatible with Unity 4.1 and above (Previously only 4.4+)
  • Compatibility: Added compatibility with InstantOC, you can now switch the active lod system with the property „ActiveLodSystem“ when InstantOC is present
  • Feature: Chunks in front of the camera can now be priorized over chunks behind the camera
  • Feature: Chunks behind the camera can now be ignored

Modified:

  • Behaviour: Reduced the sensitivity that causes a chunk prioritiy recalculation in the class „LodSource“
  • Behaviour: When using the „LodObjectMesh“, the meshRenderer gets deactivated when no mesh is defined -> Prevents render overhead
  • Behaviour: Changed the method call of „FindObjectsOfType()“ to „FindObjectsOfType(typeof(Class))“ for compatibility reasons
  • Behaviour: Better performance through caching values.
  • Code: Added properties „UseOtherLodSystem“, „ActiveLodSystem“ and „ActivateLightsOnSwitchToQuickLod“ to the class „LodManagerBase“
  • Code: Added methods „ActivateQuickLod()“ and „DeactivateQuickLod()“ to the class „LodObjectBase“
  • Code: Added some code in the method „GetDistanceToChunk()“ in the class „LodSource“ that handles field of view
  • Code: Added property „UseViewAngle“ in the class „LodSource“, to activate and deactivate the chunk prioritizing algorithmus
  • Code: Added property „Falloff“ in the class „LodSource“, to choose between three different falloff modes
  • Code: Added property „IgnoreHiddenChunks“ in the class „LodSource“, to define if chunks outside the angle margin should be deactivated
  • Code: Added property „AngleMargin“ in the class „LodSource“, to define the angle at which the prioritizing algorithmus starts working
  • Help: Updated the help section for all components with the new functions
  • Help: Updated the manual_en.pdf with the new functions
  • Refactoring: Removed some deprecated code in the „TestGUI“ class

Fixed bugs:

  • Fixed a formula in „TestPlacement.cs“ that caused the placed objects to be missplaced in certain cases
  • Fixed minor bug that some settings were not directly visible in the editor

*** Version 1.3 (01.06.2014) ***

New features:

  • Editor: New menu item to select the lod manager [Edit/Quick Lod/Select Lod Manager]
  • Editor: New menu item to prepare the scene for lightmapping [Edit/Quick Lod/Prepare For Lightmapping]
  • Feature: When creating a custom LodObject, you can now use the „LodObjectAddFields“ attribute to display fields in the inspector
  • Feature: LodObjectMesh can now automaticly assign lod levels in the editor (Depending on the mesh name, containing folder and the containing object)
  • Feature: LodObjects now automaticly generate lod levels when first added to a game object

Modified:

  • Behaviour: Removed the warnings on the actions „Generate All“ and „Optimize Distances“ and implemented undo for them
  • Behaviour: Changed the minimum chunk size to 5
  • Behaviour: The maximum amount of chunks per axis is now set to 100, previously unlimited (Prevents memory overflow and lag)
  • Behaviour: The example scene now includes prefabs for the LodObjectMesh component
  • Refactoring: The property „Local Hide Mode“ in the class „LodObjectReplacement“ is now obsolete as the functionality of the „MeshRenderer“ type is replaced by the „LodObjectMesh“ class
  • Refactoring: The property „Default Hide Mode“ in the class „LodManagerBase“ is now obsolete as it is no longer used
  • Refactoring: Removed the „Default Hide Mode“ from the LodManagerCubic inspector („LMCEditor.cs“)
  • Refactoring: The file „OverwriteGlobalAttribute.cs“ has been renamed to „LodObjectAddFieldAttribute.cs“
  • Refactoring: Changed the namespace of the demo scripts so that they don’t use a custom category in the component list (new path: Components/QLDemo/)

Obsolete:

  • File: Attributes/OverwriteGlobalAttribute.cs

Fixed bugs:

  • Fixed small bug, that prevented the LodObject to deregister when the option „Exclude from manager“ was activated
  • Fixed a rare bug, where a LodObject could be registered multiple times
    You can now properly change the „Current Lod Level“ on a lod object when no lod manager is present and the „Exclude From Manager“ is deactivated

*** Version 1.2 (20.04.2014) ***

New features:

  • Component: A new lod object component has been added, which replaces the mesh depending on the distance
  • Editor: Added some automatisations for easier setup
    Autogenerate lod levels for lod objects
    • Recalculate the optimal distances for lod objects (beta)
    • Recalculate the grid space for the lod manager
    • Recalculate the chunk size for the lod manager
    • Recalculate the optimal max update distance for lod sources
  • Editor: Added a help field to all components with some info how to use the component
  • Feature: LodObjects can now be excluded from the manager
  • Feature: Made a difference between absolute and relative distance for upcoming features
  • Feature: Added an option to the lod manager to ignore objects outside the grid

New files:

  • LodObjectMesh.cs
  • LodStructureGameobject.cs
  • LodStructureMesh.cs
  • LodHelperAttribute.cs
  • OverwriteGlobalAttribute.cs
  • LodLevelListDown.png
  • LodLevelListUp.png

Modified:

  • Help: Updated the „Manual_EN.pdf“ with new informations
  • Refactoring: Changed „LOREditor.cs“ to „LOBEditor.cs“ and made it usable for both lodObject components
  • Refactoring: Restructured some base classes
  • Refactoring: Moved the lod object registering and deregistering to „LodObjectBase.cs“
  • Refactoring: Optimized some code for better performance
  • Refactoring: Made „LodStructure.cs“ generic
  • Refactoring: Reworked the „TestScene.unity“

Fixed bugs:

  • Fixed a rare bug where the objects were registered on a wrong way when Unity was restarted
  • Fixed a bug that sometimes occured when the lod object was reverted to prefab settings
  • Fixed a bug which could happen when the local hide mode was used

*** Version 1.1 (07.04.2014) ***

  • Initial Release