Abstract: This intermediate course takes students beyond prototyping to design VR experiences that are rigorously ergonomic, multi-zone, and testable with the SUS questionnaire. Students deepen their knowledge of spatial patterns, VR ergonomics, 3D UI, multi-zone navigation, spatial audio, and iterate through structured user evaluation. The capstone project is a cultural mediation VR experience (2 zones, waypoints, 3 world-locked information panels, ≥3 SUS testers). Outline: Spatial patterns → VR ergonomics & cybersickness → 3D UI → Multi-zone navigation → Spatial audio architecture → SUS evaluation → Prioritization → 3D visual design.
Learning Objectives
By the end of this course, students will be able to:
- Apply (Bloom: applying) at least 4 spatial interaction patterns suited to different contexts
- Diagnose (analyzing) ergonomic issues (cybersickness, bad UI placement, distance/scale errors)
- Design (creating) a coherent 3D UI: world-locked panels, readable text in depth, visual hierarchy
- Build (creating) a multi-zone VR navigation with waypoints in A-Frame
- Architect (creating) a spatial audio design with 3 layers (ambiance / positional / UI)
- Evaluate (evaluating) a VR experience with the SUS questionnaire (10 adapted questions + scoring formula)
- Prioritize (applying) design corrections with a P0/P1/P2 grid
Module 1 — Spatial Interaction Patterns (2h)
Concept
A spatial interaction pattern is a reusable solution for a recurring VR interaction problem. Knowing these patterns avoids reinventing solutions that have been tested and validated.
The 5 fundamental patterns:
| Pattern | Principle | Ideal Use Case |
|---|---|---|
| Proximal grab | Direct touch with the virtual hand | Near objects (< 0.5m), manipulation |
| Ray casting | Ray from the hand → distant selection | Objects at 1–5m, UI |
| Gaze + dwell | Look at an object for N seconds → activation | Accessibility, no controller required |
| Snap-to-socket | Object locks to a predefined position | Puzzle, assembly, teaching |
| Teleportation locomotion | Point → arc → release → instant movement | Navigation, comfort |
How to choose?
- Near manipulation → proximal grab
- Far selection → ray casting
- Accessibility (hands free) → gaze + dwell
- Assembly/step-by-step teaching → snap-to-socket
- Navigation between zones → teleportation
Lab 1.1 — Pattern Audit
Steps:
- Open an existing VR experience (YouTube VR, Wander, Rec Room on Quest)
- For each interaction: identify the pattern used, the feedback given, a potential improvement
- Draw a 2-column table: "interaction observed" / "pattern used / alternatives"
Mini-exercise: For your future capstone project (cultural mediation), list 5 planned interactions and choose the appropriate pattern for each.
Module 2 — VR Ergonomics and Cybersickness (2h)
Concept
Cybersickness is the VR designer's primary enemy. It results from a conflict between visual signals (movement in VR) and vestibular/proprioceptive signals (physical stillness or movement).
Technical factors to control:
- Framerate: minimum 60 fps (ideally 90–120 fps depending on the headset). Below 45 fps → guaranteed nausea.
- Latency motion-to-photon: maximum 20ms. Above → visible discordance between head movement and image update.
- No non-initiated camera movement: the camera must NEVER move unless the user initiates it (locomotion or physical movement).
- No abrupt accelerations: avoid fast fade-ins, visual shocks, sudden zooms.
- IPD: verify that the interpupillary distance is correctly configured on the headset.
Comfort checklist (to apply before any user test):
| Check | Threshold | Tool |
|---|---|---|
| Framerate | ≥ 60 fps (ideally 90+) | Frame Debugger, Oculus OVR Metrics |
| Motion-to-photon latency | < 20ms | Oculus OVR Metrics, HTC Vive Performance Test |
| Non-initiated camera movement | 0 | Code review |
| Continuous locomotion with non-habituated users | Absent or optional | Test protocol |
| First session duration | ≤ 20–30 min | User instructions |
Lab 2.1 — Ergonomics Audit on an Existing Experience
Steps:
- Choose a freely accessible WebVR experience (A-Frame example or similar)
- Navigate for 5 minutes from the perspective of a non-habituated user
- Fill in the comfort checklist: what passes, what doesn't?
- Propose 3 concrete improvements for the most critical problem
Mini-exercise: Write a "comfort brief" for your capstone project in 10 sentences: which locomotion patterns, why, and what experience the user has when they arrive (first 30 seconds).
Module 3 — 3D UI: Design of Spatial Interfaces (2h)
Concept
3D UI in VR must be designed differently from flat UI. Three types of anchoring:
| Type | Definition | When to use |
|---|---|---|
| World-locked | Fixed to a point in virtual space | Information panels, interactive objects |
| Body-locked | Moves with the user's body | Inventory, quick actions |
| Head-locked (HUD) | Fixed to the head | To avoid absolutely — causes eye fatigue |
| Diegetic | Integrated into the 3D scene | Dial, book, control panel, map |
Avoid head-locked UI: A menu glued to the field of vision causes eye convergence fatigue after 2–3 minutes. Prefer world-locked or diegetic.
Readable text in 3D:
- Minimum font size: 0.1m at 1m distance (≈ 10°)
- Maximum line width: 40–50 characters (reading comfort)
- Sufficient contrast: ratio ≥ 4.5:1 (WCAG AA)
- No more than 3 typographic levels in the same panel
World-locked panel in A-Frame: html <a-entity id="info-panel" position="0 1.6 -2" rotation="0 0 0"> <a-plane width="0.8" height="0.6" color="#1a1a2e" opacity="0.85"></a-plane> <a-text value="TITLE" position="0 0.2 0.01" color="white" align="center" width="1.2" font="roboto"></a-text> <a-text value="Body text. Max 50 characters per line." position="0 0 0.01" color="#cccccc" align="center" width="1.0" font="roboto" wrap-count="50"></a-text> </a-entity>
Lab 3.1 — 3D UI Panel
Steps:
- In an A-Frame scene, create 3 distinct world-locked panels at different heights and distances
- For each: title + 2–3 lines of text + a close button (animation on click)
- Test at 1m, 2m, 3m distance: which distances are readable? Which cause eye convergence?
- Revise based on observations
Mini-exercise: For your capstone project, sketch 3 spatial UI panels: position in space, readable content from 1m, visual hierarchy (title / body / action).
Module 4 — Multi-Zone Navigation (2h)
Concept
A multi-zone VR experience is organized around waypoints: predefined navigation points from which the user teleports.
Principles:
- A waypoint must be clearly visible and understood as a "possible destination"
- Never more than 7 waypoints in a single zone (cognitive load)
- Give "arrival" feedback: brief animation, sound, environment change
A-Frame multi-zone waypoint template: `html <!-- Waypoint 1 — Zone A --> <a-entity id="waypoint-a" position="-3 0 -2"> <a-cylinder radius="0.3" height="0.02" color="#00ff88" animation="property: position; from: -3 0.02 -2; to: -3 0.12 -2; dir: alternate; loop: true; dur: 1500; easing: easeInOutSine"> </a-cylinder> <a-text value="Zone A" position="0 0.3 0" align="center" color="white" width="1"></a-text> </a-entity>
<!-- Waypoint 2 — Zone B --> <a-entity id="waypoint-b" position="3 0 -4"> <a-cylinder radius="0.3" height="0.02" color="#0088ff" animation="property: position; from: 3 0.02 -4; to: 3 0.12 -4; dir: alternate; loop: true; dur: 1500; easing: easeInOutSine"> </a-cylinder> <a-text value="Zone B" position="0 0.3 0" align="center" color="white" width="1"></a-text> </a-entity> `
Cognitive map: the user must be able to reconstruct the structure of the space from their experience. Visual landmarks, varied zone colors, and gradual reveals help build this mental map.
Lab 4.1 — 2-Zone Experience
Steps:
- Create a scene with 2 clearly differentiated zones (color, content, atmosphere)
- Add 2–3 waypoints per zone (including an inter-zone waypoint)
- Add an "arrival" animation on each waypoint (rotation or brief color pulse)
- Test with 2 people: can they draw the map of the space after visiting it?
Mini-exercise: For your capstone project, draw the zone map with: start, inter-zone waypoints, information density per zone, estimated duration per zone.
Module 5 — Spatial Audio Architecture (2h)
Concept
Good spatial VR audio is organized in 3 layers:
| Layer | Role | A-Frame Implementation |
|---|---|---|
| Ambiance | Creates the space atmosphere | autoplay: true; loop: true; volume: 0.3 |
| Positional | Locates sound sources in 3D | positional: true; rolloffFactor: 2–5 |
| UI | Confirms interactions | on: click/mouseenter; volume: 0.6–0.8 |
Crossfade between zones (JavaScript): javascript AFRAME.registerComponent('zone-audio', { schema: { from: {type: 'selector'}, to: {type: 'selector'}, duration: {default: 2000} }, init: function() { this.el.addEventListener('zone-enter', () => { const from = this.data.from.components.sound; const to = this.data.to.components.sound; this.fade(from, to, this.data.duration); }); }, fade: function(from, to, duration) { let startVol = from.data.volume; let elapsed = 0; const interval = setInterval(() => { elapsed += 100; const t = elapsed / duration; from.el.setAttribute('sound', 'volume', startVol * (1 - t)); to.el.setAttribute('sound', 'volume', t * 0.3); if (elapsed >= duration) { clearInterval(interval); from.el.components.sound.stopSound(); } }, 100); to.el.components.sound.playSound(); } });
Occlusion and reverberation: A-Frame does not natively support acoustic occlusion (sound blocked by walls). For an A-Frame project, simulate occlusion by reducing the volume of sources behind virtual walls when the user moves. Complete physical simulation requires Web Audio API or a dedicated library.
Lab 5.1 — 3-Layer Audio Architecture
Steps:
- For your 2-zone scene: add one ambient sound per zone
- Add at least 2 positional sound sources (objects that "emit" sound)
- Add 3 interaction sounds (UI layer)
- Test with eyes closed: can you locate each zone from sound alone? Can you tell when an interaction has been confirmed?
Mini-exercise: Write the sound design guide for your capstone project: list each sound source (type, layer, file, volume).
Module 6 — SUS Evaluation: User Testing (2h)
Concept
The System Usability Scale (SUS) is a 10-item standardized questionnaire for assessing the global usability of an interface. Adapted for VR, it measures global comfort and learnability.
Source: Brooke, J. (1996). SUS: A "Quick and Dirty" Usability Scale. In Jordan, P. W. et al. (Eds.), Usability Evaluation in Industry. Taylor & Francis, pp. 189–194.
10 items adapted for VR (alternate: positive/negative):
- I think I would like to use this VR experience frequently.
- I found this experience unnecessarily complex.
- I thought the experience was easy to use.
- I think I would need assistance from a technical person to use this experience.
- I found the various features of this experience were well integrated.
- I thought there was too much inconsistency in this experience.
- I would imagine that most people would learn to use this experience very quickly.
- I found the experience very cumbersome to use.
- I felt very confident using the experience.
- I needed to learn a lot of things before I could get going with this experience.
Scoring formula: Each item is rated from 1 (strongly disagree) to 5 (strongly agree). SUS Score = Σ[(odd item score − 1) + (5 − even item score)] × 2.5
| Range | Interpretation |
|---|---|
| 85–100 | Excellent ("A" grade) |
| 71–84 | Good ("B" grade) |
| 51–70 | Acceptable ("C" grade) |
| < 50 | Poor — fundamental usability issues |
Lab 6.1 — SUS Test
Steps:
- Prepare the 10 adapted VR questions on a printed or digital form
- Test with ≥ 3 testers (ideally non-habituated profiles: non-gamers, people unfamiliar with VR)
- Calculate the SUS score for each tester and the average
- Identify the 2 worst-scoring items → they indicate priority problems
Mini-exercise: Given scores of 4, 2, 5, 1, 4, 2, 5, 2, 4, 1 — calculate the SUS score. Interpret the result.
(Solution: (4-1)+(5-2)+(5-1)+(5-1)+(4-1)+(5-2)+(5-1)+(5-2)+(4-1)+(5-1) = 3+3+4+4+3+3+4+3+3+4 = 34 → 34×2.5 = 85. Score: 85/100 — Excellent.)
Module 7 — Prioritization: P0/P1/P2 Grid (2h)
Concept
After a user test, prioritization avoids treating all problems the same way.
P0/P1/P2 grid:
| Priority | Definition | Examples in VR |
|---|---|---|
| P0 — Blocker | Prevents completing the core task or causes cybersickness | Crash, severe nausea, object impossible to grab |
| P1 — Important | Significantly degrades the experience | Confusing navigation, illegible 3D text, unintuitive feedback |
| P2 — Minor | Inconvenience but does not block progress | Sound too low, color inconsistency, minor grammatical error |
Correction decision tree:
- Is this problem repeated across ≥ 2 testers? → YES → P0 or P1 / NO → P2 or ignore
- Does this problem cause task failure or cybersickness? → YES → P0 / NO → P1
- Is the fix quick (< 1h)? → YES → fix immediately / NO → schedule for next iteration
Lab 7.1 — Prioritization of SUS Results
Steps:
- List all observed problems from Lab 6.1 (SUS + direct observations)
- Classify each problem as P0 / P1 / P2 using the decision tree
- Draft a 1-week correction plan: P0s in the first 2 days, P1s in days 3–5
- For each P0 correction: describe the proposed fix and how you will verify it
Mini-exercise: A tester vomits in VR. Another can't find the start button. A third finds the 3D text too small. Classify these problems and justify.
Module 8 — 3D Visual Design (2h)
Concept
3D visual design in VR is governed by principles specific to stereoscopic space.
Rules for 3D text:
| Rule | Value | Rationale |
|---|---|---|
| Minimum text size | 0.1m at 1m distance | Below → illegible even for 20/20 vision |
| Maximum line width | 40–50 characters | Reading comfort, avoid excessive lateral movement |
| Minimum contrast | 4.5:1 (WCAG AA) | Stereoscopic display reduces apparent contrast |
| Text/panel distance from user | 0.5–5m | < 0.5m → vergence; > 5m → illegibility |
3D color palette:
- Avoid pure, highly saturated colors on large surfaces (visual fatigue)
- Prefer slightly dark or slightly desaturated backgrounds
- Use color to code semantic levels (category, importance, interactivity)
- Test with a grayscale filter: hierarchy must remain visible even without color
Depth and negative space:
- Objects placed at different depths create a natural hierarchy
- Leave empty volumes between elements — "3D white space"
- Use scale variation (small = far = less important) rather than placing everything at the same depth
Lab 8.1 — Visual Audit
Steps:
- Take a screenshot of your VR scene in the browser
- Apply a grayscale filter (Photoshop, GIMP, or browser DevTools filter)
- Evaluate: is the visual hierarchy visible without color? What elements get lost?
- Apply the contrast checker (https://webaim.org/resources/contrastchecker/) on each text
- Correct the 2 most critical problems
Mini-exercise: For each of your 3 world-locked panels, verify: font size (in CSS px or A-Frame units), contrast ratio, number of characters per line.
Capstone Project — "Cultural Mediation VR"
Brief
Design a VR experience on a cultural subject of your choice (heritage site, museum, historical archive, artistic work) that allows a user to explore and understand independently.
Constraints
- Technology: A-Frame (WebXR) or Unity (with WebGL/WebXR build)
- 2 differentiated zones with at least 2 waypoints each
- 3 world-locked information panels (title + text + optional image)
- At least 3 testers for SUS evaluation (calculate score + prioritization grid)
- No headset required for the demo — functional in desktop browser
Deliverables
- Functional link (Glitch.com, itch.io, or personal server)
- Design documentation (2–3 A4 pages): concept, zone map, pattern choices, sound design
- SUS evaluation report: raw scores, average, 3 prioritized problems
- Oral presentation (8 min): demo + reflection on design decisions + lessons learned
Evaluation Rubric
| Criterion | Insufficient (1) | Satisfactory (2) | Good (3) | Excellent (4) |
|---|---|---|---|---|
| Patterns applied | Absent or inappropriate | 1–2 patterns | 3+ correct patterns | 4+ patterns + justified choices |
| Ergonomics / Comfort | Cybersickness or blocking issue | Functional but uncomfortable | No cybersickness | No cybersickness + comfort brief |
| 3D UI | Absent or illegible | 1 functional panel | 3 readable panels | 3 panels + visual hierarchy + contrast |
| Navigation | Impossible to navigate | Navigable with help | 2 zones + waypoints | 2 zones + navigation guide + cognitive map |
| SUS evaluation | Absent | Score calculated but no prioritization | Score + P0/P1/P2 | Score + prioritization + corrections applied |
Readings & Resources
- Brooke, J. (1996). SUS: A "Quick and Dirty" Usability Scale. In Usability Evaluation in Industry.
- Boletsis, C., & Cedergren, J. E. (2019). VR Locomotion. https://doi.org/10.1155/2019/7420781
- LaViola Jr., J. J. (2000). A Discussion of Cybersickness. ACM SIGCHI Bulletin, 32(1), 47–56.
- WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/
- A-Frame Components Registry: https://www.npmjs.com/search?q=keywords:aframe
- A-Frame Teleport Controls: https://www.npmjs.com/package/aframe-teleport-controls
- WebXR W3C spec: https://www.w3.org/TR/webxr/
→ Previous level: VR Interaction Design — Level 1 → Next level: VR Interaction Design — Level 3 → Custom workshop for your school or studio: Book a 30-min call — free
Intensive workshop (1–2 days) for schools, studios, museums — condensed theory, guided labs, project mentoring.
Book a 30-min call (free) →