Intro Hello, I'm HeroesGrave

HeroesGrave

New Member
  • Name: Jeremy "HeroesGrave" Simpson
  • Social: Github
  • From: New Zealand
  • Skills / Tools:
    • 6 years of Java
    • 4 years of Rust
    • 1-2 years of a few other languages (Python, Kotlin, Javascript)
    • ~6 years using OpenGL (both through LWJGL and low-level C bindings)
    • The majority of my programming experience is in game development but I occasionally dabble in other fields when something takes my interest.
    • Amateur pixel artist and composer
    • Currently in my second year of studies for a BSc, majoring in Compsci and (Pure) Mathematics.
  • Found via: I came across the project several years ago (2012/13) while I was relatively unexperienced in Java/LWJGL. More recently I "rediscovered" it through GSOC.
  • Interests:
    • Procedural Generation
    • Simulation-based gameplay mechanics (creating emergent gameplay)
    • Game design theory (mainly focused on things like balancing, difficulty scaling, and other problems that can be approached with math)
For GSOC, I've been looking into https://github.com/MovingBlocks/Terasology/issues/943, specifically with the focus on expanding the complexity of noise functions used to create interesting features without specifically having to seed them in (making features descriptive rather than prescriptive). A secondary focus could be on applying a similar approach to biomes where instead of selecting a biome and modifying the terrain/distributing plants based on that choice, the individual characteristics/features of biomes are themselves selected via noise functions (for example, using temperature/humidity/elevation maps). The idea would be that biomes become a continuous spectrum rather than a discrete "this part is a forest and this part is a desert" sort of thing.

However, as mentioned in the issue, the project idea is quite an old one and I'm not sure if the outcome of such a proposal would provide much additional value when there are already several other world generation modules. I'm looking for a little bit of feedback on this idea (and another one below) before I decide what to write up for my proposal.

My second idea (which is closer to Cervator's suggestion on the github issue), is to take the idea of "feature curves" (splines layed out across the terrain that control the elevation/slope both on the curve and to either side. Depending on the parameters these can define anything from hills to cliffs to riverbeds, etc.) and use them to generate terrain features instead of noise. However, I'm not entirely sure of the practicality of this approach (over concerns for both performance and whether the algorithm can actually produce good results without human input). It would certainly be an interesting problem to tackle but all the unanswered questions about this approach make it hard to write a concrete proposal for. On the other hand, it might make a good stretch goal for the first idea but of course that depends on whether the first idea is good enough to stand alone.
 

manu3d

Active Member
Contributor
Architecture
Welcome aboard @HeroesGrave!

As far as I know Terasology still don't match the visual complexity and variety of Minecraft (i.e. we don't have overhangs), but even if we did we'd want to do better. ;) So, the github issue might be old, but it is still relevant.

One thread that might be interesting to you is here: https://forum.terasology.org/threads/terrain-deformers.1552/#post-13630

Another thing I'd suggest is to look in some detail into some software outside of Terasology that does terrain generation. The usually don't do it in realtime, you wouldn't be able to use all their features, but they might still be able to give you some ideas on how to improve on what we currently have.

Finally, you might want to look into the proceedings of professional conferences such as the Game Developers Conference and Siggraph to see what's out there. Even some research on Gamasutra.com or other specialized website will reel in quite a bit of information on the topic!
 

Cervator

