On Subnautica's flaws in celestial mechanics

Sun

The whole game takes place on a small patch of an oceanic planet, a fictive one called 4546B. This name suggests it is the biggest (or first discovered) planet of a star, fictive too, called 4546. (To respect the current nomenclature, the name should actually be written 4546 b. However, the action takes place in a somewhat distant future, for which the nomenclature could just be completely different.) The planet has two moons, a gray one and a red one. You crash-land on the planet and try to survive there and escape. It takes 20 to 40 hours to finish the game. Time is accelerated in the game, like in many other computer games, so one or several day/night cycles can be experienced by the gamer during a typical game session, which I imagine ranges from 20mn to 2h. From the player's location, the sun appears to rise and set at opposite points on the horizon and goes through the zenith (the point at the vertical of the player). It describes what is called a great circle on the celestial sphere.
In-game gorgeous sunset, red moon in upper right

By the way, why does our Earth's Sun appear to move in the sky in a cycle of 24h? No… not because Earth orbits around the sun (the Earth takes 365 days and a few hours to do that, it does not match, by far). The main reason is that the Earth spins around itself in approximately 23h56mn. (If you combine the spinning and the orbiting, you get that it takes 4mn more for the sun to loop in the sky than it takes for the earth to spin, see the Wikipedia article Sidereal time).

Motion of the Sun and stars as viewed from a point on Earth
(simplified)
Projection on a sky sphere.

Opaque:

Days in the year from northern summer solstice:

Latitude from -90° to 90°:

If the game's sun apparent motion is due to the same mechanics, this implies that the player is somewhere on or very close to the equator of 4546B. (The reason is that the planet's spin axis is perpendicular to the plane containing the sun's motion, so is horizontal with respect to the surface of the planet at the position of the player.)

We do not know if the planet spin axis is perpendicular to its orbit, or parallel, or oblique. On Earth there is a deviation of 23.44° from the perpendicular and the spin axis, responsible for there being warm and cold seasons (in this respect the influence of Earth's orbit ellipticity is weaker than the influence of the tilt, by several orders of magnitude). The only way to know about 4546B's spin axis tilt would be to stay long engouh so that the planet advances on a sizable portion of its orbit, but that is not simulated at all in the game. Anyway if there is a tilt and it is not too small, then we must be near one of the two equinox times of the year, where the sunrise and sunset occur at opposite points of the horizon and the daylight and nighttime have equal length.

An ingame day lasts 20 minutes of real time, of which 15 are in daylight and 5 are in the night. This is totally incompatible with its apparent trajectory in the sky, which is a great circle of which 180 degrees correspond to daylight and 180 degrees to nighttime; so their durations should be equal. Here, the sun suddenly goes 3 times faster when it is not visible… i.e. the planet spins 3x faster. The game designers may have made a confusion here: the reason why on Earth the daylight and nighttime are quite different during summer (or winter) is that the sun's apparent motion is on a circle that is not a great circle, i.e. it is offset by some amount from the viewer towards one of the apparent rotation poles of the sky, provided this pole does not lie on the horizon. For this you need the observer not to be situated near Earth's equator and you need not to be close to the two times in the year where Earth's spin axis is perpendicular to the line to the sun (rightfully called equinoxes). Here none of the two conditions are satisfied.

Clouds

Clouds are mainly a texture projected to a spherical mesh centered on the patch of land where the action takes place. The texture does not evolve but the sphere rotates around the player, around an axis that is vertical. This gives an illusion of wind pushing them if you do not look too long or if you do not look up. The texture is fixed: it does not evolve. To be honest that trick looks a bit cheap.

Gray moon, stars

In the game, the gray moon is only visible at night. It appears bigger than Earth's Moon appears from Earth, and seems to be permanently in a full moon phase. It never moves in the sky relative to the land (which is mostly… sea). This suggests mutual tidal locking of the planet w.r.t. the moon. Also the the moon never seems to rotate as seen from the player. This suggests tidal locking of the moon w.r.t. the planet. At the player's location, the gray moon is approximately 45 degrees left of the sunrise point and approximately of 45 degrees up from the horizon.


Closeup of the gray moon (cropped image)

Earth's Moon is tidally locked to the Earth, and it is always the same face that is oriented towards Earth, whatever the Moon phase is. Earth is not tidally locked to the Moon, since the Moon does not stay fixed in the sky: the Earth spinning gives it the same apparent motion as the sun and the stars and every other astronomical object: a rotation in the sky around an axis going nearly through the polar star; to which one adds its proper motion, an orbit of 28 days around the Earth. It takes approx 24h and 49mn for the Moon to come back approximately to where it was in the sky.

On 4546B, the gray moon and the planet would each be tidally locked to each other (a bit like Pluto and Charon). This could be an explanation of the absence of sea tides on 4546B (but the sun and the red moon should* still generate sea tides). After a while, I noticed that in fact, the stars never move either from the player's point of view. This is clearly a mistake. It would imply that planet 4546B does not spin on itself.

We can pardon the developers, who are skilled artists and/or programmers, not experts in celestial mechanics. I suppose they forgot or overlooked that the star field should rotate.

It is however sad that the gray moon is just painted on the background texture sphere, so does not experience phases (different lighting by the sun), unlike our familiar Moon, which does. It could be that the game designers believed that a moon that is fixed does not experience phases, the reasoning being that our Moon's phases are due to different positions in our sky. A flawed reasoning, though: if the sun of 4546B is farther from the planet than the gray moon (I do not believe they desinged a sun smaller that a moon), then when the sun is approximately behind this moon (an 8th of a day before sunset), it lights the back of the moon, and half a day later (8th of a day before sunrise), the sun illuminates the front, hence 8th of a day after sunset or 8th of a day after sunrise, the moon's phase should be somewhat in between (details depending on radii of orbits).

Anyway, this may give an alternate explanation of why the stars ended up not rotating around: in a night sky that is 3D-rendered as a texture painted on a big sphere, given the choice of painting the stars and moon once for all on the texture, to fix the moon in the sky the developers had to fix the sphere and its texture!

Red moon

The red moon looks great. It takes an enormous angle in the sky, which means it is either very big or very close. It has a 3D mesh and texture. It does experience phases. It turns around in the sky, leftwise (clockwise), grazing the horizon, completing its apparent motion after approximately half a day. It is closer than the gray moon, since in its motion it passes in front of it. It is not tidally locked to the planet so does not always present the same face towards the player. It may bear a thin atmosphere (the game loading screen suggests that), though it is hard to see any atmosphere there in game. It spins in circles maintaining a constant apparent diameter and a constant angle w.r.t. the horizon (I did not notice this last fact before I read on the Internet). A bit of more observation reveals that its apparent motion coincides with rotating the moon's center w.r.t. an vertical axis while not spinning the moon's surface (all this is relative to the player). It performs 2 cycles and 3/4th, during one game's day.

It implies that the spin axis of planet 4546B is vertical at the player's location, i.e. that the player is at or very close to the rotation pole of the planet. It contradicts both of the previous hypotheses on the spinning of planet 4546B. Let us develop this more.

What if planet 4546B is in fact a moon?

Besides the terminology problem, this would not solve much. Assuming that the red moon is in fact a huge planet and that its apparent motion it is due to 4546B orbiting it does not work: it would have to rise and set, unlike what we see (a never-setting red sphere). The gray moon would have to pass in front of it, or could not be tidally locked to 4546B. The sun's motion would still make no sense, or you need a white dwarf (but I've not checked that it could work).

