Why a spinning point cloud flips direction
Take a 3D shape, cover it in dots, spin it around a vertical axis, and render it with no depth cues: no shading, no perspective, dots stay the same size front and back, and nothing hides behind anything else. What reaches your eye is a flat pattern of dots sliding left and right. A dot on the front face moving left produces exactly the same 2D motion as a dot on the back face moving left. The image is genuinely ambiguous.
Your visual system doesn’t tolerate ambiguity, so it commits to one interpretation. Stare at a different part of the shape, blink, or imagine the near side is the far side, and it flips. This is the same family as the Necker cube and the spinning dancer silhouette.
What makes it work in Three.js
- An orthographic camera removes perspective. With a perspective camera, near dots spread apart and far dots bunch up, and the ambiguity is gone.
sizeAttenuation: falseon the points material keeps every dot the same pixel size regardless of depth.- No lighting, a single flat color, black background. Depth testing is left on but with identical-looking dots it doesn’t help you.
- Rotate about the Y axis only. Adding a tilt introduces a subtle occlusion cue.
The experiment has a “depth cues” toggle that switches to a perspective camera with size attenuation and distance fade. Flip it on and the true direction becomes obvious. Flip it off and try to keep seeing that direction.