Spatial UI/UX Design Principles: Why Flat Design Rules Donβt Apply in XR π§
β Why 2D Design Rules Break in XR
Flat UI was designed for one thing: a rectangle on a desk.
Fixed dimensions. Known viewing distance. Mouse precision. Gravity doesnβt exist. Depth doesnβt exist.
In XR, all of that changes:
The physical body is now part of the interface. That changes everything. π
π― The Comfort Zone β Most Important Concept in Spatial UI
Before any visual design decision β understand the comfort zone first.
The Three Zones
Distance from user β Zone β What it's for
βββββββββββββββββββββΌββββββββββββββββΌββββββββββββββββββββββββββββββ
< 0.5m (50cm) β Intimate β Avoid for UI - causes eye strain
0.5m β 1m β Near β OK for brief interactions only
1m β 3m β Conversationalβ β
Sweet spot for most UI panels
3m β 10m β Social β Environmental cues, large labels
> 10m β Public β Wayfinding, world markers onlyThe sweet spot: 1.5m β 2.5m from the user.
At this distance:
- Eyes converge comfortably β
- UI panels feel natural in scale β
- Users can read without leaning or squinting β
- Depth cues read correctly β
Height Positioning
Donβt put UI above or below eye level without good reason.
Bad positions:
β Above eye level β users strain neck upward
β Below waist level β users look down, disorienting in VR
β Behind the user β discovery problem
Good positions:
β
Slightly below eye level (5β10Β°) β most natural reading angle
β
Center field of view for primary content
β
Peripheral zone for secondary / ambient infoField of View Consideration
Human comfortable FOV for reading: ~60Β° cone straight ahead.
Beyond that cone β things exist, but reading and fine interaction become uncomfortable. Put your critical UI within 30Β° of center. Navigation and ambient info can live up to 60Β°.
π Depth & The Z-Axis β Your New Design Dimension
In flat design you have X and Y. In spatial design you have Z too β and itβs not decoration. It carries meaning.
Using Depth Intentionally
Far (background) β Environmental / world-anchored content
Decorative 3D elements
Atmospheric fog, sky
Mid (content zone) β Primary content panels
Virtual objects users interact with
Spatial menus
Near (foreground) β Heads-up information
Notification toasts
Critical alertsDepth as Visual Hierarchy
Depth replaces z-index in spatial UI.
- Closer = more important β pull critical elements slightly toward the user
- Further = ambient / background β push secondary info back
- Layer separation β use 10β30cm depth gaps between UI layers so they read as distinct
The Depth Comfort Rule
Never place two interactive elements at the same depth when theyβre adjacent. The eye canβt resolve which to focus on β it causes fatigue.
β Bad: Two buttons side by side, both at z = 2.0m
β
Good: Primary button at z = 2.0m, secondary at z = 2.05m
Small offset creates clear visual separationDrop Shadows Are Depth Cues
In flat UI, shadows are decorative. In spatial UI, shadows tell the user how far something is from the surface below it.
- Shadow directly below = object is on the surface
- Shadow offset and soft = object is floating above
- No shadow = object is part of the surface
Use them accurately. Users read depth from shadows instinctively. Lying to them breaks trust in the space. π§
ποΈ Gaze, Cursor & Dwell Interaction
Gaze is to XR what hover is to desktop β but much less precise, and it carries a weight that mouse hover doesnβt.
The Problem With Direct Gaze Targeting
Eyes move constantly. Saccades, micro-tremors, natural scanning β your gaze point is never truly still. Designing UI that responds directly to gaze position = jittery, exhausting interfaces.
Solutions:
- Gaze smoothing β apply a rolling average over 3β5 frames before registering gaze position
- Dead zones β only register gaze if it stays within a target for 100ms+
- Large hit targets β minimum 5Β° Γ 5Β° for gaze-selectable elements (larger than you think)
Dwell Interaction
Dwell = user looks at target for a defined duration β action triggers.
Good dwell durations:
Destructive actions (delete, close): 1.5 β 2.0 seconds
Navigation / selection: 0.8 β 1.2 seconds
Quick actions (next, confirm): 0.5 β 0.8 seconds
Always show a visual progress indicator:
β
Fill arc around target
β
Expanding ring
β
Color shift over time
β Nothing - users don't know if it's workingGaze + Confirm Pattern
For most interactions, gaze alone isnβt enough. Pair it with a confirm action:
Pattern 1: Gaze + Controller Button
Look at target β button press confirms
Pattern 2: Gaze + Hand Pinch
Look at target β pinch gesture confirms
Pattern 3: Gaze + Dwell (no controller)
Best for accessibility / no-controller scenarios
Needs generous dwell times and clear feedbackThe Midas Touch Problem
Donβt trigger actions on gaze alone without confirmation.
Named after King Midas β everything he touched turned to gold, which sounds great until you touch your food. If looking at something triggers it, users will accidentally activate things just by scanning the UI.
Get ATNO For AR / VR / MR / XR Developerβs stories inΒ yourΒ inbox
Join Medium for free to get updates fromΒ thisΒ writer.
Always require explicit intent: dwell, pinch, voice, or button. π
π Text Legibility in 3D Space
Text in XR is hard. Genuinely hard. And most developers underestimate it until theyβre squinting at blurry 12pt labels through a headset.
Font Size Rules (Angular Size)
Forget pixel sizes. In XR, angular size (how big something appears to the eye at a given distance) is what matters.
Minimum comfortable angular size for body text:
~0.5Β° β 1.0Β° of visual angle
Practical translation at 2m distance:
Minimum body text height: ~3.5cm in world units
Recommended body text height: 4β5cm
Heading text: 6β8cm
Large labels / wayfinding: 10cm+
In Unity world units (1 unit = 1 meter):
Body text: 0.035 β 0.05 world units tall
Headings: 0.06 β 0.08 world units tallFont Choice
- β Sans-serif fonts β much more legible in headsets (Inter, Roboto, SF Pro)
- β Medium weight (400β600) β thin fonts disappear at distance
- β High contrast β white text on dark surfaces, or vice versa
- β Thin decorative serifs β look blurry on current headset displays
- β All-caps for body text β harder to read in XR than flat screens
- β Colored text on colored backgrounds β contrast gets crushed by headset optics
Text Rendering Quality in Unity
The most common beginner mistake: using Unityβs default TextMeshPro settings without tuning them.
// TextMeshPro settings for crisp XR text:
// In the TMP font asset:
Atlas Resolution: 4096 Γ 4096 (not the default 512!)
Padding: 8
Sampling Point Size: 90
// On the TextMeshPro component:
Font Size: calculate based on distance (see formula below)
Overflow: Truncate (never let text overflow its container)
Wrapping: enabled
Raycast Target: OFF if not interactive (saves performance)
// Quick formula for font size at known distance:
// WorldHeight = 2 Γ distance Γ tan(angularSize_radians / 2)
// For 0.7Β° text at 2m:
// WorldHeight = 2 Γ 2 Γ tan(0.00611) = 0.0488m β 0.05 world unitsLine Length & Spacing
- Max line length: 50β60 characters per line (same rule as web, for same reason β eyes get lost tracking back)
- Line height: 1.4Γ β 1.6Γ font size (more generous than flat UI)
- Paragraph spacing: give spatial text more breathing room than flat UI β the 3D environment is already complex
Text Donβts in XR
- β Text that curves aggressively (mild curves OK, sharp curves = motion sickness risk)
- β Text that moves with head movement (fixed HUD text causes fatigue)
- β Text billboarding without smoothing (snapping to face camera = jarring)
- β More than 3β4 lines of body text in a single panel
ποΈ Spatial Layout Patterns That Actually Work
Forget nav bars. Forget hamburger menus. Forget sidebars. Here are the spatial equivalents.
Pattern 1: The Floating Panel
The XR equivalent of a modal or card.
Characteristics:
β’ Positioned at 1.5β2m in front of user
β’ Slightly curved to wrap user's FOV (~cylinder radius: 3m)
β’ Soft drop shadow or subtle depth glow
β’ Dismissible - always give user an exit
β’ Never fills more than 40% of FOV
Good for:
Settings menus, informational displays,
object property panels, confirmation dialogsPattern 2: The Radial / Pie Menu
Replaces linear dropdown menus. Works great with gaze + controller.
Why it works:
β’ Each item equidistant from center gaze point
β’ User can select with small eye movement
β’ Avoids long vertical scroll lists
β’ Works with 4β8 items comfortably (more = clutter)
Implementation tip:
Space items at minimum 15Β° apart
Highlight on gaze, confirm on triggerPattern 3: World-Anchored UI
UI attached to objects in the world, not to the userβs head.
Best practices:
β’ Label appears when user looks at object (gaze-triggered)
β’ Label faces toward user (billboard behavior, smoothed)
β’ Appears 10β20cm above the object it describes
β’ Fades in - never pops instantly
Use cases:
Object labels in AR, object inspector panels,
interactive hotspot tooltips, spatial annotationsPattern 4: The Wrist Menu
A menu attached to the userβs wrist (or controller). Discovered by rotating the hand inward.
Why developers love it:
β’ Always accessible without looking far from hands
β’ Natural "glance down at watch" discovery gesture
β’ Doesn't occlude the world when not needed
Key rules:
β’ Maximum 6 quick-action items
β’ Large hit targets (finger imprecision is real)
β’ Confirm on press, not on hover
β’ Include haptic feedback on item hoverPattern 5: The Diegetic UI
UI that exists as part of the world β a virtual screen, a holographic display on a table, a dashboard on a virtual vehicle.
Why it's powerful:
β’ Increases immersion massively
β’ Reduces cognitive load (UI feels like part of the world)
β’ Easier to spatially anchor (user knows where to look)
When to avoid:
β’ When the UI needs to be always-accessible (user can move away from it)
β’ When information is critical (diegetic UI can be missed)ποΈ Input Modality Design
Your UI must be designed for a specific input method. Designing for βall inputs at onceβ = designing for none of them well.
Controller-Based Input
Design rules:
β
Minimum button / hit target: 5cm Γ 5cm in world space
β
Pointer ray origin from controller, not from user head
β
Visual ray line to confirm where user is pointing
β
Haptic feedback on hover AND on press (they're different sensations)
β
Trigger = primary action, grip = grab/hold, thumbstick = navigation
β Never require two-handed input for primary actions
β Never put critical UI behind the user's bodyHand Tracking Input
Hand tracking is less precise than controllers. Design accordingly:
β
Even larger targets - 7β8cm minimum
β
Pinch gesture for selection (most reliable hand gesture)
β
Visual feedback when pinch is detected (glow, sound, haptic if available)
β
Near-field interaction: user can "poke" buttons physically
β
Far-field interaction: ray from index finger for distance selection
β Avoid wrist twists, complex multi-finger combos as primary interactions
β Never require high precision (dragging small sliders = frustrating)
Best interactions for hand tracking:
Button press, pinch-to-select, grab-and-move,
two-hand resize, point-and-confirmGaze-Only Input (Accessibility / No Controllers)
β
Dwell as primary selection mechanism
β
Very large targets (10cm+)
β
Long dwell times for destructive actions
β
Clear, animated progress indicators
β
"Back" always accessible without precise gaze
β Never require selection of small adjacent targets
β Avoid menus with more than 5 itemsπ¨ Color, Contrast & Visual Style in XR
Contrast Ratios
WCAG 2.1 AA requires 4.5:1 for body text on flat screens. In XR, aim for 7:1 minimum β headset optics and lens diffraction reduce apparent contrast.
Translucency & Glass Effects
Frosted glass / translucent panels look stunning in XR demos
When translucency works:
β
Panel content is short and high-contrast
β
Background behind panel is relatively calm
β
Panel has clear depth separation from background
When translucency fails:
β Complex, busy backgrounds bleed through β unreadable text
β Animated backgrounds β motion behind text β eye strain
β On Quest 2 (limited passthrough quality) β looks muddy
Safe default: semi-opaque dark background (80β90% opacity)
then add translucency as enhancement on capable hardware.Colors That Work in XR
β
Work well:
High-saturation accent colors on neutral backgrounds
White/near-white on dark (navy, charcoal, black)
Warm neutral backgrounds (easier on eyes than pure white)
β Problematic:
Pure white large surfaces β glare in headsets
Red on black β chromatic aberration at display edges
Very low contrast (light gray on white) β disappears
Rainbow gradients β color fringing through lensesπ± Platform-Specific Quick Reference
Meta Quest (VR/MR)
- Comfort zone: 1β3m
- Recommended text size: 0.04β0.06 world units at 2m
- Primary input: Touch controllers or Hand Tracking
- Panel curve radius: ~3m
- π Meta Quest Design Guidelines
Apple Vision Pro (visionOS)
- Emphasizes window-based UI (familiar app windows in space)
- Primary input: Eye tracking + hand pinch (no controller)
- Minimum tap target: 60pt
- Glass morphism encouraged (but follow Appleβs material system)
- π visionOS Human Interface Guidelines
Mobile AR (ARKit / ARCore)
- UI exists on a 2D screen overlay OR in 3D world space
- Comfort zone matters less (user holds device)
- Primary challenge: not occluding the AR content with UI chrome
- Keep UI to edges β center is for the AR experience
- π Google AR Design Guidelines
HoloLens 2 / Enterprise MR
- Narrower FOV than Quest β design conservatively within 52Β° horizontal
- Users often in workplace β UI must work with gloves in some cases
- Prefer dwell + air-tap over complex gestures
- π MRTK Design Documentation
π§° Tools for Spatial UI Design
π Further Reading
- π Apple visionOS HIG β the gold standard for spatial UI thinking
- π Meta Quest Spatial Design Docs
- π Google AR Design Patterns
- π Nielsen Norman Group β XR UX Research
- π Tony Parisi β Learning WebXR
- π Leap Motion (Ultraleap) Interaction Design Guide
- π Oculus VR Best Practices (still highly relevant)
π The Big Takeaway
- Spatial UI isnβt harder than flat UI. Itβs just different.
The principles that make 2D UI good clarity, hierarchy, feedback, consistency, still apply completely. But the execution changes because:
- The body is part of the interface now
- Distance and depth carry meaning they never had on a flat screen
- Comfort is a first-class design constraint, not an afterthought
- Precision is lower across almost every input modality








