What if even a 16bit heightmap is too small for a very high landscape?

I am having this very large landscape in terms of height. And I noticed, that even a 16bit heightmap file causes terraces because the terrain is so height that even a 16 bit files is not enough to distribute values from 0 to max.
My first guess would be to separate the lower part from the higher part and offset the higher part in Z. (makes senses?) This way the range of grayscales would distributed from 0 - 255 on the lower part and 0 - 255 to the higher part, instead of 0 - 255 for the whole range.

Any ideas? Would this be possible within the world composition workflow?

Regards! T

  1. Picture?

  2. Where did you generate the heightmap?

You can always change the Z scale of the terrain. If you set it to 200% you’ll get double the elevation range but with half Z axis precision.

World machine. I am very sure that the output is correct. It is just that my altitude is so high that the images in windows explorer almost looks grey. But the detail is visible if you photoshop it.

hmm…sounds interesting…but I am using World machine and that sounds like I would have to model the terrain already more flat. And sounds like if you scale it up it is going look like a flat terrain that is scaled up.

Add a clamp node before you output your heightmap from WM. And in the clamp node check “Normalize”. Then export the heightmap and it will range from 0 to 255.

That gives that warning symbol that this wont really work well with tiled landscapes

Can you post pictures?

I am on the phone right now but the problem with normalize on tiles in WM is that each tile is normalized seperatly. (Instead of the whole big terrain) Hense the warning symbol.
This guy seems to have similar problems.


Can you just scale the landscape on the Z-axis until you get the height values you’re looking for?

When you get near 300 and above you start seeing artifacts similar to 8Bit maps (but much smaller scale). The landscape surface wouldn’t be smooth anymore (anywhere) unless you flatten it.

@Thread, UE4 still doesn’t support .png for tiles?

Well, that’s annoying. At the end of the day, the 16 bit grayscale value has to be converted into a 32 bit floating point value because it translates to the Z component of the landscape vertices. Total conjecture here, but if its possible, I’d try to use an export format where the Z values are normalized to a float value between 0.0->1.0 (for maximum floating point precision) and then use scaling to change the height values. If you’re using byte values for grayscale color, you’ll have 0-255 values and a high scalar value will make the integer differences much more noticeable, creating the “step” visual effect.

Yes, UE4 does support PNG at the moment. Exporting PNG all the time. :slight_smile:

Usually when I forget to normalize the heightmap before exporting (for single landscape) I load the .png in photoshop and Auto Tone them, that’d do the same as normalizing in WM. You can try doing this for your tiles.

make the steep angles with a seperate solution:
a) use static mesh(es) for the complete tall mountain, then you can have any resulution on the steep part
b) use different landscapes: make e.g. landscapes with large tiles for the horizontal areas (bottom and top of the mountains) and use a small-tiled landscape for the steep part: rotate the landscape 90 degrees to be vertically. that turned landscape should turn “down” on the side where it connects to the top of the mountain and have a “upside” part on the other end where you stick it into the ground landscape. that way you dont get holes and make sure the materials match the connecting surfaces.

That sounds like a wild west idea…that won’t fit within my workflow.

It all makes sense…exact the problem is that the 65536 elevation points are to few for my altitude. The terrain itself is complex but the dunes are not. There the terracing is really noticeable.

I don’t understand… :-/ (well, yes, the normalize part in photoshop) it feels like you would scale a small image up. So there never would be more detail if it is not there in the first place. Beside, if I auto tone the tiles in Photoshop I stil got tiles that do not align. Maybe some experimenting will bring some new ideas.

hm…everything makes sense, I tried the clamp normalize ideas but that really just messes my terrain completely. I managed to reduce the terracing effect by removing parts of the landscape source file which I don’t really need. That gives my more room to apply auto levels in photoshop to crank up the altitude in the source heightmap. Now back to WM, I can reduce the max elevation and got a bit more elevation points to cover and therefor reduce the artifacts a bit. They are never really gone, so I think I either leave it this way and hope the textures will hide it or I try the solution in my picture a few posts above. (splitting the lower parts with the higher parts)

Auto Tone simply takes the darkest pixel and pulls it down to 0 and takes the brightest pixel and pushes it up to 255. Sorting all other pixels in between, which ends up similar to Normalize input in WM.

If your terrain is, say, 300 meters high, then the resolution of a single pixel is about 4.6 millimeters.
The only way that would show up as “not smooth” is if your normals are set to be faceted, rather than smooth.

Now, if you need even more precision (which I doubt,) then you should sculpt the terrain using floating point vertices.
You could export a big terrain as a big static mesh (or a number of chunks of large static meshes) if you really need that level of detail.
But my guess is: you don’t. There’s something else going on.
A screen shot of the artifacts you see (circle the problem to call it out,) with a second screen shot in wireframe, might let us help you figure out what it is.
Also, a screen shot of the material you apply, and if you can get it, screen shot of the normal buffer.

If you’re in Photoshop, doing a 1 pixel radius Gaussian Blur after stretching operations will smooth out the stairstepping you get from the stretching.
Also, make sure you do it in 16-bit mode or 32-bit float mode!

Hello guys!
Appreciate all the feedback and help so far!!
I have made an image to clarify what is going on…
so let me explain the image…

  1. Here you see the Gale Crater part of Mars. All satellite data combined into a huge PSB file. All scaled correct and aligned. The nature of this landscape is that is comes with a huge slope.
    The mountains are not really big. No alps or himalaya kind of stuff. Just some mountains, hills on this huge slope. I am considering tweaking the slope a bit with highpass filter but that would really remove one of the foundation of the landscape. But I would gain some elevation points to put detail in the mountains. You can see in this image that I have trying out auto levels in Photoshop. In essence, if I auto level a chunk to let’s say: 60 min and 120 max, that seems to work in WM without getting artifacts.

This heightmap is ± 20KM. Here I define a walkable area which is 16KM. The heightmap itself is super accurate. 1 pixel = 1 meter.
In order to make all this happen and let it build in WM, I have split up the 16KM part into smaller chunks. Each chunk is now 2KM width.
8x8 chunks in 16KM walk area.

Now…these 8x8 chunks are loaded into WM and seperated into even more chunks…250 meters. They have a resolution of 2017x2017.
Basically a tiled build inside World Machine. So at the end I would have to create 4096 small tiles. I decided to go this far into resolution to have a proper tessellation. Currently it is my only best workflow to create stunning rocky images.

  1. Here you can see the full walk area loaded inside World Machine.
  2. This is a 2017x2017 250 meter part of a mountain. At this detail level I can create terraces, erosion, rockys etc…
  3. When I build this tile and load it back into world machine, the artifacts are already visible. Also visible in Unreal.
    The export settings are correct. 16bit PNG. When I smooth the terrain in unreal, the artifacts remain.

I don’t think these are bugs or faulty exports, it is just that I want to create a too dense landscape and now I am wondering what workflow would be best to make all this happen.
I have done some research and noticed that similar problems and questions have been raised on the WM forum and unreal forum but I didn’t find a real solution yet.
Perhaps, splitting up the whole terrain is stil the best thing to do, or lower the resolution or leave the artifacts and hope that they are not visible with textures.

Kinda stuck here. My brain melts. :wink:

Hope this al makes sense!!
here are some images of my work so far.