- fix: use after free grass opt by @InTheBottle
- refactor(pbr): share grass material textures and constants by @DwemerEngineer
- fix(grass): use live terrain depth for occlusion by @DwemerEngineer
- perf(grass): batch culling and draws with safe bucket lifetimes by @DwemerEngineer
- perf(grass): cache hierarchical bounds for slice culling by @DwemerEngineer
- ui(grass): simplify lighting and culling controls by @DwemerEngineer
- fix(grass): distinguish bucket triangle counts by @DwemerEngineer
- perf(grass): use separate indirect arguments per bucket by @DwemerEngineer
- chore(grass): clarify culling and material comments by @DwemerEngineer
- Merge remote-tracking branch 'upstream/dev' into grass-opt-fixes by @DwemerEngineer
- Merge branch 'dev' into grass-opt-fixes by @DwemerEngineer
- Merge branch 'community-shaders:dev' into grass-opt-fixes by @DwemerEngineer