Org Co-Founder & Project Lead
Contributor
Design
Logistics
SpecOps
So the overhangs thing is a bit of a guilty sin as we did actually have them in the legacy perlin generator, but when we introduced the new world facets system nobody got around to writing a newly updated overhangs type facet... :(

That particular issue is about as old, yeah, and I tried to come up with a bit more of a modern description. Am hoping maybe @msteiger can chime in somewhere, or @Josharias or @Skaldarnar or ... we've had quite a few world gen types over the years :)

As far as generation time, phases, and performance that has come up quite a bit in a different GSOC proposal on supporting multiple worlds in a game, and reworking the create game flow to have some new stages like universe setup, individual world configuration, and a "Pregeneration" phase where you could show the user a pretty world generation process unfold before their eyes akin to how Dwarf Fortress does it (it can take a while for world gen to finish there but at least you can play observer while it is running)

So I wouldn't necessarily worry too much about performance, at least not where the hit could be taken before starting a game or asynchronously by offloading some work to a pregeneration type phase, even at a distance from the player so it'll be cheaper to finish when you get near it. That could also help provide more options for rendering low detail terrain in the distance

Biome is an interesting topic for sure, and we talked about it some for @Nihal Singh's GSOC project last year, and I think @l0ftyWhizZ has done some GSOC prepwork making Gooeys of different type spawn based on biome. We have actually dedicated an entire short to store a biome id per-block - which might be overkill, but does raise some interesting options, which probably could be found here and there in the forum :)

Lots more on the topic, but also lots of topics to reply to! Hop on chat sometime, brainstorming there can be nice, especially if we then update something in the forum after
 

HeroesGrave

New Member
I've finished writing up my proposal draft. Link

The idea of pregenerating some properties of a particular area before actually generating the chunk is an interesting idea and I'd definitely want to try it out as a method for creating the more curve-shaped features (cliffs, ridges, cracks, etc.). Blending between those features and purely noise-based terrain should be possible without too much difficulty (in theory) but I guess it remains to be seen whether it would look convincing.
 

Skaldarnar

Development Lead
Contributor
Art
World
SpecOps
Hej and welcome :)

As you might have noticed we have the foundation for generating worlds based on the combination of different noise functions in place, and a lot of (high school) students have toyed around with it over the last editions of Google Code-In. One interesting aspect for the current system might be to have an in-depth look on what can be improved in terms of usability (and possibly also functionality). You might want to work through the World Generation Tutorial to get a feeling for the current state and note down everything that bugs you ;)

Another aspect that got mentioned is to create _feature descriptions_ that get rendered in a later step. Some time ago I tried to re-create the distinct look of the Saxon Switzerland. Providing more convenience layers for handling the noise functions and presenting a general _programming model_ for achieving such results with our world gen would be also of interest to me.



Finally, many generative systems work half-automatically. In research projects as well as professional applications user input is required in many cases. Providing the technical foundation for such user interaction during world generation could be another project idea. In lack of a better example consider that the user is asked to move some tectonic plates around to create a distinc world shape, or mark settlement areas on a map, etc.
And finally, to get completely crazy - would it be possible to train a world generator by using machine learning somehow? Let a human judge the quality of the generated world, or feed it with training data of hand-designed worlds (I think there are a bunch out there in the MC universe....)

Disclaimer: I wrote all that before having a look at your proposal ^^
 

HeroesGrave

New Member
I've already played around with the world generation tutorial a bit (screenshot below) and didn't find anything particularly annoying. Generating structures that can span multiple chunks is an obvious pain point but at the same time there's not a whole lot that can be done about it due to how the world is infinite.

All the tools needed for terrain generation seem to be there, it's just that they're very basic. Part of my proposal covers the addition of new types for combining/modifying noise functions in ways that would commonly see use in more complex terrain generators (probably the most immediately useful example is blending two noise functions together using a third noise function to determine the contribution of each).

Although I haven't mentioned it in the proposal yet (I probably ought to include it at least as a stretch goal), this would open up the possibility for the json-configuration of the noise functions used to generate surface height, rather than requiring the development of an entirely new world generator just for modifying that one facet.
 

Attachments

Cervator

Org Co-Founder & Project Lead
Contributor
Design
Logistics
SpecOps

Skaldarnar

Development Lead
Contributor
Art
World
SpecOps
I just looked through your proposal, it looks really solid! There are a bunch of comments you can use to further improve it here and there, but for the last days before the deadline I would like to advise you to fork the project and try to submit a small PR for a bug fix or minor feature implementation.
Strictly spoken this is not necessary, but it will definitely make a positive impression if we know that you are all set up and already (at least a litte bit) familiar with the code base ;)
 
Top