I’ve been working on our landscape for some time now, having made a lot of revisions, and going through yet another one. So I’ll refrain from screenshots. I’ve been looking around for good content on handling landscapes, and found a bunch of good stuff, but I’ve found a fair lack of in depth content on proper pipelines, optimisation, and maintaining scale. There are holes, and I think it’s high time they got patched.
I’ll compile a full list of all the info and whatnot for someone to wiki and start putting in my own thoughts from working a lot with procedurals like World Machine and Terragen. As well as troubleshooting for all the glitches I ran into.
But there’s also a pressing concern. What’s the best practices for scale? I mean generating big landscapes and still maintaining smaller detail. I saw Epic’s showcase, which was Epic, pun intended, and out of curiousity, started using their GDC content as a base to make mine, mostly as filler till I generate my procedural replacement when we’ve locked down the art style for the game.
This has led to a problem. The material is insane. I can’t see it’s full size zoomed fully out. It’s just a giant web of spaghetti, and it’s not even that sophisticated. It just has adaptive tesselation, normal maps, layered/masked textures and full parametric modification and so on. But the issue is that because I’m using one material to paint a map that needs a fair bit of variation, I’m way over the 16 texture sample cap, which seems to be fine, but raises the point. If my map is… um maybe 60,000 units along the diagonal which makes it… 600 metres wide? What’s a Skyrim scale map going to look like for material painting from a single material? And how long are you willing to wait for shader compiles to finish? Mine are already up to 45 minutes, and I’m not even close to done painting. My computer isn’t weak either. And that’s with one landscape block…
There’s two things that brought up for me. One, is there a better way to make landscapes that doesn’t require obscenely large materials? And two. Is it viable to use a single material for the entire world. Or blocks of that. We’re moving into next gen, I know for a fact, because we do it every day, that we are bringing GPU’s to their knees every time they one up us and we aren’t even close to what we can do with these engines. UE4 is progressing at a staggering rate and so are the things it can do.
If we do have to work with a single material system, shouldn’t we consider having an option to bake the complex material you make down to a simplified landscape shipping material. For instance, when the diffuse pass runs, it calculates the landscape masking and layering that has been painted down, and uses the weights to crunch all the diffuse information in the material down to a single texture that’s then mapped to the individual chunks, then does the same for the other passes. Thus reducing the draw load for each cell down to just the respective diffuse, specular etc textures of the baked version, while retaining any necessary lighting calculations. IDTech did it with their megatextures. I wonder if it would be more viable for shipping performance to do the same thing for UE4 landscapes. We are moving to open world, and while it’s all well and good to generate a massive map and handle it procedurally with groundcover, if you have a human or otherwise world on top of that, every time you want to add another material to the painting, you have to recompile the whole **** thing. Which could take a very, very long time for large complex worlds, and that can’t be multi-tasked because system load is incredibly high. I saw 9 cores running with about 8 gigs of ram being scoffed. Which isn’t an indictment, by all means, take all the resources if it’ll run faster. But my point is that it might be time to consider thinking through the landscape texturing system, and how to make it lighter and more efficient for devs. While still maintaining optimisation requirements.
So I guess there’s two purposes to this thread. One is to open the discussion on landscape system at the engine level, and the other is to start collecting resources on quality landscape generation to let future devs have a good resource to leverage Unreal’s spectacular capabilities. Sorry for the long post.