On geometry

Since the red moon spans around 37° in the sky, its actual size and positions are related as on the figures below.

As one can see, the red moon is very close to the planet (and even to the player) or very big, or both.

Because of gravity, they have to orbit their common center of mass (ignoring the influence of the gray moon, which will not help and can only complicate things), or they would crash. If sufficiently far, the red moon is bigger than the planet and the planet orbits it (the center of mass will be in or close to the red moon). If sufficiently close, the red moon is small and orbits the planet. Otherwise, they both dance around a point in between.

The apparent motion of the red moon in the sky is a combination of this orbit and of the spin of the planet on itself. Whatever size you choose for the red moon, there is no way its apparent motion would be like in the game.

Whatever solution you choose to correct the red moon's motion, and even if you choose circular orbits (they could be elliptical, notwithstanding the influence of the gray moon), its distance to the player is likely to vary as time passes (unless in particular finely tuned circumstances, which I have not tried to determine), in which case its apparent size in the sky will vary too. Fortunately 3D rendering engines and graphics card naturally render perspective correctly so there is no particular programming effort to make here. There could be a technical problem with the current frustrum limitations (ratio between farthest and closest renderable objects) on old graphics card but there are ways to circumvent that (render sky and land separately then combine them).

The Roche limit

Tidal forces can in fact rip a celestial body apart, if it comes too close to a parent body. The computation was first performed by Édouard Roche in 1848, and is called the Roche limit and the name's not a joke. It only depends on the radius of the parent body and the ratio of densitites of the two bodies. For a satellite of the Earth, the closest orbital radius possible varies between 1.5 and 5 times the radius of the Earth, depending on the body. We do not know the size or density of 4546B, but this could set a supplementary limit to the proximity of the red moon, if we want to respect the Roche limit. By luck, if the planet's density is sufficiently smaller than the moon's (by a factor around 3) then the Roche limit computation gives a result that is below the planet surface, in other words, there is no tearing of the moon whatever its distance is. If the planet is mostly made of rock and water/ice and the red moon of metal, we could be in this case. Note that in the game, we find a lot of metallic concretions that rapidly form, and the devs deliberately left this phenomenon as ``a mystery''. This seems to indicate presence of a lot of metal in the planet, not a good news concerning the Roche limit.

