<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Human Factors | Étienne Peillard</title><link>https://www.etiennepeillard.com/category/human-factors/</link><atom:link href="https://www.etiennepeillard.com/category/human-factors/index.xml" rel="self" type="application/rss+xml"/><description>Human Factors</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Wed, 11 Mar 2026 00:00:00 +0000</lastBuildDate><image><url>https://www.etiennepeillard.com/media/sharing.png</url><title>Human Factors</title><link>https://www.etiennepeillard.com/category/human-factors/</link></image><item><title>Lab — Avatars and embodiment in virtual reality</title><link>https://www.etiennepeillard.com/teaching/lab/avatar/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.etiennepeillard.com/teaching/lab/avatar/</guid><description>&lt;h3 id="overview">Overview&lt;/h3>
&lt;p>In this lab, you will explore how avatars are created, animated, and embodied in Virtual Reality.&lt;/p>
&lt;p>Avatars are a central component of immersive systems. They allow users to perceive and interact with virtual environments through a virtual body. However, the design and calibration of avatars can significantly affect &lt;strong>embodiment&lt;/strong>, &lt;strong>comfort&lt;/strong>, and &lt;strong>user perception&lt;/strong>.&lt;/p>
&lt;p>In this lab you will:&lt;/p>
&lt;ul>
&lt;li>create and import a humanoid avatar&lt;/li>
&lt;li>animate it using VR tracking&lt;/li>
&lt;li>experiment with avatar body modifications&lt;/li>
&lt;li>evaluate their impact on &lt;strong>embodiment and user experience&lt;/strong>&lt;/li>
&lt;/ul>
&lt;h2 id="1--avatar-creation">1 — Avatar Creation&lt;/h2>
&lt;p>Create or download an avatar using &lt;strong>Mixamo&lt;/strong>.&lt;/p>
&lt;ol>
&lt;li>Go to &lt;strong>&lt;a href="https://www.mixamo.com" target="_blank" rel="noopener">https://www.mixamo.com&lt;/a>&lt;/strong>&lt;/li>
&lt;li>Select a character from the library&lt;/li>
&lt;li>Download the character in &lt;strong>FBX format&lt;/strong>&lt;/li>
&lt;/ol>
&lt;h3 id="import-the-avatar-into-unity">Import the avatar into Unity&lt;/h3>
&lt;ol>
&lt;li>Create a new &lt;strong>Unity 3D project&lt;/strong>.&lt;/li>
&lt;li>Import the &lt;strong>FBX avatar model&lt;/strong> into the project.&lt;/li>
&lt;li>Drag the avatar into the scene.&lt;/li>
&lt;/ol>
&lt;h4 id="configure-materials-and-textures">Configure materials and textures&lt;/h4>
&lt;p>When importing FBX models, Unity may embed materials and textures inside the model file. Extract them to make them editable.&lt;/p>
&lt;ol>
&lt;li>Select the avatar model in the &lt;strong>Project&lt;/strong> panel.&lt;/li>
&lt;li>In the &lt;strong>Inspector&lt;/strong>, open the &lt;strong>Materials&lt;/strong> tab.&lt;/li>
&lt;li>Click:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Extract Materials
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Extract Textures
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="4">
&lt;li>Assign the extracted materials to the correct mesh elements if needed.&lt;/li>
&lt;li>Assign appropriate textures to the materials (albedo, normal map, etc.) to ensure the avatar looks correct in the scene.&lt;/li>
&lt;li>Verify that the avatar is rendered correctly in the scene.&lt;/li>
&lt;/ol>
&lt;h2 id="2--using-the-avatar-in-a-vr-scene">2 — Using the Avatar in a VR Scene&lt;/h2>
&lt;p>Follow the tutorial available here:&lt;/p>
&lt;p>&lt;strong>Unity VR Avatar Tutorial&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://immersive-insiders.com/blog/how-to-animate-your-avatar-for-vr-in-unity" target="_blank" rel="noopener">https://immersive-insiders.com/blog/how-to-animate-your-avatar-for-vr-in-unity&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>⚠️ Note&lt;br>
The original tutorial uses the Ready Player Me API, which has since been discontinued.&lt;br>
Ignore all steps related to Ready Player Me and instead use the &lt;strong>Mixamo avatar you imported&lt;/strong>.&lt;/p>
&lt;/blockquote>
&lt;p>The objective of this part is to:&lt;/p>
&lt;ul>
&lt;li>add the avatar to a VR scene&lt;/li>
&lt;li>connect the avatar head and hands to the &lt;strong>VR headset and controllers&lt;/strong>&lt;/li>
&lt;li>observe how avatar motion follows user motion.&lt;/li>
&lt;/ul>
&lt;h2 id="3--inverse-kinematics-ik">3 — Inverse Kinematics (IK)&lt;/h2>
&lt;p>In Virtual Reality, avatars usually do not have full-body tracking.&lt;br>
Most VR systems only track:&lt;/p>
&lt;ul>
&lt;li>the &lt;strong>headset (HMD)&lt;/strong>&lt;/li>
&lt;li>the &lt;strong>left controller&lt;/strong>&lt;/li>
&lt;li>the &lt;strong>right controller&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>However, the avatar has many joints (shoulders, elbows, spine, hips, etc.).&lt;br>
To animate the full body from only a few tracked points, VR systems use &lt;strong>Inverse Kinematics (IK)&lt;/strong>.&lt;/p>
&lt;h3 id="forward-vs-inverse-kinematics">Forward vs Inverse Kinematics&lt;/h3>
&lt;p>There are two main approaches to animate articulated characters.&lt;/p>
&lt;h4 id="forward-kinematics-fk">Forward Kinematics (FK)&lt;/h4>
&lt;p>In Forward Kinematics, the motion is applied &lt;strong>joint by joint&lt;/strong>.&lt;/p>
&lt;p>For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">shoulder → elbow → wrist → hand
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Each rotation affects the following joints.&lt;/p>
&lt;p>This approach is commonly used in traditional animation.&lt;/p>
&lt;h4 id="inverse-kinematics-ik">Inverse Kinematics (IK)&lt;/h4>
&lt;p>In Inverse Kinematics, the desired &lt;strong>end position&lt;/strong> of a limb is known.&lt;/p>
&lt;p>For example:&lt;/p>
&lt;ul>
&lt;li>the hand should be at the position of the controller.&lt;/li>
&lt;/ul>
&lt;p>The system then automatically computes the rotations of intermediate joints:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">controller position → hand → elbow → shoulder
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>IK therefore allows a virtual body to follow user movements even with limited tracking.&lt;/p>
&lt;h3 id="ik-in-vr-avatars">IK in VR Avatars&lt;/h3>
&lt;p>In most VR systems:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tracked device&lt;/th>
&lt;th>Avatar body part&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>HMD&lt;/td>
&lt;td>head&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>left controller&lt;/td>
&lt;td>left hand&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>right controller&lt;/td>
&lt;td>right hand&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>An IK solver estimates the position of:&lt;/p>
&lt;ul>
&lt;li>elbows&lt;/li>
&lt;li>shoulders&lt;/li>
&lt;li>torso&lt;/li>
&lt;li>sometimes legs&lt;/li>
&lt;/ul>
&lt;p>This reconstruction allows the avatar to appear natural even though only a few points are tracked.&lt;/p>
&lt;h3 id="simple-unity-ik-example">Simple Unity IK Example&lt;/h3>
&lt;p>Unity&amp;rsquo;s Animator component includes a built-in IK system.&lt;/p>
&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">void&lt;/span> &lt;span class="n">OnAnimatorIK&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">layerIndex&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">animator&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SetIKPosition&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">AvatarIKGoal&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">LeftHand&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">leftController&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">position&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">animator&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SetIKRotation&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">AvatarIKGoal&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">LeftHand&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">leftController&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">rotation&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">animator&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SetIKPosition&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">AvatarIKGoal&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">RightHand&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rightController&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">position&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">animator&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">SetIKRotation&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">AvatarIKGoal&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">RightHand&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rightController&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">rotation&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This code forces the avatar&amp;rsquo;s hands to follow the position of the VR controllers.&lt;/p>
&lt;h3 id="experiment">Experiment&lt;/h3>
&lt;p>When testing your avatar, observe:&lt;/p>
&lt;ul>
&lt;li>how the arms move when you raise your hands&lt;/li>
&lt;li>whether the elbows behave naturally&lt;/li>
&lt;li>whether body proportions affect IK quality&lt;/li>
&lt;/ul>
&lt;p>Body modifications introduced later in the lab may significantly affect the behavior of IK.&lt;/p>
&lt;h3 id="add-a-mirror">Add a mirror&lt;/h3>
&lt;p>Seeing your avatar from a third-person perspective helps evaluating embodiment.&lt;/p>
&lt;p>You can add a mirror in your scene using the following Unity package:&lt;/p>
&lt;p>&lt;a href="Mirror%20Asset.unitypackage">Mirror Package&lt;/a>&lt;/p>
&lt;p>Place the mirror in front of the player so they can observe their avatar.&lt;/p>
&lt;h2 id="4--lower-body-animation-optional">4 — Lower Body Animation (Optional)&lt;/h2>
&lt;p>If you want to go further, you can animate the lower body of your avatar.&lt;/p>
&lt;p>Follow the tutorial:&lt;/p>
&lt;p>&lt;a href="https://immersive-insiders.com/blog/animating-ready-player-me-avatar-lower-body-for-vr-in-unity" target="_blank" rel="noopener">https://immersive-insiders.com/blog/animating-ready-player-me-avatar-lower-body-for-vr-in-unity&lt;/a>&lt;/p>
&lt;p>Although the tutorial was written for Ready Player Me avatars, the steps should still apply because &lt;strong>Mixamo avatars also use a Humanoid rig&lt;/strong>.&lt;/p>
&lt;p>The goal of this section is to:&lt;/p>
&lt;ul>
&lt;li>improve the realism of avatar motion&lt;/li>
&lt;li>add basic walking animation&lt;/li>
&lt;li>synchronize upper and lower body movement.&lt;/li>
&lt;/ul>
&lt;h2 id="5--avatar-customization-and-body-modification">5 — Avatar Customization and Body Modification&lt;/h2>
&lt;p>In the previous section you adapted the avatar to match the user’s body (eye height, head position, etc.).&lt;/p>
&lt;p>In this section you will &lt;strong>intentionally modify the avatar body&lt;/strong> to explore how these changes affect:&lt;/p>
&lt;ul>
&lt;li>embodiment&lt;/li>
&lt;li>comfort&lt;/li>
&lt;li>perception of movement.&lt;/li>
&lt;/ul>
&lt;p>Prepare several avatar configurations by modifying parameters such as:&lt;/p>
&lt;h3 id="change-avatar-scale">Change avatar scale&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-csharp" data-lang="csharp">&lt;span class="line">&lt;span class="cl">&lt;span class="n">avatar&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">transform&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">localScale&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">Vector3&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="m">1.3f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">1.3f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">1.3f&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="modify-arm-length">Modify arm length&lt;/h3>
&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">UpperArm_L scale = 1.4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">UpperArm_R scale = 1.4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="modify-body-proportions">Modify body proportions&lt;/h3>
&lt;p>Possible variations:&lt;/p>
&lt;ul>
&lt;li>wider body&lt;/li>
&lt;li>thinner body&lt;/li>
&lt;li>shorter torso&lt;/li>
&lt;li>larger head&lt;/li>
&lt;/ul>
&lt;h3 id="create-a-non-human-avatar">Create a non-human avatar&lt;/h3>
&lt;p>Examples:&lt;/p>
&lt;ul>
&lt;li>extremely long arms&lt;/li>
&lt;li>oversized head&lt;/li>
&lt;li>very short legs&lt;/li>
&lt;/ul>
&lt;h3 id="hybrid-avatars">Hybrid avatars&lt;/h3>
&lt;p>You may also experiment with avatars that remain humanoid but include non-human features:&lt;/p>
&lt;ul>
&lt;li>cat-head humanoid&lt;/li>
&lt;li>robotic body&lt;/li>
&lt;li>stylized proportions&lt;/li>
&lt;/ul>
&lt;p>The goal is to explore how avatar morphology affects user perception and interaction.&lt;/p>
&lt;h2 id="6--evaluating-embodiment">6 — Evaluating Embodiment&lt;/h2>
&lt;p>To evaluate the impact of avatar modifications, conduct a small user study.&lt;/p>
&lt;p>Test &lt;strong>two avatars&lt;/strong>:&lt;/p>
&lt;ol>
&lt;li>a normal avatar&lt;/li>
&lt;li>a modified avatar&lt;/li>
&lt;/ol>
&lt;p>Ask 3-5 participants to experience both configurations.&lt;/p>
&lt;h3 id="questionnaire">Questionnaire&lt;/h3>
&lt;p>Participants rate each statement using a &lt;strong>Likert scale from 1 to 7&lt;/strong>.&lt;/p>
&lt;h4 id="embodiment">Embodiment&lt;/h4>
&lt;ul>
&lt;li>
&lt;p>&lt;em>I felt as if the virtual body was my body.&lt;/em>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;em>The movements of the avatar felt like my own movements.&lt;/em>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h4 id="agency">Agency&lt;/h4>
&lt;ul>
&lt;li>&lt;em>I felt that I controlled the avatar.&lt;/em>&lt;/li>
&lt;/ul>
&lt;h4 id="comfort">Comfort&lt;/h4>
&lt;ul>
&lt;li>&lt;em>The body proportions felt natural.&lt;/em>&lt;/li>
&lt;/ul>
&lt;h3 id="discussion">Discussion&lt;/h3>
&lt;p>After the experiment, discuss:&lt;/p>
&lt;ul>
&lt;li>Which avatar modifications were the most disturbing?&lt;/li>
&lt;li>Which ones still felt natural?&lt;/li>
&lt;li>How do these results relate to &lt;strong>proprioception and body perception&lt;/strong>?&lt;/li>
&lt;/ul>
&lt;h2 id="report">Report&lt;/h2>
&lt;p>You will submit a short report describing your work.&lt;/p>
&lt;p>Your report should include:&lt;/p>
&lt;h4 id="avatar-configurations">Avatar configurations&lt;/h4>
&lt;ul>
&lt;li>description of the tested avatar configurations&lt;/li>
&lt;li>explanation of how they were implemented in Unity&lt;/li>
&lt;/ul>
&lt;h4 id="questionnaire-results">Questionnaire results&lt;/h4>
&lt;ul>
&lt;li>summary of participant responses&lt;/li>
&lt;li>comparison between normal and modified avatars&lt;/li>
&lt;/ul>
&lt;h4 id="discussion-1">Discussion&lt;/h4>
&lt;p>Discuss the results in relation to:&lt;/p>
&lt;ul>
&lt;li>embodiment&lt;/li>
&lt;li>proprioception&lt;/li>
&lt;li>perception of the body in VR&lt;/li>
&lt;/ul>
&lt;p>You may also propose explanations for the observed effects.&lt;/p></description></item><item><title>Course — Cybersickness and comfort in virtual reality</title><link>https://www.etiennepeillard.com/slides/cybersickness-confort/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.etiennepeillard.com/slides/cybersickness-confort/</guid><description>&lt;h1 id="cybersickness-and-comfort-in-virtual-reality">Cybersickness and Comfort in Virtual Reality&lt;/h1>
&lt;h3 id="introduction-and-key-design-factors">Introduction and key design factors&lt;/h3>
&lt;p>&lt;em>Étienne Peillard&lt;/em>&lt;/p>
&lt;p>&lt;em>IMT Atlantique — Lab-STICC&lt;/em>&lt;/p>
&lt;hr>
&lt;h2 id="why-comfort-matters-in-vr">Why comfort matters in VR&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Virtual reality can provide strong immersion and a compelling sense of presence.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>However, VR can also induce &lt;strong>discomfort&lt;/strong> in a significant proportion of users.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Typical symptoms include:&lt;/p>
&lt;ul>
&lt;li>nausea&lt;/li>
&lt;li>dizziness&lt;/li>
&lt;li>eye strain&lt;/li>
&lt;li>disorientation&lt;/li>
&lt;li>fatigue&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="main-idea">Main idea&lt;/h3>
&lt;p>A VR application is not only judged by what it enables, but also by &lt;strong>how comfortable it is to use&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="what-is-cybersickness">What is cybersickness?&lt;/h2>
&lt;p>&lt;strong>Cybersickness&lt;/strong> refers to a set of discomfort symptoms induced by exposure to virtual environments.&lt;/p>
&lt;p>It is closely related to &lt;strong>motion sickness&lt;/strong>, but with an important difference:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Motion sickness&lt;/th>
&lt;th>Cybersickness&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>caused by physical motion&lt;/td>
&lt;td>often caused by visually simulated motion&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>example: boat, car&lt;/td>
&lt;td>example: VR headset&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>In VR&lt;/strong>&lt;/p>
&lt;p>The user may &lt;strong>see motion&lt;/strong> without physically moving.&lt;/p>
&lt;hr>
&lt;h2 id="typical-symptoms">Typical symptoms&lt;/h2>
&lt;p>Common symptoms include:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Nausea&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Dizziness&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Eye strain&lt;/strong>&lt;/li>
&lt;li>Sweating&lt;/li>
&lt;li>Headache&lt;/li>
&lt;li>Disorientation&lt;/li>
&lt;li>General discomfort&lt;/li>
&lt;/ul>
&lt;hr>
&lt;section data-noprocess data-shortcode-slide
class="img-right"
>
&lt;h3 id="questionnaires-used-in-research">Questionnaires used in research&lt;/h3>
&lt;h4 id="simulator-sickness-questionnaire-ssq">Simulator Sickness Questionnaire (SSQ)&lt;/h4>
&lt;p>One of the most widely used tools.&lt;/p>
&lt;p>Measures three categories of symptoms:&lt;/p>
&lt;ul>
&lt;li>Nausea&lt;/li>
&lt;li>Oculomotor discomfort (eye strain, blurred vision)&lt;/li>
&lt;li>Disorientation&lt;/li>
&lt;/ul>
&lt;p>Participants rate the intensity of several symptoms after exposure.&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="SSQ questionnaire" srcset="
/slides/cybersickness-confort/image-2_hu51d7085d4065d2dc380bad4584261127_224780_8ab125a50a9d5384a63d7c59b80f232e.webp 400w,
/slides/cybersickness-confort/image-2_hu51d7085d4065d2dc380bad4584261127_224780_0df22fa40265038c75637dac453aadf6.webp 760w,
/slides/cybersickness-confort/image-2_hu51d7085d4065d2dc380bad4584261127_224780_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://www.etiennepeillard.com/slides/cybersickness-confort/image-2_hu51d7085d4065d2dc380bad4584261127_224780_8ab125a50a9d5384a63d7c59b80f232e.webp"
width="640"
height="415"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;hr>
&lt;h2 id="main-explanation-sensory-conflict">Main explanation: sensory conflict&lt;/h2>
&lt;p>The most common explanation is the &lt;strong>sensory conflict theory&lt;/strong>.&lt;/p>
&lt;p>The brain combines information from:&lt;/p>
&lt;ul>
&lt;li>the &lt;strong>visual system&lt;/strong>&lt;/li>
&lt;li>the &lt;strong>vestibular system&lt;/strong> (inner ear)&lt;/li>
&lt;li>&lt;strong>proprioception&lt;/strong>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="problem-in-vr">Problem in VR&lt;/h3>
&lt;ul>
&lt;li>The eyes may signal motion.&lt;/li>
&lt;li>The vestibular system may signal no motion.&lt;/li>
&lt;/ul>
&lt;p>This mismatch can produce discomfort.&lt;/p>
&lt;hr>
&lt;h2 id="other-complementary-explanations">Other complementary explanations&lt;/h2>
&lt;h3 id="postural-instability">Postural instability&lt;/h3>
&lt;p>Cybersickness may also appear when users cannot easily stabilize their posture in response to the virtual scene.&lt;/p>
&lt;h3 id="sensorimotor-inconsistency">Sensorimotor inconsistency&lt;/h3>
&lt;p>Discomfort can emerge when the environment behaves in ways that do not match the user’s action-perception expectations.&lt;/p>
&lt;h3 id="system-disconfort">System disconfort&lt;/h3>
&lt;p>The prolonged use of a VR system can cause physical discomfort due to factors such as:&lt;/p>
&lt;ul>
&lt;li>headset weight&lt;/li>
&lt;li>heat&lt;/li>
&lt;li>pressure on the face&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="important-takeaway">Important takeaway&lt;/h3>
&lt;p>Cybersickness is not caused by a single factor. It usually results from a &lt;strong>combination of perceptual, motor, and technical issues&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="technical-factors">Technical factors&lt;/h2>
&lt;p>Several technical parameters strongly affect comfort:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Low frame rate&lt;/strong>&lt;/li>
&lt;li>&lt;strong>High latency&lt;/strong>&lt;/li>
&lt;li>Tracking instability or jitter&lt;/li>
&lt;li>Incorrect camera updates&lt;/li>
&lt;li>Visual stutter&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="why-it-matters">Why it matters&lt;/h3>
&lt;p>The visual scene should react to the user’s head and body movements in a way that is:&lt;/p>
&lt;ul>
&lt;li>fast&lt;/li>
&lt;li>stable&lt;/li>
&lt;li>predictable&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="motion-and-locomotion-factors">Motion and locomotion factors&lt;/h2>
&lt;p>Locomotion design is one of the strongest comfort factors in VR.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Often more discomfort&lt;/th>
&lt;th>Often more comfortable&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>continuous joystick locomotion&lt;/td>
&lt;td>teleportation&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>continuous rotation&lt;/td>
&lt;td>snap turning&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>abrupt acceleration&lt;/td>
&lt;td>smooth acceleration/deceleration&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>camera motion not initiated by the user&lt;/td>
&lt;td>user-controlled motion&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="field-of-view-and-visual-mitigation">Field of view and visual mitigation&lt;/h2>
&lt;p>Peripheral visual motion can strongly contribute to discomfort.&lt;/p>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="optic flow" srcset="
/slides/cybersickness-confort/image_hu28134c1a2549b7b42d93b5ad84c82de7_466282_88244682bcc7f3efc85b92373f081a72.webp 400w,
/slides/cybersickness-confort/image_hu28134c1a2549b7b42d93b5ad84c82de7_466282_b0d9c6ddc21ac681349a9a843dc990fa.webp 760w,
/slides/cybersickness-confort/image_hu28134c1a2549b7b42d93b5ad84c82de7_466282_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://www.etiennepeillard.com/slides/cybersickness-confort/image_hu28134c1a2549b7b42d93b5ad84c82de7_466282_88244682bcc7f3efc85b92373f081a72.webp"
width="600"
height="538"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;hr>
&lt;section data-noprocess data-shortcode-slide
class="img-right"
>
&lt;h3 id="a-common-mitigation-strategy">A common mitigation strategy&lt;/h3>
&lt;p>&lt;strong>Dynamic FOV reduction&lt;/strong> during movement:&lt;/p>
&lt;ul>
&lt;li>reduce peripheral motion&lt;/li>
&lt;li>keep central vision available&lt;/li>
&lt;li>restore full field of view when the user stops moving&lt;/li>
&lt;/ul>
&lt;p>This is sometimes called:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>tunneling&lt;/strong>&lt;/li>
&lt;li>&lt;strong>vignette&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="tunneling" srcset="
/slides/cybersickness-confort/image-1_hu812b374fa4939347c83b6b15c4375099_301986_57eef51b9a1cb546a86987133634ba5a.webp 400w,
/slides/cybersickness-confort/image-1_hu812b374fa4939347c83b6b15c4375099_301986_fae1c87ebea5853d1406d7300a79de32.webp 760w,
/slides/cybersickness-confort/image-1_hu812b374fa4939347c83b6b15c4375099_301986_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://www.etiennepeillard.com/slides/cybersickness-confort/image-1_hu812b374fa4939347c83b6b15c4375099_301986_57eef51b9a1cb546a86987133634ba5a.webp"
width="724"
height="483"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;hr>
&lt;h2 id="spatial-and-perceptual-consistency">Spatial and perceptual consistency&lt;/h2>
&lt;p>Comfort is also influenced by how coherent the virtual world feels.&lt;/p>
&lt;p>Potential issues include:&lt;/p>
&lt;ul>
&lt;li>incorrect world scale&lt;/li>
&lt;li>wrong camera height&lt;/li>
&lt;li>tilted horizon&lt;/li>
&lt;li>camera lag&lt;/li>
&lt;li>head bobbing&lt;/li>
&lt;li>artificial sway or roll&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Key idea&lt;/strong>&lt;/p>
&lt;p>If the VR system violates basic perceptual expectations, discomfort is more likely.&lt;/p>
&lt;hr>
&lt;h2 id="design-guidelines-for-comfort">Design guidelines for comfort&lt;/h2>
&lt;p>Common recommendations for comfortable VR design include:&lt;/p>
&lt;ul>
&lt;li>avoid abrupt acceleration&lt;/li>
&lt;li>limit continuous artificial rotation&lt;/li>
&lt;li>maintain a stable horizon&lt;/li>
&lt;li>preserve correct scale and height&lt;/li>
&lt;li>provide stable visual references&lt;/li>
&lt;li>reduce peripheral motion during locomotion&lt;/li>
&lt;li>prioritize technical stability and low latency&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>There is no universal solution&lt;/strong>&lt;/p>
&lt;p>A design choice may help some users and disturb others.&lt;/p>
&lt;hr>
&lt;h2 id="link-with-todays-practical-session">Link with today’s practical session&lt;/h2>
&lt;p>In the TP, you will:&lt;/p>
&lt;ol>
&lt;li>measure a &lt;strong>baseline&lt;/strong> condition&lt;/li>
&lt;li>implement at least &lt;strong>three independent comfort-related features&lt;/strong>&lt;/li>
&lt;li>test them with participants&lt;/li>
&lt;li>compare the results across groups&lt;/li>
&lt;li>derive &lt;strong>design guidelines&lt;/strong> from the class dataset&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Goal&lt;/strong>&lt;/p>
&lt;p>Understand comfort in VR not only as a theory, but as a &lt;strong>design and engineering problem&lt;/strong>.&lt;/p></description></item><item><title>Lab — Cybersickness and comfort in virtual reality</title><link>https://www.etiennepeillard.com/teaching/lab/cybersickness-confort/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.etiennepeillard.com/teaching/lab/cybersickness-confort/</guid><description>&lt;p>The goal of this practical session is to investigate how different design choices in VR influence &lt;strong>user comfort and cybersickness&lt;/strong>.&lt;/p>
&lt;p>You will modify an existing VR navigation application, implement several comfort-related features, and evaluate their impact through a &lt;strong>small user experiment&lt;/strong>.&lt;/p>
&lt;h2 id="1-baseline-experiment">1. Baseline experiment&lt;/h2>
&lt;p>&lt;a href="https://moodle.imt-atlantique.fr/mod/folder/view.php?id=45324" target="_blank" rel="noopener">Start from the &lt;strong>Navigation TP project&lt;/strong> used previously. &lt;/a>&lt;/p>
&lt;p>Deploy the application on the VR headset.&lt;/p>
&lt;p>Use the &lt;strong>city navigation task&lt;/strong> already implemented in the project.&lt;/p>
&lt;p>Ask &lt;strong>3 participants&lt;/strong> to perform the task.
Participants must try to activate as many buzzers as possible within &lt;strong>2 minutes&lt;/strong>, as in the original TP.&lt;/p>
&lt;p>After the task, ask each participant to rate their experience using the following scales:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Nausea: 0–10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dizziness: 0–10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Eye strain: 0–10
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Record the results.
These results constitute your &lt;strong>baseline condition&lt;/strong>.&lt;/p>
&lt;h2 id="2-implement-comfort-related-features">2. Implement comfort-related features&lt;/h2>
&lt;p>You must implement &lt;strong>at least three independent features from different categories&lt;/strong> that can influence comfort in VR.&lt;/p>
&lt;p>Each feature must be implemented &lt;strong>independently&lt;/strong> so that it can be activated or deactivated for testing.&lt;/p>
&lt;p>Possible features include (you may implement others if relevant):&lt;/p>
&lt;h3 id="motion-and-locomotion-factors">Motion and locomotion factors&lt;/h3>
&lt;ul>
&lt;li>Continuous joystick navigation&lt;/li>
&lt;li>Teleportation locomotion&lt;/li>
&lt;li>Continuous rotation&lt;/li>
&lt;li>Snap rotation (step-based turning)&lt;/li>
&lt;li>Rotation speed modification&lt;/li>
&lt;li>Abrupt acceleration&lt;/li>
&lt;li>Smooth acceleration / deceleration&lt;/li>
&lt;li>Navigation speed increase or decrease&lt;/li>
&lt;/ul>
&lt;h3 id="camera-and-motion-behaviour">Camera and motion behaviour&lt;/h3>
&lt;ul>
&lt;li>Camera lag (delay between head motion and camera update)&lt;/li>
&lt;li>Head bobbing&lt;/li>
&lt;li>Artificial camera sway&lt;/li>
&lt;li>Artificial camera stabilization&lt;/li>
&lt;/ul>
&lt;h3 id="field-of-view-and-visual-factors">Field of view and visual factors&lt;/h3>
&lt;ul>
&lt;li>Field-of-view reduction during movement (tunneling / vignette)&lt;/li>
&lt;li>Dynamic FOV adjustment based on speed&lt;/li>
&lt;li>Larger field of view&lt;/li>
&lt;li>Smaller field of view&lt;/li>
&lt;/ul>
&lt;h3 id="spatial-perception-factors">Spatial perception factors&lt;/h3>
&lt;ul>
&lt;li>Incorrect world scale&lt;/li>
&lt;li>Height offset (camera slightly too high or too low)&lt;/li>
&lt;li>Tilted horizon&lt;/li>
&lt;li>Slight camera roll&lt;/li>
&lt;/ul>
&lt;h3 id="environmental-cues">Environmental cues&lt;/h3>
&lt;ul>
&lt;li>Adding stable visual references (e.g. cockpit frame or nose)&lt;/li>
&lt;li>Removing environmental references&lt;/li>
&lt;li>High visual motion in the environment (moving objects)&lt;/li>
&lt;li>Static vs dynamic environment&lt;/li>
&lt;/ul>
&lt;h3 id="rendering--visual-complexity">Rendering / visual complexity&lt;/h3>
&lt;ul>
&lt;li>Reduced frame rate (simulated)&lt;/li>
&lt;li>Motion blur&lt;/li>
&lt;li>Increased visual contrast&lt;/li>
&lt;li>Reduced visual contrast&lt;/li>
&lt;/ul>
&lt;p>Some of these modifications may &lt;strong>increase discomfort&lt;/strong>, while others may &lt;strong>reduce it&lt;/strong>.&lt;/p>
&lt;h2 id="3-user-testing">3. User testing&lt;/h2>
&lt;p>For each implemented feature, repeat the same experiment.&lt;/p>
&lt;p>Ask &lt;strong>3 participants&lt;/strong> to perform the same task again.&lt;/p>
&lt;p>Important rules:&lt;/p>
&lt;ul>
&lt;li>Participants &lt;strong>must not know which modification is active&lt;/strong>.&lt;/li>
&lt;li>Use the &lt;strong>same task and duration&lt;/strong> (2 minutes).&lt;/li>
&lt;li>Activate &lt;strong>only one feature at a time&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;p>After each condition, participants must rate:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Nausea: 0–10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Dizziness: 0–10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Eye strain: 0–10
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Record all results.&lt;/p>
&lt;h2 id="4-shared-dataset">4. Shared dataset&lt;/h2>
&lt;p>Report your results in &lt;a href="https://docs.google.com/spreadsheets/d/11vtGWGslkL-WzMGXTXbfBq_d_-7ucZgrNPbDUQ9zcD8/edit?usp=sharing" target="_blank" rel="noopener">this &lt;strong>shared document&lt;/strong>&lt;/a>.&lt;/p>
&lt;p>For each condition include:&lt;/p>
&lt;ul>
&lt;li>the implemented feature&lt;/li>
&lt;li>the parameters used&lt;/li>
&lt;li>the results for the three participants&lt;/li>
&lt;/ul>
&lt;p>This shared dataset will allow the class to &lt;strong>compare many comfort factors in VR&lt;/strong>.&lt;/p>
&lt;h2 id="5-report">5. Report&lt;/h2>
&lt;p>Your report must include the following elements.&lt;/p>
&lt;h3 id="implementation">Implementation&lt;/h3>
&lt;p>Explain how each feature was implemented:&lt;/p>
&lt;ul>
&lt;li>scripts modified or created&lt;/li>
&lt;li>parameters used&lt;/li>
&lt;li>technical choices&lt;/li>
&lt;/ul>
&lt;p>Illustrations or code snippets can be included.&lt;/p>
&lt;h3 id="results">Results&lt;/h3>
&lt;p>Present your experimental results:&lt;/p>
&lt;ul>
&lt;li>baseline condition&lt;/li>
&lt;li>each modified condition&lt;/li>
&lt;/ul>
&lt;p>Compare your results with those obtained by other groups in the shared dataset.&lt;/p>
&lt;p>Discuss:&lt;/p>
&lt;ul>
&lt;li>which factors had the strongest impact&lt;/li>
&lt;li>whether the effects were expected or surprising&lt;/li>
&lt;/ul>
&lt;h3 id="discussion">Discussion&lt;/h3>
&lt;p>Provide personal observations and reflections:&lt;/p>
&lt;ul>
&lt;li>subjective impressions during testing&lt;/li>
&lt;li>differences between participants&lt;/li>
&lt;li>limitations of the experiment&lt;/li>
&lt;/ul>
&lt;p>Discuss possible explanations for the observed effects.&lt;/p>
&lt;h3 id="design-guidelines">Design guidelines&lt;/h3>
&lt;p>Based on your experiments and the shared class results, propose &lt;strong>at least five design guidelines&lt;/strong> for improving user comfort in VR applications.&lt;/p>
&lt;p>Each guideline should include:&lt;/p>
&lt;ul>
&lt;li>a short description of the recommendation&lt;/li>
&lt;li>a brief explanation based on your experimental observations&lt;/li>
&lt;/ul></description></item></channel></rss>