Depth order needs an explicit rule
Aliases: z-order policy · depth sorting · layer precedence
What it is
A real lamp, a calendar board, and a confirm dialog share the room. Which is in front cannot be decided by “how it looks right now” — a head tilt or a step will make that look take it back. An explicit depth ordering rule is a written front-to-back policy: geometric depth, task layer, or “the confirm always covers the calendar.” Without that rule, the same pair of objects will swap order across frames, and depth conflict stops being an incident and becomes system behaviour.
Why it happens
Every frame, the renderer must pick a winner per pixel. If no policy arrives, the engine picks by draw order, by whoever happened to write the depth buffer first, or by an unstable transparent queue. A tiny head movement lets two nearly coplanar surfaces swap their depth-buffer values, so they flicker; the two eyes may pick different winners, so an object is in front for the left eye and behind for the right. What people see is not “one wrong ranking” but “front-to-back has no law.”
The content of the rule can differ: strict world geometry, a task rule that lifts “the current dialog” to the front, a type rule that lifts all UI above reality. The point is not which is more correct. Each spends a cue under some conditions. Unwritten, the spend is random; written, it becomes a testable trade.
Studying it
Build at least three layers that can share a line of sight (an environment object, a resident panel, a transient dialog). Compare “undeclared, engine default” with “one written policy.” After walking and turning, people report the front-to-back order of the three, and flag any flicker or interocular disagreement.
Independent variables: ordering policy (geometry / task layer / undeclared), depth gap between layers, head-motion speed. Dependent variables: agreement of reports with the policy, flicker reports, detection of stereo inconsistency.
A still screenshot will miss swaps triggered by head motion. The policy has to be tested in motion. If the study only uses two layers with a large depth gap, any default “looks right” and the missing rule is invisible.
Where it stops holding
When the scene never has more than one interface layer, and that layer sits far from every real object, default draw order is enough and an explicit rule buys almost nothing. Collision bodies in a physics sim already use another ordering (they must not interpenetrate); if UI order fights collision order, people will believe their hand’s resistance rather than the picture. When several people share a room and each headset runs a different policy, “the front one” is a different object for each — a collaboration symptom whose root is still that the rule is not system-wide. A 360 video has no geometric depth to write; ordering can only be layers, and the policy has fewer options.
Applying it
- Split the interface into a small number of layers (for example environment-attached, work panel, modal confirm). Write each layer’s relation to the one below, and how peers inside a layer compare.
- Keep the policy stable for the session: do not rank by geometry one second and let an animation slide the dialog behind the panel the next.
- When two layers are only a few centimetres apart in depth, do not trust geometry to stay stable. Open the gap, or promote one layer in the written policy.
- How to check: name three things that will stack on one line of sight, and ask someone who did not author the UI to say front-to-back after turning and walking. The answer must match the written policy, and the same question must not be revised after ten head movements. A revision, or a left/right-eye fight, means the rule is not yet system behaviour.