2,885 Commits over 730 Days - 0.16cph!
Clean: initial pass of removal Jobs 2 code
- removed hand-rolled async state machines
- removed all code dependent on !UseUniTasks
Tests: compiles
Merge: from culling_falsepos_improve
- Update: restore culling.debugshowstats functionality
Tests: built debug client standalone, used the command in editor
Update: replace editor GUIStyle with default one to allow culling.debugshowstats to work
- remove UNITY_EDITOR defines
Tests: built debug client standalone
Bugfix: ignore set calls if occlusionculling instance hasn't been created yet
Tests: compiles
Merge: from culling_falsepos_improv
- Bugfix for NRE blocking connection to the server
Tests: none, trivial change
Merge: from culling_falsepos_improv
- Update(debug): added a bunch of editor only debug tools to be available in standalone, in culling clientvar group
- Update(debug): improved output of some of these tools
Tests: used these tools on craggy and apartment
Update: expose more of culling debug tools
- DebugShowStats - same as PrintStats, but continuously rendered to screen
- DebugDrawHiZMipChain - draw all depth mip levels on screen
- DebugDrawHiZOverlay - overlay specific level of mipchain on the screen, -1 to disable
Tests: used all on craggy
Bugfix: ensure rendering camera is facing same direction as apt cctv camera
Tests: rented 602, looked into it - more stuff rendered
Clean: get rid of OcclusionCulling.DebugFilter
We already had DebugMask that represented exactly the same
Tests: compiles
Update: expose more of OcclusionCulling debug
- got rid of original culling.debug clientvar (superseded by debugmask which accepts a bitmask value)
- added debugscreenbounds (shows screenspace bounds + resolved LOD of hiz chain)
- added printstats
Most of this was available in the editor, should make it easier to sus out the specific conditions of bugs
Tests: used all on craggy
Update: add debugshowoccluderid to help with filtering to specific occluder
Tests: used on Craggy to look at boxes
Update: couple more debug features for OcclusionCulling debug
DebugLookingAt will try to resolve LODComponent (but our entity hierarchies are wild, so it fails frequently), DebugRange limits which occluders are debugged
Tests: used both to target props on Craggy
Update(debug): allow to filter occlusion culling debug to just 1 specific instance via culling.debugid
- added editor only way to copy id (need a way to do this in standalone)
Tests: used it to isolate apartment corridor wall (still pants to use though, need something better)
Update(editor): occlusion hiz overlay - "auto-expose" depth overlay
Original implementation made it very difficult to discern anything in enclosed spaces
Tests: used it in apartments
Update(editor): use same color for lod level of occludee when rendering ss bounds
- also added memoization of lod level
Tests: none, trivial change
Update(editor): use different colors for visualizing occluidee screen-space bounds
Red for dynamics, cyan for statics, purple for grid
Tests: visualized swing - saw all 3 colors
Bugfix(editor): fix dynamic occludees rendering sphere in LS, instead of WS
- use cached location to help detect slow updates to dynamic occludees
Tests: visualized bounds of swing seats - they're no longer at origin
Remerge of before due to submit race
Merge: from renderbatch_meshlod_improv
- Update: reimplementation of previous bugfix to be cheaper
Tests: pasted a boat, flew out and back - props were there
Optim: simplify prev bugfix, don't early initialize LOD managers
Tests: pasted a boat, flew out and back - props were there
Bugfix: from renderbatch_meshlod_improv
- Bugfix for disappearing props on boats
Tests: paste a boat, flew out of range and back - all props present
Bugfix: fix initialization race of LODComponent on whether it's dynamic or not
- Now both ToggleDynamic and OnEnable can initialize managers+occlusion
When loading from network snapshot, it was toggling dynamic state before it initialized managers, leaving it in a half-dynamic, half-static state
Tests: spawned a copy paste boat, all entities were present. Flew out of net range and back - all's there
Merge: from furniture_occlusion_fix
- Reimplement previous bugfix to retain furniture culling
Tests: rendeted and tried to run in and out, abused noclip, triggered bug once
Bugfix: restore furniture occlusion culling, check both occlusion state and appt flag
Tests: rented 601, ran in and out, noclipped a bunch - was able to trigger it only once(abusing noclip) instead of constantly, should be better
Merge: from renderbatch_meshlod_improv
- Bugfix for basement doors not rendering
Tests: booted into apartments island, checked all floors for doors not rendering. Checked room 101 - stuff was rendering
Bugfix: mark appartment doors a/b/c as dynamic
- apartments S2P
Since they move, they should've been dynamic, but it also causes them to be refreshed and have up to date occlusion state (but no idea why we need this - will chase up later)
Tests: booted into apartments island, checked all floors for doors not rendering. Checekd room 101 - stuff was rendering
Update: add visible count to occlusion debug output
Tests: used it on craggy while tweaking extra lod steps
Merge: from renderbatch_meshlod_improv
- Bugfix: opening doors should no longer cause them/others to disappear
Tests: pasted many doors paste and opened door, flew back and to - all was in place
Bugfix: fix MeshLOD never unregistering from occlusion after animating
- when batching gets toggled, notify batching handlers
- MeshLOD will toggle culling on notif
Tests: paste of many doors, opened couple doors and flew far/close - no more missing meshes
Bugfix(editor): add ResetStaticFields to OcclusionCulling
- codegen
Tests: spawned copypaste, restarted game in editor - print out doesn't mention lingering renderers
Update: add ability to step through higher levels of mip chain to reconfirm visibility
- controlled via culling.extralodsteps, default to 0 (same as before)
Out HiZ downsampling filter erodes depth at edges of objects, so if objects picks a low mip, there's a good chance it won't see any occluding depth
Tests: ran around apartments monument in editor with 0, 2 and 7. at 2 saved only 0.25% percent of drawcalls, but 7 can save up to 10% (will profile standalone later)
Update: draw picked hiz lod for occludees in occlusion debug
Tests: used debug visualization in editor
Bugfix: add using on actionResult to avoid leaking
Tests: none, trivial change
Merge: from jobs3_as_default
- Update: UsePlayerJobs is set to 3 by default
Tests: booted craggy and verified server var
Update: default UsePlayerUpdateJobs to 3
- codegen
Tests: booted craggy, console returned 3
Merge: from renderbatch_meshlod_improv
- Optim: allow culling to work on MeshLods if they have invalid RenderBatch setups
- Optim: Avoid creating batches-of-1-mesh, as that inhibits Unity batching
Tests: ran around apartment complex, didn't see rendering artifacts. compared standalone builds, shows 20% fps improvement on my setup
Clean: add a comment
Tests: none, trivial change
Optim: permit MeshLods to use occlusion culling if it has an invalid RendererBatch
Taken from
156029. Saves 30% of drawcalls in all 5 test cases, 20% of avg fps improvement in editor(will test standalone later)
Tests: profiled 5 test cases, flew around keeping an eye out on weird rendering
Optim: don't create procedural batch meshes if they only contain one input mesh
This inhibits unity's batching via instancing. In 2 out of 5 scenarios saves 16% of draw calls/~1ms avg in editor
Tests: monument island with appts and disabled world prefabs, tleeported to 5 locations and inspected profiler stats
Clean(editor): get rid of if bypass for drawing LightOccludee gizmos