Compare commits

...

1 Commits

Author SHA1 Message Date
Alexander Whitestone
c34748704e fix: [PERF] Add quality-tier feature gating for heavy visual effects (closes #706)
Some checks failed
CI / test (pull_request) Failing after 10s
CI / validate (pull_request) Failing after 15s
Review Approval Gate / verify-review (pull_request) Failing after 2s
2026-04-12 11:51:40 -04:00

32
app.js
View File

@@ -704,13 +704,13 @@ async function init() {
createParticles();
createDustParticles();
updateLoad(85);
createAmbientStructures();
if (performanceTier !== "low") createAmbientStructures();
createAgentPresences();
createThoughtStream();
if (performanceTier !== "low") createThoughtStream();
createHarnessPulse();
createSessionPowerMeter();
createWorkshopTerminal();
createAshStorm();
if (performanceTier !== "low") createAshStorm();
SpatialMemory.init(scene);
MemoryBirth.init(scene);
MemoryBirth.wrapSpatialMemory(SpatialMemory);
@@ -730,14 +730,20 @@ async function init() {
fetchGiteaData();
setInterval(fetchGiteaData, 30000); // Refresh every 30s
composer = new EffectComposer(renderer);
composer.addPass(new RenderPass(scene, camera));
const bloom = new UnrealBloomPass(
new THREE.Vector2(window.innerWidth, window.innerHeight),
0.6, 0.4, 0.85
);
composer.addPass(bloom);
composer.addPass(new SMAAPass(window.innerWidth, window.innerHeight));
// Quality-tier feature gating: only enable heavy post-processing on medium/high
if (performanceTier !== 'low') {
composer = new EffectComposer(renderer);
composer.addPass(new RenderPass(scene, camera));
const bloomStrength = performanceTier === 'high' ? 0.6 : 0.35;
const bloom = new UnrealBloomPass(
new THREE.Vector2(window.innerWidth, window.innerHeight),
bloomStrength, 0.4, 0.85
);
composer.addPass(bloom);
composer.addPass(new SMAAPass(window.innerWidth, window.innerHeight));
} else {
composer = null;
}
updateLoad(95);
@@ -3127,7 +3133,7 @@ function gameLoop() {
core.material.emissiveIntensity = 1.5 + Math.sin(elapsed * 2) * 0.5;
}
composer.render();
if (composer) { composer.render(); } else { renderer.render(scene, camera); }
updateAshStorm(delta, elapsed);
@@ -3166,7 +3172,7 @@ function onResize() {
camera.aspect = w / h;
camera.updateProjectionMatrix();
renderer.setSize(w, h);
composer.setSize(w, h);
if (composer) composer.setSize(w, h);
}
// ═══ AGENT SIMULATION ═══