Gamasutra: The Art & Business of Making Gamesspacer
Games Demystified: Super Mario Galaxy
View All     RSS
October 24, 2014
arrowPress Releases
October 24, 2014
PR Newswire
View All

If you enjoy reading this site, you might also want to check out these UBM Tech sites:

Games Demystified: Super Mario Galaxy

March 27, 2008 Article Start Page 1 of 4 Next

Welcome to the first article in a new Gamasutra series called Games Demystified. In this series I'll be deconstructing games with unique or distinguishing mechanics that may have left some folks scratching their heads, including reproducing effects with code samples, examining -- just how did they accomplish that? The first game we'll be covering is Super Mario Galaxy for the Nintendo Wii.

Upon release, Super Mario Galaxy enchanted the gaming community because it allowed gamers to walk upside down and inside out -- all while feeling completely intuitive. Especially geeky message boards and blogs have lit up with people attempting to apply real-world physics equations for gravity to each of the game's tiny planetoids.

Obviously, real world physics have a place in today's games. However, they take a backseat to psychology when it comes to making real world gameplay. In reality, mass distorts the fabric of time and space causing gravity, the force that keeps us stuck to Earth.

People such as Isaac Newton have studied and derived a great deal about gravity, but no one actually knows the true mechanics behind the force. The important thing for the game is that we expect to get pulled toward planets -- and in fact, Mario does get pulled to each and every strangely shaped planetoid in the game.

Normally, gravity is calculated as a force between two objects that is directly proportional to the product of their respective masses and inversely proportional to the square of the distance from the objects' centers.

Force of Gravity = Gravitational Constant * ( ( mass1 * mass2 ) / distance2)

To simplify, gravity follows the inverse square law.

Intensity of Gravity = 1 / Distance2

This means that as an object moves closer to a planet, the gravity between them
increases dramatically due to the exponential effect applied by distance. Conversely, as an object moves away from a planet the gravity between them weakens very quickly.

Traditionally, the force of gravity is applied using the radius of the more massive body. For instance, if we were to calculate the gravity holding a person to Earth we'd plug the Earth's radius into the above equation. Additionally, if the mass is great enough to hold a person down, the celestial body will be round. This is where reality and Super Mario Galaxy differ.

In Galaxy, players are pulled toward each and every arbitrarily shaped planetoid they encounter. At this point all real world physics equations break down and tell us nothing about the gravity in the game, which as in most cases is a trick. Much like the magicians in The Prestige, game developers are always attempting to one up each other with new tricks. As we all know, Nintendo stole the show with its latest.

To accomplish this "trick", the developers use the surface normals of whatever planetoid Mario inhabits to keep him running and jumping happily along. This is how gravity is distributed through completely irregular bodies. A surface normal is a ray or unit vector that runs perpendicular to a plane.

In the illustration above we can see an arrow pointing up from a plane, the arrow represents the surface normal of a plane that points straight up. If we're using a Y-up right handed coordinate system, that normal would be a (0, 1, 0) which means it's not pointing along the x or z axes at all and that the full length of the vector is all in the up direction.

A unit vector always has a length of 1, which is then distributed amongst the x, y, and z directions. The longer one direction is the shorter the others must become.

Article Start Page 1 of 4 Next

Related Jobs

Red 5 Studios
Red 5 Studios — Orange County, California, United States

Graphics Programmer
Red 5 Studios
Red 5 Studios — Orange County, California, United States

Gameplay Programmer
Gearbox Software
Gearbox Software — Plano, Texas, United States

Server Programmer
Forio — San Francisco, California, United States

Web Application Developer Team Lead


Soren Nowak
profile image
Funny to see this article now. Three weeks ago we gave up on getting this to work in a HL2 Source mod. We ended up making a flat world instead (se my website link for the mod profile page on

Dan Mitchell
profile image
Excellent article. I cannot wait till the next on Very informative, and educational. I love seeing articles like this, since it helps cut down time on dev time/ research thus allowing others sections of the dev project more time, allowing for even more innovation.

Giuseppe Navarria
profile image
Nice article so far, maybe the tecnique you explained is a bit rought, for example movement will be smoother with normals interpolation, also a simple raycast will lead you in a sea of gameplay glitches...

PS Next time, set your example NOT at 640x480 fullscreen, or it will crash for users without a prehistoric monitor supporting that low resolution, I had to download the source and recompile it running on a window to see your stuff!

Zaphod Plumbo
profile image
I used a technique very similar to this in Shockwave3D a couple of years back to create my freeware game Microbop (

If it can work in Shockwave3D, it can work anywhere! ;-)

Robert Dowling
profile image
This was a great little read. I'm no engineer myself, but it may cut a little research time off my coding partner's schedule.

paul grenfell
profile image
Good article. Looking forwards to more in the series :)

Now check out Serious Sam's gravity handling. They did it using zones (defined in the level editor) and it works very well. It is also easier to implement well since you don't need to worry about any smoothing. I suspect that SMG may well have used a hybrid of these two approaches.

Jose Teran
profile image
Great article; a nice approach for understanding the world of physics in games.

This will help us to acquire some more basic knowledge about gravity and it's use on games, which are very demanding right now.

Keep up the good work, and I want to read the next ones.

Marc Melvin
profile image
I am a little annoyed that I'm just coming across this article today, but I'm also relieved that my method for doing similar logic in a game I was building for Dream.Build.Play using XNA is right on target with the logic used by a previously successful game title.

The only problem I ran into using this method was that snapping an object instantly to a new surface normal sometimes caused its ray to hit the polygon that it was previously using to calculate its up vector (when moving slowly along a "downward" slope, that is). I ended up scrapping this method because of the jittery back and forth effect that it was causing, eventually spiraling the object out of control into oblivion... maybe if I had LERPed the rotation slowly as mentioned in this article, I wouldn't have had the problems that I did.

Oh well... live and learn. Good article! :)

Tom nguyent
profile image
I love mario brother, I used to play all day when i was a kid...missed them :)

Benjamin Bandt-Horn
profile image
For any developers out there who would like to implement this really easily, try out:

World Physics System ~ [1]

The World Physics System is a celestial body & point gravity scripting interface for Unity, intended as a replacement for the stock downward gravity. WPS can be used to simulate planetary orbits, body-body attraction, or "snowballing" effects. You may use it to create spherical worlds "out-of-the-box," but World Physics System is implemented robustly and is lightweight, providing you complete freedom in expressing your point gravitation creativity, complex and repulsive forces, allowing you to use the system as a subcomponent for other effects, such as spells, powerups, or goal-based Artificial Intelligences for NPC's. With the WPS, the sky is truly the limit!

[Available from the Unity Asset Store, here.][2]

[More information, here.][3]