Frustum culling
Skipping any object that falls outside the camera's viewing pyramid, so the GPU never spends time on things nobody can see.
See it
What it is
A perspective camera sees a truncated pyramid: near plane, far plane, four sides. That solid is the frustum. Frustum culling tests every object's bounding volume against those six planes each frame and skips the ones fully outside. No draw call, no vertex shading, no cost beyond the cheap test itself.
You mostly get this free: three.js tests every renderable object (meshes, points, lines) against the frustum by default, normally using its geometry's bounding sphere pushed into world space. A group is not one culling unit, each child gets tested on its own. It is why a large world can stay at 60fps while the camera only ever looks at a slice of it. Note what it does not do: an object hidden behind a wall is still inside the frustum and still gets drawn. Hiding behind geometry is occlusion culling, a different and much harder problem.
Gotcha: culling runs on a bounding volume, and that volume gets computed once from the original vertex positions. Deform geometry in a vertex shader, or spread an InstancedMesh across the map, and the bounds lie: objects pop out of existence while still visible on screen. Fix it by calling computeBoundingSphere() after changing geometry, widening the bounds by hand, or setting frustumCulled = false on the offender (which costs you the optimization, so use it narrowly).
Ask AI for it
Set up frustum culling for this three.js scene: make sure every mesh has correct bounds by calling computeBoundingSphere() after any geometry change, keep frustumCulled = true on all static objects, and give shader-deformed or instanced meshes a manually widened bounding sphere so they do not pop out while still on screen. Add a debug overlay showing rendered vs total object count per frame.