In the previous post I described how I learned about the cube/sphere geometry so that I could put a square grid on a sphere. I ended up spending too much time on that, because it turns out the mapping from cube to sphere wasn't as useful as I had thought. This happens to me sometimes, where I find something fascinating, spend a lot of time on it, and it turns out to be not that important.

As the final step in learning how to work with square tiles on a sphere, I wanted to make something on the sphere. I decided to make a dungeon map.

Dungeon map on a sphere
Dungeon map on a sphere

Despite my interest in procedural generation, I've never made a dungeon map before. I wasn't sure how hard it would be to work with the cube/sphere geometry so I decided to keep the dungeon part of it simple. I started out making a dungeon on a single square face of the cube, and was hoping I could easily extend it to work on the entire cube. It worked out but not without some missteps. I think geometric dungeon-making techniques like binary space partitioning may be more difficult in the cube/sphere map than graph-based techniques like Delaunay triangulation or graph grammars, but it's hard to know until someone tries them.

I wrote my notes about making a planet-shaped dungeon.

Thoughts:

  • extending a square grid to a sphere is not too hard, as long as the player is mostly looking at the grid and not the sphere
  • the 8 corners of the cube are problematic, and it's easiest if you can have the player avoid them
  • some algorithms will extend to the cube/sphere much more easily than others
  • sometimes instead of modifying an algorithm to work on the cube/sphere, it's easier to have an algorithm pretend it's on a flat surface and then "fold" the coordinates onto the next side of the cube

I think that's it for this little exploration. It was fun and I learned a lot but I'm ready to move on to another project.

Labels: , ,

3 comments:

Nathan wrote at October 08, 2019 1:43 PM

I wonder you could implement grids on a negatively curved surface. Klein's Quartic Curve is a good example of a finite negatively curved surface. In a nutshell, it's an arrangement of heptagons that repeats itself with the topology of a three-hole torus.

Dan Allen wrote at October 10, 2019 9:55 AM

Am I correct in that it seems that your true map orientation will change when traversing a corner? For example if you start heading north and continue on same direction, you will turn east or west (depending on corner), then eventually head south. This could create some confusion for orienting maps and I think the game would need to have a rotate orientation control. This could be interesting and create a more interesting world exploration that is more natural. (To someone without a compass.)

Amit wrote at October 11, 2019 9:06 PM

@Unknown: this experiment is making me optimistic that there are ways to tile all sorts of surfaces! However I haven't looked into it closely.

@Dan: yes, unfortunately. In the demo you can try walking around a corner and you'll see that everything rotates 90° each time you make a full circle. This does seem potentially confusing. I think one option, if the tiles don't have to remain the same orientation, is to have them gradually rotate as you go around those corners. I haven't tried this.