Hello,
A classic LOD structure might look like this:
50000 LOD0
10000 LOD1
3000 LOD2
as example.
However, if LOD0 with 50000 is being rendered, you can still have a massive performance increase by using a copy of the last/some LOD to render the shadows. This is easy to setup and a very low hanging fruit.
So a much better structure is
50000 LOD0 - Shadows Off
10000 LOD1 - Shadows Off
3000 LOD2 - Shadows Off
3000 LOD2 Copy - Shadows Only
If you could enable a setting to create this, it could potentially greatly increase performance for many users for extremely low dev effort, as you almost halve the rendering cost of your given LOD0 mesh.
Example: 25000 vertex shadows vs 1500 vertex shadows
Benefits
Shadow rendering consistently sits at the top of the Profiler in terms of GPU performance required.
This could heavily lessen the load on the shadow pass, at the cost of one additional transform.
Many meshes could see their shadow casting vertex count reduced by 50-90% in majority of cases.
Considerations:
Self shadowing can be affected if there is a too large LOD discrepancy on certain models, as example on convex holes getting filled.
Solution:
- The user can select a higher LOD for shadows
- The user can slightly scale the shadow LOD smaller (0.95x) so the intersection becomes invisible
- The user can opt-out of the feature on edge-case models and still have “default” performance
Conclusion: This is not a issue that warrants avoiding the feature
Please consider this low hanging fruit, this simple optimization might have more positive impact on an optimized project than a high ticket feature like GPU resident drawer or something like that.
This is a tried and tested optimization which has been done for many years in many games. The Unity team also has already vetted this by adding a “shadows only” mode to models for exactly this reason.
(On another note, it would be nice if you could optionally sort of “link materials” as people constantly by mistake change a material on one LOD and then forget about the others. This can also happen on transforms quite frequently, at least from my experience.)