Procedural Planetary Systems
Kalle Ever, Madis Kariler, Joosep Tenn
Links
Description
The aim of this project is to generate planetary systems. A planetary consists of a star or a star system, around which orbit non-stellar bodies (planets, moons). The generated systems should be relatively scientifically accurate: the scale of the stellar/non-stellar bodies and distances between bodies should be realistic and the time it takes for a body to complete the orbit should be dependent on the mass of the body it orbits.
Images
Final Report
The Topic
Two members from the team (Madis and Kalle) had taken an interest in playing a game called Elite: Dangerous, which features an excellent procedurally generated MIlky Way galaxy with around 400 billion star systems. That gave us an idea for the project and we decided to go through with it. But instead of generating a whole galaxy we decided to just generate individual systems.
Tools and Methods Used
Three.js was used for this project. In our procedural generation, we tried to be scientifically accurate as possible, however some trade-offs had to be made because of the scope of the project and some technical limitations. Some parts were also “improvised” as we couldn’t find any specific information about certain topics (for instance gas giants - do they need any special conditions to exist, or do they have to be a certain distance from the star).
Complications
- Choice of scale that we made initially might have not been the greatest. Currently 1 three.js unit corresponds to 1 Earth radius. In this scale however bodies of very small size can’t be seen (for instance moons the size of Phobos and Deimos)
- Orbit lines are not accurate on large orbits. Using circles with enough segments so that they would be accurate for large distances was taxing on the performance. Perhaps we should have made the count of segments depend on the radius?
- We actually wanted that the planets would show up as bright dots if they were too far from the camera to be seen, but couldn’t figure out a good, working solution.
- Scaling the orbits caused some bodies to end up inside other bodies. We made the orbits hold a certain minimum distance, which fixed the issue in most cases, but in systems that have non-stellar bodies orbiting the center of mass of binary stars the orbits can still sometimes end up inside the stars.
Contributions
- Madis - basic procedural generation, star halo, gas giants, ringed bodies
- Joosep - listing the bodies in the system in a menu, ability to regenerate a system, proper planet rotation, searching for materials/resources
- Kalle - Earth-likes/water worlds, rocky and metallic bodies, stars, binary systems, shaders, helper functions(eg to calculate orbit periods, star classes), bug fixing
References
- Harvard spectral classification
- Stellar evolution
- Mass-Luminosity relation of stellar bodies, stellar lifecycles
- Mass-Luminosity relation #2
- Stefan-Boltzmann law - Can be used to find a stars temperature based on it's luminosity and radius
- Circumstellar habitable zone