Optimize meshes for better performance:

// Freeze transformations (improves performance)
box.freezeWorldMatrix();

// Convert to a thin instance mesh (very efficient for many copies)
const matrix1 = BABYLON.Matrix.Translation(3, 0, 0);
const matrix2 = BABYLON.Matrix.Translation(-3, 0, 0);
const matrix3 = BABYLON.Matrix.Translation(0, 0, 3);

sphere.thinInstanceSetBuffer("matrix", [matrix1, matrix2, matrix3]);

// Level of Detail (LOD)
const highDetailSphere = BABYLON.MeshBuilder.CreateSphere("highDetail", {
    segments: 32,
    diameter: 2
}, scene);

const mediumDetailSphere = BABYLON.MeshBuilder.CreateSphere("mediumDetail", {
    segments: 16,
    diameter: 2
}, scene);

const lowDetailSphere = BABYLON.MeshBuilder.CreateSphere("lowDetail", {
    segments: 8,
    diameter: 2
}, scene);

// Add LOD levels
highDetailSphere.addLODLevel(30, mediumDetailSphere);  // Switch at 30 units distance
highDetailSphere.addLODLevel(60, lowDetailSphere);     // Switch at 60 units distance
highDetailSphere.addLODLevel(100, null);               // Hide beyond 100 units

// Only the highDetailSphere needs to be visible in the scene
mediumDetailSphere.isVisible = false;
lowDetailSphere.isVisible = false;