1,140 Commits over 487 Days - 0.10cph!
    
    
    
        
            
            
            
                
                merge from projectile_jobs
                
                
                
                
             
         
        
        
            
            
            
                
                cleaning up projectile TransformAccessArray properly
                
                
                
                
             
         
        
            
            
            
                
                enabled batched projectiles by default
                
                
                
                
             
         
        
            
            
            
                
                reduce initial capacity of the projectile stable index cache
                
                
                
                
             
         
        
            
            
            
                
                removed BatchedWaterRays option and disabled codepath
                
                
                
                
             
         
        
            
            
            
                
                corrected profile region name
                
                
                
                
             
         
        
            
            
            
                
                replaced TraceWaterSpheres/TraceWaterRays with batched deferred version, scheduled with dependency on batched physics queries, so call to Complete will include both the queries and the water traces
- GamePhysics.TraceBatched now runs 4 serial Commands->WaterTrace in parallel to eachother rather than completing all physics queries before doing water traces
                
                
                
                
             
         
        
            
            
            
                
                added IJobParallelFor support to ScheduleParallel job extensions and fixed IJobFor which was just completely wrong
                
                
                
                
             
         
        
            
            
            
                
                adjusted projectile ray generation jobs to not break initial HitTest setup into multiple jobs, ReadOnly jobs on the same TransformAccessArray seems to behave as if they cannot run in parallel to eachother (via combined dependencies) despite only require read access so Unity must be controlling this
                
                
                
                
             
         
        
            
            
            
                
                added ScheduleParallel extension functions to handle sensible batch sizes automatically, this assumes that a reasonable batch size (64) is required before scheduling overhead beats any gains made with parallelism - if this isn't the case, such as for longrunning complex jobs working on a small number of items then you should control the batch size yourself
                
                
                
                
             
         
        
            
            
            
                
                clarified water trace setup
                
                
                
                
             
         
        
            
            
            
                
                Gather trace commands in a job, requires copying some data into a native container first but it's still twice as fast overall
Test: projectile tests all still passing
                
                
                
                
             
         
        
        
            
            
            
                
                clear benchmark timers after recording results, stops accumulating time between runs
                
                
                
                
             
         
        
        
            
            
            
                
                jobified transform readback for effect updating, still slow to update scaled renderers though
                
                
                
                
             
         
        
            
            
            
                
                pooling HitInfo for Projectile DoHit and don't string concat for every ricochet fx fire
                
                
                
                
             
         
        
            
            
            
                
                moved most of HitTest generation to a transform job
                
                
                
                
             
         
        
            
            
            
                
                further batched projectile improvemenets
- jobified position/rotation writeback, 10x faster
- adjusted HitTest to only populate some fields once for a projectile's lifetime (based on flag reset when it is pooled), some improvements
Tests: all projectile tests passing
                
                
                
                
             
         
        
        
        
        
            
            
            
                
                reworked PlayerCache into a generic StableObjectCache to re-use it for batched Projectiles, making use of it for reading batches of projectile transform data which speeds it up by roughly 8x-10x compared to going through managed properties (cached or otherwise)
Tests: re-ran all projectile and PlayerCache tests, adjusted to new interface
                
                
                
                
             
         
        
        
            
            
            
                
                added batched water tracing and various supporting features
- GamePhysics.UseBatchedWaterRays convar to disable for perf comparison, will remove eventually
- NativeArray/NativeList expansion can optionally use power of two expansion
- Added native-friendly query structures for TerrainHeightMap and ShoreVectors, can add more querying functionality as needed but keeping it lean for now
- Modified test cases to be more lenient on float comparisons as Burst compilation introduces variance of around 1e-8 in position results on waves which is more than acceptable
                
                
                
                
             
         
        
            
            
            
                
                fixed potential break in TraceWaterRays/TraceWaterSpheres logic that would cause casts to miss water traces if an earlier one had hit the max number of colliders
                
                
                
                
             
         
        
            
            
            
                
                sharing more data between batched projectile effect processing - only accessing transform pos/rot once per projectile and only checking retrieving local player entity data once per batch
                
                
                
                
             
         
        
            
            
            
                
                added Projectile.UseBatched ClientVar to switch between serial and batched tick for projectiles
                
                
                
                
             
         
        
            
            
            
                
                Jobified trace-testing in HitboxSystem, also replacing local NativeArray helper function with existing Expand static extension
                
                
                
                
             
         
        
            
            
            
                
                corrected InitializeVelocity on projectile to keep Projectile performance test consistent between runs (increased run-count)
                
                
                
                
             
         
        
            
            
            
                
                Optim: reduced unnecessary Transform reads in batched position/rotation update, also added AddRange(BufferList<>) function to BufferList to change to that for marginally faster loop speed