Magnetic north

At some point in the game you get a compass. Using it, you discover that the sunset occurs at approx 10 degrees left of North-East and the sunrise 180° from it as we already mentionned. That may look as a surpise but it fact this fact is OK. On the Earth, the geomagnetic axis is tilted by 9.6° from the rotation axis. Say, the planet has a magnetic field like the Earth and the compass really points to the (geo)magnetic North, nothing prevents this magnetic pole to be seriously offset from the geographic North. On the contrary this often happens for real planets (and stars).

Seasons

The game does not simulate seasons. Since the number of days for completing the game can in some situations be close to a hundred, this could start to matter. Anyway, we can assume either that the orbit of the planet around the sun is much longer than an Earth year, or that there is no tilt of the rotation axis of the planet w.r.t. the perpendicular to its orbit around the sun.

Designer's point of view

Let us try and guess what happened.

The developpers spent time desinging and populating the ocean and had a basic sky. A good deal of the action takes place in shallow waters, especially near the beginning. So you need a day/night cycle, not too slow (whence a time acceleration factor), and a sky-like looking sky.

To make things simple (possibly complexifying it later or in subsequent versions of the game) there will be no weather except from the day/night cycles, and no seasons as the action should all take place within say 60 in-game days.

So let us add a sun. Sun sets and raises. It shall be warm, say summer. The Earth Sun raises in the North-East in summer, so let us put sunrise in North-East. For its motion, the simplest is then to rotate the sun during the day along a horizontal axis that is perpendicular to the sunrise direction. (A stack of mistakes. What's the plural of “ouch”?)

Since it is summer, night is short, say 3x shorter than daylight. So when the sun sets after making 180° of the circle it traces in the sky in 15mn, it disappears, and comes back 5mn later, no problem, easy to program. (Deeply absurd, planet suddenly spins 3x faster when night falls on the patch of land where the ship crashed.)

Blue sky + sun = dull, so let us add clouds. No time to program them, so they be a rotating texture on a sphere, this trick can fool someone for a while. (It tricked me and actually looks nice.)

Let us add stars in the night. (Why the devs never made the night sky sphere rotate is a mystery. It is a trivial task to program and the devs already know how to rotate the cloud sphere.)

Let us add a gray moon, and tidally lock the planet to it, to prevent tides. (Tides* add up so the other celestial bodies should create some.) So it won't move in the sky. So it won't experience phases, right? (Wrong!) So we can just paint it on the night sky sphere since we already fixed the stars, instead of adding a 3D mesh.

We now have got a pretty sky but it looks too much like on Earth. Let us add a Big Fiery red moon. (What about tides?) Or a small one, but very close so it looks big. It shall turn around and never set so we put it at some elevation and rotate its position vector around the vertical axis as time goes. Neat. (And in total incompatibility with physics, or with the previous orbital considerations, or both.) And if we let it not spin at all we get to see all its sides, so all its texture map.

Screenshots look gorgeous. We've now a neat alien-yet-realistic looking sky for a great sci-fi game, most of whose action takes place underwater, so that is enough time spent in the air, a lot of work awaits in the deeps.

Subnautica's sky, projected on a sphere
(not completely faithful)

Opaque:

The game

The game is a lot of fun and is beautiful. The gameplay is original: one of the few games not about killing things (except that you often eat fish). I enjoyed it very much and recommend it. Buy it; play it.

Sky alternative

In the following page I show a possible alternative sky model for the game, still not physically possible, yet with less mistakes and still retaining some features of the original sky.

Notes

*About tides: sea tides are a more complex phenomenon than usually explained. In particular, the solid part (ground and the rest) of a planet like Earth or 4546B also experiences tides. Planets are way more flexible that you could think (whatever their composition and internal temperature: this is because of their size; no material is strong enough to resist the deformation). On Earth's ocean, the sea tide is in some place noticeably bigger than the ground tide, in other places just barely.
Maybe under some finely tuned circumstances and/or resonnances the sea and ground of 4546B would either oscillate almost in phase and with almost the same amplitude, or the amplitudes could both be small. Note that, comparing the situation of a small moon very close with a big moon far away, if the apparent angle in the sky is the same then the tidal force is the same or comparable, so this is not a parameter that we could vary to help.