More Vanilla Biomes#85
Conversation
Added basic generation for a majoirty of the remaining overworld biomes.
Added a debug subcommand for viewing classifying conditions at a specific coordinate (/td-explore debug). Simplified logic in BiomeClassifier
|
You should check if you can integrate Lithostitched for biomes classification as mentionned here |
I totally agree! While I was working on the midland section last night, I made a note to myself that switching to data-driven generation would probably work best and look better, so I've actually been trying to work on that. I'm new to lithostitched, so I might take some time! |
This is just for rolling back in case I make a critical mistake. Nothing new is actually introduced.
|
I made it so every biome in the registry is capable of generating (sort of) I still need to find a way to make lithostitched and its tags control the placement of biomes, but I feel like this is a reasonable start. If anyone has any knowledge of lithostitched and is willing to offer some advice, I'd appreciate that a lot. |
|
Ok, so I'm not super knowledgeable about Minecraft modding, but I'm decent at reading code and documentation. This is what I think is needed to make Minecraft biomes in general work with TD in a way that more-or-less makes sense without a bunch of hand-coded rules, and support Lithostiched as well. If I'm off-base, someone should by all means correct me. I think what needs to be done is to hook Terrain Diffusion data (height, temperature, and rainfall) into the "temperature", "erosion", "continents" (continental-ness, whatever that means; distance from ocean?), and "vegetation" (humidity) noise routers. I believe that involves writing custom density functions that translate TD's real-world(ish) values to the (often, but not always) -1 to 1 range Minecraft expects. ("ridges", which apparently represents "weirdness", can likely use the MC internal map?) Some fudging will be needed for values that don't directly translate: "erosion" and "vegetation" are related to TD's rainfall, but not exactly the same, and I'm not sure what to do with "continents". Writing a handful of custom calculated density functions for special values used in BiomeClassifier such as e.g. slope may be worthwhile as well for use in Lithostiched. Lithostitched also has some internal density functions that may be useful. With that done, from what I can tell (and I might be missing something), writing Biome Injectors to do custom biome placement should be reasonably straightforward. No tags needed? Depending on how picky you and @xandergos wanted to be about placement, you may want to just let Minecraft's default placement do its thing and mainly use Lithostitched for special cases like the bare slope override at the bottom of BiomeClassifier.classify(). That may be the best approach regardless from a "make it work, then make it work better" standpoint. That is my thought process. I'm not sure if it's useful or helps with what you're looking for. Like I said, I may be wrong or misunderstanding things, and I encourage anyone more knowledgeable to correct me. |
THANK YOU THAT'S ACTUALLY EXACTLY WHAT I NEEDED |
|
Nice. Don’t work on rivers. You should avoid adding them for now. Or add them if you want but my changes will overwrite them anyway ^^' |
|
Those screenshots look gorgeous |
Using a mix of Vanilla and Diffusion density functions through Lithostitched Terrain Diffusion density functions currently return fallback values
|
Would it be possible to add some sort of biome scale option independent of terrain scale? This could allow for large terrain sizes but smaller biome sizes, making larger terrain sizes more survival friendly as you're able to find different biomes easier. |
|
@xandergos Out of curiosity, is there any specific reason that the world preset isn't just replacing the normal minecraft:overworld? It would be a lot easier for servers to load the mod if it were, and I don't image people would install the mod just to not use it. If not, I was thinking of making a switch in here for easier testing. |
|
I think the usual pattern for world gen mods is to require it to be manually set. But I'm not sure. If it's standard to replace the overworld directly I'd be fine with following that pattern. |
|
Well I'll leave that to you or someone else to decide, but I think this pull request is ready now! |
|
Alright, i'll take a look. There are some conflicts that need to be resolved though. |
|
Just from a quick look, it seems like temperature and vegetation don't use terrain diffusion at all, which seems a bit odd. Are the biomes just coming from plain noise, independent of any Terrain Diffusion outputs? There are 4 climate variables, which don't map perfectly to the noise variables, but it should map pretty cleanly at least to temperature and vegetation (probably derived from precipitation, maybe combined with temperature in some way) |
|
I was trying to get that working, but I ended up just creating a mess that wasn't working, so I had scrapped the idea. What I have right now was really just to get the biomes to at least work. I left some noise channels in the codec open to be expanded on since I didn't know how to handle it. I'd totally be open to letting someone collaborate on the pull request if anyone else knows what to do with it though! |
|
hmm well i probably wont want to merge this into the mod until the terrain diffusion climate is integrated more cleanly. Personally I'd much rather stick with vanilla biomes that make sense than have modded biomes that don't match the terrain at all. If I have some free time I'll look into it myself. |
|
So turns out I may have been a bit stupid lol. I realized I could just take a bunch of the old BiomeClassifier logic and reuse it. I should have the full thing working soon! |
No pressure don’t worry. I can take a look if you need it. |
Only temperature + vegetation BROKEN & INTENSE
|
This mod is really a tech demo of terrain diffusion, which was designed to push the limits of what's possible. It's not designed for optimal gameplay. Really, if it were designed for Minecraft from the ground up, I'd probably use it as more of a post-processing erosion filter, and then you can control the strength and choose which layer it is applied to. Condition it on the climate of the biomes for realism. It could probably be integrated directly into Terralith or other terrain generators that way and the biomes would be straightforward because they would be defined before the terrain. But I don't have the time to do this myself. |
Underground biomes often get assigned on the surface
|
There's still definitely a performance hit, but most of the crucial noise channels use climate and elevation from Terrain Diffusion now! Let me know what you think of it, and especially let me know if there's a way I can fix the problem of ocean and cave biomes generating on the surface. |
|
@xandergos Makes sense, I hope this gets really popular so someone will be inspired to apply this technology to more vanilla/modded biome terrain shapes! (I don't know nearly enough about coding to do this myself unfortunately, in fact I made an account specifically just to thank you, ask that, hang out, and help people who didn't read the readme that post questions about errors that are easily fixed lol) |
|
I will check your code and make the necessary modifications accordingly. We need those features for 2.3.0 I think but no pressure ^^ |
|
tbh this is not what I expected. I actually think you should first implement the missing biomes in the BiomeClassifier and use the four-channel options provided by the pipeline to populate the world with clean biomes transitions for people who do not use any custom terrain or biome generation mods. From there offer modding capabilities so modders can add their own logic and build an interface between added biomes and the four-channel options. Maybe Lithostitched was a bad idea.I started working on an idea. I might push my own PR or push into yours. I don’t know yet. |




Added basic generation for a majority of the remaining overworld biomes.
I'm still working on formatting most of the biomes I added in, I just needed to make sure they could generate first.