branchrust_reboot/main/foliage_instancingcancel
74 Commits over 151 Days - 0.02cph!
Remove unneeded buffer flag
Fix alignment issues with indirect args on different devices
Correct invalidation offset calculation error
Fix spawn issues by stopping invalidation while still computing cells
Clear placement list on destroy
Handle when no foliage placements are created
Add check for AsyncGPUReadback support
Fix on destroy issue with foliage grid
Also fix invalidate cell blocks step for negative coords
Fix compute cell block issues when using negative coords
Fix burst compile error, change position xz to floats to fix issues on larger maps
Fix compile issue, correct instanceID for vulkan
Put debug code behind conditionals, disable primitive rendering option, instancing now on by default, dispose all buffers on destroy, move buffers init to after all placements have been added to list, revert sections to main where possible, remove opt vertex macros and noise gen compute.
Fix possible inconsistent RNG placements, use minimum radius to avoid noticeable culling with shadows, increase cell plane test bias to compensate
Add vertex color to binned vertex data; fixing wind and displacement parameters
Track compute blocks instead of cells in wrapping grid update; fixes case where invalid cells were not being updated when moving in certain patterns, fix WrapIndex function for all cases
Use terrain normal map instead of deriving from the height map for better quality on steep edges, more accurate grass distance based cell count calculation
Recompute cells when texture mipmap limit is changed, fix underwater foliage by calculating min max heights in cells, and improve debug view.
Revert changes to terrain maps, fix inaccurate heights by setting ignoreMipmapLimit on heightmap
Track total possible instance count and recreate buffer if required
Handle AsyncGPUReadback data in a job, remove unused grid class
More clean up, primitive rendering improvements using the vertex buffer instead of a structured buffer, fix issue incorrectly limiting wrapping grid, error when placement counts don't match, integrate with Jungle biome, compare triangle counts when binning meshes to avoid false positives, better toggling between instancing for performance comparisons.
Primitive indexed indirect render implementation for single material
Fix foliage shader merge issue. Adjust placement count.
Big code clean up and mark up. GPU readback to job wip.
Better switching between instancing on/off, and more clean up
Clean up no longer used instancing code, add grass instancing convar to enable instancing, fix incorrect placement IDs, add small bias to cell box/plane check to avoid false/edge case negatives
Improve foliage cell culling with heights, allowing proper camera plane culling using AABB bounds check. Now using a fixed bounds around camera based on grass distance where cells will be culled and bounds shrinked for the compute pass.
Improve cell culling on CPU using plane distances with approx cell radius as threshold, distance culling on GPU, better max distance calculation, improve debug view.
Put foliage cell collect and command buffer creation in job, split render update across update and late update, add submesh command values to master mesh struct
Restructure foliage grid to make use of native arrays in cell collect and command creation steps. Use wrapping smaller grid for foliage cells to keep to a reasonable size, while invalidating cells as the camera moves.
Re-enable wind and fix instanced foliage motion vectors
Simplify placement compute shader and reduce interlocked ops, restructure foliage instancing header to handle shadows and motion vectors, improve performance in foliage grid update by caching raycorners and reducing unneeded cbuffer updates.
Fix buffer clearing compute dispatch count, array disposal, add scale world to object matrix, restore old functionality for comparisons
Add normals and tangents to binned vert data, restructure foliage vertex shader to handle wind, fading and displacement with instancing (also might have improved edge masking), add optional vertex data macros to make passing data easier and reducing redundant calculations
Simplify active submesh data structure
Compute foliage cell population on a 3x3 grid of 8x8 cells in a sequence of computes and AsyncGPUReadbacks to cache population counts in chunks as camera moves.