three/addons/objects/Reflector.js takes a plane geometry and renders the scene a second time from a camera mirrored across that plane, then maps the result onto its own surface as a render-target texture. It’s the same render-to-texture idea as portal, but Reflector handles the mirror-camera math and clip-plane setup internally — it’s all wired into an onBeforeRender hook, so scene.add(reflector) is enough; no manual render call needed.
In new Reflector(geometry, { textureWidth, textureHeight, color, clipBias }), textureWidth/Height set the reflection texture’s resolution (lower = blurrier but faster), color tints the reflection with the surface’s own color, and clipBias corrects for objects just below the mirror plane bleeding through as ghost reflections.
The demo makes a circular floor a Reflector and floats three differently colored polyhedra above it so you can watch the reflection ripple. Since it’s a genuine physical reflection, tilting the camera changes the reflection by exactly the same amount — but it only works on flat planes (no curved surfaces), and redrawing the scene once more each frame roughly doubles cost, the same tradeoff water-shader’s reflections face.
When to use
Marble floors, showcase pedestals, or any flat surface that needs a convincing real-time reflection.