branchrust_reboot/main/waterlevel_deepsea_sample_fixcancel
26 Commits over 0 Days - Infinitycph!
Bugfix: avoid NRE when ocean sim is not initialized and we don't need it
Tests: booted into craggy
Clean: simplifyy WaterSystemBurst.GetHeightArray_Burst
Tests: none, trivial changes
Clean: minor adjustments to WaterLevel.GetWaterLevels impl
- use FillJobIndirect instead of FillJob when waves are not needed
- get rid of namespace qualifier
Tests: ran unit tests
Bugfix: OceanSimulation.GetHeightAttenuation - handle positions in deep sea
Tests: WaterLevel unit tests pass
Bugfix: Rewrite WaterLevel.GetWaterLevel to properly take in deep sea state
Tests: ran unit tests, water level consistency tests fail due to bug on OceanSimulation side, serial path, will fix next
Update: TerrainHeightMap.GetQueryStructure now takes in a flag for deep sea data
- got rid of bespoke height and normal sampling from HeightMapQueryStructure
- bugfix: buoyancy - WaterSystemBurst.GetHeightArray_Burst now samples relevant heightfields instead of assuming deepsea heightfield is a single const
Last duplicate is gone, yay. Can finally look at fixing WaterLevel.GetWaterLevel and other spots
Tests: booted into craggy, generated deepsea and teleported to it - swam around, went to the islands, went to scientist tugboats
Clean: rip out TerrainHeightMap.GetHeightsFastIndirect
GetHeightsIndirect is similarly fast(~10%) and consistent at borders with GetHeight
Tests: ran water level tests (but they're falsely passing)
Clean: remove TerrainHeightMap.GetHeightFast, replace with GetHeight
- added GetHeight(Vec2) overloads to avoid accidental GetHeight(Vec3) call via implicit conversion
GetHeightFast is ~55% faster in managed land, but it's not used in very hot loops, so doubt we'll notice the difference. If we really care, we can replace it with available burst jobs.
Tests: ran unit tests
Update(tests): add TestGetHeightsIndirect_UV_Overworld and TestGetHeightsIndirect_UV_DeepSea tests
Tests: ran all unit tests
Update: TerrainHeightMap - redirect all height and normal calcs to go via HeightMapData impl
- Renamed HeightMapData.GetHeight -> GetHeight01
Tests: all unit tests pass, perf tests results seem same
Update: fill in some missing overloads in TerrainHeightMap
- get rid of commented methods
Tests: ran unit tests
Clean: replace GetHeightsFastIndirect with GetHeightsIndirect
- also fix a bug with invalid indexing
- TerrainMap<T> now exposes internal src buffer as a ReadOnly view
Starting cleanup effort, rough path ahead
Tests: ran unit tests
Clean: remove Perf.TestGetHeightFastIndirectOld and related bits
Tests: none, trivial change
Update: switch GetHeightsFastJobIndirect to use HeightMapData.GetHeight instead of inlined logic
- removed extra 4 madds by using Fast's index calculation
It's slightly slower on 512x512 test (0.9ms -> 1ms) due to Clamp01 calls, but we can afford consistency with GetHeight - will allos us to promote "fast" as "normal" and deduplicate
Tests: ran perf tests, compared asm
Update: rewrite TerrainHeightMapJobs.GetHeightsFastJobIndirect to use HeightMapData
- temporarily added Perf.TestGetHeightFastIndirectOld for easier assembly comparison
Generates the same assembly, so same perf
Tests: ran perf tests
Update(tests): add perf tests for TerrainHeightMap GetHeight family
Surprisingly, the *Fast versions are faster even in burst jobs. I want to rip them out(too many dupes), so going to try to replicate the benefits to common family
Tests: ran all unit tests
Clean: redirect a couple calls via GetHeight01/GetNormal(..., NativeArray.ReadOnly)
Tests: none, trivial change
Bugfix: TerrainHeightMap.GetNormalsIndirect - reimplement using HeightMapData core
- also slightly refactored HeightMapCore height logic
Fixes it not knowing about deep sea
Tests: all TerrainHeightMap unit tests pass
Update(tests): add TestGetNormalsIndirect_Deferred
Conceptually it's same logic underneath, but routed through different code, so worth a unit test
Tests: ran new unit test - fails on deep sea indices as expected
Bugfix: TerrainHeightMap.GetNormal(float, float) now checks for deep sea
- added utility funcs that sample user provided NativeArray<short>.ReadOnly
- regenerated validation normals for unit tests from TestGetNormal
Tests: TestGetNormal passes, TestGetNormalsIndirect fails as expected
Bugfix: TerrainHeightMap.GetHeightsIndirect - rewrite using HeightMapData core
This fixes missing deep sea lookups
Tests: ran TestGetHeightsIndirect - passes
Update: refactor core of GetHeight logic into it's own struct
- updated GetHeights to use it
Tests: TestGetHeights passes
Bugfix: TerrainHeightMap.GetHeights - clamp to border when interpolating heightmap samples
Tests: TestGetHeights passes
Update(tests): add TerrainHeightMap unit tests that cover GetHeight + GetNormal and their variants
Tests: ran unit tests, some failures are unexpected
Update(tests): add support to generate test positions in deep sea bounds
- updated TestWaterLevelsConsistency to use those extra positions, but surprisingly the test passes
- documented everything(I think?) that's wrong with WaterLevel.GetWaterLevels
Tests: ran updated unit test