Test: consistency tests passing with serial using old method still
                
                
                
                
             
         
        
            
            
            
                
                Added extra sanity checks to projectile consistency testing
                
                
                
                
             
         
        
            
            
            
                
                added missing effects update on batched projectiles and retiring into the prefab pool
                
                
                
                
             
         
        
            
            
            
                
                clear static test field in pet-test teardown
                
                
                
                
             
         
        
            
            
            
                
                ▋▄▍▄▉ ▆▉▉▌▆ █▋▇▆▇▋▄▇▅ ▌▅▌▌▌▊▄▇ ▅▋▄▄ ▆▋▍▇▌▊ ▋▌▅▍▍▋▍▅ ██ ▋▍▋▍▌ ▄▊▍, ▍▆ ▅██▌ ▇▋ ▌▅▆▍█-▍▉▅▆█▄▍ ▅▄▌▋▅▉▉▆▄ ▄▅▆ ▄▍ ▇▉ █▇▇ ▆▉ ▅▍▌▌█▄
- ▌█▉▊█▍▋▋▌█ █▆▍▆▅▋▋▄ ▍▌ █▉▍▊ ▍ ▄▋▇▄▅ (▄▌ ▋█▋▋ ██▋▆▇ ▆▉▅▄▄█▍ ▇█) ▅▋▍▉ ▊▇█ ▍▋▇▆█-▋▋█▊▉█▉▇ ▆▇▆▊▉▆▄ ▋▉▌ ▊▌ ▍▊▍▆▍ ▅▋▇▇▉▊▇ ▄▌ ▉▋▋ █▉▍▇▍▆ ▌▉▆▍█▇▊▇▌▋▇ █▄▋ ▅▊▇▊▆ ▄▊ ▊▌ ▊▊▋▆▄▅ ▇▊█▄█▄▋ ▊▆▇▄▊<->▅▋▊▊█ █▍▉▋▅▆▅▌▉
                
                
                
                
             
         
        
            
            
            
                
                cached native allocations, batched projectiles now save between 30% - 50%  of the runtime compared to serialized in performance tests (gains increase with projectile count)
                
                
                
                
             
         
        
            
            
            
                
                multiple significant fixes to GameTrace, new Projectile and GameTrace tests are passing but seeing a slight differences in projectile counts with performance test that's indicating some untested edgecases
                
                
                
                
             
         
        
            
            
            
                
                initial pass on batched projectiles, functional except for LOS checks but failing consistency tests which needs more diagnosing
- added batch support to multiple tests for comparison
                
                
                
                
             
         
        
            
            
            
                
                reconfigured fluorescent ceiling light physics configuration
- using configurable joints for better motion, small linear limit for better motion and positional drive on the Y to stop it flying through the ceiling
- added toggle to reduce sleep threshold on CeilingLights
- needs a line renderer setup to replace mesh cables
                
                
                
                
             
         
        
        
        
        
        
            
            
            
                
                improved topology-based max carve height to produce a better gradient
                
                
                
                
             
         
        
            
            
            
                
                tapering MaxCarveDelta off using multiple topology queries of different radii
adjust sediment and waterheight values with carve limits so water and sediment are also corrected
                
                
                
                
             
         
        
        
            
            
            
                
                fixing erosion issues waterside and stripe artefacts
- corrected slope angle calculation that was causing striped carving at low 
- introduced procedural carving limit that eliminates waterside carving and just limits max-depth elsewhere
                
                
                
                
             
         
        
            
            
            
                
                moved some TerrainTopologyMap job utility methods into own class and also promoted local function to a static method, burst seems to hate local functions in this case
                
                
                
                
             
         
        
            
            
            
                
                removed uneeded burst compatibility test attributes from methods, caused the owning class to be tested for burst compatibility