Are you by any chance patroning @pspeed and his MOSS project - looks like you’re working on some of the same stuff Looks very cool - keep it up.
Nah, unfortunately.
Thanks, there will be more to show in 2021
Sometimes a stupid picture is still really cool looking:
I think probably if I explained it, it might ruin the magic.
One of the problems I’ve had as I try to transition the map generation to ‘larger scale’ is that the map maker fractal editor I wrote 10+ years ago was focused on a 1024x1024 area. It was possible to change resolution and possible to reset the coordinates and look around a bit… but seeing the ‘whole world’ or larger parts of and drilling in to see detail was SUPER painful. And all scale is only notional and so it’s hard to see things anyway.
So the day before yesterday I started the foundation of a new fractal editor. This one has a JME visualization base to it so I can do more. Proper tile paging, multiple resolution layers, etc. Took me a while to get it bootstrapped but that’s what the above picture is. That one is just using some layered sine waves at different resolutions (which still makes a pretty interesting looking terrain.)
Here we have standard perlin noise with the period at 4 km.
The hexagons help me with scale. The larger hexagons are 3072 meters from center to center… which in Mythruna is about a days worth of travel (12.8 in-game hours if you travel during the day only). (The smaller hexagons are just 1024 because it’s convenient.) As I try to gauge the size of land features in relation to meaningful metrics, knowing how long it takes to cross something is important. Now if I want a desert that takes 3 days to cross, I know I have it or not.
The different colors show the different resolution layers. Eventually I plan to remove that but it does also provide some nice depth.
Here we are zoomed in closer to see the same ship in the picture from the earlier comment:
I have the option to pick several different avatars but a sailing ship seems the best so far… it’s large and easy to see. The ship is 40 meters long and you can kind of instantly get a feel for the scale of this perlin noise resolution.
Here is the fractal that I’ve been using for my desert-based far-terrain demos:
The sailing ship is just a little speck next to that rocky mountain in the middle there. That’s also the same mountain that was next to the big town in the desert fly-over demos.
In the video where I flew from one town to the other at night, these were the towns:
There’s still a million things to do to make this a “real app” but progress is progress. I have some immediate goals that do not require it to be a ‘good app’ and so I just hack things in for the moment. I may only get as far as adding a scripting console and porting the rest of my PG Maps fractal code to the new system. That will be enough to start building the new Mythruna engine which is my real short term goal.
Edit: note about the 30 FPS frame rate that shows up in some pics… that’s because this is a window in a swing app and the frame rate is limited to 30.
That is amazing. The scale is just impressive as hell.
The mountains are even detailed at that distance.
I guessed as much. I have done 11 million triangles like that but for it to be as much of an expanse as you have is dam impressive. Terrain splatting 4 1024x1024 areas leaves alot to be desired now I can see and is not feasible except for small areas.
I am forced into splatting just to get something to look at but its obvious it pays to know about the methods you show.
Just when you think you know something you learn you know nothing.
Real life is about 3 km per hour for walk right? Are the avatars in your game smaller than humans or do they walk slower or what is the reasoning here?
question is: how long is game hour
Ah, yes - thats the real question.
A Mythruna hour is an Earth minute.
Walk speed is 4 m/sec earth time… which means you can travel 4m * 60 in a Mythruna minute.
…240 meters/mythruna-hour. 12 hours would be 2880 meters… but that’s not a very convenient number and Mythruna daylight hours are slightly longer than night hours. So in a 24 minute period in Earth time, ~13 minutes is spent from early dawn to late dusk.
In terms of earth time, you walk quite a bit faster than 3km/hour. But that’s how games go… walking = jogging, running = ‘faster than a cheeta’.
I figure a “walking day” is a pretty good measure of ‘human distance’ for the game. On the one hand, a player flat-out traveling is probably going to run as much as possible. On the other hand, terrain, mobs, interesting things to see… all factor into total speed.
I’ve done a LOT of terrain related work in my life. Some of my earliest real world software development experience was writing software to design microwave and cellular networks. (Back in 1995 or so… my pre-Java days… though we did end up writing a Java-based version of the tools.)
Everything is a tradeoff, though. I was joking with my wife that when I started on this fractal editor thing I thought it would only take me 6-8 hours because I’ve done various types of paging so many times before. But it took several days because every time is a little different. (Never mind how long I spent getting the hexagon overlays the right size and then getting them to line up across tiles… stupid hexagons being a non 1:1 aspect. :))
This particular tech was optimized to “get it done” as fast as possible. I was supposed to spend my 16 day holiday starting on the new MOSS-based Mythruna engine. Here I am with 4 days left and I still haven’t gotten to start yet (Tomorrow maybe?).
For a game, this approach is super overkill. Each quad is a 512x512 mesh with a 512x512 texture. (The mesh is shared for every tile.) That’s crazy-ridiculous fidelity most of the time as it’s totally wasted. Even at reasonable distances in this app, that’s almost a vertex per pixel.
I also cheated when you zoom in. I still render the lower res tiles and just drop them down X units. Each layer pushes the next one down. That means when the camera is zoomed in enough to see the red-colored tiles, there are 4-5 layers of tiles being rendered underneath it. Wasteful but FAST to implement.
Another trick I have in my favor is that the ‘math’ used to construct the terrain is a continuous function. At any time, I can ask for the elevation at any point. So generating low res tiles is as easy as just sampling less often… and because of the nature of the fractals it mostly works ok. Any hires detail will be completely lost.
This is as opposed to proper terrain pyramid building which starts with the highest resolution and uses some filtering to produce lower resolutions. Some details can be kept in that case depending on the filtering.
Still, it works.
The struggle between “realism” and “what’s interesting in a game” is real.
Playing with rough coast lines and climate models. It’s tough to keep in mind that because each of those hexagons is ~1 days travel, the average player will never visit more than a tiny fraction of these maps. I have some specific game requirements and this meets all of them but it’s going to be so many steps before I can actually see what it looks like in game that it makes me nervous.
Fortunately it’s all mutable.
I would love to be in the position of adding content to maps that large, which it looks like you are about to be doing. Just starting in one tiny part of the map, with good content, would give the players an idea of the scale of this and keep them wanting more.
Thats what I call a hook. This is the kind of thing that keeps players paying, for decades, when paired with game content.
Do you have a plan for producing game content or are you going to pick a small area and expand outward from that?
As much as possible will be generated randomly. Towns, roads, abandoned monastery, dungeons, etc… all from a set of algorithms.
Edit:
Note that all of the stuff I’ve shown so far will be open sourced when ready. (Right now it’s available as an early access perk for my patrons.) The APIs for all the things are still in flux and I don’t want a support burden yet… but as things stabilize, I will move them to a public repository.
Edit 2: Without belaboring the point too much, I made a video of my progress and to explain a little more about that these screen shots have meant up to now.