How do you organise a party in Space?
Anyway, I finished my innovations project! It’s a procedural solar system generator. Here’s a video of the program being used:
I started out wanting to make at the very least a procedural planet generator. A big part of the project was research and after finding a tonne of data about planets that NASA and various other brilliant organisations have gathered the program evolved into a much more technical project, almost a stylised visualisation of data. I took averages of exoplanets that have been discovered and used that to influence a weighted average for the type, mass and orbital axis of planets in the program.
You can play the program in browser here:
I’m pretty happy with it in the end. The planets are made using additive or multiplicative forms of Perlin noise, the stars use fBm and most of the planets use some type of multifractal noise. The gas giants use multifractal noise which is multiplied by a sine function of the y axis, to give the effect of bands of clouds. The orbits are all calculated based on the distance from the star and mass (which are weighted randomly), with slight variations in eccentricity to get varying elliptical orbits, the orbital speeds are then calculated based on the distance and mass. The colour of the planets is done in a shader. It’s a surface shader which calculates the difference each surface point is from the centre of the planet. Using a number of user defined levels it will assign a colour value to a certain height and linearly interpolate between each colour to fade through each. A water level can be added at the lowest level. There’s also rim lighting in the shader, the power and colour of this can be tweaked in the editor to make certain planets stand out in different ways. With all these tools in place I was free to design a number of presets for planet types, which are mostly here:
Then these are placed in the solar systems where each type’s category is met. So an ice giant will only appear in the furthest region if the mass is low enough, and a hot jupiter will only appear close to the star if the mass is high enough. Earth-like planets are aptly quite rare in the program, but do show up occasionally if the conditions are right.
And finally I packaged it into a program with user controls! In the program you can reset it whenever you like to get a new system, and you can fly around the scene and look anywhere, getting up close to the planets. There are controls to pause the orbits which makes it a lot easier to get near, the labels and orbits can be toggles on or off whenever as well. Here’s some screenshots from inside the application:
And finally the icon for the app. That’s it!