I’ve taken a break from blogging on optimization topics for a bit to get the Galaxy Generator into a releasable state - it is nowhere near feature complete, but the parts that I have done work fairly well. I’ve now got the rendering part somewhere close to my vision, and version 0.1.2 is available for download here for Android, Linux and Windows (Android will give some warnings about side-loading and self-signing, and Windows Defender will warn you about potential malware - there isn’t any).
The current version generates a 400 billion star galaxy and allows navigation around it, with some limited search capability. Currently there are only main sequence stars, no moons or planets, the star information is incomplete, and the controls and the search functionality need to be built out, but there is enough working to demonstrate that this is a workable idea, and many of the things to be added can be done incrementally (generating planets and moons will take some concentrated effort).
Developing this has been somewhat of a learning experience - I was already very experienced with C++, but had to learn about Vulkan, GLSL and native Android development to put this together. I’ve also had to develop some techniques to get the performance that I wanted - I’ve blogged about some of these, with more to come:
-
Rendering Stars: the CPU to GPU Pipeline describes making the star star rendering memory efficient on low end GPUs.
-
Fast Integer Poisson Random Variates for Procedural Generation (also released to Github) is use to generate Poisson Random Variates in a cross platform way using only integer operations.
-
Efficient Octree Storage and Traversal is important for dealing with some of the large dynamic range issues that arise in this project - from rendering stars deep inside the galactic core, to looking at the galaxy from the outside.
I’ve also released a library that I developed for this:
- Pseudo-Double is a relatively fast C and C++ 64 bit floating point library written using only integer operations for cross platform consistency.
This is very much a work in progress, and I’m intending to get a new snapshot out every few weeks. I’m currently working on building out the star search capability in the “Catalog” panel, then I want to start looking generating the chemical composition of stars, which will be important for modeling planets.