462 Commits over 365 Days - 0.05cph!
Merge bitmapped_damage_tracking → indirect_instancing
Implement bitmapped damage tracking
Rebase on current /indirect_instancing
Clean up some failed experiments
Fix nothing rendering for real this time.
Fix nothing actually rendering with new Graphics.DrawMeshInstancedIndirect based draw call submission
Fix NRE in Indirect Instancing debug overlay
Add agressive optimisation attributes to the hot path of Indirect Instancing.
Rebase on /main (save 271)
Regenerate ConVars and force bounds to be always huge (experiment)
Add a third submission mode to indirect instancing which works through `Graphics.DrawMeshInstancedIndirect` and avoids copying to a command buffer.
Enable `indirect_instancing.command_buffer` to switch back to the old way.
Finalise SIMD terrain culling implementation:
- Fix oscillation/flicker bug by tracking individual ray progress properly.
- Adjust step size dynamically with altitude to reduce iterations.
- Limit overall iterations to ConVar `indirect_instancing.tc_max_iterations`.
- Ignore rays to instances that have been culled in a previous step.
Add more debug output to the indirect_instancing.debug overlay
Add new SIMD terrain culling implementation (WIP) providing ~3x speedup (up to 30x in certain cases)
Only allow StartMotion() when IsDynamic is set
Speed up motion list execution 30x by caching matrices and checking them for changes.
Regenerate ConsoleSystem.cs
Regenerate ConsoleSystem.cs
Merge other fixes from /indirect_instancing
Merge build fix from /indirect_instancing_fixes
Restore constant that I removed because I was an idiot.
Merge from /indirect_instancing_fixes
Fix multiple issues with LOD bounds/distance calculations:
- Never return zero-bounds for anything, try multiple things and fall back to 1 m³ as a last resort.
- Always use bounds (and center) of LOD0 for consensus between LOD states.
- Fix fallback renderer using transform position instead of bounds center for distance calculations.
Fix Radtown sign by manually disabling mipmap streaming.
Properly fix brightness flicker by using a GlobalKeyword instead of a string
Add preliminary support for layers to indirect instancing
Fixed brightness flickering on indirect instancing objects when moving camera (inefficient variant)
Completely hide shadow-proxy states affected by agressiveShadowLOD to improve performance
Completely hide shadow-proxy states affected by agressiveShadowLOD to improve performance
Remove merging of damaged regions as the sorting and merging was taking more time than it saved in some situations.
If frequent buffer updates continue to be a problem, /indirect_instancing/bitmapped_damage_tracking should fix that.
Add ConcurrentBoolArray as a simpler (but more wasteful) form of ConcurrentBitArray to get things going quicker.
Add a function to find contiguous regions of values efficiently.
Only run terrain culling when it's actually worth it (when camera is above some but not all terrain)
Introduce WIP version of ConcurrentBitArray for bitmapped damage tracking
Restrict Indirect Instancing ConVars to debug builds only
Undo: Enable more materials for instancing that weren't caught previously because of a buggy automation in indirect instancing tools
Undo setting instancing flags on additional materials because the automation seems to be still incorrect
Fixed node visuals not chaning while harvesting them
Added `graphics.vram_report` command so we can begin getting the VRAM situation under control.
Fix missing terrain on tutorial island by reverting the material to be non-instanced.
Merge fixes from /indirect_instancing
- Don't perform `graphics.aggressiveshadowlod` optimisation on shadow proxies.
- Only respect `indirect_instancing.shadows` when Indirect Instancing is enabled.
Force disable HLOD while Indirect Instancing is enabled