I need help deciding how to create my 512sq km world

I have been reading a lot in the forum, but mainly outdated posts. Specifically, I wanted to mention @ DemenzunMedia since he seems very knowledgeble in his tutorials.

For my game I would like to cover a real world location of aproximatedly 16x32km (so a rectangle of around 512sq km). I thought of using World Partition loading many heightmaps of 8x8 that I can get from terrain.party. This means that with 8 of these heightmaps I would cover the whole region right? Or I could also use larger heightmaps form Tangrams.

Anyways. I am really confused about the process. I read from the mentioned user that there are hardware limitations on how big your map can be. In the worst of cases I could reduce the map by cutting unnecessary regions, but then I would not have a convex region, it would be more of an abstract figure of a map (which I think can be done by deleting proxies landscapes?). I also thought of scaling everything down, maybe if I divide all the heightmaps by 2, and all the actors of my game then I would have the effect of having a 512sq km map although it would be half of that. In truth it would be 8x16 km which I guess would be more bereable. I do not understand the consquences in terms of quality and performance of this tho.

My specs are: 32gb ram, 12th gen intel core i7-12700H 2.70GHz, windows 11 pro, 1 TB ssd memory although I can only use around half of it and I plan on buying an external ssd of maybe 1TB, GPU Nvidia geforce rtx 3070 laptop with 24gb of gpu memory, 8gb of dedicated memory, 16gb of shared memory.

Can someone help me?

edit: in order to have a squared map I would need a 32km x 32km heightmap (or if I scale it down by for example 2, then 16x16). But from this squared map I would only be using the center rectangle, therefore I would have a lot of unused terrain. What should I do? Delete the proxis after import of this components? Also, I do not know if I could import all that.

I thought of using 8 tiles of 8x8, then either import them using the convention:

  • map_x0_y0 / map_x1_y0

  • map_x0_y1 / map_x1_y1

  • map_x0_y2 / map_x1_y2

  • map_x0_y3 / map_x1_y3

Alternatively, I can stitch them together in photoshop and then import the full map together.

Also, if my specs are not enough for this 1:1 map, I could scale it by 2. So I would be fitting 16x32 km into a 8x16 km space. Then I could make two heightmaps:

  • map_x0_y0
  • map_x0_y1

Is this viable?

Using Heightmap Tiles with World Partition importing doesn’t gain you anything, the import process still stitches them all together into one heightmap, so the system memory and GPU memory use and requirements is the same, whether you use tiles or a single file.

If you want a 16km x 32km heightmap, you should be able to import that into UE5.3 simply by disabling Edit Layers on the Landscape import dialog.
If you require Edit Layers, then the current maximum supported size is 16km x 16km since that is the largest DX Texture that can be used for the edit layers.
UE5.3 was supposed to have a “successive batch import” new feature, but I haven’t found out how to use it or where it is, and Epic is terrible at documenting features.

A 16km x 32km heightmap in World Partition valid size is 16321 x 32641.
For UE5/5.1/5.2 you will probably require a computer with 64GB+ memory and a 12GB+ GPU to import that size, unless you are using UE5.3, which uses less memory during importing (Epic streamlined the import process in UE5.3 and it typically uses way less memory during importing). You would have to perform an import test to see if your system can handle it. Any CPU memory allocations in UE will use Virtual Memory (Page File) but GPU memory allocations will only use Dedicated+Shared, so if you run out of GPU memory you are kaput.

If you want to use Edit Layers and you are fine with using a Landscape Scale XY of 200 (2 meters per quad), then you could use an 8km x 16km heightmap with Scale 200,200.
A valid World Partition heightmap of that size would be 8161 x 16321.
Scaling the Landscape up by 2x still usually gives a decent looking terrain system.

Most people don’t use rectangular terrains though, so just make sure whatever software that you are creating the heightmap with supports it. You may have to create a 16km x 16km heightmap and then crop it into a rectangle.

Whether you go with a square or rectangular Landscape might be determined by what your view distance and terrain layout is. There is nothing wrong with using the rectangular middle of a square terrain for the play area, that way you still get a good view distance in all directions. But that depends on whether you have mountains etc in the distance in all directions.

You may also run into issues in Unreal with using a rectangular Landscape, so keep that in mind. It might mess up with other systems or actors that you are using.
That is why most people stick with square Landscapes.

I would use a single Landscape actor of the size that you want.
Creating multiple Landscapes and placing them beside each other has lots of issues, including edge seam matching etc.

