<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Beno Abarca</title>
    <description>The latest articles on Forem by Beno Abarca (@benoabarcas).</description>
    <link>https://forem.com/benoabarcas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2764559%2Fd3b6e8c2-fd82-41af-80b5-3e414beda75a.png</url>
      <title>Forem: Beno Abarca</title>
      <link>https://forem.com/benoabarcas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/benoabarcas"/>
    <language>en</language>
    <item>
      <title>"Why Does Realistic Gravity Feel Floaty in My Game?" – A Developer's Dilemma</title>
      <dc:creator>Beno Abarca</dc:creator>
      <pubDate>Sun, 26 Jan 2025 06:28:38 +0000</pubDate>
      <link>https://forem.com/benoabarcas/why-does-realistic-gravity-feel-floaty-in-my-game-a-developers-dilemma-55ni</link>
      <guid>https://forem.com/benoabarcas/why-does-realistic-gravity-feel-floaty-in-my-game-a-developers-dilemma-55ni</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;br&gt;
Recently, I came across a developer who was working on a game and asked:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I set the gravity in my game to 9.81 m/s² (Earth's gravity), but the falls feel way too floaty. Why does this happen? Is there something wrong with my implementation, or is it just how players perceive it?" — &lt;a href="https://x.com/Phantom_TheGame/status/1846162745961377942" rel="noopener noreferrer"&gt;@Phantom_TheGame&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a fascinating question because it touches on the intersection of physics, game design, and human perception. Let’s break it down.&lt;/p&gt;

&lt;p&gt;The user shared a video of a character jumping from a considerable height. While the height wasn't specified, the video indicated that the gravity applied was &lt;strong&gt;9.81 m/s²&lt;/strong&gt; (Earth's gravity) and that there were no other forces like air resistance. Using a video editor, I measured that the character took &lt;strong&gt;1.27 seconds&lt;/strong&gt; to fall. This led me to calculate the height and investigate why, despite being physically accurate, the fall felt "floaty."&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Does It Feel "Floaty"?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Calculating the Height: How High Was the Jump?&lt;/strong&gt;&lt;br&gt;
Since we know the &lt;a href="https://x.com/Phantom_TheGame/status/1846162745961377942" rel="noopener noreferrer"&gt;fall time&lt;/a&gt; 

&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;(t=1.27s)
 (t = 1.27s)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1.27&lt;/span&gt;&lt;span class="mord mathnormal"&gt;s&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 and the gravity 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;(g=9.81m2)
 (g = 9.81m^2)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;g&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;9.81&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;m&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 we can calculate the height 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;(h)
 (h)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;h&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 using the &lt;strong&gt;free-fall formula&lt;/strong&gt;: 
&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;h=12gt2
h = \frac{1}{2} g t^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;h&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;g&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
 For example, if a character falls &lt;strong&gt;7.9 meters&lt;/strong&gt;, the time 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;(t)
 (t)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 would be: 
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;t=2hg=2×7.99.81≈1.27 seconds
t = \sqrt{\frac{2h}{g}} = \sqrt{\frac{2 \times 7.9}{9.81}} \approx 1.27 \, \text{seconds}
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;t&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord sqrt"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span class="svg-align"&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;g&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mord mathnormal"&gt;h&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="hide-tail"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord sqrt"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span class="svg-align"&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;9.81&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;×&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;7.9&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="hide-tail"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;≈&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1.27&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord text"&gt;&lt;span class="mord"&gt;seconds&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
 This calculation is correct, so why does it feel "floaty"? The answer lies in how players perceive the fall, not in the physics itself.




&lt;h2&gt;
  
  
  2. Field of View (FOV) and Peripheral Vision
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;field of view (FOV)&lt;/strong&gt; in games plays a huge role in how players perceive movement. In real life, our FOV is around 180 degrees, but in games, it’s often much narrower (60-90 degrees). This narrow FOV distorts our perception of speed and depth.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Low FOV (60-70 degrees)&lt;/strong&gt;: Objects at the edges of the screen move slowly, making falls feel less intense.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;High FOV (90-110 degrees)&lt;/strong&gt;: Objects at the edges move faster, enhancing the sensation of speed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the game uses a low FOV, even a physically accurate fall can feel "floaty" because the player’s peripheral vision isn’t engaged.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Scale and Proportions
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;scale of objects&lt;/strong&gt; in the game world also affects perception. If the environment isn’t scaled realistically, players may misjudge distances and heights.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: If a character is 1.8 meters tall but doors are 3 meters high, a fall from 7.9 meters might feel shorter than it actually is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution&lt;/strong&gt;: Ensure consistent scaling. In Unity, for example, use 1 unit = 1 meter to maintain realism.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Lack of Resistances
&lt;/h2&gt;

&lt;p&gt;In real life, factors like air resistance affect how we experience a fall. In games, these resistances are often ignored to simplify physics calculations. Without them, falls can feel slower or "floaty."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: In Unity, even with gravity set to 9.81 m/s², objects can seem to fall more slowly due to the absence of air resistance or friction.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Camera Movement and Perspective
&lt;/h2&gt;

&lt;p&gt;The way the camera moves during a fall can also influence perception. If the camera follows the character too smoothly or slowly, it can make the fall feel less impactful.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tip&lt;/strong&gt;: Add slight camera shakes or adjust the camera’s follow speed to make falls feel more dynamic.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Recommendations for Fixing "Floaty" Gravity
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1. Adjust the Field of View (FOV)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recommendation&lt;/strong&gt;: Increase the FOV to 90-110 degrees. This makes movements feel faster and more immersive (while falling).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: In first-person games, a higher FOV can make falls feel more intense.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Use Realistic Scaling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recommendation&lt;/strong&gt;: Ensure objects are scaled realistically. For example, if a character is 1.8 meters tall, doors should be around 2 meters high.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: In Unity or Godot, use 1 unit = 1 meter for consistency.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Add Resistances
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recommendation&lt;/strong&gt;: Incorporate air resistance or other forces to make falls feel more realistic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: In Unreal Engine, you can tweak physics settings to add drag or increase gravity slightly (e.g., 2.8 times the default value).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Tweak Camera Behavior
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Recommendation: Adjust the camera to make falls feel more dynamic. For example, add slight &lt;strong&gt;camera shakes&lt;/strong&gt; during the fall or &lt;strong&gt;speed up&lt;/strong&gt; the &lt;strong&gt;camera’s follow movement&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Test with Real-World References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recommendation&lt;/strong&gt;: Compare your game’s falls to real-world examples. For instance, record a video of someone jumping from a height and compare it to your game’s fall animation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Even with gravity set to a physically accurate 9.81 m/s², falls in games can feel "floaty" due to factors like FOV, scaling, lack of resistances, and camera behavior. By adjusting these elements, you can create a more immersive and realistic experience for players.&lt;/p&gt;




&lt;h2&gt;
  
  
  Q:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Have you encountered the problem of “floating” gravity in video games? Do you have any tips or corrections to share?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.unity3d.com/Manual/PhysicsSection.html" rel="noopener noreferrer"&gt;Unity Documentation - Manual: Physics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nature.com/articles/nrn1804" rel="noopener noreferrer"&gt;Self-motion-induced eye movements: effects on visual acuity and navigation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>unity3d</category>
      <category>godot</category>
      <category>gamedev</category>
      <category>godotengine</category>
    </item>
  </channel>
</rss>
