LOD (level of detail)
Swapping a model for cheaper, lower-poly versions as it gets farther from the camera, since nobody can see the detail anyway.
See it
What it is
A tree 200 meters away covers 30 pixels. Rendering its 80,000 triangles there is pure waste. LOD keeps several versions of the same asset (say 80k, 12k, 2k triangles, plus a flat billboard) and picks one based on distance or projected screen size. three.js ships an LOD object: add levels with a distance threshold each and it swaps automatically as the camera moves.
Worth the effort when a scene has depth: terrain, city blocks, product configurators you can pull back from, anything with hero-close and far-away framing. Skip it for a single object locked at one distance, where you should just ship the right poly count once. The lower levels usually come from a decimation pass in Blender or from gltf-transform 'simplify', not from hand modeling.
Gotcha: the swap is a hard cut, and hard cuts pop visibly if the levels differ too much or the threshold sits where users linger. Space thresholds so each step roughly halves the triangle count, base them on screen size rather than raw distance when the camera FOV changes, and remember that every level is a separate mesh in VRAM: LOD trades memory and download size for framerate.
Ask AI for it
Add level of detail to this three.js model: build three decimated versions (roughly 100%, 25%, and 5% of the original triangle count, via gltf-transform simplify), wrap them in a THREE.LOD object, and register each with addLevel() at distances tuned so the swap happens off the user's focus. Add a far-distance billboard level. Log the active level and triangle count so the pops can be tuned out.