No you cannot.
Photoshop being 15+1 bit instead of 16bit you are only going to irreparably damage your files.

Use a native 16bit program of any kind - or better and you probably have to for the size you are interested in; a GIS program.

If you use the old word partition you can, but you’ll have to batch import tile sets of about 12 (2km) tiles or so to prevent the engine crashing/running out of VRAM.

If you want to use the newer systems you are probably SOL anyway, so start assuming you need to batch tiles in.

Heres some pedestrian math for you anyway:

32x32 = 1024.
If each landscape tile is 1km^2 - and you get all the way to making impostors for it, youll have a maximum of 1020 drawcalls wasted on the landacape impostors.
That’s on top of at least 4 levels you are around/on which aren’t going to be impostors and will cost dpending on your inital setup (1x1 vs 2x2 and number of components).

Same area, with levels of a decent size 4km each would end up being
32/4 = 8 so 8x8 = 64 so that’s 60 drawcalls, which is rather managable by prettymuch anything.
On top of around 255*4 drawcalls for each landscape thats not an impostor.

You can go a step further and force 8km tiles but they don’t really play nicely with older systems or your graphics card.
32/8 = 4 whoch means youd only need to contend with 4 tiles, assuming you could handle them at all.
You wouldn’t get or need any impostors in this case which is slightly less work.
The drawcall count however is massive just for the landscapes themselves.
This somewhat limits (or used to? You know cuz of nanite i guess) how many things you can add into the level before performance is just bad.

Personally, I’d go with the nearest reccomended size to 2km^2.

32km^2 is a rather insignificant area to cover. Particularly after having put together and imported areas of approximately 256km^2

The 2km tile maps gives you a decent balance on good looking impostor textures (at 2k), to cost of rendering and memory load.
On top of half the drawcalls of the first math used on impostors.

Either way, I’d stick to the older system if i was into using landscapes at all.

Since im not… I’d just bring it into any DCC and make a mesh of the overall size I need optimized for tris count based on angular limits.
I’d then pick a size to cut it up into tiles (probably using the same reccomended sizes as the unreal terrain).
And pop the meshes into the level without even instancing them (unless there is a point instancing them, which depends on how you want to work their material).

At the end, I’d just have however many drawcalls per material per mesh of landacape to contend with.
And since meshes do fine irregardless of size they’d probably be just 4 at 8km^2 in this case.

Should you decide to drop the unreal landscape BS and need extra help, feel free to open a dedicated topic on it.

If you are sticking to the landacape now you more or less know what’s possible.

And for the record, the 256km^2 landscape runs Ok (4k 60fps) on a 1080ti. So it isn’t horrible inspite of the excessive amount of impostors/terrain drawcalls).

My workflow was to download a heightmap from tangrams, load it into gaea, modify the terrain, export the new heightmap into unreal (the free version only allows 1k exports). I think that one of my main mistakes is that I exproted a 1k map out of 32x32km, hence why it looks small. So if I understood MostHost_LA correctly, I would have to divide my original heightmap into 1k, 2k or 4k parts and then either go one by one in gaea, or directly load them in unreal? For 2k and 4k I would have to buy the paid version.

What I did was import my rectangular 16x32 heightmap into gaea and managed to generate a terrain but it was stretched because gaea only works with square maps. At the same time, they allow you to export with different UE sizes. In the free version I can only export a 1k map, which when loaded into unreal looks bad. I think that what gaea does is it exports the whole 16x32 (or the stretched version 32x32) into a 1k map, so no wonder it looks small. I would have to divide the maps in several tiles beforehand and load them one by one in gaea, right?

