Current work and new nebulae
Duke: I continued working on ray-marched nebulae. WARNING: many screenshots!
Experimented with various distribution functions, scattering functions and step optimization methods. SpaceEngineer delayed integration of new nebulae into SE code due to other work in the engine, so I switched to experiments with 3D clouds, star surface and water. Upgrading water rendering in SE is quite simple – probably we could do that for 0.981. Just better procedural/fractal “waves” animation (water surface still flat, but solar reflection will look better).
SpaceEngineer: I continued working on many tasks described in the previous blog post. Integrating the new planet classification required serious changes in the planetary system generation code. I did almost scientific research by building a physically-based grid of models of planetary internal structure. SE now models planets composed of 4 main substances: iron, silicates, carbides, and water/ice. The code generates the abundances of these substances in the planet while generating the system, then calculates the planet’s radius using the model grid. This is important because a planet’s radius is quite sensitive to its composition: a pure iron planet is two times smaller than a pure water planet of the same mass. Similar work is required for gas giants. In previous versions, SpaceEngine also used the theoretical mass-radius equation for planets, but there were just 5 pre-defined models with gradually increasing water amount and decreased iron amount (and no carbon/carbides, this is one of the reasons why SE still had no carbon planets). With 0.981, SE will be the first game engine which generates physically-accurate planets. The new model is also enables modelling of the planet’s internal structure: it is possible to calculate at which radius the iron core transitions into the silicate mantle, and what temperature, pressure and density are there. I am not sure this will be in 0.981 though, a lot of side work is needed there (including rendering of planetary layers and an interface for it). All of this is real science: I’ve read plenty of scientific articles over the past week, taken equations, graphs and data tables from them, and wrote code which performs interpolation in the model grid. The funny thing is that this code could be used for real scientific work: to predict a planet’s radius, mass or bulk composition, if one of them is unknown. This already works in SE for catalog planets, though some debugging and further development are needed.
Enough science, lets see screenshots!