| Implemented | Frustum rejection before sort | Sorting invisible splats is pure CPU and upload waste. | Compare source vs visible count; prepare and sort ms remain exposed. |
| Implemented | Compact visible upload | The initial baseline rebuilt and uploaded every source record. | Upload/frame is shown in bytes; no hidden “optimized” claim. |
| Implemented | Reusable staging allocation | A new compact vector every frame is avoidable allocator churn. | The allocation was removed, but repeated wall-clock profiles did not establish a speedup; no performance win is claimed. |
| Baseline | CPU unstable depth sort | Simple, deterministic architecture establishes a correctness baseline. | Keep until sort + upload exceeds the frame budget on representative assets. |
| Planned | GPU preprocess + radix sort | Removes per-frame read/transform/sort pressure from the CPU at high splat counts. | Adopt only after an apples-to-apples trace shows lower frame time, not just higher complexity. |
| Planned | Compressed resident attributes | Large dynamic scenes are usually bandwidth- and storage-sensitive. | Track decoded bytes, visible quality, startup latency, and GPU memory together. |
| Planned | Screen-space covariance / EWA | The current billboard ellipse is a controlled approximation, not the full projected 3D covariance. | Validate projected footprint and aliasing before calling the renderer 3DGS-complete. |