8.1 KiB
8.1 KiB
Roadmap
This file is the single roadmap for the C# engine, the first falling-sand game, and the experimental chunk-engine program.
Status labels:
[x]done[-]partial / in progress[ ]not started
Current State
Repo and runtime
[x]C# code split intoSand.Core,Sand.App, andSand.Tests[x]dense production backend with fixed-timestep stepping, pressure, thermal, explosions, and tool fields[x]main app backend seam with dense default and chunk experimental selection viaSAND_BACKEND[x]benchmark harness underSand.Benchmarks[x]chunk residency/prototype runtime underSand.ChunkPrototype[x]importedadvchksyskept as a support/prototype asset, not the production runtime substrate
Chunk status
[x]chunk residency scaffold exists[x]chunk backend is integrated into the main app as an experimental backend[x]chunk motion-regression tests cover wake-on-paint and shimmer issues found so far[x]active-move bottleneck instrumentation completed[-]high-motion chunk workloads are materially more stable in the real main app shell, and long-press gas overload no longer easily death-spirals the app, but mixed-scene runtime hotspots remain[x]chunk runtime can attribute active-frame cost to movement / runtime / activation / render buckets[-]live-app branch metrics now identify mixed-scene full-runtime work across solids, liquids, and gases as the main remaining single-thread hotspot after gas-stress stabilization[-]recent mixed-scene live runs show healthier attempt-to-move ratios and low render cost, so the remaining work is mostly true sim/runtime cost rather than frame catch-up collapse[ ]chunk backend competitive in the real main app shell[ ]chunk-local page-step architecture fully optimized[ ]chunk dirty-page render path fully paying off in the real app[x]chunk metrics/progress log added indocs/chunk-engine-progress.md
Parity and Engine Gaps
Dense/runtime gaps
[-]movement-property tuning from metadata (velocity,friction,viscosity,heat_capacity)[-]pressure/breakage tuning polish[ ]deterministic snapshot capture and comparison harness[ ]richer UI/debug overlays beyond current parity level[ ]accelerator implementation behindISimulationAccelerator
Chunk/runtime gaps
[ ]chunk-local contiguous hot-path storage replacing the current prototype-level iteration costs[ ]chunk-local active-band stepping and better neighbor wake scheduling[ ]chunk-aware frame generation that clearly reduces bytes touched on localized scenes[ ]parity ladder for reactions, phase transitions, thermal, burning, and explosions[ ]deterministic dense-vs-chunk snapshot parity for ported subsystems
Next Milestones
Dense Track
[-]continue movement-property and force tuning from metadata[ ]add snapshot capture/comparison harness for named scenes[ ]keep regression coverage growing around perf-sensitive fixes[ ]stage the first accelerator backend only after snapshot coverage exists
Chunk Engine Program
Chunk Program A: Truthful measurement and tracking
[x]add dated chunk progress / metrics log[x]add app-sized benchmark mode matching the main app sim dimensions[x]record first dense-vs-chunk app baseline[x]split chunk measurements into clearer step-core / activation / render buckets[ ]keep milestone-relevant benchmark and app results logged in the progress doc
Chunk Program B: Step-core stabilization
[x]remove wake-on-paint settling artifacts[x]remove trapped liquid/gas shimmer regressions currently covered by tests[x]add chunk motion-regression suite[-]continue stabilizing gas/liquid/solid motion under mixed tool-field stress
Chunk Program C: Chunk-local architecture rewrite
[x]remove LINQ / global particle sorting from the chunk step hot path[x]introduce chunk-local page storage types and scheduler scaffolding[-]step active pages using dirty-band guidance[x]wake neighbor pages on border writes[ ]reduce remaining page-lookup and page-render overhead in real app workloads
Chunk Program D: Rendering + stats
[-]dirty-page / dirty-chunk frame generation path[x]extend shared chunk frame stats[x]surface chunk workload metrics in the app debug overlay[ ]make localized chunk rendering wins clearly visible in app-sized measurements
Chunk Program E: Active-Move Optimization Gate
[x]add move-attempt / move-result / stalled-motion metrics[x]add runtime bucket timing for movement / runtime / activation / field decay / render[x]add active-motion benchmark scenes and app procedures[-]reduce chunk cost on10k-15ksimultaneous move frames[x]verify chunk remains stable under gas-heavy active scenes enough to stop easy long-press collapse[x]document high-motion baselines and improvements in the progress log[-]use the stabilized gas/app baseline to reduce remaining mixed-scene full-runtime cost before resuming parity work
Chunk Program F: Feature parity ladder
[ ]base motion parity improvements[ ]chunk force / pressure tuning[ ]common-material phase transitions[ ]core local reactions[ ]thermal subset[ ]burning/effect subset[ ]explosion / breakage subset
Chunk Program G: Promotion gate
[ ]sparse app workload beats dense by>=25%[ ]mixed app workload beats dense by>=10%[ ]dense-like workload remains within15%[ ]snapshot suite passes for all ported subsystems
Suggested Order
- add active-move instrumentation and logging
- establish dense vs chunk high-motion baselines in the real app shell
- reduce chunk active-move overhead in the step core
- confirm gains on gas-heavy and continuous-paint scenes
- reduce remaining mixed-scene full-runtime hotspots from the stabilized single-thread baseline
- plan multithreaded architecture from the stabilized single-thread baseline
- only then resume chunk parity expansion and deeper engine storage promotion
Commands
Dense app:
Remove-Item Env:SAND_BACKEND -ErrorAction SilentlyContinue
dotnet run --project .\Sand.App\Sand.App.csproj -c Release
Chunk app:
$env:SAND_BACKEND='chunk'
dotnet run --project .\Sand.App\Sand.App.csproj -c Release
Benchmarks:
dotnet run --project .\Sand.Benchmarks\Sand.Benchmarks.csproj -c Release -- --mode app-sized
dotnet run --project .\Sand.Benchmarks\Sand.Benchmarks.csproj -c Release -- --mode snapshot-scenes
Notes
- Dense remains the production/reference backend while chunk continues as the experimental engine lane.
- The current chunk bottleneck is high simultaneous movement volume, not simple on-screen particle count.
- Gas-stress long-press collapse is now materially harder to trigger in the main app after overload control and gas-path tuning.
- The main remaining single-thread hotspot is mixed-scene full-runtime work across solids, liquids, and gases.
- Recent live-app runs show the stable-gas case is now mostly under control; the next optimization passes should target mixed runtime-chain cost rather than reopening gas-specific hacks.
- Recent mixed-scene runs also show the overload policy is holding: frame collapse is no longer primarily coming from runaway catch-up steps, but from the simulation work itself.
- Parity work is paused behind the active-move optimization gate.
moves/frameand FPS are both required signals; benchmark-only wins are not enough by themselves.- No particle-id-specific throttles are planned; chunk optimizations need to generalize across gas/runtime-heavy materials.
- Multithreaded architecture is a follow-on goal only after the single-thread chunk step is stable, measured, and behaviorally trustworthy.
- The chunk backend is now an engine program, not a one-off feasibility toy, but it still has to beat dense under real workloads before promotion.
advchksysremains a support library and reference asset, not the final Sand engine storage contract.