Files
the-nexus/PERFORMANCE_AUDIT_873.md
Timmy b3c97e0d6c
Some checks failed
CI / test (pull_request) Failing after 1m1s
CI / validate (pull_request) Failing after 55s
Review Approval Gate / verify-review (pull_request) Failing after 11s
perf(#873): implement Three.js LOD and texture optimization
- Agent orbs: THREE.LOD with 3 detail levels (32/16/8 segments)
- Halo geometry: reduced from 64 to 24 segments
- Particle systems: LOD-aware counts (500-1500 based on tier)
- Agent label texture cache: reuse textures across agents
- Stats.js integration for performance monitoring
- Document minimum sovereign hardware requirements

Refs #873
2026-04-13 17:51:12 -04:00

102 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Three.js LOD and Texture Audit — Issue #873
## Audit Summary
**Date:** 2026-04-13
**Issue:** #873 — Three.js LOD and Texture Audit for Local Hardware
**Target:** 60fps on base M1 Mac (8-core CPU, 7-core GPU, 8GB RAM)
## Changes Made
### 1. Agent LOD Implementation
**Before:** All agent orbs used `SphereGeometry(0.4, 32, 32)` regardless of distance.
**After:** Implemented `THREE.LOD` with three detail levels:
| Distance | Geometry | Segments | Triangles |
|----------|----------|----------|-----------|
| 0-15 units | High | 32x32 | ~2,048 |
| 15-30 units | Medium | 16x16 | ~512 |
| 30+ units | Low | 8x8 | ~128 |
**Impact:** ~75% triangle reduction for distant agents (4 agents × 3 levels).
### 2. Halo Geometry Optimization
**Before:** `TorusGeometry(0.6, 0.02, 16, 64)` — 64 segments
**After:** Reduced to 24 segments (12 on low-tier)
**Impact:** ~62% vertex reduction per halo.
### 3. Agent Label Texture Cache
**Before:** Each agent created its own CanvasTexture.
**After:** Implemented texture cache keyed by `name_color`. Reuses textures for agents with same name/color.
**Impact:** Reduced texture memory and GPU uploads.
### 4. Particle System LOD
| Tier | Main Particles | Dust Particles | Total |
|------|----------------|----------------|-------|
| High | 1,500 | 500 | 2,000 |
| Medium | 1,000 | 300 | 1,300 |
| Low | 500 | 150 | 650 |
**Impact:** 67% particle reduction on low-tier hardware.
### 5. Post-Processing Tiering
| Setting | High | Medium | Low |
|---------|------|--------|-----|
| Bloom Strength | 0.6 | 0.35 | 0.35 |
| Shadow Map | 2048px | 1024px | 512px |
| Pixel Ratio | 2x | devicePR | 1x |
### 6. Stats.js Integration
Added `three/addons/libs/stats.module.js` for real-time performance monitoring.
**Access:** `window.stats` in browser console. Shows FPS, render time, and draw calls.
## Minimum Sovereign Hardware Requirements
### Tier: Low (Target: 30fps)
- **CPU:** 4+ cores (Intel i5 / Apple M1 / AMD Ryzen 3)
- **GPU:** Integrated (Intel UHD 630 / Apple M1)
- **RAM:** 4GB
- **Browser:** Chrome 90+, Firefox 88+, Safari 15+
### Tier: Medium (Target: 45fps)
- **CPU:** 6+ cores (Intel i7 / Apple M1 Pro / AMD Ryzen 5)
- **GPU:** Entry discrete (GTX 1050 / Apple M1 Pro 14-core)
- **RAM:** 8GB
- **Browser:** Latest versions
### Tier: High (Target: 60fps)
- **CPU:** 8+ cores (Intel i9 / Apple M1 Max / AMD Ryzen 7)
- **GPU:** Mid-range discrete (RTX 3060 / Apple M1 Max 24-core)
- **RAM:** 16GB
- **Browser:** Latest versions
## Performance Validation Checklist
- [ ] Stats.js overlay showing 60fps with 5+ agents
- [ ] Draw calls < 100 per frame
- [ ] Triangle count < 500k per frame
- [ ] Texture memory < 256MB
- [ ] No frame spikes > 16.6ms (60fps budget)
## Future Optimizations
1. **Instanced Rendering:** Use `InstancedMesh` for repeated geometries (portals, runestones)
2. **Texture Atlasing:** Combine agent label textures into single atlas
3. **Basis/KTX2:** Compress textures with Basis Universal
4. **WebGL2 Compute:** Offload particle updates to compute shaders
5. **Occlusion Culling:** Implement for interior spaces
## Files Modified
- `app.js` — Agent LOD, particle optimization, stats.js integration
- `PERFORMANCE_AUDIT_873.md` — This document