On Subnautica's flaws in celestial mechanics
SunThe 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.
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).
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.
CloudsClouds 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, starsIn 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 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.
- First, this would imply there is no rotation of the gray moon around the planet, or of the planet around the gray moon. Because of gravity, the gray moon and the planet would just rush to each other and crash. For instance if you place Earth and the Moon in space at their current positions but with Moon's relative speed to Earth's cancelled, it would only take 7 days for the Moon to crash on Earth. The presence of a red moon in between does not save us.
- Second this contradicts the spin rate and axis deduced from the sun's motion. (Unless the sun is so small an light that it orbits 4546B… but there is no known such stars, and I strongly doubt the game designers wanted that.) Hence, unlike on Earth, the apparent motion of the sun would be entirely due to the orbital motion of the planet. And this would be an absurdly short orbit. Maybe possible if this sun is a white dwarf. And an elliptical orbit of the planet would solve the problem of night and day of different lengths while the sun makes describes a great circle in the sky. But we're not out of trouble: such a proximity would perturb moon orbits and prevent their existence. The apparent brightness would have to increase noticeably near sunset and sunrise. There would either be enormous tidal waves on the oceanic world, or it would be tidally locked to the sun, so spin on itself (so no apparent motion of the sun + starfield should have apparent motion). And a white dwarf would look more different from Earth's Sun than it does in the game.
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 moonThe 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.
- If planet 4546B does not spin, then the red moon orbits a point in space which is not between the planet and the gray moon, but there is no other visible massive body that could shift the system's barycenter to such a point.
- If planet 4546B's rotation axis is horizontal relative to the player (implied by the sun's motion) then the red moon's apparent motion should include a component due to this rotation, and hence be completely different (and more complicated).
- If planet 4546B's rotation axis is vertical relative to the player, then the sun's motion is wrong and the star should move. There would be a curious resonnance between the self-spinning rates of the planet, the self-spinning rate of the red moon and the orbit of the red moon, so that after a full turn in the sky the same face appears again (some resonnances are stable, others are not, I did not check this one).
- If planet 4546B's rotation axis is oblique, nothing matches.
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 geometrySince 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 limitTidal 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 northAt 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).
SeasonsThe 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.