Hi everyone, We just updated DestroyIt to version 1.11. It's mostly a performance update, but also brings the asset current to Unity 2019.3.7f1, and addresses a few fixes we had on our backlog. Here's the full changelog: Spoiler: DestroyIt 1.11 Changelog v1.11 (Apr 2020) Updated for Unity 2019.3.7f1 compatibility Improved memory performance for progressive damage and destroyed prefab material transfers by modifying MaterialPropertyBlocks instead of directly changing materials at runtime Removed the MaterialPreloader script entirely, as it is no longer needed to boost performance by creating hundreds of material variations at runtime Removed the need to put progressive damage materials in the Resources\Material_Preload folder. You can put them anywhere now, and they will work fine You can now make objects destructible even when they have no colliders or rigidbodies (see Scenario #29 in the Main Demo Scene). You can still apply damage to these objects through the normal ApplyDamage() method. Useful for things like scripted or far-off damage effects that the player cannot interact with Fixed "missing GUI Layer" warning on Main Camera component in QuickStart scene (Unity 2019-related) Fixed an issue with detail masks and texture maps being incorrectly used by the Material Preloader for progressive damage textures (Unity 2019-related) Fixed "Check Winding" error caused by one of the SUV meshes Added option to backup terrain in TreeManager because of "The specified path is not of a legal form (empty)" bug in Unity (Unity 2019-related) Repackaged DestroyIt-Ready as a separate package bundle to prevent build-time errors Fixed "Couldn't create a Convex Mesh from source mesh 'rock_low' within the maxinum polygons limit (256)" error (Unity 2019-related) Notes: If you are applying this update to an existing project, you may get a "missing script" warning for the MaterialPreloader component. You can safely remove this component, as it is no longer needed While we were able to improve memory performance for progressive damage and destroy prefab material transfer operations, we were not able to improve material transfers to mesh particle effects. Destructible objects that spawn particle effects that have materials transferred over to them will still create one material per renderer, per effect. This is due to a bug in Unity that causes MaterialPropertyBlock changes to not take affect on ParticleSystemRenderers that are set to RenderMode:Mesh. If you want to keep your material usage super-clean, manually assign your fallback particle effects rather than relying on the defaults (example: Scenario #4 - The Exploding Barrel in the Main Demo Scene). Known Issues: When importing the DestroyIt asset package, you may get an error message "A tree couldn't be loaded because the prefab is missing", even though there are no missing tree prefabs on the terrain in question. In this case, it is not a real error and can be ignored. Best we can tell, this is happening because we use a customized version of the SpeedTree shader for destructible trees, because it thinks the prefab doesn't have any valid mesh renderers when it actually does. It works fine, though, both in the editor and building the scene. If you turn on the Backup Terrain feature on the TreeManager script and you have the solution open in Visual Studio, you may get an error message "The specified path is not of a legal form (empty)" thrown from the TreeManager script. This error is not a real error and can be ignored. One thing we would like to provide more details on is this change: Basically, before this update DestroyIt relied on the Material Preloader script to inspect all of your progressive damage materials in the Resources folder, and create new materials for each variation (based on the number of detail masks). So for example, if you had 20 progressive damage materials, and they all used a detail mask with 10 different variations, it would create 200 materials and have them ready to go when the scene is built. Performance-wise, this was not bad, but memory-wise, it was not ideal. With this update, it now simply changes the progressive damage detail masks at runtime using Material Property Blocks. This method is not only better for memory management, but it also performs better, since swappping materials at runtime is more costly. It also avoids another downside of material swapping, which is the need to clean up the old materials that got swapped out. Over time, and with a large project, these leftover materials could add up to a significant memory leak. To illustrate the impact of the change, take a look at the number of materials created in our Main Scenarios Demo Scene when the scene is first loaded, and then after everything in the scene is destroyed: As you can see, fewer materials were created when the scene starts, and fewer materials were leaked when objects were destroyed. And here's a before/after comparison of performance. It wasn't a huge difference in our relatively small demo scene, but could be quite noticeable in larger, more complex scenes with hundreds of destructible objects. This stress-test comparison shows frames per second right at the moment the nuke destroys everything in the scene: And lastly, another bonus of this change is we were able to completely remove the Material Preloader script and the Resources\Material_Preload folder, which simplifies your setup. You can now put progressive damage materials anywhere, and they will work fine. One less thing to troubleshoot!