<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on My journey in IGD301</title><link>https://rrulyx.github.io/HugoBlog/en/posts/</link><description>Recent content in Posts on My journey in IGD301</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 20 Feb 2024 18:24:31 +0100</lastBuildDate><atom:link href="https://rrulyx.github.io/HugoBlog/en/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Selection Techniques</title><link>https://rrulyx.github.io/HugoBlog/en/posts/selection/</link><pubDate>Tue, 20 Feb 2024 18:24:31 +0100</pubDate><guid>https://rrulyx.github.io/HugoBlog/en/posts/selection/</guid><description>Bubble Mechanism Link
This selection technique is a mix between a bubble cursor and a Ray-casting method. The idea is to chose the closest object to the ray going from the controller. (Closest being either euclidian distance or angular distance)
Reach: infinite (the ray can be as long as needed) Cardinality: Single Progressive refinement: Continuous (The bubble changes size continously) SQUAD Link
In this Selection techniuqe, you begin by using a sphere to create a encapsulate loosely your object.</description><content type="html"><![CDATA[<h1 id="bubble-mechanism">Bubble Mechanism</h1>
<p><a href="https://ieeexplore.ieee.org/document/9089485">Link</a></p>
<p>This selection technique is a mix between a bubble cursor and a Ray-casting method. The idea is to chose the closest object to the ray going from the controller. (Closest being either euclidian distance or angular distance)</p>
<p><img src="/HugoBlog/Posts/Selection/Bubble.png" alt="Bubble"></p>
<ul>
<li><strong>Reach:</strong> infinite (the ray can be as long as needed)</li>
<li><strong>Cardinality:</strong> Single</li>
<li><strong>Progressive refinement:</strong> Continuous (The bubble changes size continously)</li>
</ul>
<h1 id="squad">SQUAD</h1>
<p><a href="https://ieeexplore.ieee.org/abstract/document/5759219">Link</a></p>
<p>In this Selection techniuqe, you begin by using a sphere to create a encapsulate loosely your object. The sphere position is determined by a ray casting method. The radius of the sphere being higher the furthest it is from camera.</p>
<p><img src="/HugoBlog/Posts/Selection/SQUAD1.png" alt="Bubble"></p>
<p>But because you also might have other objects in the sphere, You need to refine your choice by selecting where is your object among the 4 quarters.</p>
<p><img src="/HugoBlog/Posts/Selection/SQUAD2.png" alt="Bubble"></p>
<p>You do this until you only have your object.</p>
<ul>
<li><strong>Reach:</strong> infinite (the ray can be as long as needed)</li>
<li><strong>Cardinality:</strong> Single</li>
<li><strong>Progressive refinement:</strong> Discrete (Tou divide the number of items by 4 each time)</li>
</ul>
<h1 id="isith">iSith</h1>
<p><a href="https://ieeexplore.ieee.org/document/1647507">Link</a></p>
<p>In this Selection technique, you have one ray on each hand and you select the object closest to the projected intersection of this rays.</p>
<p><img src="/HugoBlog/Posts/Selection/iSith.png" alt="Bubble"></p>
<ul>
<li><strong>Reach:</strong> Technically infinite (the rays can be as long as needed, but the intersection is hard to finetune if far away from the handles)</li>
<li><strong>Cardinality:</strong> Single</li>
<li><strong>Progressive refinement:</strong> None</li>
</ul>
]]></content></item><item><title>CAVE System</title><link>https://rrulyx.github.io/HugoBlog/en/posts/cave/</link><pubDate>Tue, 20 Feb 2024 16:55:10 +0100</pubDate><guid>https://rrulyx.github.io/HugoBlog/en/posts/cave/</guid><description>Here, we study the CAVE System. This is an old paper (1992), hence, this system have a lot of limitaions that is due to the state of the hardware at the time, but would be different today. We will nonetheless try to answer a few questions
What is the difference between the CAVE System and Head-Mounted Displays? What are their advantages/disavantadges? Where do you think the CAVE fits into the Reality-Virtuality Continuum of Milgram.</description><content type="html"><![CDATA[<p>Here, we study the <a href="https://dl.acm.org/doi/abs/10.1145/129888.129892">CAVE</a> System. This is an old paper (1992), hence, this system have a lot of limitaions that is due to the state of the hardware at the time, but would be different today. We will nonetheless try to answer a few questions</p>
<ol>
<li>What is the difference between the CAVE System and Head-Mounted Displays? What are their advantages/disavantadges?</li>
<li>Where do you think the CAVE fits into the Reality-Virtuality Continuum of Milgram.</li>
<li>Does the position in the Reality-Virtuality Continuum changes when more people are experiencing the CAVE
system at the same time?</li>
</ol>
<h1 id="comparison-with-hmd">Comparison with HMD</h1>
<p>The CAVE System is really different from a HMD: it consists in multiple screens placed around the user to represent the virtual world. It displays a picture based on the position of the user so that it matches the right perspective.</p>
<p>Let&rsquo;s look at the major points that differ from the HMD:</p>
<h2 id="fov-and-panorama">FoV and Panorama</h2>
<p>Because the CAVE System is all around the user, it have a full Field of View and allows the user to look in any direction as fast as he wants, contrary to the HMD that need to recompute the scene at each move and that have a limited FoV.</p>
<h2 id="body-representation">Body representation</h2>
<p>The HMD uses a virtual body whereas the user can see himself in the CAVE system. This can be either a avantage or a disavantage depending on the use case:</p>
<ul>
<li>The body is realisitic and perfectly accurate</li>
<li>The occlusion cannot be changed, meaning the user will never be able to see something close or pick up an object for instance</li>
</ul>
<h2 id="progressive-refinment">Progressive Refinment</h2>
<p>The HMD basically needs to recompute a new scene at each frame, meaning that it will not be able to create a finer render. But if the user does not move it&rsquo;s head to much on a CAVE System, the image can be refined more and more.</p>
<p>This would be really intresting today, as with a bit of time, we can produce photorealistic results and we can use AI to upscale the other results in the mean time, as done in the blender viewport. This could be a real advantage for 3D artists that want to work in VR.</p>
<h2 id="collaboration">Collaboration</h2>
<p>Because the CAVE System is less intrusive, a small number of user can collaborate on the same device, whereas they would need to have one HMD each to collaborate.</p>
<h2 id="other-points">Other points</h2>
<p>The paper also pinpoints other differences, but I feel they are not up to date anymore, for instance the time needed to track the head position, the bad resolution of screens, etc.</p>
<h2 id="conclusion">Conclusion</h2>
<p>I think the CAVE System is an intresting alternative to HMD, especially for artists who needs to have something that can produce photorealistics renders and need to have a non intrusiove device for long sessions.</p>
<p>But it stills lacks the possibility to change the occlusion of the hands, which can be a real turndown for all the interactivity&hellip;</p>
<h1 id="milgram-continuum">Milgram Continuum</h1>
<p>The CAVE System is more of an Augmented Virtuality, close to only virtual, as the only real element you interact with is your body.</p>
<h2 id="with-more-people">With more people</h2>
<p>When you do collaboration, it tends more towards reality for two reasons:</p>
<ul>
<li>You have another real human being in the virtual world.</li>
<li>The System alone cannot track multiple users at the same time, meaning other users will not have the same presence
<ul>
<li>With shuttered glasses, the System can quickly alternate between users. But it still can break illusion to notice the screen blinking.</li>
</ul>
</li>
</ul>
<p>This makes for a really intresting tool for collaboration as often the main issue with collaborating in VR is that you lose the reality and natural facial expressions of the other users.</p>
]]></content></item><item><title>VRFails</title><link>https://rrulyx.github.io/HugoBlog/en/posts/vrfails/</link><pubDate>Tue, 20 Feb 2024 14:31:05 +0100</pubDate><guid>https://rrulyx.github.io/HugoBlog/en/posts/vrfails/</guid><description>While using VR, you could have different scenarios that could lead to collisions, let&amp;rsquo;s dive into two of them:
Colision with static objects In VR, the virtual world does not have the same collisisons as the real world. This can lead to issues, especially in small spaces, where a position empty in VR but have an object in the real world.
To solve this issue, I propose two solutions :</description><content type="html"><![CDATA[<p>While using VR, you could have different scenarios that could lead to collisions, let&rsquo;s dive into two of them:</p>
<h1 id="colision-with-static-objects">Colision with static objects</h1>
<p>In VR, the virtual world does not have the same collisisons as the real world. This can lead to issues, especially in small spaces, where a position empty in VR but have an object in the real world.</p>
<p>To solve this issue, I propose two solutions :</p>
<h2 id="virtual-doubles">Virtual doubles</h2>
<p>One option is to create virtual doubles of every object in the real world.</p>
<p><img src="/HugoBlog/Posts/VRFails/virtualDouble.jpeg" alt="Virtual Doubles"></p>
<p>Each object in the real world have a virtual double and the user tends to avoid them.</p>
<p>There is several issues, one being that it requires a lot of assets to be created, the other being that it is hard to have an open space, for instance a meadow would be hard to create.</p>
<h2 id="see-through">See through</h2>
<p>When you move to close to an object, the object appears in your headset to avoid collision.</p>
<p>This is a good option, but it can break the immersion when you see the real object. Furthermore, if the player is doing a fast movement, he will not have enough time to react.</p>
<h1 id="loss-of-balance">Loss of balance</h1>
<p>For various purposes, you might want to have a different camera orientation on the virtual world than on the real world. This can lead the inner ear to belost and create motion sickness or loss of balance. Let&rsquo;s see how one could fix this:</p>
<h2 id="a-rolling-ball">A rolling ball</h2>
<p>One could use a ball that replicates the motion from the virtual camera in the real world, like <a href="https://newatlas.com/vr/eight360-nova-vr-simulator-ball/">New Atals</a> does.</p>
<p><img src="/HugoBlog/Posts/VRFails/360.png" alt="Eight360">
<em>The Eight360 Nova</em></p>
<p>But this is really expensive and not everybody can have access to this.</p>
<h2 id="remaining-seated">Remaining seated</h2>
<p>Another option is simply to ask the player to sit down before having a big rotation. This could be done by having a virtual double of the player real chair, or by asking him yo sit on the floor.</p>
]]></content></item><item><title>Implementation</title><link>https://rrulyx.github.io/HugoBlog/en/posts/implementation/</link><pubDate>Mon, 29 Jan 2024 12:48:53 +0100</pubDate><guid>https://rrulyx.github.io/HugoBlog/en/posts/implementation/</guid><description>The concept I implemented what I explained in the Elevator Pitch and added a few things that I will explain in more details.
Implementation Selection For the Selection, I took a ray from the player to the controller and multiplied it to have the virtual hand position. To select an object, you press the index trigger.
I had to make two choices:
Where on the player would be the origin ?</description><content type="html"><![CDATA[<p><img src="/HugoBlog/Posts/Implementation/Arms.png" alt="Arms"></p>
<h1 id="the-concept">The concept</h1>
<p>I implemented what I explained in the
<a href="https://rrulyx.github.io/HugoBlog/en/posts/elevatorpitch/">Elevator Pitch</a>
and added a few things that I will explain in more details.</p>
<h1 id="implementation">Implementation</h1>
<h2 id="selection">Selection</h2>
<p>For the Selection, I took a ray from the player to the controller and multiplied it to have the virtual hand position. To select an object, you press the index trigger.</p>
<p>I had to make two choices:</p>
<ul>
<li>Where on the player would be the origin ?</li>
</ul>
<p>I tried several approaches and found out that the neck was the most intuitive, as when you move you arm parallel to the ground, your virtual arm is parallel to the ground.</p>
<ul>
<li>How many times will I multiply the arm length ?</li>
</ul>
<p>At first I felt like 3 times would be realistic, but it turns out that the SuperMarket assets are really big and therefore, I needed to make it at least 15 times to have something usable. I modified this value a few times with the rest of the implementation and had a coefficient of 20 in the end.</p>
<h3 id="improvement">Improvement</h3>
<p>I had an issue with this box:</p>
<p><img src="/HugoBlog/Posts/Implementation/Box.png" alt="Arms"></p>
<p>On the first tests of this method, i realised this box was really hard to select beacause it is really thin and your virtual hand moves to fast. Therefore, I added a new fonctionnality: When you press the palm of your hand, you move your virtual hand more slowly, allowing for much more precision.</p>
<p>This is how I implemented it:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cs" data-lang="cs"><span class="line"><span class="cl"><span class="n">HandPosLeft</span> <span class="p">=</span> <span class="p">(</span><span class="n">HandPosLeft</span> <span class="p">-</span> <span class="n">PrecisePositionLeft</span><span class="p">)</span> <span class="p">/</span> <span class="n">coef</span> <span class="p">+</span> <span class="n">PrecisePositionLeft</span><span class="p">;</span>
</span></span></code></pre></div><p>Where <code>HandPosLeft</code> is the position of the virtual hand as described earlier, <code>PrecisePositionLeft</code> is the anchored position and  <code>coef</code> is the coefficient of the extension of the virtual arm.</p>
<p>But when I released the trigger, the virtual arm will teleport to the position it is supposed to be in. This was breaking the immersion, so instead, I added a smoothing function:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cs" data-lang="cs"><span class="line"><span class="cl"><span class="n">HandPosLeft</span> <span class="p">=</span> <span class="n">previousPos</span> <span class="p">+</span> <span class="n">smoothCoef</span> <span class="p">*</span> <span class="p">(</span><span class="n">HandPosLeft</span> <span class="p">-</span> <span class="n">previousPos</span><span class="p">);</span>
</span></span></code></pre></div><p>This allows to reach the correct position quickly but be more fluid with a <code>smoothCoef</code> of <code>0.2</code>.</p>
<h2 id="movement">Movement</h2>
<p><img src="/HugoBlog/Posts/ElevatorPitch/movement.jpeg" alt="Movement"></p>
<p>I first need to detect when the virtual hand is underground so I can place the player in the movement mode. This is done with this piece of code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cs" data-lang="cs"><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="n">playerOnGround</span> <span class="p">&amp;&amp;</span> <span class="n">HandPosRight</span><span class="p">.</span><span class="n">y</span> <span class="p">&lt;</span> <span class="m">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">OnGroundRight</span> <span class="p">=</span> <span class="kc">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">playerOnGround</span> <span class="p">=</span> <span class="kc">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">rightPos</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Vector3</span><span class="p">(</span><span class="n">HandPosRight</span><span class="p">.</span><span class="n">x</span><span class="p">,</span> <span class="m">0.0f</span><span class="p">,</span> <span class="n">HandPosRight</span><span class="p">.</span><span class="n">z</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Note that I will only do this if the player is on the ground, because otherwise, I need the player to move around the anchored hand.</p>
<p>Then, this is how I move the player:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cs" data-lang="cs"><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="n">OnGroundRight</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">CameraRig</span><span class="p">.</span><span class="n">transform</span><span class="p">.</span><span class="n">position</span> <span class="p">-=</span> <span class="p">(</span><span class="n">HandPosRight</span> <span class="p">-</span> <span class="n">rightPos</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>To detect if the player is on the ground, I compare is current <code>y</code> position to the <code>y</code> position he had when the app began.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cs" data-lang="cs"><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(!</span> <span class="n">playerOnGround</span> <span class="p">&amp;&amp;</span> <span class="n">CameraRig</span><span class="p">.</span><span class="n">transform</span><span class="p">.</span><span class="n">position</span><span class="p">.</span><span class="n">y</span> <span class="p">&lt;</span> <span class="n">baseY</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">CameraRig</span><span class="p">.</span><span class="n">transform</span><span class="p">.</span><span class="n">position</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Vector3</span><span class="p">(</span><span class="n">CameraRig</span><span class="p">.</span><span class="n">transform</span><span class="p">.</span><span class="n">position</span><span class="p">.</span><span class="n">x</span><span class="p">,</span> <span class="n">baseY</span><span class="p">,</span> <span class="n">CameraRig</span><span class="p">.</span><span class="n">transform</span><span class="p">.</span><span class="n">position</span><span class="p">.</span><span class="n">z</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">OnGroundRight</span> <span class="p">=</span> <span class="kc">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">playerOnGround</span> <span class="p">=</span> <span class="kc">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="improvement-1">Improvement</h3>
<p>This transition was really long:</p>
<p><img src="/HugoBlog/Posts/Implementation/Far.png" alt="Movement"></p>
<p>So i added a simple feature to extend the arms length by a factor 2 when you press a button.</p>
<h2 id="both-hands">Both Hands</h2>
<p>I wanted to have both hands able to do the same tasks, but juste adding the same code to the left hand added some complications: when the right hand is anchored and the left hand goes underground, the code would have both hands anchored and would create strange behaviours because it  would try to move the player in two different directions at the same time.</p>
<p>To fix this issue, I created three different states:</p>
<ul>
<li>Right Hand anchored</li>
<li>Left Hand anchored</li>
<li>No Hand anchored</li>
</ul>
<p>These three states are exclusive, therefore when the left hand goes underground, the right hand is released and there is no strange behaviours anymore.</p>
<h1 id="evaluation">Evaluation</h1>
<p>I had two friends come over to test my implementation. User 0 is me, User 1 is a friend that never really played a video game and User 2 is a friend that already played some games in VR.</p>
<p>I asked them to rank from 0 to 10:</p>
<ul>
<li>How easy was it to learn and use the commands ?</li>
<li>Did you felt present on the virtual environment ?</li>
<li>How much fun did you have ?</li>
</ul>
<table>
<thead>
<tr>
<th>User</th>
<th>Time</th>
<th>Errors</th>
<th></th>
<th>Easy</th>
<th>Presence</th>
<th>Fun</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>88s</td>
<td>4</td>
<td></td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td>1</td>
<td>131s</td>
<td>3</td>
<td></td>
<td>9</td>
<td>7</td>
<td>10</td>
</tr>
<tr>
<td>0</td>
<td>120s</td>
<td>7</td>
<td></td>
<td>7</td>
<td>8</td>
<td>10</td>
</tr>
</tbody>
</table>
<h2 id="comments">Comments</h2>
<p>I realised several things while they were playing:</p>
<ul>
<li>They did not use at all the precision feature, they always prefered to usse both hands: one to move themselves loosely to the object and the other one to make precision movements and select it.</li>
<li>They always had one arm on the ground, they almost never touched the ground and when they had to, they were slower and less precise.</li>
<li>Each time they had to move, they would extend the arms just for how funny the movement is, even if it would take longer and lead to less precision.</li>
<li>The movement create a lot of motion sickness, which makes it almost unusable for more than 5 minutes&hellip;</li>
</ul>
<h1 id="results">Results</h1>
<p>Here is the GitHub <a href="https://github.com/Rrulyx/IGD301SuperMarket">link</a>.</p>
<p>Here is a video of the result:

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube.com/embed/o71jHK08mG4" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe>
</div>
</p>
]]></content></item><item><title>Elevator Pitch</title><link>https://rrulyx.github.io/HugoBlog/en/posts/elevatorpitch/</link><pubDate>Sun, 14 Jan 2024 12:13:27 +0100</pubDate><guid>https://rrulyx.github.io/HugoBlog/en/posts/elevatorpitch/</guid><description>Doctor Octopus I decided to immplement the method where have extendable arm. There is two differents parts to implement: one being the movement, the other being the selection. Let&amp;rsquo;s see how I intent on implementing, both of them.
Selection The idea behid the selection is that you have a virtual double of your arm that is longer than your original arm, but but points in the same direction.
To implement this, I will look at the vector from the head to the controller and multiply it by some amount to have the position of the virtual hand.</description><content type="html"><![CDATA[<h1 id="doctor-octopus">Doctor Octopus</h1>
<p><img src="/HugoBlog/Posts/3Techniques/Octopus.png" alt="Octopus"></p>
<p>I decided to immplement the method where have extendable arm. There is two differents parts to implement: one being the movement, the other being the selection.
Let&rsquo;s see how I intent on implementing, both of them.</p>
<h2 id="selection">Selection</h2>
<p>The idea behid the selection is that you have a virtual double of your arm that is longer than your original arm, but but points in the same direction.</p>
<p><img src="/HugoBlog/Posts/ElevatorPitch/extendArm.jpeg" alt="Extend arms"></p>
<p>To implement this, I will look at the vector from the head to the controller and multiply it by some amount to have the position of the virtual hand. Then to select objects, you will be able to just grab them with a button on the controler.</p>
<h2 id="movement">Movement</h2>
<p>To move, you just push your arm toward the ground and it will anchor in place, letting you orbit around the position of the virtual hand.</p>
<p><img src="/HugoBlog/Posts/ElevatorPitch/movement.jpeg" alt="Movement"></p>
<p>To implement this, I will check if the virtual hand is underground.
If so, I will snap it back to the ground and move the player by the same amount I had to move the hand.
Once the hand anchored, every frame, I will move the player and the virtual hand by the same amount in order to have the virtual hand placed at the anchor point.
When the player goes down again and move past a certain threshold, I will free the anchor to let the virtual hand move as normal.</p>
<h2 id="both-at-the-same-time">Both at the same time</h2>
<p>I think the selection technique will reveal its true potential once the player is confident enough to select and lmove at the same time, one with each handmaking it both precise and fast.</p>
<p><img src="/HugoBlog/Posts/ElevatorPitch/both.jpeg" alt="Both"></p>
]]></content></item><item><title>3 Selection Pitch</title><link>https://rrulyx.github.io/HugoBlog/en/posts/3techniques/</link><pubDate>Wed, 03 Jan 2024 15:41:07 +0100</pubDate><guid>https://rrulyx.github.io/HugoBlog/en/posts/3techniques/</guid><description>Scalable Market Core idea You move and scale a supermarket around you.
This is inspired by the hologram map in avatar, except you can scale it as big as you want and make it go all arround you.
Manipulation You move in the scene by pinching with your hands as you would do on a tactile screen with your fingers. Then you move the supermarket arround you up to the point where the desired object is right in front of you, and here you just grab it</description><content type="html"><![CDATA[<h1 id="scalable-market">Scalable Market</h1>
<h3 id="core-idea">Core idea</h3>
<p>You move and scale a supermarket around you.</p>
<p>This is inspired by the <a href="https://www.youtube.com/watch?v=tMDneicBizU">hologram map</a> in avatar, except you can scale it as big as you want and make it go all arround you.</p>
<h3 id="manipulation">Manipulation</h3>
<p><img src="/HugoBlog/Posts/3Techniques/ScalableMarket.png" alt="Scalable Market"></p>
<p>You move in the scene by pinching with your hands as you would do on a tactile screen with your fingers. Then you move the supermarket arround you up to the point where the desired object is right in front of you, and here you just grab it</p>
<h4 id="goals">Goals</h4>
<ul>
<li>Being more efficient</li>
<li>Having a better spatial understanding</li>
</ul>
<h4 id="evaluation">Evaluation</h4>
<ul>
<li>Time</li>
<li>Supermarket memory</li>
</ul>
<h4 id="drawbacks">Drawbacks</h4>
<ul>
<li>Only single player</li>
</ul>
<h1 id="doctor-octopus">Doctor Octopus</h1>
<h3 id="core-idea-1">Core idea</h3>
<p>You have expandable arms to grab AND move</p>
<p>This is inspired by <a href="https://www.youtube.com/watch?v=d8GYAO8bRFU&amp;t=113s">Otto Octavius</a> in spiderman.</p>
<h3 id="manipulation-1">Manipulation</h3>
<p><img src="/HugoBlog/Posts/3Techniques/Octopus.png" alt="Octopus"></p>
<p>You have a second pair of arms which is an extension of your actual arms, but scaled up. Because they are bigger, you can push toward the ground and it will make you go up in the air. This way, you can move in the supermarket to get close to the product with one arm, and select it with the other one.</p>
<h4 id="goals-1">Goals</h4>
<ul>
<li>Move less</li>
<li>Movement in funnier</li>
</ul>
<h4 id="evaluation-1">Evaluation</h4>
<ul>
<li>Time</li>
<li>Mastery of the environment (presence + memory of the Supermarket)</li>
</ul>
<h4 id="drawbacks-1">Drawbacks</h4>
<ul>
<li>Hard to master</li>
<li>Can lead to motion sickness</li>
</ul>
<h1 id="magic-powers">Magic powers</h1>
<h3 id="core-idea-2">Core idea</h3>
<p>You launch objects in the air then slice through mid air to select them, making a mess in the process</p>
<p>This is inspired by the video games <a href="https://www.youtube.com/watch?v=qMkJf9N4bz4&amp;t=52s">Control</a> and <a href="https://www.youtube.com/watch?v=COFeh96bfWI">Fruit Ninja</a>. Control for how you launch objects in the air and Fruit Ninja for how you select them once in the air.</p>
<h3 id="manipulation-2">Manipulation</h3>
<p><img src="/HugoBlog/Posts/3Techniques/Magic.png" alt="Magic"></p>
<p>You make a upward movement with your arms to lift object off the ground, then tyhy will magically float in the air, where you can select them by slicing through them with your hand or with a katana that you will have in your hand (to be able to reach further)</p>
<h4 id="goals-2">Goals</h4>
<ul>
<li>Feel powerful</li>
<li>Have fun</li>
</ul>
<h4 id="evaluation-2">Evaluation</h4>
<ul>
<li>Accuracy (Objects close together will be blown apart and easier to select in the air)</li>
</ul>
<h4 id="drawbacks-2">Drawbacks</h4>
<ul>
<li>Lots of actions and coordination needed to pickup one item</li>
</ul>
]]></content></item><item><title>Roll a Ball VR</title><link>https://rrulyx.github.io/HugoBlog/en/posts/rollaballvr/</link><pubDate>Wed, 27 Dec 2023 13:44:49 +0100</pubDate><guid>https://rrulyx.github.io/HugoBlog/en/posts/rollaballvr/</guid><description>Configuration Switching to PC I am usually working on a MacBook Air, so I followed the instruction of the TD up to the point where I had to download the Oculus application, which do not exist for MacOS&amp;hellip;
So I had to redo all of the configuration on my fix PC which I did not use for a while, installing Unity, visual studio, etc. Fortunatelly, I just had to follow the same steps as for my Mac installation and it was quick enough as I already knew how to do it.</description><content type="html"><![CDATA[<h1 id="configuration">Configuration</h1>
<h2 id="switching-to-pc">Switching to PC</h2>
<p>I am usually working on a MacBook Air, so I followed the instruction of the TD up to the point where I had to download the Oculus application, which do not exist for MacOS&hellip;</p>
<p>So I had to redo all of the configuration on my fix PC which I did not use for a while, installing Unity, visual studio, etc. Fortunatelly, I just had to follow the same steps as for my Mac installation and it was quick enough as I already knew how to do it.</p>
<p>I also reinstalled Hugo on my PC to make to be easier to make the blog from here. I actually had an issue to connect to the git server beacause I was logged to another old git account on my PC. If you ever find yourself in the same situation, you need to go to know that windows is handling the credentials, therefore you need to go to <code>control panel &gt; user accounts &gt; credential manager &gt; Windows credentials &gt; Generic credentials</code> and change the git user from here&hellip;</p>
<h2 id="using-the-quest">Using the Quest</h2>
<p>Installing everything on the quest was straightforward, I just followed the instructions from the TD. Just note that the Oculus integration is now obsolete, but I decided to stick with it anyway, which proved to work. I then connected the Quest to my PC with the Oculus app, and I managed to make a basic scene rendered in the headset, but as soon as I quit play mode, the headset made a blackscreen and it was impossible to make it work again&hellip;</p>
<p>Therefore, I decided to buy a Quest 2, that I wanted to buy anyway, and I connected it via AirLink, which worked really well.</p>
<h2 id="roll-a-ball-asset">Roll a ball asset</h2>
<p>I actually had to create a package from my mac and wetransfer it to my PC so I could use it. I then just had to import it.</p>
<h1 id="making-it-vr">Making it VR</h1>
<p>To make it work in VR, I had to change the behaviour of the scene. The main idea is to attach a script to the hands anchors that will handle the button press. If the handle collides with the roll a ball obect and the user press the button, we attach their positions together.</p>
<p>In order to make this work, I had to introduce new colliders and to make two different layers that do not interact with one another so that the handle does not impact the game, just the rotation and the gravity.</p>
<p><img src="/HugoBlog/Posts/RollABallVR/RollVR.png" alt="My Scene">
<em>It was hard to take a screenshot while being in VR, sorry for the bad quality</em></p>
]]></content></item><item><title>Roll A Ball Tutorial</title><link>https://rrulyx.github.io/HugoBlog/en/posts/rollaball/</link><pubDate>Mon, 27 Nov 2023 11:22:44 +0100</pubDate><guid>https://rrulyx.github.io/HugoBlog/en/posts/rollaball/</guid><description>Setup I followed the Unity tutorial named Roll a Ball. It was a simple Unity project to understand the basics of making a game.
Most of the setup is basic, most of the work is already done for you, you just need to open a template. The only issue is that I was not able to create a URP (Univesal Render Pipeline) project because my version of Unity is too old, so I created a more basic 3D poject.</description><content type="html"><![CDATA[<h1 id="setup">Setup</h1>
<p>I followed the Unity tutorial named <a href="https://learn.unity.com/project/roll-a-ball">Roll a Ball</a>. It was a simple Unity project to understand the basics of making a game.</p>
<p>Most of the setup is basic, most of the work is already done for you, you just need to open a template. The only issue is that I was not able to create a URP (Univesal Render Pipeline) project because my version of Unity is too old, so I created a more basic 3D poject. It worked exactly the same, except for the look of the scene editor:</p>
<p><img src="/HugoBlog/Posts/RollABall/URP_Sphere.png" alt="URP Scene">
<em>URP Scene</em></p>
<p><img src="/HugoBlog/Posts/RollABall/My_Sphere.png" alt="My Scene">
<em>My Scene</em></p>
<h1 id="first-scripts">First scripts</h1>
<p>The first script is really basic, you just need to take the player input and add a force to the ball. All of the physics is done via the rigidBody, you do not have a lot of control, but it is really simple to use.</p>
<p>The next script waas just for the camera to follow the ball, really simple too.</p>
<h1 id="collectibles">Collectibles</h1>
<p>The collectbles are more interesting. What you do is you create a prefab that stores the material, the script, etc, and then you just instantiate multiple of them.</p>
<p>To create make the player able to collect them, we add a collider and a tag that will make the collision with the player run the <code>OnTriggerEnter(Collider other)</code> method. We deactivate the pick up via the player code on collision.</p>
<p>Furthermore, to optimize a bit the progrtam, we add a rigidbody to the prefab so that unity considers it as a <strong>Kinematic</strong> object instead of a <strong>static</strong> one, which speed up the computations when moving (which is relevant here because pickups spin at each frame).</p>
<p><img src="/HugoBlog/Posts/RollABall/Prefab.png" alt="Prefab">
<em>Collectible Prefab</em></p>
<h1 id="build">Build</h1>
<p>To share thus game, you need to build it, otherwise the player needs to have unity installed on his device to be able to run it. Building is really simple in unity, you just chse a few settings, your platform and hit build. Here, we decided to make the game run in a window instead of full screen as it does not have a menu to close it yet.</p>
<p>In MacOS, every gamefile is grouped into a single <code>.app</code> file which can be runned by itself</p>
<p><img src="/HugoBlog/Posts/RollABall/Build.png" alt="Game">
<em>My game running as a standalone</em></p>
]]></content></item><item><title>B: Unity setup</title><link>https://rrulyx.github.io/HugoBlog/en/posts/b_unity/</link><pubDate>Mon, 20 Nov 2023 14:48:51 +0100</pubDate><guid>https://rrulyx.github.io/HugoBlog/en/posts/b_unity/</guid><description>Setup of Unity I already had Unity installed from another course. Because I did not want to use too much space, I decided to stay on the same version and just add the necessary modules for this course:
Once the modules installed, I created a new 3D project. The first thing i did was changing the background color while on play mode because I made too much unsaved changes on my previous project (every modifiations made while in project mode are discarded).</description><content type="html"><![CDATA[<h1 id="setup-of-unity">Setup of Unity</h1>
<p>I already had Unity installed from another course. Because I did not want to use too much space, I decided to stay on the same version and just add the necessary modules for this course:</p>
<p><img src="/HugoBlog/Posts/B_unity/installModules.png" alt="Modules"></p>
<p>Once the modules installed, I created a new 3D project. The first thing i did was changing the background color while on play mode because I made too much unsaved changes on my previous project (every modifiations made while in project mode are discarded). This is done via the <code>Preferences &gt; Colors &gt; Playmode tint</code>:</p>
<p><img src="/HugoBlog/Posts/B_unity/playmodeTint.png" alt="Home Page"></p>
<p>You can immediately say when you are in play mode:</p>
<p><img src="/HugoBlog/Posts/B_unity/edit.png" alt="Home Page"></p>
<p><img src="/HugoBlog/Posts/B_unity/play.png" alt="Home Page"></p>
]]></content></item><item><title>A: Blog setup</title><link>https://rrulyx.github.io/HugoBlog/en/posts/a_hugo/</link><pubDate>Mon, 20 Nov 2023 11:47:48 +0100</pubDate><guid>https://rrulyx.github.io/HugoBlog/en/posts/a_hugo/</guid><description>Quick Start For the blog, I followed the Quick start tutorial of HUGO.
I changed the theme for the theme for the Hermit-V2. Therefore, I had to make a little setup in the hugo.toml configuration file.
Deployment I deployed the site to GitHub by following the Host on GitHub Pages tutorial.
This is my first website !</description><content type="html"><![CDATA[<h2 id="quick-start">Quick Start</h2>
<p>For the blog, I followed the <a href="https://gohugo.io/getting-started/quick-start/">Quick start</a> tutorial of HUGO.</p>
<p>I changed the theme for the theme for the <a href="https://themes.gohugo.io/themes/hermit-v2/">Hermit-V2</a>. Therefore, I had to make a little setup in the <code>hugo.toml</code> configuration file.</p>
<p><img src="/HugoBlog/Posts/A_hugo/Home.png" alt="Home Page"></p>
<h2 id="deployment">Deployment</h2>
<p>I deployed the site to GitHub by following the <a href="https://gohugo.io/hosting-and-deployment/hosting-on-github/">Host on GitHub Pages</a> tutorial.</p>
<p>This is my first website !</p>
]]></content></item></channel></rss>