Planet sized ringworld experiments (and probably a game too)

Hello all. It’s been a while since I got into Godot much but I have come back to it by immediately making it do things it doesn’t really wanna do.

This is sort of a side-quest, relating to a game project I burned myself out on around 2018-2020 or so (on the unity engine that time) and have let sit ever since.

There’s a whole lot of backstory here, but for the moment I will just show what I am working on at present:

The environment here is a 1:1 scale ringworld megastructure with terrain all the way around. I’m not quite sure of the final size, but the current one here is an arbitrarily chosen 8200 km diameter and 230 km width. This is all done without any scale hacks because Godot is an absolute champ and lets me compile the engine to use 64-bit floating point, which jettisons an enormous amount of difficult that my past attempts to do enormous worlds like this had to deal with.

The current state of things is pretty rough, but promising… happy to have gotten the terrain engine working, it’s all multithreaded and pretty configurable. Still needs colors and textures. I already have the math for calculating the centrifupedibidibal acceleration and coriolis effect and such and rigidbodies do successfully interact with it, which is good news for future player vehicle antics

The sense of scale is a bit lost without the atmosphere shaders, which is something I am procrastinating on a bit because I’ve been burned by raymarching before and am wary… also, zipping around at 50 km/sec messes with the sense of scale as well. I’ve got a few constants I can change to configure the world size though so as this hopefully evolves into an actual game I can tweak that for usability.

As for that game part, it’s the same sort of laid-back gameplay loop as its predecessor project… explore + discover + relax + interior decorating of your ship… but this time I would like to do my best to put a lot of handcrafting into a single environment, instead of trying to orchestrate the generation of a whole procedural galaxy (did I mention I got burned out last time). In the interests of not making this post 804 paragraphs long, I won’t go on too much about that at the moment.

Next up I’m probably going to try getting terrain collision working… I need to look into whether HeightMapShape can be rotated or whether it’s mandated to be Y-up, which would be troublesome.

Anyway thank you for putting up with my babbling

1 Like

A quick update for tonight: getting a basic ocean surface working was easier than I thought. Using the material_override and material_overlay parameters of MeshInstance3D I can supply them with both a terrain material and an ocean material, using the same mesh to draw both:

The terrain compute routine keeps track of highest and lowest values, which means I can selectively assign override/overlay depending on whether the given terrain chunk is fully below or fully above sea level, so it doesn’t have to draw each mesh twice unless it absolutely needs to.

(As evidence of the lack of atmosphere hurting the sense of scale - this island is about 50% larger than the Big Island of Hawaii…)