The GPU decides which face is closer to the camera using a finite-precision number called the z-buffer (depth buffer). When two faces sit at nearly identical depth, that tiny gap can shrink below the buffer’s floating-point rounding error — so one pixel decides face A wins, the pixel right next to it decides B wins, and the tiniest camera movement flips that decision again, making the surface look like it’s flickering or crawling.
Common causes: two planes accidentally placed at the exact same position (a decal mesh stuck directly onto a wall mesh, like a sticker), or a camera’s near/far planes stretched too far apart, which thins out the depth buffer’s precision across the whole distance.
The fix is fundamentally about avoiding “exactly the same depth” — nudge one surface slightly (an offset), use material.polygonOffset to push the depth just a hair at render time, or pull the near plane closer to the camera to recover depth-buffer precision. Blender, Unity, and Unreal all share the same cause and the same fixes.
When to use
Suspect this when overlaying a decal-style mesh on a surface, or whenever a camera’s far value has been set needlessly large.