/**
- IMPLEMENTATION_ROADMAP.md
- Step-by-step roadmap for integrating and testing the new 3D engine features.
- Complete this checklist to fully enable all features. */
Files to modify:
js/engine/GameEngine.js
Steps:
- Import LODConfig and LODManager
- Initialize in GameEngine.constructor():
this._lodConfig = new LODConfig(); this._lodManager = new LODManager(this._lodConfig);
- Register objects in render loop when first encountered
- Update LOD state in _onUpdate() before rendering
- Verify LOD switching with console.log output
- Test with 100+ objects, measure FPS improvement
Testing:
- Launch in browser, zoom out to see LOD transitions
- Check console for any errors
- Verify LOD metrics are being tracked
- Benchmark: measure FPS with/without LOD enabled
Files to modify:
js/engine/GameEngine.jsjs/engine/post-effects/EffectComposer.js
Steps:
- Import all post-processing passes
- Create EffectComposer instance
- Add RenderPass (base scene)
- Add DynamicBloomPass
- Add MotionVectorPass
- Add HDRTonemappingPass
- Add DepthOfFieldPass (start disabled)
- Ensure passes render in correct order
- Test each pass independently (enable/disable)
Testing:
- Enable bloom, verify stars glow
- Enable motion blur, move camera fast
- Change tone-mapping modes, verify color changes
- Test with all passes enabled, measure FPS impact
Files to modify:
js/engine/fx/CombatFX.jsjs/engine/CombatVfxBridge.js
Steps:
- Import ImpactDecalManager
- Initialize in CombatFX constructor
- Hook weapon impact events to add decals
- Hook explosion events to add decal patterns
- Update decal manager each frame
- Monitor decal count in metrics
Testing:
- Fire weapons, see impact decals appear
- Verify decals fade out after 5-10 seconds
- Spawn many impacts, verify no lag
- Check memory usage stays bounded (<200MB)
Files to modify:
js/engine/scene/CameraManager.js- Cinematic mission files (TBD based on structure)
Steps:
- Import CinematicCamera
- Extend CameraManager to support cinematic mode
- Add switch between gameplay and cinematic camera
- Create mission intro/outro sequences
- Test keyframe transitions are smooth
- Test all easing functions
Testing:
- Play intro cinematic, watch smooth camera movement
- Try different easing functions, verify smoothness
- Seek through timeline with
cinematicCamera.seek(5) - Test playback speed variations
Files to modify:
js/engine/game/AsteroidSpawner.js(if exists)- Or create new AsteroidSpawner system
Steps:
- Import ProceduralMeshGenerator
- Replace or augment static asteroid meshes
- Use seed-based generation for reproducibility
- Generate debris fields for combat destruction
- Implement asteroid variant distribution
- Monitor memory usage vs. asset count
Testing:
- Spawn 100+ asteroids, verify uniqueness
- Destroy asteroid, verify debris field generation
- Restart and respawn same asteroid ID, verify identical geometry
- Measure memory: should be much lower than pre-generated meshes
Files to create:
html/settings-advanced-graphics.html(or integrate into existing)js/ui/SettingsController.js(if not exists)
Steps:
- Create HTML panel for graphics settings
- Add LOD enable/disable toggle
- Add bloom strength slider
- Add tone-mapping mode dropdown
- Add motion blur intensity
- Add DOF focal distance
- Add exposure control
- Add color temperature slider
- Wire all sliders to engine systems
- Save/load settings to localStorage
Testing:
- Change each setting, verify effect updates in real-time
- Refresh page, verify settings restored
- Test with different graphics cards (if possible)
Tools:
- Chrome DevTools Performance tab
- Three.js Stats.js monitor
Measurements to take:
- Baseline FPS without LOD (1000 objects)
- FPS with LOD enabled
- Measure GPU memory usage
- Measure triangle reduction with LOD
- Profile each post-processing pass
- Test on mobile device (if available)
Acceptance Criteria:
- LOD system: 30-50% FPS improvement at scale
- Post-processing: <5% FPS cost total
- GPU memory: <500MB on desktop
- No frame rate drops during LOD transitions
Steps:
- Profile on lower-end device/browser
- Disable expensive passes on mobile (DOF, motion blur)
- Reduce LOD quality thresholds
- Reduce decal pool size (max 250)
- Increase hysteresis distance
- Test with 50% polygon count reduction
Testing:
- Run on mobile phone if available
- Test in Firefox (sometimes different performance)
- Use Chrome's GPU throttling
- Target 30 FPS on low-end hardware
Create tests for:
-
tests/js/lod-selection.test.js- LOD distance calculation -
tests/js/cinematic-camera.test.js- Keyframe interpolation -
tests/js/procedural-meshes.test.js- Mesh generation consistency -
tests/js/impact-decals.test.js- Decal pooling
Test framework: Use existing test framework (Vitest/Jest)
Example test:
describe('LODManager', () => {
it('selects appropriate LOD for distance', () => {
const manager = new LODManager(new LODConfig());
const config = new LODConfig();
const shipLOD = config.getLODAtDistance('ship', 1500);
expect(shipLOD.meshVariant).toBe('_lod1');
});
});Test sequences:
- Spawn fleet, verify LOD transitions
- Toggle all post-processing passes
- Play cinematic while objects LOD-switch
- Fire weapons creating decals during cinematic
- Generate large debris field
- Memory profiling under sustained load
Testing Framework: Playwright E2E tests
Comparison screenshots:
- Take baseline screenshots (with all features)
- Compare against previous build
- Check for visual artifacts
- Verify smooth LOD transitions
- Verify decal appearance
Tools: Playwright visual comparison
// Example Playwright test
test('LOD transitions are smooth', async ({ page }) => {
await page.goto('http://localhost:8080');
// Create objects at various distances
await page.evaluate(() => {
gameEngine.createShips(100);
});
// Take screenshot of LOD system
await expect(page).toHaveScreenshot();
// Zoom camera out
await page.evaluate(() => {
gameEngine.camera.position.z += 5000;
});
// Verify smooth transition (no popping)
await expect(page).toHaveScreenshot('lod-transitioned.png');
});Use Lighthouse/WebVitals:
- Measure Core Web Vitals
- Check for CLS (Cumulative Layout Shift)
- Monitor LCP (Largest Contentful Paint)
- Track FID (First Input Delay)
Custom Metrics:
- GPU frame time per pass
- Triangle count over time
- Memory usage growth
- Draw call count
Testing script:
// js/telemetry/RenderingMetrics.js
class RenderingMetrics {
constructor() {
this.frameMetrics = [];
this.gpuTimePerPass = {};
}
recordFrame() {
this.frameMetrics.push({
timestamp: performance.now(),
fps: this.calculateFPS(),
triangles: this.lodManager.getMetrics().trianglesRendered,
memory: performance.memory?.usedJSHeapSize,
});
}
getReport() {
return {
avgFPS: this._average(this.frameMetrics.map(m => m.fps)),
avgTriangles: this._average(this.frameMetrics.map(m => m.triangles)),
peakMemory: Math.max(...this.frameMetrics.map(m => m.memory)),
};
}
}- Document all new classes and APIs
- Create architecture diagrams
- Add code comments where complex
- Create troubleshooting guide
- Add performance tuning guide
- Document graphics settings in-game
- Create tooltip strings for UI controls
- Add performance recommendations
- Create screenshot gallery of effects
- Add new features to feature list
- Update performance section
- Link to new guides
- Add acknowledgments for algorithms/inspiration
If major performance regression:
- Disable LOD: Set
LODConfig.globalSettings.enabled = false - Disable post-processing: Create minimal EffectComposer with only RenderPass
- Disable decals: Set
ImpactDecalManager.maxDecals = 0 - Revert to commit before integration
Git commands:
git revert <commit-hash>
git push origin <branch>All of the following must be true for Phase 1-4 to be considered complete:
- Performance: 30-50% FPS improvement with LOD enabled
- Visual Quality: All 5 post-processing effects working correctly
- Stability: No crashes during 1-hour gameplay session
- Mobile: Game runs at 30 FPS on mobile device
- Testing: All unit/integration tests passing
- Documentation: All systems fully documented
- User Feedback: Gather feedback from testers
| Phase | Duration | Dates | Status |
|---|---|---|---|
| Phase 1: Implementation | 2-3 days | Jul 30 - Aug 1 | 🚀 START |
| Phase 2: Optimization | 1-2 days | Aug 1 - Aug 2 | ⏳ Pending |
| Phase 3: Testing | 2-3 days | Aug 2 - Aug 4 | ⏳ Pending |
| Phase 4: Documentation | 1 day | Aug 4 - Aug 5 | ⏳ Pending |
| Total | 6-9 days | Jul 30 - Aug 5 | - |
For questions or blockers, refer to:
ADVANCED_3D_FEATURES_GUIDE.md- Feature overviewINTEGRATION_EXAMPLES.md- Code examplesdocs/technical/ARCHITECTURE.md- System architecture
Created: July 30, 2026
Version: 1.0
Status: Ready for implementation