Anyways, I am using UE 5.3 so:

  • is it better to use nanite landscapes? Can I activate nanite on any landscape generated form any heightmap?

  • With respect to importing batches of heightmaps, how would I go about it? I have my general heightmap that I created from tangrams heightmapper and cropped using the default photos app from windows to the rectangle I wanted. Should I divide the original heightmap into 32 columns and 32 rows and then import each one of them alone as 1k? I understand this means lots of drawcalls. If i get the paid version of gaea, I could work on 4k heightmap and export them at the same resolution.

  • what are you referring with “importing batch tiles”? Do you mean that in gaea (the paid version) I should export with the tiling option enabled, and then import groups of tiles? Or could I, as I said before, use 32 tiles in gaea as 1k textures one by one and then import them in batches in UE? How big would these batches have to be?

  • With respect to performance, my game has been very optimized, all characters and weapons use 1 texture atlas, and all buildings use a texture array (so 2 draw calls for all characters / buildings). Also, the meshes of each object are merged into one only mesh in blender. I could also do this at runtime in UE. What concerns me is the landscape performance. If I could somehow use a texture array for them, then it would just be 1 draw call. Or also a texture atlas, although maybe there would be tiling problems. If instead of landscape it was a static object, then I guess I could apply the same techniques than the rest of meshes.

  • As for what DemenzunMedia said,
    1: what does the edit layers option do?;
    2: as I said I use UE 5.3, so do you think it possible for me to import this (and with/without nanite)?
    3: If I use your app TerreSculptor, would I be able to import a 32x32km map and then crop the rectangle that I want (16x32)?
    4:With respect to scale, if the player is reduced in size by 2, and also the map, then we would have the “feeling” that the map is indeed 1:1 with the real world, even if it is not really, right? Because the map would be half the size, so the player too, therefore the time to travel around the map would be the same as the original.

  • MostHost_LA I read here and in another thread that you proposed using meshes as landscape. Since we could also enable nanite for them, would it be better to use them instead of landscape? Do you have any data from benchmarks or so? If I understand correctly, what you mean is to make the landscape in a terrain sculping software and then just import it as a static mesh, and then place it in the level just like we would do with any other static mesh? Could you explain the process more in detail please? Could you also explain if with your method combined with scaling the size by half (and the rest of actors of the project) would give better performance?

  • If I want abstract figures as landscape, for example:


    I guess that with meshes I could do it, since I can position them as I want, but is it possible with landscape objects?

  • I am not an expert (maybe I don’t even have intermediate level knowledge) and I would need a step by step guide on how to do things. I know it’s a lot to ask, but if you find the time it would be very helpful. For example, how to properly download the map in temgrams, with what parameters to export it from gaea, what parameters do I need when importing in UE.

edit: regarding resolution, I have found 3 sources of heightmaps:

  • terrain.party: it is always broken, nevertheless resolution I believe is 30m
  • copernicus: resolution 25m
  • tangrams heightmapper: i dont know the resolution, probably because im a dumbass

edit2: also, about world composition, is it better than world partition? When would we use one or another?

In this video’s comment section (https://www.youtube.com/watch?v=ab9rAeD0nbY) you mention that we can import large maps but we should limit the number of streaming proxies that are active at the same time. So for example, if I wanted to import the heightmap that we mentioned, I could do it by parts and then only edit some at the same time. This way I should be able to create large maps without running out of memory?

What are the parameters that I would have to select upon importing to limit the number of active proxies?

Also, what is the Edit Layers property? Is it the ability to modify the shape of the landscape? So if I import a map larger than 16x16 then I would have to do it without Edit Layers and therefore I could not modify the map after import? Does it affect anything else?

Also, if the map is not a square 16x16, but as we said a rectangle, does this limitation apply too? Is it based on the sq km instead of the X and Y individual distance? So it would be max 256 sq km?

Thanks.

I’ll be using this thread to report my progress:

HEIGHTMAP DATA GATHERING

I started in OpenDEM (https://www.opendem.info/), where you can view a worldwide map where you can see if there is data for your country or not. You have to mess with the menu to find data for different places. In my case, I selected OpenDemSearcher and there I clicked on Spain, which opened a menu at the bottom that displayed where to find the data. I went to that website (Centro de Descargas del CNIG (IGN)). There a made a box using the tool “Buscar por polígono” and it opened a menu that displayed the different types of data to download. The heightmap one is in the section “Modelos Digitales de Elevaciones”, where you can find LIDAR data, and the ones that I use, which are the Modelo Digital del Terreno -MTD02 (2m resolution). Since I had a large terrain (400sq km) I had to download many documents for different quadrants.

Note that each country will have different heightmapping services, what I explained is the case for Spain.

These documents are in .asc (depending on what you download it will have different extentions), which can be opened by any text editor, but you will not see the image. You need a GIS software like QGIS (Bienvenido al proyecto QGIS!) to visualise it. Inside QGIS, you want to click on Layer->Add Layer->Add raster layer. There in source you select the file, leave the rest as it is and click Add on the bottom right.

As I see it, the heightmaps look nice. The problem is that it is such a big terrain that it is downloaded into parts as different .asc (hence many heightmaps). Also, since these are predetermined quadrants, it is not the exact area I wanted to cover, but more. I will have to crop the heightmaps and stitch them together.

I will continue updating…

Always, regardless of nanite which apparently made it onto landscapes.

Doesn’t really need any. Its a few drawcalls (when done properly just one material per tile with around 3 to 6 textures).
Vs the drawcall count of a landscape which is based on size and number of components but will likely always exceed that of a mesh.

Thibk about it this way
Does putting a cube in your scene slow performance? No…
But putting in a landacape will…

You can make it anywhere.
Blender has GIS addons that can be used to make a plane conform to a heightmap.
Theres plugins for just about anything out there.

You can even levarage unreal by sculpting the terrain and exportong the landscape as a mesh to be optimized and worked on (though beware that 8km^2 imports at LOD0 have more verts (1 per meter) than most standard settings on DCC render comfortably - so processing times are high.

Confused by this. What is it you are scaling and why do you think it would affect performance?

It is, you can move landscapes howver you want - though when you do sometimes you cause issues.

The most common use case for moving landscapes around is achieving higher detailed slopes (using a lower Z scale value) on tiled portions. So you move the landscape up vertically to align with wherever the last tile ends, and the Z scale of the landacape is uniformly set for all tiles.
Honestly, once you get into something this silly/complex you should probably abandon whatever sinking ship of a project commisioned you…

Re the rest and step by step stuff.

Your first step is to learn how to use GrassGIS or any other gis program.

The second task is for you to study and understand what the ESRI format is and why it’s important.

The sub step to the second point here would be to lern how to process vector shapes in the GIS program so that you can offset the value of the heightmap prior to export based on custom modifiers (adding in river beds and lakes which lidar doesn’t scan).

The third task would be to download and crop out the area you want in your gam, work on it with the knowledge from steps 1/2/2.a to export a single or tiled heightmap with the correct esri format applied.

Once you have the tiles done, then you can start working on producing slope maps to dress them (materials) in GIS, and export the matching tile sets for the materials to use.

Once you have those, you can move the terrain to just about anything including Gdot or a different DCC. It sort of becomes trivial at this point.

Hello,

Ok I will try to use static meshes although I still have questions:

Thibk about it this way
Does putting a cube in your scene slow performance? No…
But putting in a landacape will …

But in this case the mesh would be a very large one with lots of vertices for the different slopes that it will have, so maybe this would cause problems. Although I guess we could use LODs to reduce the performance problems. And maybe with nanite in the static meshes that would be the landscape it would improve?

You can even levarage unreal by sculpting the terrain and exportong the landscape as a mesh to be optimized and worked on (though beware that 8km^2 imports at LOD0 have more verts (1 per meter) than most standard settings on DCC render comfortably - so processing times are high.

Would you recommend breaking down the meshes into 4k maps? I would have more but with proper LODs I guess it would be better since they would load faster?

Confused by this. What is it you are scaling and why do you think it would affect performance?

I mean, if instead of a landscape of 16km x 32km I would use a 8km x 16km (so divided by 2), then I guess it would be easier to import in UE and less performance costly?

Your first step is to learn how to use GrassGIS or any other gis program.

I have started using QGIS. Do you think GrassGIS is better? Any other recommendation?

The second task is for you to study and understand what the ESRI format is and why it’s important.

I have actually been reading about this format because I have 8 heightmaps that combined would form the level for my game. This heightmaps are in format .asc and I was wondering if I could stitch them together, when I found different people asking the same and also trying to export in one ESRI document. I still have a lot to read though.

Anyways, do you think I should import these tiles individually? Or should I stitch them in one gigantic 16km x 32km heightmap?

The sub step to the second point here would be to lern how to process vector shapes in the GIS program so that you can offset the value of the heightmap prior to export based on custom modifiers (adding in river beds and lakes which lidar doesn’t scan).

While I do not know how to do this yet with QGIS, I was doing so in GAEA. I guess I will have to learn how to do it in QGIS (or any other GIS program).

Once you have the tiles done, then you can start working on producing slope maps to dress them (materials) in GIS, and export the matching tile sets for the materials to use.
Once you have those, you can move the terrain to just about anything including Gdot or a different DCC. It sort of becomes trivial at this point.

So basically, when I have the heightmaps in ESRI, I can start modifying them in GAEA, Blender or something like that? I use blender for sculping buildings, characters, weapons, etc etc etc. But for the terrain maybe use GAEA that has nice nodes to automatically do stuff like rivers, erosion, blablabla? Although to export in more than 1k I would need the paid version. Any free alternative?

And with respect to using 1 material with many textures, do you mean baking it into the mesh when importing? I am familiar with texture atlases and arrays. Would this be like an array?

Thanks a lot!

Doesn’t really matter to the GFX unless you exceed 3billion tris in total on the scene - then you start to get problems.
And yes, Nanite would definitely fix whatever tris count issue you’d run to once it’s properly working (which I think it still isn’t).

Whatever feels comfortable to work on with your GFX on a “single tile” setup. Could be 2km^2 or even 8km^2 just depends on hardware.

Doesn’t really matter. Your worse possible performance is going to be 4 landscapes present at the same time. Anything more than 4 landscapes is already unusable with your GFX.
Anything less will obviously perform a little better.

Same stuff. Whatever you think you can find the best tutorials for is what you should use.
If all you can find is videos you can’t understand the people speaking in as a source of a tutorial, then you probably won’t get very far.

Your computer probably won’t be able to handle that - 16bit files are large to begin with. anything above 4k pixels in size is already a stretch to work with in terms of computation times/read from disk off an m.2.

Yes (note that the esri format has nothing to do with anything though). I’d just keep using a GIS program until I’m ready to make meshes, then take it to blender or better yet, Houdini, or the recently ruined by acquisition but still decent ZBrush.

Houdini comes with similar features.
Blender has plugins for them.

Nha, more basic.
A packed texture with stuff RGBA packed to different textures, usually:
R=Roughness, G=Gloss, B=Metallic, A=Transparency.
Whatever else works for the terrain can be substituted into the channels.
Plus 1 base color, and 1 normal map.
and additionally/optionally, one physmap to give the terrain/mesh different physical materials matching it’s paint.
If you then make it react at runtime you also likely need 1 RT(render target) vector field texture added onto the material.

I suppose one could try to use Virtual Textures for this, but I don’t really think you’d gain much or any performance from it.
You could though because the terrain being so large, then part of the texture used probably wouldn’t need to be loaded in until visible.
Thing is, the cost is already so low that it’s hard to compare/count.

anyway you should circle back to that once you figure out the GIS program and the height-map production which will no doubt take a while.

Your computer probably won’t be able to handle that - 16bit files are large to begin with. anything above 4k pixels in size is already a stretch to work with in terms of computation times/read from disk off an m.2.

So I should do the opposite? Break down the heightmaps further? Maybe 2k? But how would I keep track of which is which? Should I use a naming convention like map_X0_Y0 and so on? Also, when everything is done and we import into unreal, this 2k maps would be imported as individual meshes? Then I would have to manually position one next to the other in the level remembering which is which?

On a side note, my heightmaps are 2m resolution. If I understand this correctly, 1 pixel = 2 meters? Therefore the map is being scaled down (getting smaller)? Or is this just something visual (terrain quality) that doesn’t affect actual size?

Very GIS program handles this differently, so go with whatever the gis program goes.
Importing height data for all of spain and visualizing it is possible - the programs scale the files on the run to do so.
Exporting it out (as png16 or more commonly tiff) is where you start to hit issues since the final file size needs to be something which your computer can handle.

At times, for things like the 256km^2 area its best to try and export one unusable heightmap and process it via command line tools which will never even attempt to load the whole thing into memory (that is your hard limit btw, ram).
The whole thing is also around 120GB of a file, so you need the hardware to be able to manage it and a couple days of time to write it to disk and process it…

NIP2 is an example of such a tool, but there’s likely a month of learning and fiddling around with the GIS program before you even get to this stage.

Work small, on small size areas until you figure out how things work.
Expand the size after, when you need to introduce other programs/knowlede.

The nice thing about working in GIS when you learn it well is that it is incredibly fast and saves most things (vectors) in microseconds.

Usually its also a non permanent modification since science-wise you usually always want to preserve the initial datum…

But, you are talking about exporting one huge file. I guess in that case it would take so long.

I was talking about for example partitioning my 8 heightmaps into 4k versions. Then individually import this 4k versions into a GIS program and modify them there one by one. So I would be exporting only one of these 4k tiles. Then I would import them into Houdini also 1 by 1 and finally into blender the same way.

Maybe I am misinterpreting the workflow, but done by parts it wouldn’t look like I need command line tools?

Also, could you explain what would we do in GIS? I mean, I already have the heightmaps (8 in total that I would crop to 4k each using GISMO which is 16bit), so if I imported them into a terrain software (GAEA, Houdini,etc.) it should already generate the meshes right?

Am I missing something?

Yea, manipulating heightmaps is a job for a GIS tool, not an image program.

Regardless of what initial size the files are which is likely never going to be what you need a gis tool can read and sort the data of anything you throw at it, and allow you to visually crop the area as you need.

You can then either work off the cropped files or produce the final files off the originals - depending on what workflow you want to use.

Command line tools are always needed when working with large data sizes, so it’s probably a good idea to learn one at some point or another - even if just for slicing up into properly named tiles.

Btw, exporting one huge file or many small ones doesn’t change a lick in terms of compute time.
The surface is the same, which means the data is the same, which means the bytes to write are the same…
It does change what can read the file however.
Any program attemtping to load it visually will near instanly fail.

NIP2 is an example of such a tool, but there’s likely a month of learning and fiddling around with the GIS program before you even get to this stage.

Well, from what I have seen modifying the heightmaps seems rather easy. Maybe actually working on the generated terrain will be more complicated. and the GB needed, well I might as well buy a new external memory.

You can then either work off the cropped files or produce the final files off the originals depending on what workflow you want to use.

The raw data I have are 8 .asc files. I have loaded them into QGIS and applied the same height min/max values to all of them, since if not the greyscale looked bad.

I am currently trying to merge these tiles into one, so that I can crop the area that I want only. Then I should separate them again in 2k tiles for example (I guess that for UE it will be better to use 2k tiles, since the worst case would be to have 16sq km rendered at LOD 0, which is better than 4k tiles). I guess that since they use the same scale, I can load them in parts in Houdini and work on them individually, and when I export the created 2k terrain to UE, my guess is that the tiles will match well. Maybe there will be seams but I should be able to hide them with foliage, textures, blablabla.

  • What do you think about the size of tiles? At runtime, 16sq km rendered at LOD 0 is better than to have 64sq km (using 4k tiles) at LOD 0, right? If I wanted to break my back importing/exporting, maybe I could even use 1k tiles? Although maybe its unecessary? What do you think?

Maybe I will try to create the landscapes in QGIS directly. Idk, if I cut them in 2k tiles my guess is that Houdini or GAEA is more user-friendly and can handle several tiles? If my total landscape is 512sq km (resolution 2m, so in truth is half, 256?), and each tile is 4sq km (2k) then I would need 128 tiles in the case of 512sq km or 64 in the case of 256 sq km.

  • Could you clarify what size my terrain is considering the 2m resolution, 512 or 256? (remember it was 16km x 32 km at 2m resolution).
  • Could you recommend software for creating terrain based on the heightmaps (the same GIS software, world creator, machine world, GAEA, Houdini, etc.)

Anyways, my concern is that if I use some terrain modifiying nodes in Houdini (or another software), the tiles will not match well. Based on what I have seen online, Houdini should be able to take large heightmaps, I wonder where is the limit? Maybe I can import a bunch of heightmap tiles and treat them as one.

Btw, exporting one huge file or many small ones doesn’t change a lick in terms of compute time.
The surface is the same, which means the data is the same, which means the bytes to write are the same…

Yes I understand that exporting is going to be the same thing no matter the size of tiles.

It does change what can read the file however.
Any program attemtping to load it visually will near instanly fail.

I was referring to this. When using a terrain generation program I should use tiled heightmaps and do batches of them right?

Anyways, in a couple of days I will upgrade my laptop to 64gb of ram DDR5 4800MTs and also I will buy an external SSD of 2TB with writing speed of around 1GB/s and similar reading speed. So I think I should be fine. Maybe my GPU is not enough (RTX 3070 laptop: 8gb dedicated memory, 24 gb gpu memory, 16gb shared memory)? SO this should write the landscape more easily right?

One more thing: when visualizing in qgis, should I make the terrain have underground? I mean, some plugins generate terrain below the surface, but since the player will never see that, maybe it’s a waste of polys and I should just try to make the surface of the terrain (like a fine cape). Is this right?

So, each pixel on the file is a reading of Height (z) data.

When you change the range or manipulate it you need to this consciously.

First of all, in unreal (using landscapes) 65535/2 is the approximate area where the seal level ends and land starts (its not, but it is, since the area will end up as close to z=0 as possible).

The fact you have areas as a dark black in your heightmap already means your landscape (for what I understood to be a part of land with no ocean) is underwater.

Second, you essentially lost the height of the mountain - if every pixel has a value in meters, and you alter that, then the typpy top on white is going to be 65535/2 meters above sea level - which i think ends up being higer than K2.

This isn’t necessarily a bad thing, as it can provide nicer slopes instead of stair stepping between heights - but you need to keep the height in meters in mind when you do your Z Scale math.

The same math will not usually offset the sea level because 1/2 of something is always going to be found at 1/2 no matter what you do…

It all depends on your final lowest supported target machine.

If you are doing meshes, the give and take comes in from being able to occlude and fustrum cull, but in the end, 1 drawcall for the whole thing is still just 1 drawcall, vs say 144 for 1km^2 bits.

At that point the decision has to be mande on how many tris it costs rather than how many drawcalls you can support.

I’d say it doesn’t really matter. Unless you want to have it scaled down and not 1:1 in game it really shouldn’t.
The end size is howver big you want that terrain to be - regardless of it being stretched out or not.

I calculate slope maps in Qgis to paint terrains. It works the same as any auto material except you export png(not16) tiles to use as paint layers.
Other than that just manual touchups in the DCC of choiche or at worse (and it takes a lot to set it up) in quixel mixer.

Houdini works great for deformation algorhytms and such. Though thats got noting to do with paint.

As I explained, your hardware’s ram/vram

This would largly depend on the program.
In Qgis as you noticed you have almost no limit(s).

In World Machine i think you have a maximum size.

In Blender, youd be limited by hardware.

Ill stop right there.
I have never even considered running unreal on a laptop, personally.

Since it easily melts a watercooled i9 with a water cooled 4090, I think if I ran stuff on a laptop it would be more than likely to just burst into flames.
Ofc, you arent outputting 4k, so it may not be as melting in the end.

However if you have the resources to, you should really just get a dedicated developer desktop. Even an older one with a 3090 is probbaly going to be a ton better than the laptop in terms of just about anything.
Particularly with a proper M.2 setup to write to disk for the heightmaps/files etc vs the external drive, which even with Thunderbolt is going to struggle/bottleneck.

Even if you tried you probably couldn’t.
Any gis program is strictly 2D with the 3rd dimension being data as explained above.

So there wouldn’t be any way to add in a cave from it.

ALTITUDE

The fact you have areas as a dark black in your heightmap already means your landscape (for what I understood to be a part of land with no ocean) is underwater.

The lowest point in this heightmaps (without modifying) is about 18m above sea level, the highest is at 976m. There is no sea in the map, but there are rivers and a lake, which my guess is that they are a little bit above sea level (18m).

The heightmaps I gathered are too big. My game will take place in a smaller area inside this one.

I only want a portion of this area for my game (that’s why I was talking about cropping it). In the area that I want, the highest point is 600m and the lowest one 50m. So that’s why I forced this values to be the max and min for all the heightmaps.

The very dark areas in the map that I posted before are between 18m and 50m in the raw data (I forced them to be at 50m since that’s the min for the region I want). Anyways, I will try using both min/max of 18m and 976m; and the one of 50m and 600m. Here are the results:

original data (different height min/max for each tile):

all tiles forced at min/max 18m/976m:

all tiles forced at min/max 50m/600m:

It kind of looks like the same, maybe the 18/976 is darker at the highest spots. Anyways, for me it seems reasonable to crop it and then change the height again to 50m/600m?
I will also try merging them with the raw data, maybe it corrects itself without me having to input arbitrary values. Well, I’ll experiment a bit.

CROPPING AND TILING
My plan was then to merge them to have one only heightmap, and then crop them to get the rectangle that interests me, then divide that in tiles of 2k.

Also, I have seen that you can crop a polygon out of a raster layer. So If I wanted a map that looks like this I should in theory be able to crop it and use it in UE by combining static meshes of different sizes, right? Since I’m using tiles and static meshes I should not have a problem doing things like this (considering that I do squared tiles that Houdini can work with). If so, the gb needed to hold the static mesh landscape would be MUCH less than a full rectangle which I would not even use in its totality.

Another approach would be to crop the full rectangle in QGIS, export in tiles, and then choose which tiles I want, instead of cropping a polygon in QGIS.

PERFORMANCE

Ill stop right there.
I have never even considered running unreal on a laptop, personally.

I understand that there are some limitations with laptops, but since mine is a powerful one I thought I could just use it instead of having to update my desktop PC that has outdated hardware and would cost at least 1000$ to upgrade to a decent level. Also, since I’m always moving with the laptop I can work in any place.

If I wanted to visualize all the map at once I understand I would run into problems, but since I’m doing it in batches maybe I manage to render batch by batch in a way that my laptop allows. Then importing the result into Blender/Houdini/UE also in batches and setting the LODs for each batch so that when I import the next batch of tiles it does not crash (or that’s my guess at least). Also with a cooling pad the heat shouldn’t be THAT bad.

BTW, I now have 64gb ram and next week I’ll get the SSD and will send the project there.

edit: i have recalculated the terrain size. I think I got it wrong and it is in truth 12km x 30km = 360sq km (not 16x32 as I incorrectly said before).
At 2m resolution:

  • A 1k heigthmap would be 2km x 2km (4sq km)
  • A 2k heightmap would be 4km x 4km (16sq km)

The total extension is 360 sq km.

  • With 1k maps I would need 360/4=90 heightmaps
  • With 2k I would need 22.5 heightmaps (so 23). If we take into account that 2k is not 2000 but 2048, then I would need 24 heightmaps.

In the worst case, when I have 4 tiles at LOD 0, with 1k (2km x 2km) heightmaps it would be a total of 16 sq km rendered at LOD 0.

With 2k (4km x 4km) heightmaps it would be a total of 64 sq km at LOD 0.

I believe that I should go for 1k textures even if I need double the draw calls (128 is insignificant right?) since what will be more important is how many polys are rendered.

For editing purposes in Houdini, maybe I export from QGIS at 2k resolution and import it the same into Houdini, and when I’m done editing there I will export it into 4 1k tiles. This way it should be more practical to edit in Houdini.

The size of the textures affects optimization and calculations and it is extremely hardware dependent.
A 1060 will fart out with a 2k texture applied and work fine with a 1k texture applied.
Whereas a 4090 or 3090 won’t even bat an eye at the texture size (GB of Vram being availiable to them).

Check this for some real optimization info - landscape specific.
https://www.intel.com/content/www/us/en/developer/articles/training/unreal-engine-4-optimization-tutorial-part-1.html

Based on your terrain sizes I think you should just try a full (single) 8km^2 tile as an export/import into Houdini.

It will probably work fine, and allow you to import another couple tiles after its processed/set up as a displaced mesh.
Remeber that you need to simplify the mesh after import so that you have as little amount of tris as possible…

Overall, the considerations you are making are good to be made, but usually should be reserved for areas exceeding the 50km^2 - I think.

Edit Layers allows you to paint on the terrain and use splines.

So long as you have sufficient memory and GPU you can import heightmaps up to the maximum supported.

Yes, easily. Even with the free TerreSculptor 2.0 that is still available on the web site.
TS2 can handle heightmaps up to 46000x46000. And it is free.
TS3 can handle heightmaps up to 1 million and has a massive amount of new features.

I don’t recommend doing that. Things like collision traces may miss if the scale is set smaller.

That isn’t how Unreal Engine works. It doesn’t map PNG grayscale pixel values to real world elevation ranges. So “under water” or “above water” is where you place a water plane if you are even going to use one. The entire Landscape actor can be moved anywhere on the world XYZ coordinates.
Blacker pixels just mean lower elevation while whiter pixels mean higher elevations.
You always want to normalize all PNG-16 files that you import into Unreal, and then set Scale Z where 100 is 512 meters of elevation range.


You need to decide who you are targeting with this design and what level of computer hardware. That will determine what your minimum required framerate is, which will determine what Landscape design you can get away with.

If you are going to go with a 32km x 32km map with a dense foliage setup, with either World Composition or World Partition, you are now limiting yourself to probably 32GB and RTX-2080 minimum for required system hardware.

1 Like

Landscape splines work on anything even without layers.
What the layers do is allow you to add/remove layers in a somewhat non-destructive workflow.

Otherwise, you can have a regular spline component apply deformation to the landscape in editor with BLE functions, which is what most people end up doing rather than using the spines within the ladscape tool itself.

I dont think anyone here said it did, quite the opposite in fact.

Sure, but we are talking “sea level” which has nothing to do with where you place your water plane.
Its simily the Z of the world being closest to 0.

That happens to always happen at 65536/2 since math isn’t an opinion.

It can, but it probably shouldn’t unless you do so by design.
You cause issues like loss of grass maps, and similar WPO related artifacts - unless you built things with moving it in mind.

Not really. It depends on what you are doing and your workflow.
If you are working with tiles you most definitely do not want to normalize each tile.
It would require a different scale and separate imports on each tile… making it, well, a mess?.

Very much doubt it as there are similar worlds that run on Mobile out there.

How you do things matters more to the performance aspect.

Your trees being billboard or octhedral would allow you to handle a lot more load on a lot less hardware for instance. Having proper HLODs of billboards would further lower the load.

Anyway, it’s a wolly pointless discussion since it would have to delve into what assets and how they are used, which is well beyond the scope of haling this guy set up a landacape…

1 Like